前身为 MegaUpload 的 Mega网站 于今年一月份推出,据网站声称所有用户(文件)数据(包括文件名)会在客户端加密后再上传到网站服务器,所以可以保证用户数据的隐私性和安全性。@ivarptr
我粗略地阅读了一下网站的文档,下面简单说说它的加密原理:
1、创建新帐号
当一个新帐号创建之后,会产生两个随机钥匙:“Master Key(主钥匙)”和”RSA Key(公私钥匙对),2048 bit”。这两个钥匙的作用会在下面讲解。
其中 Master Key 和 RSA Key 的私钥部分会使用帐号的密码(使用 AES 128 算法)加密后储存在服务器上,而 RSA Key 的公钥部分则直接明文储存在服务器上。
2、上传文件
上传一个文件时,客户端会产生一个随机钥匙(File Key),然后通过 AES 128 算法对文件内容进行加密并上传到服务器,最后这个 File Key 会使用 Master Key 加密后也上传到服务器。
简单来说文件内容的加密过程为:帐号密码 –(加密)–> Master Key –(加密)–> File Key –(加密)–> 文件名和内容 –> 服务器。
3、下载文件
下载一个文件时,客户端会下载:加密后的文件数据、加密后的 File Key、加密后的 Master Key。然后在客户端通过这样的一个过程来解密:
帐号密码 –(解密)–> Master Key –(解密)–> File Key –(解密)–> 文件名和内容。
4、共享文件
共享一个文件给另一个 Mega 用户时,相应文件的 File Key 会通过 RSA 算法加密后发送给接收者,接收者得到 File Key 之后会用自己的 Master Key 加密并储存起来。
File Key 的传输过程是:
共享者 -> File Key 明文 -> 用接收者的 RSA Public Key 加密 -> 站内发送 -> 接收者 -> 接收者的 RSA Private Key 解密 -> File Key 明文。
这一步因为文档里没有很明确的表达,所以我不知道有没有理解错误。
5、公开发布文件
公开发布一个文件(即 Public 共享)时,文件的 File Key 的明文会附加到共享地址(URL),所以下载者使用这个URL就能下载并且解密文件内容。
6、用户登录验证
用户登录时,密码并不会提交到服务器进行验证。具体过程是:服务器使用用户的 RSA Public Key 加密一个身份凭证(Access Token)并发送给用户,用户用自己的密码先尝试解密 Master Key,然后再用 Master Key 尝试解密自己的 RSA Private Key,最后用 RSA Private Key 解密 Access Token。如果用户密码正确,则能得到正确的 Access Token,用户使用正确的 Access Token 则可以进入自己的空间了。
从上面的工作原理可见,网站本身以及网络的中间环节,都不知道原始的文件内容、File Key/RSA Private Key、Master Key,因为他们被一环扣一环地加密起来,所有解密的最终关键在于用户的帐号密码,但帐号密码恰好从来都没有提交过给网站或者经过网络中间环节传输。所以,这样的安全模型的确能够把用户的数据保护起来。
下面说说个人觉得的一些缺点和优点。
一些优点
1、所有加密解密都在客户端(使用 JavaScript)完成,不需要安装特定的软件或者浏览器插件,比较方便。
2、同一个用户的每个文件都使用独立的随机 File Key 加密,而不是所有文件用同一个 Key 加密,这样的好处在于共享(包括发送和复制)文件给站内用户时,服务器不用产生两份数据,而只需把 File Key 安全传送给对方即可,对于用户来说则意味着可以快速完成共享操作,而不必经过下载、解密、再加密、再上传的漫长过程。
一些缺点
1、整个加密过程过份依赖帐号密码,因为一旦某人拥有(通过各种途径获得)我的帐号密码,则可以得到 Master Key,然后可以得到 RSA Private Key 还有所有 File Key,然后可以解开所有文件内容。
所以,如果用户使用了一个比较弱的帐号密码、或者机器被植入木马程序、或者受到 SSL 中间人攻击,导致帐号密码泄露,基本上就全部内容都泄露了。
2、忘记密码后不仅仅不能登录你的帐号,同时也意味着失去所有文件数据,并且没得恢复(重置)密码。(PS:更改密码是可以的,因为使用旧密码解密得到 Master Key 明文后,再用新密码加密,再储存到服务器上就完成更改密码操作了)
3、公开发布一个文件时,因为 File Key 会附加到下载的 URL 里,虽然下载时背后有一个解密过程,不过这过程对于下载者来说是透明的,下载者下载文件时跟一般的文件共享网站并无差异。如果文件内容是侵权的,那么版权方会不会同样状告 Mega 呢?