SHA1算法

背景知识

SHA(Secure Hash Algorithm)是由美国NIST设计,1993年作为联邦信息处理标准发布的。
SHA-0是SHA的早期版本,SHA-0被公布后,NIST很快发现了它的缺陷,修改后的版本为SHA-1,简称SHA。
目前NIST官方最新的版本为FIPS PUB 180-4(2015年8月)。

基本设定

输入消息的长度限制:小于264
每次压缩的消息分组长度:512比特。
输出摘要长度:160比特。
SHA算法的结构包括消息填充,消息块扩展和消息压缩
三部分。下面依次介绍。
为了方便描述,将待压缩的消息用M表示。

填充规则

首先,对于待压缩的消息M,填充1个“1”和若干个“0”,使填充后的总比特长度模512等于448。
然后,留出的64比特用来记录填充前消息M的长度。注意,长度要用大端模式进行填充。
此时,填充后的消息M’长度为512的整数倍。

寄存器初始化

SHA算法的状态更新通过寄存器实现。由于算法输出长度为160比特,因此设置5个32比特的寄存器A、B、C、D、E。它们的初值为常数:

寄存器初始值
A0x67452301
B0xEFCDAB89
C0x98BADCFE
D0x10325476
E0xC3D2E1F0

消息块扩展规则

对于每一个512比特的消息分块 M i M_i Mi,需要将其扩展为80个字 W t W_t Wt,供压缩阶段使用,其中 0 ≤ t ≤ 79 0\le t\le 79 0t79 。扩展规则为:
W t = C L S 1 ( W t − 16 ⊕ W t − 14 ⊕ W t − 8 ⊕ W t − 3 ) W_t=CLS_1(W_{t-16}\oplus W_{t-14}\oplus W_{t-8}\oplus W_{t-3}) Wt=CLS1(Wt16Wt14Wt8Wt3)
其中前16个字 W 0 ∼ W 15 W_0\sim W_{15} W0W15 M i M_i Mi的16个32比特字。 C L S s CLS_s CLSs表示对32比特长的数据循环左移s位。

压缩规则

压缩过程即更新寄存器的过程,共需迭代计算80次。更新规则为:
( A , B , C , D , E ) ← ( E + f t ( B , C , D ) + C L S 5 ( A ) + W t + K t , A , C L S 30 ( B ) , C , D ) (A,B,C,D,E)\larr (E+f_t(B,C,D)+CLS_5(A)+W_t+K_t,A,CLS_{30}(B),C,D) (A,B,C,D,E)(E+ft(B,C,D)+CLS5(A)+Wt+Kt,A,CLS30(B),C,D)

其中 f t f_t ft函数中的运算是逐比特逻辑运算,即:

迭代次数函数名定义
0 ≤ t ≤ 19 0\le t\le 19 0t19 f 1 = f t ( B , C , D ) f_1=f_t(B,C,D) f1=ft(B,C,D) ( B ∧ C ) ∨ ( B ‾ ∧ D ) (B\wedge C)\vee(\overline B\wedge D) (BC)(BD)
20 ≤ t ≤ 39 20\le t\le 39 20t39 f 2 = f t ( B , C , D ) f_2=f_t(B,C,D) f2=ft(B,C,D) B ⊕ C ⊕ D B\oplus C\oplus D BCD
40 ≤ t ≤ 59 40\le t\le 59 40t59 f 3 = f t ( B , C , D ) f_3=f_t(B,C,D) f3=ft(B,C,D) ( B ∧ C ) ∨ ( B ∧ D ) ∨ ( C ∧ D ) (B\wedge C)\vee(B\wedge D)\vee(C\wedge D) (BC)(BD)(CD)
60 ≤ t ≤ 79 60\le t\le 79 60t79 f 4 = f t ( B , C , D ) f_4=f_t(B,C,D) f4=ft(B,C,D) B ⊕ C ⊕ D B\oplus C\oplus D BCD

对应的真值表为:

B C D f 1 f_1 f1 f 2 f_2 f2 f 3 f_3 f3 f 4 f_4 f4
0 0 00 0 0 0
0 0 11 1 0 1
0 1 00 1 0 1
0 1 11 0 1 0
1 0 00 1 0 1
1 0 10 0 1 0
1 1 01 0 1 0
1 1 11 1 1 1

K t K_t Kt为4个常数:

迭代次数函数名
0 ≤ t ≤ 19 0\le t\le 19 0t190x5A827999
20 ≤ t ≤ 39 20\le t\le 39 20t390x6ED9EBA1
40 ≤ t ≤ 59 40\le t\le 59 40t590x8F1BBCDC
60 ≤ t ≤ 79 60\le t\le 79 60t790xCA62C1D6

参考文献:

  1. https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf
  2. 现代密码学。杨波。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值