所以我最近用hashcat做了一个基准的SHA-512和bcrypt。
以下是研究结果:
bcrypt : bruteforce : ~ 400 H/s
Wordlist + dive.rule : ~ 550 H/s
sha512 : bruteforce : ~ 870 MH/s -> 870000000 H/s
Wordlist + dive.rule : ~ 640 MH/s -> 640000000 H/s
Factor sha512 -> bcrypt : 1:1589473沙-512是密码散列函数,对吗?为什么这么快?
例如,VeraCrypt使用它作为KDF。
我仍然是一个初学者,所以请解释给我,在哪些场景中使用SHA-512和在哪个bcrypt。
发布于 2017-04-12 16:01:40
SHA-512是密码散列,bcrypt是密码散列或PBKDF (基于密码的密钥派生函数)。
沙-512被设计成快速。例如,您不希望在验证签名时出现任何延迟。通用密码散列没有理由慢下来。
另一方面,bcrypt是对输入执行密钥增强的密码哈希。基本上,它是通过减慢计算速度来做到这一点的,这样攻击者就必须花费更多的资源来通过野蛮强制或字典攻击来查找输入。这个想法是,虽然合法用户--在这种情况下,你--也会放慢速度,但他们每密码只慢一次。然而,每次尝试都会减慢攻击者的速度。当然,合法用户更有可能首先输入正确的密码。
此外,bcrypt还包含一个salt作为输入,可以用来避免彩虹表的攻击。
沙-512本身并不是一个KDF,但是从哈希函数中构造一个函数很容易。例如,PBKDF2是一个基于密码哈希/密码的KDF。它可以使用任何哈希函数作为底层基元。较大的函数再次以salt和工作因子作为输入/配置参数。
但是,如果您不需要加强键(即输入足够随机),那么您也可以(几乎)直接使用散列来导出对称密钥。这被称为KBKDF (基于密钥的密钥派生函数)。今天最著名的是HKDF,它基于HMAC,而HMAC又基于加密散列(如SHA-512 )。
还有KDF1和KDF2,它们可以简单地包含输入秘密,后面跟着一个静态计数器,然后对其进行散列。尽管它在输入和输出大小方面有限制,但对于当前的知识来说,它是一个安全的KDF --假设散列是伪随机的,对于小输入是无冲突的。
在某些情况下,即使是输入值上的直接散列也可以满足(如果哈希产生太多,则取最左边的位)。HMAC --例如TLS使用的HMAC--应该是首选的。
来自您的消息来源(Slashdot):
对于标准容器和其他(即非系统)分区,TrueCrypt最多使用2,000次迭代。Idrassi所做的就是加强这个转变过程。VeraCrypt使用PBKDF2-RIPEMD 160算法的327,661次迭代用于系统分区,对于标准容器和其他分区使用655,331次RIPEMD160迭代和500,000次SHA-2迭代。
因此,VeraCrypt -如果我们相信源代码-使用SHA-512,但只作为PBKDF2的配置参数,这是一个密码哈希,就像bcrypt一样。因此,要创建一个公平的测试:将您的bcrypt与当前的工作因素(在您的问题中不存在,但很重要)和PBKDF2与500000次迭代进行比较。然后再比较速度的差异。
https://crypto.stackexchange.com/questions/46550
复制相似问题