【图解密码技术】学习日记

第七章 单向散列函数

Keccak
Keccak是一种被选定为SHA-3标准的单向散列函数算法
Keccak可以生成任意长度的散列值,在输入数据的长度上也没有限制。
海绵结构
【图解密码技术】学习日记
输入的数据在进行填充之后,要经过吸收阶段和挤出阶段,最终生成输出的散列值。

双工结构
【图解密码技术】学习日记
在海绵结构中,只有将输入的消息全部吸收完毕之后才能开始输出,但在双工结构中,输入和输出是以相同的速率进行的。在双向通信中,发送和接收同时进行的方式称为全双工。

Keccak的内部状态
Keccak的内部状态是一个三维的比特数组,图中的每个小方块代表1个比特,b个小方块按照5×5×z的方式组合起来,就成为一个沿z轴延伸的立方体。
【图解密码技术】学习日记
函数Keccak-f(b)
这个函数负责对内部状态进行搅拌。函数带有的参数b,即内部状态的比特长度。这里的参数b称为宽度。
在Keccak中,通过改变宽度b就可以改变内部状态的比特长度,但无论如何改变,slice的大小依然是5×5,改变的只是lane的长度而已。这种结构称为 套娃结构,这个名字取自俄罗斯套娃。
Keccak-f(b)中的每一轮包含五个步骤 :θ ρ π χ τ
总共循环 12+2t 轮
2t=b252^t=\frac{b}{25}
具体到SHA-3中所使用的Keccak-f(1600)函数,其循环轮数为24轮。

对Keccak的攻击
Keccak之前的单向散列函数都是通过循环执行压缩函数的方式来生成散列值的,这种方式称为MD结构(Merkle-Damgard construction)MD4 MD5 RIPEMD-160 SHA-1 SHA-2等几乎所有的传统单向散列函数算法都是基于MD结构的。
Keccak采用了和MD结构完全不同的海绵结构,目前为止还没有出现能够对实际应用中的Keccak算法构成威胁的攻击方法。

对单向散列函数的攻击
1.暴力**
任何文件中都或多或少具有一定冗余性。冗余性是指:在不改变文档意思的前提下能够对文件的内容进行修改的程度。
利用文件的冗余性生成具有相同散列值的另一个文件,这就是一种针对单向散列函数的攻击。
2.生日攻击/冲突攻击
不是寻找生成特定散列值的消息,而是要找到散列值相同的两条消息,而散列值可以是任意值,
这是一种试图**单向散列函数的“强抗碰撞性”的攻击。

弱抗碰撞性:找出和某条消息具备相同散列值的另一条消息
强抗碰撞性:找出具有相同散列值但互不相同的两条消息

单向散列函数无法解决的问题
单向散列函数能够辨别出“篡改”,但无法辨别出“伪装”。
仅靠检查完整性是不够的,还需要进行认证。
用于认证的技术包括消息验证码和数字签名。