目录
一、介绍
SHA1又称安全哈希算法(Secure Hash Algorithm)。
对于长度小于2^64位的消息,SHA1会产生一个160位(20个字节)的消息摘要。SHA1是不可逆的,防冲突,并具有良好的雪崩效应。
二、与MD5的区别
1、对强行攻击的安全性
最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
2、对密码分析的安全性
由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
3、速度
在相同的硬件上,SHA-1的运行速度比MD5慢。
三、应用
1、文件指纹
这个作用和MD5的作用类似,如果文件被篡改,那么对应的SHA1值就会变化
2、Git中标识对象
用过Git的应该都知道,Git中的对象没有名字,唯一标识就是对象的SHA1值
四、算法原理
1、填充消息
与md5一致
2、消息处理
每64个字节(512位)一组,分成多个组(n个)。
每个组再分为16个子分组,每个子分组为32位。之后将这16个子分组扩充到80个子分组。扩充方法为:
Wt=Mt,当0≤t≤15
Wt=((Wt-3)^(Wt-8)^(Wt-14)^(Wt-16))<<<1,当16≤t≤79
3、数据运算
数据加密要经过4轮运算,每一轮共有20个步骤,共80步,之后产生160位摘要,这160位摘要存放在5个32位链接变量里,分别记为ABCDE。
(1)链接变量
初始值表示如下:
A=0x67452301
B=0xEFCDAB89
C=0x98BADCFE
D=0x10325476
E=0xC3D2E1F0
(2)步函数
SHA1的4轮运算共80个步骤,使用同一个操作程序,如下:
A,B,C,D,E<-[(A<<<5)+Ft(B,C,D)+E+Wt+Kt],A,(B<<<30),C,D
A.Ft(B,C,D)为逻辑函数
每个函数ft (0 <= t <= 79)都操作32位字B,C,D并且产生32位字作为输出。Ft(B,C,D)可以如下定义
ft(B,C,D) = (B AND C) or ((NOT B) AND D) ( 0 <= t <= 19)
ft(B,C,D) = B XOR C XOR D (20 <= t <= 39)
ft(B,C,D) = (B AND C) or (B AND D) or (C AND D) (40 <= t <= 59)
ft(B,C,D) = B XOR C XOR D (60 <= t <= 79).
B.Wt为子明文分组W[t]
见2消息处理章节
C.Kt为固定常数
这个程序的意义如下:
●将[(A<<<5)+Ft(B,D,C)+E+Wt+Kt]的结果赋给A
●将链接变量A初始值赋给链接变量B
●将链接变量B初始值循环左移30位赋给C
●将链接变量C初始值赋给链接变量D
●将链接变量D初始值赋给链接变量E
在处理完所有的消息后,消息摘要是一个160位的字符串。