SHA-1加密算法在加密学中扮演着极其重要的角色,可以用于实现数据保密、防止数据更改和身份验证等功能。另外,SHA-1加密算法是当今众多流行加密思想核心,几乎无处不在。它在许多安全协议中广为使用。那么,我们今天就给大家来介绍一下SHA-1加密算法。

SHA-1加密算法的原理

一、 函数与常量定义

1、 SHA-1加密算法的迭代函数

SHA-1加密算法使用80个连续的逻辑函数f0,f1,... ,f79。每个函数Ft(0≤t≤79)都操作三个32位字(B,C,D),产生一个32位字作为输出。函数Ft(B,C,D)定义如下:

(1)、 SHA-1加密算法常量

SHA-1加密算法一共需要80个32位的常量(K0,K1,...K79),以16进制给出,它们如下所示:

(1)Kt=0x5A827999 _(0≤t≤19)

(2)Kt=0x6ED9EBA1 _(20≤t≤39)

(3)Kt=0x8F1BBCDC _(40≤t≤59)

(4)Kt=0xCA62C1D6 _(60≤t≤79)

2、预处理

在进行散列值计算之前,先要对需要加密的数据进行预处理。这一预处理由三部分组成:消息填充、分割已填充消息(将填充后的消息等分成m位处理块)、为散列值计算设置初始化值。

(1)消息填充

假设原始消息(M)的长度是L位。首先,在消息最后加一位“1”,接着在这位“1”后面补k个“0”,使得L+1+k(即补位后的消息长度)满足对512取模后余数是448。然后,添加最后的64位二进制数据,这64位二进制数据就是原始L位消息(M)长度的二进制表示。例如,在8位ASCII码系统中,消息“abc”长度为8×3=24,加上一位“1”,还要添加448-(24+1)=423位“0”,最后加上64位原始消息长度二进制表示后,就得到512位的填充消息:

(2)分割已填充消息

经过消息填充后,还必须将数据划分成m位一组的N块的数据块来提供给下面的散列值计算过程。对于SHA-1加密算法,填充过的消息被分割成N(M(1),M(2),...,M(N))块,每块512位。然后每组512位的输入块可以表示成16个32位的字,分别记为:M0(i),M1(i),...,M15(i)。

(3)设置初始散列值(H(0))

在安全散列算法开始其核心的散列迭代计算之前,还必须设置好正确的初始散列值H(0)。而H(0)的数量和字长取决于消息摘要的选择。对于SHA-1加密算法,初始散列值由下面5个32位的字组成,其16进制表示如下:H0(0)=0x67452301,H1(0)=0xEFCDAB89,H2(0)=0x98BADCFE,H3(0)=0x10325476,H4(0)=0xC3D2E1F0。

3、散列值计算

在对原始数据消息进行了填充、分割后,就可以开始SHA-1加密算法的核心部分:散列值计算。

计算需要两个缓冲区,每个都由5个32位的字组成,还需要一个80个32位字的缓冲区。第一个5个字的缓冲区被标识为A,B,C,D,E。第二个5个字的缓冲区被标识为H0,H1,H2,H3,H4。80个字的缓冲区被标识为W0,W1,... ,W79。另外,还需要一个一个字的TEMP缓冲区。为了产生消息摘要,定义的16个字的数据块M1,M2,... ,Mn会依次进行处理,处理每个数据块包含80个步骤,在处理每个数据块之前,缓冲区H0,H1,H2,H3,H4被设置初始值。为了处理Mi,需要进行如下步骤:

(1)将Mi分成16个字W0,W1,... ,W15(W0是最左边的字)。

(2)对于 t = 16 到 79 令 Wt = S1(Wt-3 XOR Wt-8 XOR Wt- 14 XOR Wt-16)。

(3)令 A = H0, B = H1, C = H2, D = H3, E = H4。

(4) 对于 t = 0 到 79,执行下面的循环

TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt;

E = D; D = C; C = S30(B); B = A; A = TEMP;

(5)令 H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E。

在处理完所有的 Mn, 后,消息摘要是一个160位的字符串,以下面的顺序标识

H0 H1 H2 H3 H4。

SHA-1加密算法实现与安全性

