17、SHA-1算法

 SHA-1算法

SHA算法采用迭代行Hash函数的一般结构,输入消息的最大长度不超过2^64bit,输入消息分组为512bit,输出160位的报文摘要。

对于任意长度的明文,SHA-1首先对其进行分组,使得每一组的长度为512位,然后对这些明文分组反复重复处理。

SHA -1算法流程

对于每个明文分组的摘要生成过程如下:

1)将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。

2)申请5个32位的链接变量,记为A、B、C、D、E。

3)16份子明文分组扩展为80份。

4)80份子明文分组进行4轮运算。

5)链接变量与初始链接变量进行求和运算。

6)链接变量作为下一个明文分组的输入重复进行以上操作。

7)最后,5个链接变量里面的数据就是SHA1摘要。

1、消息填充 

消息必须进行填充,填充的目的是使报文长度在对512取模以后的余数是448(即长度≡448 mod 512)。填充位数在1到512位之间。即使长度已经满足对512取模后余数是448,填充也必须要进行。填充的方法是填充一个“1”和若干个“0”使其长度模512和448同余。最后附加64比特的无符号整数(最高有效位在前),其值标识原始报文消息的长度。

2、初始化缓冲区

SHA-1算法使用160位的缓冲区保存存储中间结果和最终的消息摘要,缓冲区由5个32位的寄存器A,B,C,D,E组成,字的最高位存于低地址字节位置(十六进制),处置如下:A = 0x67452301, B = 0xEFCDAB89, C = 0x98BADCFE, D = 0x10325476, E = 0xC3D2E1F0。

3、执行算法主循环 

消息分组:

经过添加位数处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组(block),可以划分成L份明文分组,我们用M0,M1,…, ML-1表示这些明文分组。对于每一个明文分组,都要重复反复的处理,这些与MD5是相同的。

4轮运算:

SHA-1有4轮运算,也就是经过4轮函数(f1,f2,f3,f4)处理,每一轮函数由20步迭代组成,一共80步,每轮的输入为当前消息块Mt和缓冲区当前值A,B,C,D,E,输出仍放在缓冲区,第四轮输出于第一轮输入进行异或运算,得到压缩函数的输出。

当第1轮运算中的第1步骤开始处理时,A,B,C,D,E五个链接变量中的值先赋值到另外5个记录单元A′,B′,C′,D′,E′中。这5个值将保留,用于在第4轮的最后一个步骤完成之后与链接变量A,B,C,D,E进行求和操作。

SHA1的4轮运算,共80个步骤使用同一个操作程序,描述如下:

A,B,C,D,E←[(A<<<5)+ ft(B,C,D)+E+Wt+Kt],A,(B<<<30),C,D

其中A,B,C,D,E为缓冲区的5个字;

t为迭代的步数(0≤t≤79);

ft(B,C,D)为第t步使用的基本逻辑函数;

<<<s为循环左移s位;

Wt是当前512位消息块中扩充后的一个32位字;

Kt为加法常量;

+为模2^32加法;

这个操作程序的意义为:

将[(A<<<5)+ ft(B,C,D)+E+Wt+Kt]的结果赋值给链接变量A;

将链接变量A初始值赋值给链接变量B;

将链接变量B初始值循环左移30位赋值给链接变量C;

将链接变量C初始值赋值给链接变量D;

将链接变量D初始值赋值给链接变量E。

非线性函数f函数:

ft(B,C,D)为逻辑函数,函数计算规则如下:

W值的获取:

Wt为子明文分组,首先将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。我们使用Mk(k= 0,1,…,15)来表示这16个子明文分组。之后还要将这16个子明文分组扩充到80个子明文分组Wt(t= 0, 1,……79),扩充的方法如下:

K值的获取:

Kt为固定常数,其取值为:

4、输出哈希值

第四轮最后一个步骤的A,B,C,D,E输出,将分别与记录单元A′,B′,C′,D′,E′中的数值求和运算。其结果将作为输入成为下一个512位明文分组的链接变量A,B,C,D,E,当最后一个明文分组ML-1计算完成后,A,B,C,D,E中的数据级联就是最后散列函数值。

SHA-1算法应用

目前SHA算法的应用较为广泛,主要应用于CA和数字证书中,另外在目前互联网中流行的BT软件中,也是使用SHA-1来进行文件校验的。同时,SHA算法还可以应用在消息鉴别,数字签名等方面。

SHA-1算法应用越来越少。

注:

如有错误、侵权,请联系笔者更改删除!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三九笔墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值