《图解密码技术》
- SHA-3:secure hash algorithm-3,
- 海绵结构:sponge construction,吸收阶段:absorbing phase,挤出阶段:squeezing phase,
- 全双工:full duplex
单向散列函数的具体例子
MD4和MD5
MD是message digest消息摘要的缩写
MD4能产生128比特的散列值,但现在已经不安全
MD5能产生128比特的散列值,强抗碰撞性已经被攻破,也已经不安全
SHA-1、SHA-2(SHA-256、SHA-384、SHA-512)
- SHA-1:除了用于保持兼容性的目的以外,其他情况不推荐使用,强抗碰撞性(具有相同散列值的两条不同的消息)已经被攻破
- SHA2的消息长度存在上限
RIPEMD-160
- 能产生160比特的散列值
- 除了用于保持兼容性的目的以外,其他情况不推荐使用,强抗碰撞性(具有相同散列值的两条不同的消息)已经被攻破
- 比特币使用的就是RIPEMD-160
SHA-3的选拔过程
和AES一样,通过竞争来实现标准化的过程。
最终将Keccak算法确定为SHA-3标准,我们能够自由免费的使用SHA-3算法,与AES完全相同
Keccak算法被选为SHA-3理由:
Keccak
什么是Keccak
- Keccak可以生成任意长度的散列值,在输入数据方面,没有限制。
海绵结构
在Keccak的海绵结构中,输入的数据进行填充后,经过吸收阶段和挤出阶段,最终生成输出的散列值。
- f的作用是将输入的数据进行复杂的搅拌操作并输出结果,f的输入长度是r+c
- r被称为比特率,bit rate
- c称为容量,capacity
- 挤出阶段中,将输出值中的r个比特保存为输出分组1,整个输出值r+c再次输入到函数f中
- 容量c的意义是防止将输入消息中的一些特征泄露出去,c会间接影响f的输出的内容
双工结构
-
在海绵结构中,只有将输入的消息全部吸收完毕后才开始输出,
但是双工结构中,输入和输出是以相同的速率进行的
- 在双向通信中,发送和接受同时进行的方式成为全双工
-
通过双工结构,Keccak不仅可以用于计算散列值,还可以用于伪随机数生成器,流密码,认证加密、消息认证码等
Keccak的内部状态
- Keccak本质就是实现一个能够将上述结构的state进行有效搅拌的函数f,与分组密码中的搅拌过程非常相似
- 由于内部状态可以代表整个处理过程中的全部中间状态,因此有利于节省内存
- Keccak用到了很多比特单位的运算,因此可被认为可以有效抵御针对字节单位的攻击
对Keccak的攻击
在Keccaak之前的单向散列函数都是通过MD结构来生成散列值的
- MD结构:通过循环执行压缩函数