首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用PBKDF2生成用于加密和隐式身份验证的AES256密钥?

是否可以使用PBKDF2生成用于加密和隐式身份验证的AES256密钥?
EN

Stack Overflow用户
提问于 2010-12-01 08:41:22
回答 4查看 3.3K关注 0票数 5

我有两台设备,我想在它们之间建立一个安全的通信通道。唯一的共享密钥是(7到20个字符的ASCII)密码。如果我将PBKDF2 (来自RFC2898)与共同的盐、迭代和口令一起使用来在两端生成AES256-CBC密钥和IV,我想我可以在一个步骤中验证用户并提供加密通道。这是真的吗,还是有什么原因让我看到人们只使用PBKDF2来验证密码?

我的推理是,两端都需要知道密码才能生成相同的密钥和IV。因此,如果设备B可以解密来自设备A的数据,则它们都证明了自己拥有相同的密码。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-01 09:27:17

PBKDF2是从共享密钥生成公共密钥的好方法(您不应该以这种方式生成IV - IV应该是随机的,并与密文一起发送)。

但是,CBC不是一种身份验证密码模式。这是因为攻击者可以获取加密消息并对其进行可预测的修改,而不需要能够读取消息或知道密钥。在过去,这样的攻击已经破坏了现实世界的系统。

您可以使用身份验证密码模式,如伽罗瓦计数器模式(GCM),而不是CBC。

另一种方法是Encrypt-Then-MAC。使用带有两个不同盐的PBKDF2来生成两个不同的密钥-首先使用CBC使用第一个密钥加密数据,然后使用第二个密钥在密文上计算HMAC。

您还需要使用单次使用随机数来防止重放攻击。

票数 5
EN

Stack Overflow用户

发布于 2010-12-01 08:50:12

通常,您不能使用密码对消息进行身份验证,因为消息可以是任何内容。但是,如果消息符合某种指定的格式,我认为可以合理地假设密文一定是使用共享密钥生成的-更复杂格式的更长消息提供了更好的保证。例如,分组密码中的填充可以用作弱认证。

为了获得更好的安全性,请使用共享密钥计算MAC并将其与密文一起发送。

虽然PBKDF2可用于生成IV,但它只能对单个消息执行此操作。在大多数情况下,最好选择一个随机的IV并将其与密文一起发送。

票数 2
EN

Stack Overflow用户

发布于 2010-12-01 08:49:11

PBKDF2不“验证密码”。它从密码生成密钥。

要验证密码,通常需要使用密钥对其进行加密。密钥由原始密码通过PBKDF2生成。则保存密文。

当您想要检查用户输入的文本是否与密码匹配时,使用PBKDF2从密码候选生成密钥,然后尝试解密保存的密文。如果解密成功了,那你就有匹配的了。

不过,通常情况下,您不会将基于密码的密钥用作session key

因此,您通常不会使用基于密码的密钥来保护安全通道。

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

https://stackoverflow.com/questions/4320222

复制
相关文章

相似问题

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