导语:本讲堂用通俗易懂的系列内容为咱们呈现区块链与暗码学范畴相关常识。这里有常识也有故事,从感兴趣到有乐趣,全民讲堂等你来学。
这个系列中的课程内容首要从比特币着手进行入门介绍,再延伸至区块链的相关技能原理与发展趋势,然后深入浅出地顺次介绍在区块链中运用的各类暗码学技能。欢迎咱们订阅本大众号,持续进行学习。
【本讲堂内容全部选编自PlatON首席暗码学家、武汉大学国家网络安全学院教授、博士生导师何德彪教授的《区块链与暗码学》授课讲义、教材及互联网,版权归属其原作者一切,如有侵权请当即与咱们联络,咱们将及时处理。】
5.4.1
Keccak算法简介
美国国家规范与技能研究院(National Institute of Standards and Technology,NIST)于2007年公开征集SHA-3,要求:
能够直接替代SHA-2,这要求SHA--3有必要也能够发生224,256,384,512比特的哈希值。
坚持SHA-2的在线处理能力,这要求SHA-33有必要能处理小的数据块(如512或1024比特)。
安全性:能够抵抗原像和碰撞进犯的能力,能够抵抗已有的或潜在的关于SHA-2的进犯。
效率:可在各种硬件平台上的完成,且是高效的和存储节约的。
灵活性:可设置可选参数以提供安全性与效率折中的选择,便于并行计算等。
2008年10月,有64个算法正式向NIST提交了计划,经过初步点评,共有51个算法进入第一轮评价,首要对算法的安全性、耗费、和完成特点等进行剖析。
2009年7月24日宣告,其间14个算法经过第一轮评定进入第二轮;2010年12月9日宣告,其间5个算法(JH、Grstl、Blake、Keccak和Skein)经过第二轮评定进入第三轮。
2012年10月2日NIST公布了最终的优胜者,它便是由意法半导体公司的Guido Bertoai Bertoai、Jean Daemen Daemen、Gilles Van Assche Assche与恩智半导体公司的Micha Michaëël Peeters 联合规划的Keccak算法。
SHA-3成为NIST的新哈希函数规范算法(FIPS PUB 180--5),Keccak算法的剖析与完成详见:
https://keccak.team/index.html
SHA-3的结构仍属于Merkle提出的迭代型哈希函数结。最大的立异点是选用了一种被称为海绵结构的新的迭代结构.。海绵结构又称为海绵函数。
在海绵函数中,输入数据被分为固定长度的数据分组。每个分组逐次作为迭代的输入,同时上轮迭代的输出也反馈至下轮的迭代中,最终发生输出哈希值。
海绵函数允许输入长度和输出长度都可变,具有灵活的性,能够用于规划哈希函数(固定输出长度)、伪随机数发生器,以及其他暗码函数。
5.4.2
Keccak算法描绘
其输入数据没有长度约束,输出哈希值的比特长度分为:224,256,384,512。
符号与函数
Keccak算法运用以下符号与函数:
符号
r:比特率(比特 rate),其值为每个输入块的长度
c:容量(capacity),其长度为输出长度的两倍
b:向量的长度,b=r+c,而b的值依赖于指数I,即b=25×2I
Keccak算法的参数界说
函数
Keccak算法用到了以下5个函数:θ(theta)、ρ(rho)、π(pi)、χ(chi)、ι(iota)
算法描绘
Keccak算法对数据进行填充,然后迭代紧缩生成哈希值。
填充
对数据填充的意图是使填充后的数据长度为r的整数倍.因为迭代紧缩是对r位数据块进行的,假如数据的长度不是r的整数倍,最终一块数据将是短块,这将无法处理。
设消息m长度为l比特。首要将比特“1”增加到m的结尾,再增加k个“0”,其间,k是满意下式的最小非负整数:l+1+k=r-1modr;
然后再增加比特“1”增加到结尾.填充后的消息m的比特长度一定为r的倍数。
以算法Keccak-256,信息“abc”为例显示补位的过程. a, b, c对应的ASCII码分别是97, 98, 99;所以原始信息的二进制编码为:01100001 01100010 01100011。此时r = 1088。
① 补一个“1” :0110000101100010 01100011 1
② 补1062个“0”:
01100001 01100010 0110001110000000 00000000 … 00000000
③ 补一个“1” ,得到1088比特的数据:
全体描绘
Keccak算法选用海绵结构(Sponge Construction),在预处理(padding并分红巨细相同的块)后,海绵结构首要分红两部分:
吸入阶段(Absorbing Phase):将块xi传入算法并处理。
挤出阶段(Squeezing Phase):发生一个固定长度的输出。
Keccak算法的全体结构如下图:
Keccak算法的全体运算示意图
吸入与挤出阶段
给定输入串x,首要对x做padding,使其长度能被r整除,将padding后分割成长度为r的块,即x=x0|| x1|| x2||...|| xt-1 。然后履行以下吸入阶段和挤出阶段:
1. 初始化一个长度为r+c比特的全零向量。
2. 输入块xi,将xi和向量的前r个比特做异或运算,然后输入到f函数中处理。
3. 重复上一步,直至处理完x中的每个块。
4. 输出长为r的块作为y0,并将向量输入到f函数中处理,输出y1,以此类推,得到的哈希序列即为y= y0||y1||y2||...||yu。在Keccak-224/256/384/512中,只需要在y0中取出前224/ 256/ 384/ 512位即可。
Keccak算法的吸入阶段和挤出阶段示意图
紧缩函数
紧缩函数f是Keccak算法的核心,它包括nr轮。
nr的取值与咱们之前计算b时用到的指数I (b=25×2I)有关,详细地,nr=12+2*I.Keccak-224/256/384/512中,取I=6,因而nr=24。
在每一轮中,要以此履行五步,即θ(theta)、ρ(rho)、π(pi)、χ(chi)、ι(iota)。
在处理过程中,咱们把b=1600个比特排列成一个5*5*w的三维数组,其间w=2I=64比特,如右图所示:
Keccak算法的三维数组示意图
Keccak算法的紧缩函数结构示意图
安全性与功能
安全性
能够抵挡对哈希函数的一切现有进犯。
到目前为止,没有发现它有严峻的安全弱点。
灵活性
可选参数装备,能够适应哈希函数的各种运用。
高效性
规划简略,软硬件完成方便.在效率方面,它是高效的。
没有广泛运用,需要经过实践检验。
常用的Keccak算法就讲到这里啦,下节课咱们将学习常用哈希函数SM3算法,敬请期待!
同学们能够重视PlatON大众号,观看更多图学院系列课程。咱们下节课见啦。
视野开拓
人类的进步几乎都是合作的结果。-《博弈与社会》