首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于PBKDF2密钥派生的PBKDF2散列

基于PBKDF2密钥派生的PBKDF2散列
EN

Security用户
提问于 2020-01-18 17:56:49
回答 1查看 686关注 0票数 1

想象一个应用程序,其中任何用户提供一个用户名和密码。此密码用于使用PBDKF2密钥派生算法生成“强”加密密钥(用于AES加密)。此加密密钥用于加密数据库中的用户数据。

现在,为了识别用户并授予他访问加密数据的权限,我使用"SHA-512“算法散列其加密密钥,然后将其与存储的散列密钥进行比较。我想升级我的战略,更好地保护我的应用程序免受暴力攻击。

由于PBDKF2也是一种哈希算法,我的两个问题是:

  1. 使用PBDKF2散列(然后存储)同一个PBDKF2算法生成的加密密钥(PBDKF2.Hash(PBDKF2 2派生(密码)安全吗?
  2. 存储由自己加密的加密密钥(按模式AES.encrypt(input = key,key = key)而不是密钥哈希)是否同样安全?
EN

回答 1

Security用户

发布于 2020-01-18 23:43:37

你在这里想达到什么目的?利用用户的密码(1)身份验证/登录以及(2)密钥加密他们的数据?如果是这样的话,那么考虑一下密码管理器通常会做什么--我认为它与您的建议有相似之处。下面是操作从对另一个问题的回答中被吃掉

代码语言:javascript
运行
复制
client_rounds = 5000 // iteration count may be user-defined
encryption_key = PBKDF2(HMAC-SHA256, password, salt, client_rounds) // unlocks your data
auth_hash = sha256(encryption_key) // sent to the server for authentication
server_rounds = 100000
server_key = PBKDF2(HMAC-SHA256, auth_hash, server_salt, server_rounds) // server can use this to do additional encryption

Full algorithm:
PBKDF2(HMAC-SHA256, sha256(PBKDF2(HMAC-SHA256, password, client_salt, client_rounds)), server_salt, server_rounds)

使用PBDKF2散列(然后存储)同一个PBDKF2算法生成的加密密钥(PBDKF2.Hash(PBDKF2 2派生(密码)安全吗?

是的,它是安全的,但是使用PBKDF2进行散列并不是合适的算法,因为预期哈希函数将是快速的,而PBKDF2被有意设计为用于密钥派生的速度较慢。

因为您已经将PBKDF2应用于密码,这足以抵抗野蛮的攻击--根据需要增加迭代次数。

然后对派生密钥进行散列处理,该密钥也是存储的,而不是实际的密钥/密码。

存储由自己加密的加密密钥(按模式AES.encrypt(input = key,key = key)而不是密钥哈希)是否同样安全?

不,不安全。加密密钥是很难做正确的-你会想要研究密钥包装,从NIST的密钥包装建议开始。哈希是一种更好的方法。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/224428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档