如何在Postgres中正确存储敏感数据?密钥管理相关疑问
关于pgcrypto加密敏感财务数据的疑问解答
1. 公钥、私钥及密码应存储于何处?
- 公钥:可以直接存在数据库的用户关联表中,公钥仅用于加密,即使泄露也无法解密数据,安全风险极低。
- 私钥:绝对不能明文存在服务器或数据库。最优方案是在客户端生成后由用户自行保管(比如导出存到本地文件、浏览器加密存储);如果要存在服务器,必须先用用户的加密密码派生的密钥对私钥再次加密,确保只有用户输入正确密码才能解密私钥。
- 生成密钥的核心密码:这个密码是用户的“根密钥”,应用绝对不能存储任何形式的副本,必须由用户自己牢记,一旦丢失无法恢复数据,这是保证只有创建者能访问的核心前提。
2. 是否需要为每位用户生成独立的公钥、私钥及密码?
必须独立。每个用户的密钥对都是专属的,这样单个用户的密钥泄露只会影响自己的数据,不会波及其他用户;同时用户的加密密码也必须是独立设置的,不能共用统一密码,否则完全失去了端到端专属访问的意义。
3. 应在何时创建这些密钥及密码?是否在用户创建阶段?
建议在用户首次登录后引导设置加密密码,然后在客户端完成密钥对的生成(全程不要把私钥传到服务器),生成后仅将公钥上传至服务器关联用户存储。
不要在用户注册阶段就做这件事:一来用户注册时可能还没意识到加密密码的重要性,二来客户端生成密钥能彻底避免私钥接触服务器,最大程度降低泄露风险。
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

