如何做到真正的服务端加密存储,仅用户客户端解密后使用?-灵析社区

无敌美少女

我现在是弄一个小程序,用户会添加非常敏感的安全信息,目前是用户端添加敏感数据时使用他的union_id和固定的key作为加解密密钥,然后再AES加密后再提交到服务端,然后下次请求服务器返回加密数据后解密再使用。 这里存在一个问题,如果有黑客拿到了我的数据库,和我的算法,然后就可以解密出用户的敏感数据。因为用户union_id是会记录到服务端数据库,客户端固定的key也是可以扒到。 有什么方案可以做到真的的加密云端存储,除了用户自己,其他人完全无法解密数据呢,包括我自己也无法查看用户的敏感数据? 跪求各位大佬推荐一个方案

阅读量:19

点赞量:0

问AI
楼上的回答没一个靠谱的。 最简单的办法,把用户的 union_id 或者 openid 当做加密的 key,当然也要做一些处理,例如做 md5 处理生成 32 位的 aes key 用于加密数据。 其次,服务器上不存储明文的 union_id,可做 hash 处理后存储数据库用于标识唯一用户。 这个方案相当于把安全问题丢给了第三方,也就是小程序这边。我考虑过使用登录态相关的字段来加密,例如 token 之类的,但每次登录都会导致 token 发生变化,所以不适用这个场景。 这样处理的好处是,黑客拿到服务器权限,也只能拿到 hash 处理后的数据,无法逆向拿到 union_id。 坏处就是一旦 union_id 泄漏,则用户所有数据暴露。而且按照微信小程序的授权登录流程,access_toekn 泄漏的可能性还是比较大的。 所以这个方案还有进一步优化的空间,例如对 access_token 做加密存储,客户端也不直接存储 union_id,客户端和服务端之间的通信使用 curve25519 算法生成共享密钥用于加密双方传输的数据等等。