It's our wits that make us men.

2019/5/19 《图解密码技术》第七章

Posted on By LuLu

《图解密码技术》

  • 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理由:

img

Keccak

什么是Keccak

  • Keccak可以生成任意长度的散列值,在输入数据方面,没有限制。

海绵结构

在Keccak的海绵结构中,输入的数据进行填充后,经过吸收阶段和挤出阶段,最终生成输出的散列值。

img

  • f的作用是将输入的数据进行复杂的搅拌操作并输出结果,f的输入长度是r+c
  • r被称为比特率,bit rate
  • c称为容量,capacity
  • 挤出阶段中,将输出值中的r个比特保存为输出分组1,整个输出值r+c再次输入到函数f中
  • 容量c的意义是防止将输入消息中的一些特征泄露出去,c会间接影响f的输出的内容

双工结构

img

  • 在海绵结构中,只有将输入的消息全部吸收完毕后才开始输出,

    但是双工结构中,输入和输出是以相同的速率进行的

    • 在双向通信中,发送和接受同时进行的方式成为全双工
  • 通过双工结构,Keccak不仅可以用于计算散列值,还可以用于伪随机数生成器,流密码,认证加密、消息认证码等

Keccak的内部状态

img

  • Keccak本质就是实现一个能够将上述结构的state进行有效搅拌的函数f,与分组密码中的搅拌过程非常相似
  • 由于内部状态可以代表整个处理过程中的全部中间状态,因此有利于节省内存
  • Keccak用到了很多比特单位的运算,因此可被认为可以有效抵御针对字节单位的攻击

对Keccak的攻击

在Keccaak之前的单向散列函数都是通过MD结构来生成散列值的

  • MD结构:通过循环执行压缩函数