2012年10月 《SHA-3花落Keccak》

SHA-3花落Keccak

——201210月安全天下事

 

江海客

 

2012103日,美国国家标准与技术研究院(NIST)宣布新一代hash算法SHA-3的漫长遴选已经产生结果,经过4年的时间,Keccak算法最终摘得正果。这毫无疑问是本月安全业界最重量级的消息。

从整体结构上看,Keccak算法主要依靠基于海绵结构(sponge construction)的海绵函数(sponge function),状态更新使用的是作用在三维数组上的五步迭代排列。学习和赏鉴Keccak的设计时,我不禁想起在201012月冲击最后一轮评选的五个算法产生之后,一名业内友人对我作出了如下预言:

SHA-3的结果将宣告M-DMerkle-Damgard)迭代结构甚至部分进化变形彻底的失败。 GrøstlJH的出局将是必然;Skien的设计巧妙,但书卷气太重,硬件性能也不算理想;而BLAKE进入本轮本身就有些意外。最终Keccak必然胜出。”

回看起来,在M-D迭代结构逐步被算法研究者吃透的情况下,多个通用性攻击方式先后重挫了MD4MD5SHA-1。尽管采用宽管道M-D等改进设计在对抗类似攻击时有了明显的提高,但从NIST本次对算法的要求来看,明显存在寻求M-D之外设计的倾向。

Keccak的设计团队也值得我们分析和关注。按照Keccak算法的官方排名,其署名次序为Guido BertoniJoan DaemenMichaël PeetersGilles Van Assche。其中,我们对Joan Daemen并不陌生,他正是AES中选算法Rijndael的两位作者之一。在这四位作者中,Guido Bertoni是意大利人,其他三位都是比利时人。在第三轮与Keccak竞争的其他四个算法中,BLAKEGrøstl也分别来自丹麦和瑞士。继AES之后,欧洲大陆再次证明了其在信息安全基础研究方面的实力。

Keccak也具有非常鲜明的“硬件化”色彩。四位作者中三位都来自意法半导体(STMicroelectronics),Michaël Peeters则来自恩智半导体(NXP Semiconductor)。这也可以理解,由于hash算法在电子认证领域有比较广泛的应用,因此SHA-3算法的在硬件实现方面的特性,包括复杂度、实现成本和效率等,都将成为非常重要的指标。不知道是否因为海绵结构在硬件实现上有特殊的优势,在51个备选算法中,另外一个采用了Sponge的算法Luffa,也是由硬件厂商日本日立(Hitachi)的研究者提交的。

值得我们思考的一个细节是,SHA-351个入围算法中,有多个借鉴了AES的思想和部分设计,其中也包括最终5个入围算法之一的Grøstl;反而是AES作者之一所在的Keccak团队相对另辟蹊径,突破了自我。这个情况令人感慨不已。

目前在Keccak算法的官方网站keccak.noekeon.org,可以下载到这个算法用CPython VDHL语言的实现代码。但需要提醒使用者的是,那些认为将MD5替换成Keccak来保存口令就会更安全的想法是愚蠢的,正如我们多次所说,hash算法的设计初衷并非用于保存口令,而是用于完整性验证。Keccak的彩虹表(rainbow table)一定正被高速地计算着。

在最开始的SHA-3的候选名单中,我们也高兴地看到有中国的研究者提交算法,并进入了第一轮51个入围的算法名单。尽管似乎这是两份比较传统的基于M-D迭代结构的改进算法,但对于保守的中国密码学界来说,有人参与这种互动尝试,不能说是一件坏事。我们曾赞叹过美国创造这种全世界智慧为美国打工模式的先见,而对中国,在注定是艰难和孤独的大国崛起之路,也必须要有构建自己的智慧创造模式的抱负与行动。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SHA-3(Secure Hash Algorithm 3)是一种密码散列函数,用于生成输入数据的唯一固定长度哈希值。SHA-3的Verilog代码可以用来实现SHA-3算法,在FPGA(可编程逻辑芯片)上进行加速计算。 下面是一个简化的SHA-3算法的Verilog代码示例: ```verilog module sha3 ( input wire [511:0] data, output reg [255:0] hash ); // 定义内部变量 reg [1743:0] state [4][5]; reg [23:0] rc; // 初始化 initial begin // 初始化状态变量 state = 0; // 初始化初始轮常数 rc = 1; end // 进行SHA-3哈希计算 always @(posedge clk) begin // 循环遍历各轮 for (genvar r = 0; r < 24; r++) begin // Theta阶段 // ... // Rho与Pi阶段 // ... // Chi阶段 // ... // Iota阶段 // ... end // 从状态变量中提取哈希值 hash = state[0][0][255:0]; end endmodule ``` 这只是一个SHA-3算法的简化版本,并没有包含完整的代码。SHA-3算法具体的实现和细节较复杂,需要更多的代码和相关函数库来完整实现。 此示例代码中,SHA-3模块接受一个512位的输入数据`data`,并生成一个256位的哈希值`hash`。该模块使用了状态变量`state`来存储中间计算结果。在时钟的上升沿触发时,通过循环遍历各个阶段进行SHA-3哈希计算,并在最后输出256位的哈希值。 需要说明的是,真正的SHA-3算法比这个示例复杂得多,包含了更多阶段、更多内部变量和逻辑。此示例仅提供一个简单框架,供参考和理解SHA-3算法的基本结构和操作。实际应用中,还需要考虑诸多细节,如输入填充、并行计算、消息调度等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值