ProtonDrive安全模型

2020-09-09 02:27:27

本文介绍了ProtonDrive的安全模型,展示了它如何使用端到端加密来保护您的敏感数据。虽然有些技术性,但本文档旨在让普通读者能够访问,并试图用通俗易懂的语言解释ProtonDrive的工作原理。

在我们今年晚些时候推出测试版之前,ProtonDrive已经进入了开发的最后阶段。

ProtonDrive是质子加密生态系统的最新成员。它为我们用户的照片、文档和其他文件提供安全的在线存储空间,与其他Proton产品一样注重隐私和安全。

ProtonDrive的设计基于端到端加密。此模型可防止任何获得对我们其中一台服务器的访问权限的攻击者执行以下操作:

考虑到这一点,我们的目标是确保加密的存在不会以任何方式阻碍用户无缝地:

ProtonDrive中的所有内容都位于分配的存储空间卷中,每个用户都有自己的专用卷。将来,ProtonDrive将允许管理员为其组织创建卷,并向组织成员提供访问权限。

节点-跟踪条目的元数据(例如,类型、大小、创建和修改时间)及其属性。

链接-此链接标识条目在文件夹树中的位置。该链接通过引用父条目并存储条目名称来指示条目的位置。

此型号类似于可移植操作系统接口(POSIX)文件系统型号,可促进ProtonDrive与设备上的文件系统之间的通信和同步,并将在未来支持台式机和笔记本电脑上的应用程序。对于文件,关联的节点还引用文件内容,文件内容被拆分为多个数据块,每个数据块的最大大小为4 MB。

访问卷始终使用称为共享的一条信息来完成。可以将共享视为一种访问卡,它向用户提供对文件夹树的特定部分的特定权限和访问权限。因此,共享具有三个功能:

它限制了可以对内容执行的操作(例如:只读、只写等)。

每个卷都有一个默认共享,与其文件夹树的根相对应,没有任何权限限制。

多个用户可以是共享的成员,并且每个成员身份都可以有自己的权限(管理员、读取或写入)。这样可以在Proton用户之间或组织成员之间共享内容。与没有Proton帐户的人共享内容的另一种方法将在后面的小节中介绍。

在本节中,我们将介绍ProtonDrive中内容的加密方式。虽然与ProtonCalendar加密模型有许多相似之处,但不同之处在于ProtonDrive的分层内容结构,其中文件夹树可以有不同的深度。这意味着在树的每个级别重复解密步骤。

所有密钥和密码都是在客户端生成的,并且仅以加密形式传输到服务器。类似地,文件名和文件夹名以及文件内容仅以加密形式发送到服务器,这使得Proton甚至不可能解密这些实体中的任何一个。

具有多个ProtonMail电子邮件地址的Proton用户可以有多个与其ProtonDrive帐户相关联的电子邮件地址。每个地址都有一个关联键,允许帐户所有者在他们成为成员时访问共享。

创建共享时,加密系统会生成一个32字节的随机共享密码,以及一个非对称密钥(共享密钥)。共享密钥使用共享密码锁定,该密码使用用户的地址密钥进行加密和签名。

在多个共享成员的情况下,使用每个成员的地址密钥加密共享密码。

PGP加密方法允许使用多个非对称密钥或密码来加密有效负载。PGP通过生成新的对称会话密钥开始加密过程,该密钥是足够长度的随机口令。会话密钥用于加密有效载荷,从而产生数据包。

下一步是依次使用用户提供的每个非对称密钥和每个密码来加密会话密钥,从而产生多个密钥包。每个非对称密钥或口令可以解密其相应的密钥包,并使用其中的会话密钥然后解密该数据包。(参见图5)。

允许新密钥(即,新用户)解密有效载荷是不会改变数据分组的简单操作-只需要使用新密钥再次加密会话密钥,从而产生新的密钥包。

文件和文件夹以树形结构排列。因此,有一种重复出现的模式,其中文件或文件夹的非对称密钥使用密码短语锁定,而密码短语又使用其父文件夹的非对称密钥进行加密。所有密码都使用用户的地址密钥签名,如果没有该密钥,恶意服务器可能会伪造树的内容。

对于树中的每个节点(无论是文件还是文件夹),还会生成非对称密钥和密码-节点密钥和密码。节点密码使用父文件夹的节点密钥(如果当前节点不是卷根)或共享密钥(如果当前节点代表共享根)进行加密。

文件或文件夹名也使用父文件夹的节点密钥进行加密。如前所述,文件以块的形式存储,其中每个块的大小最多为4MB,并使用文件的节点密钥进行加密。通过加密屏蔽原始内容的块的内容散列被连续链接,结果字符串用上传器的地址密钥签名。此机制可防止恶意或受危害的服务器伪造文件内容。

到目前为止的解释涵盖了安全模型的要点:加密和验证存储的内容,以及在Proton用户之间共享内容。

我们的用户可能希望与没有Proton帐户的人共享位于ProtonDrive卷中的文件。这可以通过阻止Proton访问共享内容的机制以只读方式完成。

我们开发的方法是基于Web客户端生成的安全URL,这些URL允许访问特定文件的内容。URL是受密码保护的,同时拥有URL和密码可以访问共享内容。虽然Proton服务器知道URL,但它永远不会收到密码。

为文件创建新的可共享URL时,Web客户端将首先确认指向该文件的共享是否存在。然后,必须使用与URL关联的新密码对此共享的密码进行加密。此新密码由ProtonDrive客户端随机生成,或由用户指定。

在随机生成密码的情况下,用户可以选择是否要将其包含在URL末尾,相当于公开分享内容。URL的这一部分不与Proton服务器共享,导致Proton无法访问密码和内容。或者,用户可以选择单独共享密码。

对于用户定义的密码,此选项不可用,密码必须始终单独通信。

作为最后一步,客户端请求服务器创建新的可共享URL,提供共享密码的新加密密钥包。服务器存储加密的密钥包,并向客户端返回用于访问共享内容的唯一随机URL。

当访问URL时,服务器将返回访问共享内容所需的加密有效负载。只有知道URL密码,才能解密负载并访问共享文件。

这是一个简化的描述,抓住了设计的核心原则。实际实现包括防止重复滥用URL的机制。它还提供了设置URL的过期时间或限制URL可以访问的次数的功能。

在本文中,我们描述了ProtonDrive的安全模型,该模型旨在保护用户数据免受恶意攻击者的攻击,同时提供与非端到端加密云存储服务相同的易用性。一如既往,欢迎评论和建议,安全研究人员可以通过[email protected]联系我们提出评论或问题。

ProtonMail和ProtonVPN由社区捐款资助。如果您想支持我们的发展努力,您可以升级到付费计划或捐款。谢谢您一直鼓励我。