什么是 SHA 轮次?

信息安全 密码 哈希
2021-08-23 01:02:57

我了解更多的 sha-rounds 使得在 /etc/shadow 中暴力破解散列密码变得困难。在执行sudo命令和登录 Unix 帐户时,更高的轮次也会使用更多的 CPU 处理。真正的沙轮是什么?chpasswd手册并没有真正给出 sha-rounds 的技术定义。

-s, --sha-rounds ROUNDS
           Use the specified number of rounds to encrypt the passwords.

           The value 0 means that the system will choose the default number of rounds for the crypt method (5000).

           A minimal value of 1000 and a maximal value of 999,999,999 will be enforced.

           You can only use this option with the SHA256 or SHA512 crypt method.

           By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in /etc/login.defs.

SHA-2 wiki 也没有真正说:

SHA-256 and SHA-512 ... use different shift amounts and additive constants, but their structures are otherwise virtually identical, differing only in the number of rounds.

在 chpasswd 手册和 SHA-2 wiki 中,没有足够的上下文来确定“sha-rounds”是什么或它们与 SHA512 的关系。

2个回答

手册所指的轮次可能更好地称为迭代虽然 SHA-2 函数内部确实有固定的轮数(64 或 80,取决于使用的散列),但这不是本手册所要讨论的。为了使散列密码更安全,程序通常会将密码置于 KDF 函数中,例如 PBKDF2,该函数多次运行单个散列函数以减缓暴力攻击。这就是“回合”在这种情况下所指的内容。整数越高,处理密码所需的时间越长,密码就越安全。

安全系统不直接存储密码,甚至不以加密形式存储密码,而是作为加盐的、缓慢的哈希值。请参阅如何安全地散列密码?更多细节。

使用散列机制而不是加密的目的是使无法从密码散列(存储在 中的内容/etc/shadow)返回到密码本身,除非使用猜测密码、计算相应散列并比较的“简单”方法它与数据库条目。使哈希计算变慢的目的是减慢这种蛮力尝试。

构建慢速散列的一种常见方法是采用普通的加密散列函数(例如 SHA-256 或 SHA-512)并多次运行它:基本上SHA-256(SHA-256(…(SHA-256(salt + password)))). (这是不实际的计算,我只是在这里展示的相关方面)。因为它是不可能找到x给定的SHA-256(x)短猜测x本身并通过计算验证猜测SHA-256(guess),这是不可能找到password赋予其作出猜测和验证的迭代散列短它。这是当今大多数 Unix 系统使用的方法,使用一种有时称为SHAcrypt的方法(但它实际上并没有一个常用的名称)。PBKDF2是一个比较知名的名字;这是一个非常相似的方案,建立在多次迭代哈希函数的相同原理上,但结构略有不同。

文档中chpasswd所说的“SHA 轮数”是 salted-iterated-SHA2 构造调用散列函数的次数。这通常称为“迭代次数”。

包括 SHA-256 和 SHA-512 在内的一些加密原语在内部被描述为使用多轮,但这与chpasswd. SHAcrypt 使用标准哈希函数(SHA-256 或 SHA-512)作为黑盒,并多次调用它。