8

我有一些关于找到一种方法来实现可以与多个收件人共享的任意数据的加密的问题。Mega似乎正是这样做的。据我所知,它会在将数据上传到 Web 服务器之前对其进行加密。仍然可以与他人共享该文件。加密是如何完成的?

想象以下场景:

  1. 用户 Alice 上传一个文件到服务器,它正在被加密
  2. Alice 想与 Bob 和 Dave 共享该文件。Bob 和 Dave 如何访问该文件并查看其原始内容(已解密)?
4

2 回答 2

8

加密是如何完成的?

答案是对称密钥算法。Mega 利用 HTML5 提供的浏览器内对称密钥加密。请参阅问题“MEGA 内部使用哪些加密算法?” 以下。

正如 onemouth 所说,您的数据 glob 是使用主密钥加密的。

每个用户还有一个公钥/私钥对。每个文件都在不同的会话密钥下加密。会话密钥在用户的主密钥下加密。

要了解这一切是如何工作的,意味着查看所有组件并了解它们如何互操作。Mega 在其网站上解释了加密对称/共享密钥的过程:

(我添加的引用文本中的嵌入链接和强调文本)

MEGA 内部使用什么加密算法?

对于批量传输,AES-128(我们认为 AES-192 和 AES-256 的更高 CPU 利用率超过了理论上的安全优势,至少在量子计算机出现之前是这样)。下载后完整性检查是通过 CCM 的分块变体完成的,它的效率低于 OCB,但不受专利的阻碍。

为了在用户之间建立共享机密并将文件放入收件箱,RSA-2048(密钥长度被选为“太不安全”和“太慢”之间的中间地带)。所有加密、解密和密钥生成都在JavaScript中实现,这将吞吐量限制在几 MB/s 并导致大量 CPU 负载。我们期待在所有主流浏览器中实施提议的HTML5 WebCrypto API,这将消除这个瓶颈。JavaScript 的内置随机数生成器通过鼠标/键盘时间驱动的 RC4 熵池以及加密。* 随机性(如果可用)得到增强(目前只有 Chrome 和 Firefox - 由 Internet Explorer 和 Safari 生成的密钥不如它们可能的安全)。

文件夹共享如何工作?

您可以与朋友、家人或同事共享您的云驱动器的任何子树。邀请是通过电子邮件地址。尚未拥有帐户的受邀者将收到带有注册链接的电子邮件通知。或者,您可以创建指向任何文件夹的公共链接并导出特定于文件夹的加密密钥,无需 MEGA 帐户即可访问。然后,您有责任将文件夹密钥安全地传输给收件人。

要建立、修改或删除共享,只需右键单击文件管理器中的文件夹并选择共享。共有三种访问级别:只读、读/写(可以添加文件,但不能删除文件)和完整(可以添加和删除文件)。如果您添加了一个还没有帐户的电子邮件地址,您需要在收件人完成注册过程后至少在线一次,以便您可以将共享密钥加密到他新创建的公钥中。

我放在共享文件夹中的数据是否可以保护我的其他数据? 从本质上讲,共享文件夹的安全性与其最不安全的成员一样安全。

您现在拥有的不是只有一个主密钥,而是您已委托给 X 人的另一个密钥。您的安全与您对这些 X 人的信任一样重要。

Mega 上的每个文件都有一个唯一的 ID。因此,如果凭据是:

fileId=Abc123Ab
shareKey=abcdefghijklmnopqrstuvwxyz0123456789ZYXWVUT
https://mega.co.nz/#!fileId!shareKey

正在尝试下载

https://mega.co.nz/#!fileId

将导致下载加密文件。除非用户拥有共享的解密密钥,否则无法解密该文件。如何将“shareKey”发送给某人取决于您。但是任何有权访问该 shareKey 的人都可以解密下载的文件,因此通过电子邮件或其他未加密的媒体发送完整的 URL 是一个坏主意。一旦生成了 shareKey(通过 webapi 中的“获取链接”),它就无法更改。

此外,

然而,我们的核心服务器基础设施的妥协带来了额外的风险:公钥可能被操纵,密钥请求可能被伪造。

他们所说的是,由于个人私钥泄露的个人威胁,在不启用共享的情况下出现的安全问题会增加。

