SHA 哈希加密

安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS 所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的几率很高。

SHA 家族的算法,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布,是美国的政府标准,其分别是:

  • SHA-0:1993 年发布,当时称做安全散列标准(Secure Hash Standard),发布之后很快就被NSA 撤回,是SHA-1 的前身。
  • SHA-1:1995 年发布,SHA-1 在许多安全协议中广为使用,包括TLS、GnuPG、SSH、S/MIME 和IPsec,是MD5 的后继者。但SHA-1 的安全性在2010 年以后已经不被大多数的加密场景所接受。2017 年荷兰密码学研究小组CWI 和Google 正式宣布攻破了SHA-1。
  • SHA-2:2001 年发布,包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。SHA-2 目前没有出现明显的弱点。虽然至今尚未出现对SHA-2 有效的攻击,但它的算法跟SHA-1 基本上仍然相似。
  • SHA-3:2015 年正式发布,由于对MD5 出现成功的破解,以及对SHA-0 和SHA-1 出现理论上破解的方法,NIST 感觉需要一个与之前算法不同的,可替换的加密散列算法,也就是现在的SHA-3。

SHA 函数对比

算法和变体输出散列值长度
(bits)
中继散列值长度
(bits)
资料区块长度
(bits)
最大输入消息长度
(bits)
循环次数使用到的运算符碰撞攻击
(bits)
性能示例
MD5(作为参考)128128
(4×32)
512无限64And,Xor,Rot,Add(mod 232),Or≤18
(发现碰撞)
335
SHA-0160160
(5×32)
512264−180And,Xor,Rot,Add(mod 232),Or<34
(发现碰撞)
-
SHA-1160160
(5×32)
512264−180<63
(发现碰撞)
192
SHA-2SHA-224
SHA-256
224
256
256
(8×32)
512264−164And,Xor,Rot,Add(mod 232),Or,Shr112
128
139
SHA-384
SHA-512
SHA-512/224
SHA-512/256
384
512
224
256
512
(8×64)
10242128−180And,Xor,Rot,Add(mod 264),Or,Shr192
256
112
128
154
SHA-3SHA3-224
SHA3-256
SHA3-384
SHA3-512
224
256
384
512
1600
(5×5×64)
1152
1088
832
576
无限24And,Xor,Rot,Not112
128
192
256
-
SHAKE128
SHAKE256
d(arbitrary)
d(arbitrary)
1344
1088
min(d/2,128)
min(d/2,256)
-

SHA 函数对比

下表中的中继散列值(internal state)表示对每个资料区块压缩散列过后的中继值(internal hash sum)。

SHAd

SHAd 函数是一个简单的相同SHA 函数的重述:

SHAd-256(m) = SHA-256(SHA-256(m))。它会克服有关延伸长度攻击的问题。