SHA-2 安全散列算法2 算法详解

SHA-2

又称安全散列算法2(Secure Hash Algorithm 2),是一种密码散列函数算法标准,其输出长度可取224位、256位、384位、512位,分别对应SHA-224、SHA-256、SHA-384、SHA-512。它含包含另外两个算法:SHA-512/224、SHA-512/256。

下面我们主要讨论SHA-256算法


具体步骤:

SHA-256算法的输入是最大长度小于2^64位的消息,输出是256位的消息摘要,输入消息以512位的分组为单位进行处理。


1.消息充填

添加一个“1”或者N个“0”使其长度模512与448同余。在消息后附加64位的长度块,其值为充填前消息的长度。从而产生长度为512整数倍的消息分组,充填后消息的长度最多为2^64位。


2.初始化链接变量

链接变量的中间结果和最终结果存储于256位的缓冲区中,缓冲区用8个32位的寄存器可用A-H,h0-h7表示,输出仍然放在缓冲区以代替旧的8个寄存器。首先要对链接变量进行初始化:

h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19
初始变量是取自前8个素数(2、3、5、7、11、13、17、19)的平方根的小数部分其二进制表示的前32位。


3.处理主循环模块

消息块是以512位分组为单位进行处理的,需要进行64步循环操作。每一轮的输入均为当前处理的消息分组和上一轮输出的256位缓冲区A-H的值。每一步中均采用了不同的消息字和常数。
SHA-2 安全散列算法2 算法详解_第1张图片


4.得出最终的Hash值

所有512位的消息块分组都处理完以后,最后一个分组处理后得到的结果即为最终输出的256位的消息摘要。

步函数:

每一步都会生成两个临时的变量,T1、T2:


根据T1、T2的值,对寄存器A、E进行更新。ABCEFG的输入值则一次赋值给BCDFGH。

SHA-2 安全散列算法2 算法详解_第2张图片

A = ( T1 + T2 ) mod 2^32
B = A
C = B
D = C
E = ( D +T1) mod 2^32
F = E
G = F
H = G 
SHA-2 安全散列算法2 算法详解_第3张图片
且ROTR^n(x)表示对32位的变量x循环右移n位。


Kt的获取方法是取钱64个素数立方根的小数部分二进制的前64位。其作用是提供了64位随机串集合以消除输入数据里的任何规则性。

对于每个输入分组导出的消息分组Wt,前16个消息字Wt(0<= t <=15)直接按照消息输入分组对应的16个32位字,其他的则按照如下公式来计算得出:


其中:




SHR^n(x)表示对32位的变量x右移n位,其导出方法为:

SHA-2 安全散列算法2 算法详解_第4张图片


你可能感兴趣的:(密码学,区块链)