用什么方式来保证用户数据的私密性?

2018-12-16 22:48:42 +08:00
 clip

比如有一个笔记型的应用,用户可以创建笔记。

那么怎么尽量保证用户笔记的私密性呢,包括但不限于:开发者不能直接看到用户的数据,网站遭遇攻击后用户的笔记内容不被泄露……

语雀有提到双重密钥加密,但总觉得密钥应该也是存在服务器上的,同时拿到内容和密钥还是能解开。

2437 次点击
所在节点    问与答
8 条回复
dot2017
2018-12-16 23:20:15 +08:00
那为什么用户不直接上传加密后的笔记文件呢
mason961125
2018-12-16 23:21:15 +08:00
这是道德 /法律问题,不是技术问题。
iConnect
2018-12-16 23:22:54 +08:00
如果用户使用 yuque 进行黄赌毒的联系呢,你觉得资料也不可能看的到吗?个人隐私的资料还是本地多备份,企业核心机密自建最靠谱。
t6attack
2018-12-16 23:28:44 +08:00
理论上不可行,除非把私钥交给用户自己保存。
客户端可以把密钥放在用户设备上。web 端只能每次访问时让用户自己提供密钥。

另外:如果用云主机,那么云主机厂商也可以轻松拿到你所有的数据。
不管怎么加密,用户的明文数据一定在云主机的 内存 中出现过。云主机的内存对宿主机是完全透明的。拿你的数据,不是能不能的问题,只是想不想的问题。

刻意强调连自己都拿不到数据。这就相等于在说:我们对 XX 云比对自己还信任。
takato
2018-12-16 23:37:30 +08:00
已经有了类似的。
https://www.graphitedocs.com/

要做到这一点,密钥一定只能交给用户保存。
但是要这么做,和某些监管条例是违背的,比如现在的澳洲就不行。
clip
2018-12-17 10:50:59 +08:00
1. 最简单的是直接把用户数据明文存,但这样开发者可以直接通过数据库看到用户的内容。

2. 然后前面只考虑了隐私没考虑法律监管。( cc @mason961125 @takato @iConnect )再就是数据库存一个加密后的内容,密钥也存在服务器上但分隔开,有一层加解密的操作。开发者**不能直接**看到数据库中内容。但执行一下解密程序还是能看到。可以一定程度上提高解密程序的权限,剩下的估计就是道德和法律问题了。

3. 还有就是类似 1Password 那种的用户自己设置一个密钥,直接在客户端加解密,网络上传输给交给服务器的都是加密后的数据( cc @t6attack 这样就不用担心云主机了吧),坏处是不能找回密码,丢了的话数据就全丢了。( cc @dot2017
不上传加密后的一方面是为了便捷性之类的吧)

4. 云存储方案是把笔记存储放到类似 iCloud 的存储上,直接客户端和云存储通信,相当于把锅甩给了 iCloud。这样应用的开发者看不到数据。

综合考虑可能选择 2 或 4 比较合适。

我回头再研究下 graphitedocs,多谢 @takato
agagega
2018-12-17 12:37:47 +08:00
@clip 2 主要是防泄露,3 应该是端到端加密的做法了
peihanw
2018-12-17 13:28:13 +08:00
https://tutanota.com/ 据说是全程加密且开源的,供参考

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/518097

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX