我正在编写一个程序,它从用户那里获取密码,然后将一些加密数据写入文件。我到目前为止提出的方法如下:
解密时,读取IV,然后使用密码以相同方式生成密钥,并将前32位与签名进行比较,以判断密钥是否有效。< / p>
但是我在查看AES example中提供的PolarSSL(我用来进行散列和加密的库),他们使用了更为复杂的方法:
我得到的印象是第二种方法更安全,但我没有足够的知识支持它,除了它看起来更复杂。
注意:这是一个开源项目,所以无论我使用哪种方法,任何人都可以免费使用它。
答案 0 :(得分:3)
第二种选择更安全。
您的方法,不提供任何消息完整性。这意味着攻击者可以修改密文的某些部分并更改纯文本解密的内容。只要他们不修改任何会改变你的32位静态签名的东西,你就会信任它。第二种方法的HMAC提供了消息完整性。
通过对密钥进行哈希处理8192次,它增加了额外的计算步骤,供某人尝试并强制使用密钥。假设用户将选择基于字典的密码。使用您的方法,攻击者必须执行SHA256(someguess)
然后尝试解密。但是,使用PolarSSL版本时,他们必须计算SHA256(SHA256(SHA256...(SHA256(someguess)))
8192次。这只会减慢攻击者的速度,但这可能就足够了(现在)。
为了它的价值,请使用现有的库。密码学很难并且容易出现细微的错误。