使用Crypto ++密码进行AES加密进行比较

顾问

我不确定这是否是问的正确地方。

我使用AES crypto ++进行数据加密/解密。基本上它像一个加密的笔记。

我想做的是有一个标识符字段。此字段将包含加密的用户密码:

User Password: smith
Identifier = AESEncrypt("smith")

因为标识符字段为空,所以仅执行一次。每次用户输入密码以添加注释时,我都可以解密标识符字段并将其与用户输入的密码进行比较。

这样做的原因是为了避免由于输入了错误的密码而损坏注释。

这是一个好主意吗?我认为如果有人破坏了标识符并获得了密码,那么他们无论如何都已经知道密码了。对我的想法有何看法?

罗布·纳皮尔

不,这不是一个好主意。如果两个人使用相同的密码,那么他们将具有相同的标识符。这使得破解密码变得更加简单。您还没有明确哪些关键你加密口令AESEncrypt()需要两个参数,并且密钥必须与随机变量不可区分以确保安全。

密码必须先转换为密钥,然后才能与AES一起使用。要将密码转换为密钥,可以使用KDF(密钥派生功能)。PBKDF2是最著名和广泛使用的。其他包括bcrypt和scrypt。在Crypto ++中,您应该使用PKCS5_PBKDF2_HMAC

实际验证密码比听起来要难。无法使用AES来确保密码正确。使用PKCS#7填充(CBC模式的标准),可以确定密码正确的99.6%的确定性,但是您仍然偶尔会失败,并会因密码错误而不是错误返回乱码。(这不是虚构的“接近100%的数字;”我的意思是“略小于255/256”。)在解密所有数据之前,您也无法检查填充是否正确。

您可以使用几种更好的技术。首先,无论如何都应使用HMAC。HMAC就像加密的哈希。它可以确保未修改加密笔记。Crypto ++提供了一种作为HMAC如果使用错误的密码解密,则HMAC将失败,您可以使用它来断言密码错误。这种方法的问题在于,如果数据非常大,速度会很慢,并且您无法分辨出损坏的数据和密码错误之间的区别。(此方法是RNCryptor当前使用的方法。)

我目前正在研究的方法是使用HMAC创建验证器。取一些已知的字符串,然后使用您的密钥(由PBKDF2生成)对它进行HMAC处理。以后,您可以在那个小的已知字符串而不是整个正文上验证HMAC。而且由于您知道该字符串应该是什么,所以您不必担心数据损坏。链接的页面给出了我当前关于确切布局的想法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章