使用SHA-1哈希作为AES密钥

时间:2013-11-08 15:29:55

标签: encryption hash language-agnostic cryptography

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

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

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

什么理论说? (不,使用MD5代表128位,SHA-256代表256位长哈希不是一种选择)

2 个答案:

答案 0 :(得分:5)

典型的密码只有几十位熵,并且通过散列函数运行密码不会为其添加任何熵。因此,使用字典或暴力攻击很容易攻击这些密钥。

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

答案 1 :(得分:3)

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

至于将其截断为128位,如何截断它并不重要 - 哈希输出的所有字节通常被认为是同等随机且不相关的。没有“更多的熵”方面。

因此,从技术上讲,按照您的意愿行事 - 您保持与密码一样强大。