如何验证对称密钥有效性?无明文与密码存储的验证方案问询
最简实现方案
核心思路是结合密码派生函数(KDF)和对称加密,同时存储密文与密码验证哈希,既实现密码一致性校验,又不暴露敏感信息:
用户1提交数据流程
- 接收
plain_text和password - 用指定的KDF(如Argon2、PBKDF2),以
password为输入生成两个输出:encryption_key:用于对称加密的密钥password_hash:用于后续验证的哈希值
- 使用
encryption_key对plain_text执行对称加密(如AES-GCM),得到encrypted - 将
encrypted和password_hash存入数据库(不存储原始plain_text和password)
用户2请求查看流程
- 接收用户提交的
password - 用相同的KDF参数,以该
password为输入生成new_password_hash和new_encryption_key - 对比
new_password_hash与数据库中存储的password_hash:- 若不一致,直接返回「密码验证失败」,不执行解密操作
- 若一致,用
new_encryption_key解密encrypted,返回原始plain_text
需求符合性验证
- 不返回错误解密文本:只有密码验证通过才会执行解密,错误密码直接被拦截,不会用无效密钥尝试解密密文
- 不存储plain_text:数据库仅保留加密后的
encrypted - 不存储正确的password:仅存储KDF生成的
password_hash,无法从哈希反向推导出原始密码
内容的提问来源于stack exchange,提问作者Alsaraha
相关产品推荐
相关产品推荐

