全新的 SHA-3 加密标准 —— Keccak
| 2013-05-28 13:48
经过多年的测试和分析,美国政府选择了Keccak算法作为SHA - 3的加密标准,现在我们分析一下它的工作原理以及使用方法。
2012年10月,美国NIST选择了Keccak算法作为SHA - 3的标准算法,Keccak拥有良好的加密性能以及抗解密能力。在本篇文章中,我将简单的阐述Keccak的工作原理,我将分析它的核心代码并告诉你它是如何对一段文本进行哈希处理的。我将其与SHA-1 和 SHA-2进行比较测试。
读者应该有C和Objective-C的编程经验,然后对加密算法基本认知。
SHA-1 和 SHA-2 的限制
不容忽视的是,SHA-1和SHA-2使用了相同的处理引擎。Merkle-Damgard称,在处理消息文本时,对SHA-1的成功攻击行为会影响到SHA-2的安全。
在SHA-1上举个例子:理论上进行暴力破解至少需要2的80次方(哈希循环的一个周期)才能碰撞破解。但是在2005年2月,王晓云(音译)以及他的同事使用差分路径攻击,只用了2的69次方次就完成了SHA-1的循环碰撞周期,2008年8月,这一方法被Martin Cochran证实。
到了2012年。Mark Stevens使用了一系列的云服务器在执行SHA-1的差分路径攻击,在2的58.5次方次就完成了一次攻击碰撞,他估计,在经过2的61次方次循环后,就可以形成一个完整的哈希碰撞密码库。
至于SHA-2, 对有限轮回的SHA-2散列的攻击是唯一成功的一类。对46轮回的SHA-2(512位的变体)和41轮回的SHA-2(512位的变体)的攻击是最有效的。破解256位的变体要花费 2253.6次循环,破解512位的变体要花费2511.5次循环。
事实上,即使还没有宣布一个全轮回的SHA-2被成功攻破, 但毫无疑问,攻击机制正私下的发展。这也是NIST赞助SHA-3竞赛的一个原因,也引起Keccak的发展和近来的采纳。
SHA-3的筛选
筛选SHA-3标准,候选人散列函数必须满足四个由NIST设置的条件。如果一个候选算法未能满足这些条件,它将被淘汰:
- 候选散列函数必须好实现。它应该消耗最少的资源即使散列大量的消息文本。许多候选算法实际上是无法达到这个要求。
- 候选算法必须保守安全。它应该抵御已知的攻击,同时保持一个大的安全系数。它应该同SHA-2相同的四个散列大小(224bit、256bit、384bit或512bit),但如果需要能够支持更长的散列位宽。
- 候选算法必须接受密码分析。源代码和分析结果公开为感兴趣的第三方审查和评论。在分析过程中发现的任何缺陷都需要解决,通过调整或通过重新设计。
- 候选算法必须使代码多样性。它不能使用Merkle-Damgard引擎产生消息散列。
这个SHA-3竞争看到51个候选算法进入第一轮评估。这当中14个晋级第二轮。第三轮候选算法只剩下5个。并从这5个中Keccak被宣布为获胜者。
介绍 Keccak
Keccak算法(读作为“ket-chak”)是Guido Bertoni, Joan Daemen, Michael Peters, and Giles Van Assche的工作。 SHA-3的候选人在2008年10月提交。
Keccak采用了创新的的“海绵引擎”散列消息文本。它是快速的,在英特尔酷睿2处理器下的平均速度为12.5周期每字节。它设计简单,方便硬件实现。
总体来说,Keccak 是 SHA-3 标准的一个不错的选择。它迅速,且位分布均匀,抗碰撞性好。但是,数字军备竞赛远未结束,也许数年之后,Keccak 亦会遭受狙击。当此发生之际,NIST 将寻求新的哈希标准。但那些,将是另一个时间讨论的话题。