2

假设我想将“密码派生字节”作为 AES 密钥。例如,我有一个密码“topsecret”,我确实为它计算了 SHA-1 哈希(160 位),我想将这些字节作为 AES-128 的密钥提供。

我应该在 128 位后截断还是进行某种折叠?AES-256 怎么样?我应该重复字节,用 0 填充还是做一些“展开”操作?

我知道在后一种情况下,安全性保持在 160 位,因为 256 位密码池减少到 2^160 种可能的组合,但我只是想克服技术限制(没有 AES-160)。

什么理论说的?(不,对 128 位使用 MD5,对 256 位长散列使用 SHA-256 不是一种选择)

4

2 回答 2

5

一个典型的密码只有几十位熵,通过哈希函数运行密码不会增加任何熵。因此,此类密钥很容易使用字典或蛮力攻击。

最普遍接受的解决方案是使散列函数非常慢。为此设计的算法称为“基于密码的密钥派生函数”。PBKDF2 和 bcrypt 是最受欢迎的。

于 2013-11-08T15:50:43.673 回答
3

理论说没关系。您可以用 0 填充,可以通过重复填充等。结果中的熵量是相同的 - 蛮力同样难以使用。

至于将其截断为 128 位,您如何截断它并不重要 - 散列输出的所有字节通常被认为是同样随机且不相关的。没有“更多熵”的一面或其他东西。

所以,从技术上讲,做你想做的事——你和你的密码一样强大。

于 2013-11-08T18:09:49.280 回答