从密码到密钥

信息安全 密码 密码学 密钥生成
2021-08-18 10:22:30

你能解释一下维基百科的这段话吗?

当密码(或密码)被用作加密密钥时,设计良好的密码系统首先通过一个密钥派生函数运行它,该函数添加一个盐并将其压缩或扩展为所需的密钥长度,例如通过将一个长短语压缩成一个适合在分组密码中使用的 128 位值。

较长的密码比较短的密码更安全(就暴力攻击而言),不是吗?

如果密码是“pass”,那么生成的密钥是什么?

2个回答

加密密钥通常是固定长度的值。不幸的是,人类无法记住长串数字,因此我们使用密码来代替。

例如,这可能是您的 256 位密钥:

d4f6d068b4e8c4e924ce9b28585a6009672e56d61215e7d9251b5d36283edd5d

不太容易记住,是吗?

但是,上面的内容是通过计算单词“waffles”的加密哈希(在本例中为SHA256)生成的,这更容易记住。哈希函数接受任意长度的输入,并计算固定长度的输出。

实际上,我们需要密钥派生函数 (KDF) 具有特殊属性。一个可取的特性是mh, where计算在计算上是不可行的h = KDF(m),即如果只知道输出,就很难计算函数的输入。另一个可取的特性是该函数的计算成本高(慢)足以使计算数百万个密钥不可行,而不会降低合法使用的性能。因此,特殊的 KDF 方案(例如PBKDF2bcrypt)通常用于从容易记住的密码中计算这些加密密钥。

破解由理想的强密钥派生函数生成的密钥的唯一实用方法是猜测可能的密码。如果您的密码是“密码”,则很可能已被破解。如果您的密码是由 20 个随机字母和数字组成的字符串,那么被猜到的可能性要小得多。

为了解决您最后提出的问题:

如果密码是“pass”,那么生成的密钥是什么?

这不是一个真正有意义的问题。结果可能是任何东西。有许多不同的散列函数(MD5、SHA1、SHA256、SHA512、Whirlpool、RIPEMD160 等)和许多不同的密钥派生函数(PBKDF2、bcrypt、scrypt),可以使用盐或HMAC可能性是无止境!

这段话是说密码系统从密码中派生出密钥。

例如,AES-256 使用 256 位密钥。一个(非常)简单的系统可能会对您的密码执行 SHA256 哈希,因为使用生成的 256 位输出作为加密密钥。

所有涉及密码的常见警告都适用 - 使用 bcrypt 或 pbkdf2 算法,使用盐等。有关正确密码散列的更多信息可以在网站上已经提出的许多问题中找到。您可能想搜索 或者 标签。

较长的密码比较短的密码更安全(就暴力攻击而言),不是吗?

是的,更长(更随机)的密码具有更多的熵,因此更安全。

如果密码是“pass”,那么生成的密钥是什么?

这实际上取决于您使用的散列算法。