如何在SQL Server 2014中存储密码避免包括开发者在内的人员解密获取?
密码存储安全方案回答
这个需求完全可以实现,核心原则是不要用可逆加密存储密码,改用单向加盐慢哈希处理,具体方案如下:
- 首先摒弃现有可能可逆的密码存储逻辑:可逆加密无论密钥保管多严格,拥有服务器、数据库访问权限的人员都有途径拿到密钥解密出原始密码,完全不符合你的安全要求。
- 改用密码专属单向哈希流程:用户注册/修改密码时,为每个用户单独生成至少16位长度的唯一随机盐值,将用户输入的原始密码拼接盐值后,使用专为密码设计的慢哈希算法计算哈希值,直接存储到你现有的
nvarchar(128)字段即可。 - 哈希算法必须选
bcrypt、Argon2、PBKDF2这类慢哈希算法,禁止使用MD5、SHA-1、SHA-256等普通快速哈希:快速哈希算力消耗极低,拖库后很容易通过暴力碰撞得到原始密码;慢哈希会大幅提升暴力破解的算力成本,就算拿到完整的哈希值也几乎不可能反推原始密码。 - 登录验证时不需要还原原始密码:只需要将用户提交的密码和存储的对应盐值拼接,用相同参数计算哈希,和库中存储的哈希值比对是否一致即可完成身份校验。
按上述方案落地后,即使是拥有数据库、服务器最高权限的内部团队,拿到的也只是无法逆推的哈希值,完全无法解密得到用户的原始密码,完全满足你的安全需求。
注意不要自行实现哈希逻辑,直接使用对应开发语言生态中成熟的官方标准库即可,避免出现实现层面的安全漏洞。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

