从零实现一个端到端加密的密钥同步工具
这个端到端加密的工具奶爸已经做出来好多个月了:cloudssh,因为最开始没有设计好 cmd
命令的模板导致现在奶爸没有优化下去的兴致了,总结一下端到端加密中的设计模式,有意思的细节,就打住了。
端到端加密详解
名词解释
- MasterKey:明文密码以服务器返回的加密途径加密后的 key,此 key 用来加密个人账户下的所有数据使用
- EncKey:MasterKey 的再 hash,hash 方法固定,循环次数较小,只是 hash 后提供给服务器当作密码鉴权使用
- 对称密钥:公钥用来加密 Team 的私钥,私钥由 MasterKey 加密后储存在服务器中,需要时解密来用
- Team 密钥:公钥储存在 Team 表,私钥储存在每个成员那里
用户注册
在注册流程中,明文密码不会离开你的电脑。服务器端保存的密码是用来加密数据的 encKey 的 hash 的 bcrypt hash 后的值,和 encKey 的 hash 方式。
用户登录
个人数据
读取
写入
Team 数据
读取
写入
概览
Team 成员管理
因为 Team 账户为多人服务,既要保证每个人都能读取、修改 Team 中的数据,又能使个人的数据维持私密安全。同样在添加与删除成员时,只需要操作 添加/删除 的管理员修改 Team 的公钥与私钥,而后便利相关成员,使用成员的公钥将新的 Team 私钥保存在成员处,成员即可使用更新的私钥读取数据,而被提出剔出的成员也无法再解密 Team 数据。
目前的缺陷
客户端为方便用户明文储存了用户的明文密码在 ~/.cloudssh.json
中,这是极不安全的。请看这篇博文 「Stop saving credential tokens in text files」端到端加解密,包括处理多人加解密的流程比较复杂,奶爸的描述能力有限,欢迎与博主进行交流。