一、SHA-1加密算法实现

基于上述SHA-1加密算法原理的分析,SHA-1加密算法实现流程如图所示:

SHA-1加密算法是一种易于实现并可以基于多种平台的方便易行的安全算法,目前很多计算机语言,像C、Java、C++和PHP依照SHA-1加密算法的标准都能实现SHA-1。当然,受语言平台应用性的制约,应用最广泛的是C语言和Java语言。自身计算机上的消息认证一般采用C语言实现就足够,不仅能够保证良好的可移植性,而且实现起来也比较简单、容易理解。考虑到网络上的数字签名,乃至电子商务等,一般采用Java实现代码较简单迅速,其可移植性和安全性也能得到更好的保证。

事实上,这里还存在一个潜在的问题,SHA-1加密算法加密信息摘要的计算速度并不总是能满足要求。使得SHA-1加密算法的硬件实现也有很多途径,如利用现场可编程门阵列不仅可以实现这种算法,并且某种程度上也能提高运算速度。特别是随着数字通信领域的飞速发展,在急剧增长的无线移动设备领域,对加密系统的性能要求越来越严格。使得SHA-1加密算法软硬件优化方案的实现成为专家关注的热点。

二、SHA-1加密算法安全性

SHA-1加密算法是由MD5算法演变而来的,它们之间最大的区别在于前者产生的摘要长度比后者长32bit。SHA-1对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度为2160数量级的操作,较MD5的2128数量级操作要难。因此, SHA-1加密算法对抵抗强行攻击的强度很高。同时,因为SHA-1加密算法的循环步骤有80次,比MD5算法的64次要多,所以其运行速度也较慢。从目前密码学研究的最新进展来看,SHA-1加密算法虽然被发现存在缺陷,碰撞,但在近几年内,SHA-1加密算法仍然被大量使用。

随着互联网与通信技术的飞速发展,大量重要的数据信息存储在网络服务器中,给人们带来方便的同时也造成了巨大的信息安全隐患。在保证信息系统安全性的各种技术中,数据信息加密算法扮演了一个重要角色。虽然SHA-1加密技术由于其SHA-1。当然,受语言平台应用性的制约,应用最广泛的是C语言和Java语言。自身计算机上的消息认证一般采用C语言实现就足够,不仅能够保证良好的可移植性,而且实现起来也比较简单、容易理解。考虑到网络上的数字签名,乃至电子商务等,一般采用Java实现代码较简单迅速,其可移植性和安全性也能得到更好的保证。

事实上,这里还存在一个潜在的问题,SHA-1加密算法加密信息摘要的计算速度并不总是能满足要求。使得SHA-1加密算法的硬件实现也有很多途径,如利用现场可编程门阵列不仅可以实现这种算法,并且某种程度上也能提高运算速度。特别是随着数字通信领域的飞速发展,在急剧增长的无线移动设备领域,对加密系统的性能要求越来越严格。使得SHA-1加密算法软硬件优化方案的实现成为专家关注的热点。

二、SHA-1加密算法安全性

SHA-1加密算法是由MD5算法演变而来的,它们之间最大的区别在于前者产生的摘要长度比后者长32bit。SHA-1对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度为2160数量级的操作,较MD5的2128数量级操作要难。因此, SHA-1加密算法对抵抗强行攻击的强度很高。同时,因为SHA-1加密算法的循环步骤有80次,比MD5算法的64次要多,所以其运行速度也较慢。从目前密码学研究的最新进展来看,SHA-1加密算法虽然被发现存在缺陷,碰撞,但在近几年内,SHA-1加密算法仍然被大量使用。

随着互联网与通信技术的飞速发展,大量重要的数据信息存储在网络服务器中,给人们带来方便的同时也造成了巨大的信息安全隐患。在保证信息系统安全性的各种技术中,数据信息加密算法扮演了自身安全等级高,被广泛应用在社会的各行各业。但随着加密技术的不断更新和发展,SHA-1加密算法将来可能会完全被其他更安全的算法取代。

小知识之迭代函数:

在数学中,迭代函数是在碎形和动力系统中深入研究的对象。迭代函数是重复的与自身复合的函数,这个过程叫做迭代。