两个月前,我们的结论 NIST加密哈希算法的竞争中写道。
的的赢家是Keccak -现在正式被称为SHA-3。
尽管这一新标准的正式批准,NIST的早期哈希仍然普遍使用。事实上,我们可以期望看到SHA-1和SHA-2在野外年-甚至可能是几十年来。
SHA-1,在特定的,仍然是广泛存在的密码散列。
哈希密码是在您使用您的密码档案系统创建一个单向函数加密散列函数的某些部分。
一个单向函数是一个过程,这是很容易计算的一个方向,但复杂的 - 或者,更好的,computionally不可行的 - 工作在反向。
所以,如果你存储单向密码哈希值,而不是实际的密码,攻击者窃取您的数据库不能直接恢复这些密码。他们有尝试自己的密码后,密码,直到他们得到幸运。
→使用一个单向函数来存储密码是您的密码数据库的安全的替代品 。这是额外的安全性 ,提供了一个触摸的防御纵深,以防万一您的服务器不坏了。
因为单向函数不能反向计算,破解密码哈希密码是不可避免一个强力的事的。这意味着计算一遍又一遍的一个单向函数。
因此,密码破解专家提出了很多的努力,改善被广泛使用的密码散列算法的性能,包括SHA-1。
例如,在2012年6月,研究者万能和JimF(吉姆Fougeron)的贡献的代码的密码破解开膛手约翰 ,提高了原料的SHA-1密码哈希速度提高了80%。
而且,对于同一版本的的Tavis Ormandy想出了一个优化的实现提供了115%的性能提升,虽然限制在15个字符的密码。
→密码破解很容易被滥用。你可能想在你的组织中, 控制它们的使用 。但是他们有一个合法的防御目的:糟糕的口令之前在自己的网络上的坏人做卫生。
破解工具在hashcat家庭的pasword的作者,现在,延Steube的,增加了对SHA-1的优化,破解密码。
Steube在一份文件中描述了他的工作,在最近的密码^ 12在挪威奥斯陆会议。

Steube的密码破解的改进减少了21%,计算机的指令,需要计算出一个SHA-1哈希值的数量。这可能使以前的优化技术 - 如上面所描述的 - 进一步进行调整,但额外的速度。
steube注意到,SHA-1的“内循环”可以是有益的瘦身如果反复计算从输入数据的哈希值,其中只有第一输入字(32位,或四个字节)改变每次。
密码攻击,这可以很容易地安排。
大大过于简单,SHA-1算法的投入消耗的16个32位字(512位或64字节)的块,每块混合成5个32位字(160位或20字节)的累计哈希。
块中块()
对于i = 17至80
- 这里的每一步扩展了原来的16个字输入
- 阻止通过添加混合制成一个字到80个字
- 一起4以前的16个字。
块[I] = minimixtogether(块,我)
结束
i = 1到80做
- 这里的每一步混合的话,从80字
- “扩展块”5个字节的哈希累加器
哈希giantmixtogether(块,我)
结束
结束
giantmixtogther()函数打乱了扩展输入到哈希使用各种不同的操作,不仅包括AND,OR,XOR,ADD和ROL(循环左移)。
但minimixtogether()函数,用于输入数据的条件只使用XOR和ROL。由于它相对简单,Steube找到了一个办法跳过的minimixtogether()循环,并计算“扩展”输入值块[17] [80]直接在giantmixtogether(),以阻止循环。
Steube的方法还需要一些预先计算,但多个单独的散评估可以分享这个预先计算好的数据,如果只有第一个块(即前四个字符)的输入已经改变。
例如,如果你是散列随机选择的一系列文件,这会做对你没有好处。
但是,当对密码进行暴力攻击,这是一个简单的事情,把你的前四个字符输入到一个合适的序列变化最迅速的,其余的密码。 (试想一下,一辆汽车里程表的数字颠倒)。
如果你能做到这一点,然后implemeting Steube的调整将使你的代码运行速度提高25%。就是这样。
有你有吧,但再次提醒人们,安全性是一个军备竞赛。














