首页>安全资讯>SHA1算法原理过程详解

SHA1算法原理过程详解

SHA1是一种密码散列函数,由美国国家安全局设计,主要适用于数字签名标准里面定义的数字签名算法。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。今天我们将讨论的是SHA1算法原理和流程。

SHA1哈希算法流程

对于任意长度的明文,SHA1首先对其进行分组,使得每一组的长度为512位,然后对这些明文分组反复重复处理。对于每个明文分组的摘要生成过程如下:

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

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

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

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

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

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

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

SHA1算法的分组过程

对于任意长度的明文,SHA1的明文分组过程与MD5相类似,首先需要对明文添加位数,使明文总长度为448(mod512)位。在明文后添加位的方法是第一个添加位是l,其余都是0。然后将真正明文的长度(没有添加位以前的明文长度)以64位表示,附加于前面已添加过位的明文后,此时的明文长度正好是512位的倍数。与MD5不同的是SHA1的原始报文长度不能超过2的64次方,另外SHA1的明文长度从低位开始填充。

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

对于512位的明文分组,SHA1将其再分成16份子明文分组(sub-block),每份子明文分组为32位,我们使用M[k](k= 0, 1,……15)来表示这16份子明文分组。之后还要将这16份子明文分组扩充到80份子明文分组,我们记为W[k](k= 0, 1,……79),扩充的方法如下。

	  W t = M t , 当0≤t≤15
	  W t = ( W t-3 ⊕ W t-8⊕ W t-14⊕ W t-16 ) <<< 1, 当16≤t≤79

SHA1有4轮运算,每一轮包括20个步骤(一共80步),最后产生160位摘要,这160位摘要存放在5个32位的链接变量中,分别标记为A、B、C、D、E。这5个链接变量的初始值以16进制位表示如下。

A=0x67452301

B=0xEFCDAB89

C=0x98BADCFE

D=0x10325476

E=0xC3D2E1F0

四.SHA1的4轮运算

SHA1有4轮运算,每一轮包括20个步骤,一共80步,当第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

其中 ft(B,C,D)为逻辑函数,Wt为子明文分组W[t],Kt为固定常数。这个操作程序的意义为:

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

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

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

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

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

我们同样举一个例子来说明SHA1哈希算法中的每一步是怎样进行的,比起MD5算法,SHA1相对简单,假设W[1]=0x12345678,此时链接变量的值分别为A=0x67452301、B=0xEFCDAB89、C=0x98BADCFE、D=0x10325476、E=0xC3D2E1F0,那么第1轮第1步的运算过程如下。

(1) 将链接变量A循环左移5位,得到的结果为:0xE8A4602C。

(2) 将B,C,D经过相应的逻辑函数:

(B&C)|(~B&D)=(0xEFCDAB89&0x98BADCFE)|(~0xEFCDAB89&0x10325476)=0x98BADCFE

(3) 将第(1)步,第(2)步的结果与E,W[1],和K[1]相加得:

0xE8A4602C+0x98BADCFE+0xC3D2E1F0+0x12345678+0x5A827999=0xB1E8EF2B

(4) 将B循环左移30位得:(B<<<30)=0x7BF36AE2。

(5) 将第3步结果赋值给A,A(这里是指A的原始值)赋值给B,步骤4的结果赋值给C,C的原始值赋值给D,D的原始值赋值给E。

(6) 最后得到第1轮第1步的结果:

A = 0xB1E8EF2B

B = 0x67452301

C = 0x7BF36AE2

D = 0x98BADCFE

E = 0x10325476

按照这种方法,将80个步骤进行完毕。

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

以上,是为大家分享"SHA1算法原理过程详解”的全部内容,如果用户遇到的问题不能解决,可通过wosign官网客服寻求帮助,凡是选择wosign ssl证书的网站用户,wosign可提供免费一对一的ssl证书技术部署支持,免除后顾之忧.

相关资讯

SHASHA-1,SHA-2哈希算法之间的差异

今天要为大家介绍的是哈希算法,在介绍SHA之前,只有了解什么是SHA,我们才清楚SSL证书如何使用哈希来形成数字签名。那么什么是哈希呢? HASH算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。

什么是SHA-1、SHA-2、SHA-256、SHA-384

如果你听说过很多种形式的“SHA”,但不完全确定它的含义或者为什么它很重要,那么请继续读下去。我们首先要解释什么是散列,然后是SSL证书如何使用散列来形成数字签名,这是了解SHA-1和SHA-2的重要背景。让我们开始吧!

最新资讯

代码签名证书原理和作用

HTTP和HTTPS连接是如何建立的?

rsa算法产生的过程与原理详解

iphone手机如何安装ssl证书?

网站做https证书认证刻不容缓(揭秘流量劫持黑幕)

标签推荐:https免费证书 | 域名ssl证书 | https证书申请| 数字证书过期| PDF数字证书| ssl证书更新| 小程序证书| 驱动数字签名| 微软代码签名| android数字签名| java代码签名| ssl证书部署| 时间戳技术| 电子签名技术