Mega网盘前身是天才黑客Kim Dotcom 和他的团队创造的Megaupload,是在与MPEG 格式文件处理服务提供商Wired商谈了Megaupload修改版如何进行之际,应运而生。
Mega网盘的原理是在浏览器中一键加密客户的密码,采用一种名叫AES128高级加密算法,搭配RSA密钥对同时进行的安全加密。而加密效果则是非常惊人的:“哪怕服务器遗失,政府突击数据中心或者有人黑掉了服务器,数据也不会泄露。无论用户上传了什么到网站上,这些东西都会被妥善保管,没有密钥就无法读取。”
下面表达一下自己对Mega加密流程的理解。在账户密码注册的时候,会随机生成一个身份标识masterKey,让用户保存为了以后修改重置密码使用,并同时生成RSA公钥私钥密钥对,点击注册的时候,js运行加密开始,由密码去加密masterKey(身份标识),由明文的masterKey去加密privateKey(私钥),然后将加密后的masterKey,加密后的privateKey,明文的publicKey传递到服务器,存进服务器数据库;这样一来的 效果就变成,服务器不会存储密码,服务端不清楚用户密码,收到的只是加密的privateKey,所以不会有数据泄露的危险。
在登陆的时候,拿到加密后的masterKey,加密后的私钥,公钥加密后的access_token,然后进行解密,密码解密masterKey, 解密后的masterKey解密私钥,私钥解密公钥拿到明文access_token,传递服务器进行登陆。这样服务器又不会受到明文的三种key。
而在上传文件的时候使用了另一种fileKey,进行文件加密,对于每个上传的文件生成一个随机的fileKey,在上传的时候用masterKey加密fileKey,用fileKey加密文件名及内容,而服务端收到的是加密后的fileKey,及加密后的文件名及内容。如此一来,上传的每个文件,即使数据泄露,也不会被解析读取。
下载的时候解密过程为masterKey解密fileKey,fileKey解密文件名及内容,再进行下载。
下一篇文章我会尝试使用js+php的搭配进行演示,并且会再写一篇文章写一下百度上传插件webUploader的粗略使用。