安全散列算法

1.简介

美国国家标准与技术学会和NSA开发了安全散列算法(Secure Hash Algorithm,SHA)。SHA可以处理长度在 2 64 2^{64} 264以内的任何输入消息。SHA的输出是消息摘要,长度为160位(比MD5的消息摘要多32位)。SHA中的安全利用了两个特性,在计算上保证下列情况的不可行:
(1)根据消息摘要取得初始消息;
(2)寻找两个消息,产生相同消息摘要。

2.SHA工作原理

2.1 填充
和MD5一样,SHA的第一步是在初始消息末尾进行填充,使消息长度为512的倍数少64位。和MD5一样,填充总是增加,即使消息长度已经是比512的倍数少64。
2.2 添加长度
计算不包括填充的消息长度,用64位块加到填充后面。
2.3 将输入分为512位块
将输入分为512位块,这些块称为消息摘要处理逻辑的输入。
2.4 初始化链接变量
初始化5个链接变量A~ E,记住,MD5中为4个32位的链接变量,总长度为128位,中间结果和最终结果存放在这些链接变量构成的组合寄存器abcd中。SHA要产生的消息摘要为160位,因此要有5个链接变量,总长度为160位。SHA中变量A到D的值与MD5中相同,E初始化的C3 D2 E1 F0(十六进制)。
2.5 处理块
第一步:将链接变量A~ E复制到变量a~ e中,a~ e组合成寄存器abcde,存储中间结果和最终结果。
第二步:将当前512位块分解为16个子块,每个子块为32位。
第三步:SHA共4轮,每一轮20步。每一轮的3个输入为当前512位块、寄存器abcde和常量K[],其中t为0~ 79。然后用SHA算法步骤更新寄存器abcde内容。另外,MD5中的t定义64个常量,而这里的K[]之定义4个常量,每一轮用一个。K[]的值如下表所示:

轮次t值范围K[t]的十六进制值K[t]的十进制值(只显示整数部分)
11~195A 92 79 99 2 30 × 2 2^{30}\times \sqrt2 230×2
220~396E D9 EB A1 2 30 × 3 2^{30}\times \sqrt3 230×3
340~599F 1B BC DC 2 30 × 5 2^{30}\times \sqrt5 230×5
460~79CA 62 C1 D6 2 30 × 10 2^{30}\times \sqrt{10} 230×10

第四步:SHA共4轮,每轮20次迭代,共80次。一次SHA迭代的逻辑操作如下图所示:
在这里插入图片描述
一次SHA迭代的数学表示如下:
a b c d e = ( e + P r o c e s s P + S 5 ( a ) + W [ ] + k [ ] ) , a , S 30 ( b ) , c , d abcde=(e+Process P +S^5(a)+W[]+k[]),a,S^{30}(b),c,d abcde=(e+ProcessP+S5(a)+W[]+k[]),a,S30(b),c,d
其中abcde位5个变量a、b、c、d、e构成的寄存器;Process P(处理P)位逻辑操作; S t S^{t} St
将32位子块循环左移t位;W[]从当前32位子块求出的32位值;k[]为5个常量之一。
注意,它与MD5相似,只是有小改动,使SHA比MD5更复杂。下面介绍处理P和W[]的含义,下表显示了每一轮的SHA-1中的处理P:

轮次处理P
1(b AND c) OR ((NOT b) AND (d))
2b XOR c XOR d
3(b AND c) OR (b AND d) OR (c AND d))
4b XOR c XOR d

W[t]的值计算如下:
对W的前16个字(t=0~15),输入消息子块M[t]的内容变成W[t]内容,即把输入消息M的前16块复制到W。W的其余值用下列方程求出:
W [ t ] = S 1 ( W [ t − 16 ] X O R W [ t − 14 ] X O R W [ t − 8 ] X O R T [ t − 3 ] ) W[t]=S^1(W[t-16]\quad XOR\quad W[t-14] \quad XOR\quad W[t-8] \quad XOR\quad T[t-3]) W[t]=S1(W[t16]XORW[t14]XORW[t8]XORT[t3])

3.比较MD5与SHA-1

MD5与SHA-1都基于MD4算法,因此可以进行比较,两者的差别如下表所示:

特性MD5SHA-1
消息摘要长度(位)128160
根据消息摘要寻找初始消息所需的操作 2 128 2^{128} 2128 2 160 2^{160} 2160
寻找产生相同消息摘要的两个消息所需的操作 2 64 2^{64} 264 2 80 2^{80} 280
目前攻击情况一定程度没有还没有
速度
软件实现简单,不需要大程序和复杂表格简单,不需要大程序和复杂表格
4.SHA-1的安全性

NIST寻找了更安全的SHA版本,出现了如下版本:2002年,NIST在标准文档FIPS 1802中提供了另一个新的SHA版本,称为SHA-256、SHA-384和SHA-512,其后面的数字表示为消息摘要的长度(以位为单位),下表归纳了不同的SHA版本:

参数SHA-1SHA-256SHA-384SHA-512
消息摘要长度160256384512
消息长度 < 2 64 <2^{64} <264 < 2 64 <2^{64} <264 < 2 128 <2^{128} <2128 < 2 128 <2^{128} <2128
块大小51251210241024
词大小32326464
算法所需步骤80648080
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZhInen丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值