SHA 消息摘要算法原理详解

  SHA算法家族包括SHA-1、SHA-224、SHA-256、SHA-384、SHA-512几种算法,接下来就以最具代表性的SHA-1算法的具体计算过程。

  SHA-1是一种能够根据上限为264比特的信息计算出160比特的单向散列函数。

  算法分析:

  1)填充

  SHA-1算法的输入信息长度在0到264比特之间,为了后续处理,会在信息的末尾添加多余的数据,使其长度为512比特的整数倍。512比特是SHA-1算法的输入分组长度。

  填充过程:

  · 在消息末尾添加一个1比特的数值“1”,此时,信息的长度增加1比特。

  · 在消息末尾继续追加0,直到消息的长度达到512比特的整数倍,最后一个分组需要保留最后64比特,以便存储原始输入信息的长度。

  · 在最后一个分组的最后64位需要保存原始输入信息的长度,因此输入信息的最大长度是264比特。

  2)计算W0 ~ W79

  填充完成之后,对每个输入分组计算80个32比特的值(W0 ~ W79),这80个值用于“单步处理”阶段使用。

  计算过程:

  · 针对512比特的输入分组进行切分,切分为16个32比特的分组,命名为W0 ~ W15,然后,计算剩余的W16 ~ W79

  · 公式:Wt = (Wt - 16⊕Wt - 14⊕Wt - 8⊕Wt - 3)循环左移1比特。循环左移的意思是,将比特序列逐一向左平移,最高位的比特移动到最低位。
在这里插入图片描述
  ⊕表示异或操作,安装上面的计算逻辑计算出W0 ~ W79,计算数量较大,但计算逻辑较简单。

  3)分组处理

  接下来,需要对输入分组进行80个步骤处理,目的是根据输入分组的信息来改变内部状态(160比特),对所有的输入分组都要执行这一操作。
在这里插入图片描述
  160比特的内部状态是通过名为A、B、C、D、E的5个32比特的缓冲区来表示。如图所示,这一步是将5个缓冲区的值与输入分组的信息进行混合,然后再执行80个步骤的处理。这80个步骤所完成的操作,就是将输入分组的512比特的数据,与SHA-1所保持的160比特的内部状态进行混合。通过上述80个步骤的反复执行,SHA-1就能够将已经过填充的消息全部混入这160比特的内部状态中,而SHA-1所输出的散列值,就是所有处理结束之后最终的内部状态(160比特)。

  4)单步处理

  “3)分组处理”中提到的80个步骤,其中每个步骤详细流程如下图:
在这里插入图片描述
  这些处理非常复杂,目的是为了根据W0 ~ W79的信息是内部状态(即A、B、C、D、E的值)产生变化。

  在一个步骤完成后,缓冲区A、B、C、D的内容会被分别复制到B、C、D、E中(其中B要循环左移30比特之后再复制),而缓冲区E的内容则会与其它缓冲区的内容自己Wt、Kt相加之后再被复制到缓冲区A中。

  由于上述处理要循环80个步骤,因此分组中1个比特发生变化,都会影响到散列值中几乎所有的比特,通过这样的方式,就能够实现单向散列函数所具备的性质。

  注:本文参照《图解密码技术》一书。

猜你喜欢

转载自blog.csdn.net/securitit/article/details/106949818