比如有一个笔记型的应用,用户可以创建笔记。
那么怎么尽量保证用户笔记的私密性呢,包括但不限于:开发者不能直接看到用户的数据,网站遭遇攻击后用户的笔记内容不被泄露……
语雀有提到双重密钥加密,但总觉得密钥应该也是存在服务器上的,同时拿到内容和密钥还是能解开。
1
dot2017 2018-12-16 23:20:15 +08:00
那为什么用户不直接上传加密后的笔记文件呢
|
2
mason961125 2018-12-16 23:21:15 +08:00
这是道德 /法律问题,不是技术问题。
|
3
iConnect 2018-12-16 23:22:54 +08:00 via Android
如果用户使用 yuque 进行黄赌毒的联系呢,你觉得资料也不可能看的到吗?个人隐私的资料还是本地多备份,企业核心机密自建最靠谱。
|
4
t6attack 2018-12-16 23:28:44 +08:00
理论上不可行,除非把私钥交给用户自己保存。
客户端可以把密钥放在用户设备上。web 端只能每次访问时让用户自己提供密钥。 另外:如果用云主机,那么云主机厂商也可以轻松拿到你所有的数据。 不管怎么加密,用户的明文数据一定在云主机的 内存 中出现过。云主机的内存对宿主机是完全透明的。拿你的数据,不是能不能的问题,只是想不想的问题。 刻意强调连自己都拿不到数据。这就相等于在说:我们对 XX 云比对自己还信任。 |
5
takato 2018-12-16 23:37:30 +08:00
|
6
clip OP 1. 最简单的是直接把用户数据明文存,但这样开发者可以直接通过数据库看到用户的内容。
2. 然后前面只考虑了隐私没考虑法律监管。( cc @mason961125 @takato @iConnect )再就是数据库存一个加密后的内容,密钥也存在服务器上但分隔开,有一层加解密的操作。开发者**不能直接**看到数据库中内容。但执行一下解密程序还是能看到。可以一定程度上提高解密程序的权限,剩下的估计就是道德和法律问题了。 3. 还有就是类似 1Password 那种的用户自己设置一个密钥,直接在客户端加解密,网络上传输给交给服务器的都是加密后的数据( cc @t6attack 这样就不用担心云主机了吧),坏处是不能找回密码,丢了的话数据就全丢了。( cc @dot2017 不上传加密后的一方面是为了便捷性之类的吧) 4. 云存储方案是把笔记存储放到类似 iCloud 的存储上,直接客户端和云存储通信,相当于把锅甩给了 iCloud。这样应用的开发者看不到数据。 综合考虑可能选择 2 或 4 比较合适。 我回头再研究下 graphitedocs,多谢 @takato |
8
peihanw 2018-12-17 13:28:13 +08:00
https://tutanota.com/ 据说是全程加密且开源的,供参考
|