这是 stack overflow 的问答,把用户数据放在谷歌的 cloud firestore 中,开发者如何看不到用户保存的数据?
一个实现思路是:给前端发放一个 public key,用这个 public key 在前端加密用户数据,之后再发送给数据库,所以保存在数据库的 text 是被加密过的,然后自己安全地保存一个 private key,当用户在前端查询数据库中的数据时,就用 public key 和 private key 组合起来,在后端把数据库解密之后发送给用户.
但是这样的话,拥有 private key 的人似乎可以看到这些数据。
这篇文章介绍常规的 firebase 服务只有在两个阶段加密,一个是传输过程中通过 https 加密,另一个是硬盘加密,硬盘加密的意思是比如有人偷偷进入谷歌的数据中心,把里面的硬盘偷走了,回家后把这个硬盘连入电脑,他也没法读取硬盘中的数据。
但是,开发者可以登录他的 firebase 帐号,通过这个帐号可以查看硬盘中的数据,数据是以明文的方式存放在服务器中的。
第二个原文表示,可以通过 end to end 加密的方式,把所有类型的信息,包括 text,image,file 等,进行加密,被 end to end 加密过的信息开发者即使登录了数据库也看不到。
和第一个原文的方案不同的地方是,private key 和 public 都在用户端生成,其中 private key 是保存在用户端的,而不是开发者持有,而且似乎每个用户的 private key 是不同的? public key 则发布到网络中,当两个用户互发信息时,一个用户把自己的信息结合对方的 public key 加密数据,对方拿到被加密的数据,因为这个数据是结合了他的 public key 加密的,所以他可以解密,所以可以看到数据?
end to end 加密也有不好的地方,比如用户遇到问题了,我们不能查看用户的信息以定位这位用户的问题,再比如这些信息不能用作数据挖掘等,再比如会影响用户重新获取这些数据的速度。
有人建议不要过分关注用户的数据隐私,只要符合 GDPR 就可以。
这篇文章表示加密有两种,in Transit、at Rest。in Transit 通过 https 实现,at Rest 是指数据保存在服务器之前就加密好,所以服务器的数据已经被加密过了,但是服务提供者拥有解密这些数据的 key,所以它还是可以通过这个 key 查看用户的数据。
端到端加密不一样,end-to-end 加密的 key 只有用户知道,服务提供者不知道。