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

Mil*_*ski 2 language-agnostic encryption hash 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位长哈希不是一种选择)

nto*_*rnl 5

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

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