我存储的数据绝对安全吗?所有的安全都是相对的。存在以下攻击媒介 - 它们并非特定于 MEGA,但我们希望您了解风险: 个人账户受到以下威胁:

  • 您计算机上的间谍软件。一个简单的键盘记录器就足够了,但会话凭据和密钥也可以从内存或文件系统中提取。
  • 肩部冲浪。不要在有人可以看到您的击键时输入您的密码。
  • 密码暴力破解。使用强密码。
  • 网络钓鱼。在输入密码之前,请务必确认连接的安全状态 (https://) 和正确的域名 (mega.co.nz)。可以通过以下方式发起大规模攻击:
  • “中间人”攻击。需要结合 DNS 伪造和/或对我们的 BGP 路由的攻击(DigiNotar 风格的场景)颁发有效的重复 SSL 证书。
  • 访问托管https://mega.co.nz/index.html的网络服务器并将该文件替换为伪造版本(这不会影响通过已安装的应用程序库进行访问)。请注意,在我们的分布式静态内容 CDN 上操作内容不会带来安全风险,因为从 index.html 加载的所有活动内容都需要使用加密哈希进行验证(将其视为某种网站的“安全启动”)。这种类型的攻击需要向客户端发送恶意代码,因此是可以检测到的。
  • 访问我们的核心服务器基础设施并在现有共享上创建伪造的密钥请求。这种类型的攻击仅影响具有共享文件夹的帐户中的数据,并且在客户端也可以检测到。

此外,并非所有数据都是私密的,并且大多数用户身份信息都未加密存储。

我的所有个人信息都需要加密吗?不会。只有文件数据和文件/文件夹名称被加密。我们需要进行操作访问的信息,例如您的电子邮件地址、IP 地址、文件夹结构、文件所有权和支付凭证,均未加密存储和处理。详情请参阅我们的隐私政策。

更多细节可以在他们的 API 文档中获得,网址为https://mega.co.nz/#doc

12.2 密码学

所有对称加密操作均基于 AES-128。它以密码块链接模式运行文件和文件夹属性块,并以计数器模式运行实际文件数据。每个文件和每个文件夹节点都使用自己随机生成的 128 位密钥。文件节点对属性块和文件数据使用相同的密钥,加上一个 64 位随机计数器起始值和一个 64 位元 MAC 来验证文件的完整性。每个用户帐户都使用对称主密钥对它保存在自己树中的节点的所有密钥进行 ECB 加密。这个主密钥存储在 MEGA 的服务器上,使用从用户登录密码派生的哈希加密。使用分块 CBC-MAC 验证文件完整性。块大小从 128 KB 开始,增加到 1 MB,这是存储块 MAC 所需的空间和完整性检查部分读取的平均开销之间的合理平衡。除了对称密钥,每个用户帐户都有一个 2048 位 RSA 密钥对,用于安全接收数据,例如共享密钥或文件/文件夹密钥。其私有组件使用用户的对称主密钥加密存储。

12.3 共享文件夹

文件夹的所有者全权负责管理访问;共享是不可传递的(无法在传入共享中的文件夹上创建共享)。共享文件夹中的所有参与者都通过共享特定密钥获得加密访问权限,该密钥从所有者(理论上,从参与共享的任何人)传递,但这会在核心受损的情况下产生重大的安全风险基础设施)通过 RSA 向新参与者发送。共享文件夹中所有节点的密钥,包括它的根节点,都被加密为这个共享密钥。将新节点添加到共享文件夹的一方负责提供适当的节点/共享特定密钥。缺少的节点/共享特定密钥只能由共享所有者提供。

12.4 未经验证的交付

MEGA 支持安全的未经身份验证的数据传输。任何完全注册的用户都可以通过他们的 RSA 公钥在他们的收件箱中接收文件或文件夹。

最终,您信任他们的 javascript 代码,该代码已通过 HTTPS 验证为真实的。然后,您相信您的 javascript 引擎(网络浏览器)能够正确处理交易。最后,您相信您的操作系统不允许其他正在运行的进程嗅出 RAM 中未加密的私钥(请参阅https://nzkoz.github.io/MegaPWN/)。

在此过程中肯定需要采取预防措施,但它是目前可用的最佳选择之一。您始终可以在使用 GPG 上传到 Mega 之前加密您的文件,以缓解上述一些问题。

于 2015-01-30T10:56:25.220 回答
2

在 Mega 中,每个用户都有一个master key. 每个用户还有一个公钥/私钥对。每个文件都在不同的会话密钥下加密。会话密钥在用户的主密钥下加密。

如果 Alice 想与 Bob 共享她的文件,首先她使用她的主密钥解密文件的会话密钥,然后她使用 Bob 的公钥加密会话密钥。

现在 Bob 可以使用他的私钥来解密 Alice 的文件。

以上只是一个直观的解释。您可以从 Mega 的 api(及其源代码)中找到更多信息。

于 2013-09-01T18:02:55.660 回答