安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS 所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的几率很高。
SHA 家族的算法,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布,是美国的政府标准,其分别是:
算法和变体 | 输出散列值长度 (bits) | 中继散列值长度 (bits) | 资料区块长度 (bits) | 最大输入消息长度 (bits) | 循环次数 | 使用到的运算符 | 碰撞攻击 (bits) | 性能示例 | |
---|---|---|---|---|---|---|---|---|---|
MD5(作为参考) | 128 | 128 (4×32) | 512 | 无限 | 64 | And,Xor,Rot,Add(mod 232),Or | ≤18 (发现碰撞) | 335 | |
SHA-0 | 160 | 160 (5×32) | 512 | 264−1 | 80 | And,Xor,Rot,Add(mod 232),Or | <34 (发现碰撞) | - | |
SHA-1 | 160 | 160 (5×32) | 512 | 264−1 | 80 | <63 (发现碰撞) | 192 | ||
SHA-2 | SHA-224 SHA-256 | 224 256 | 256 (8×32) | 512 | 264−1 | 64 | And,Xor,Rot,Add(mod 232),Or,Shr | 112 128 | 139 |
SHA-384 SHA-512 SHA-512/224 SHA-512/256 | 384 512 224 256 | 512 (8×64) | 1024 | 2128−1 | 80 | And,Xor,Rot,Add(mod 264),Or,Shr | 192 256 112 128 | 154 | |
SHA-3 | SHA3-224 SHA3-256 SHA3-384 SHA3-512 | 224 256 384 512 | 1600 (5×5×64) | 1152 1088 832 576 | 无限 | 24 | And,Xor,Rot,Not | 112 128 192 256 | - |
SHAKE128 SHAKE256 | d(arbitrary) d(arbitrary) | 1344 1088 | min(d/2,128) min(d/2,256) | - |
下表中的中继散列值(internal state)表示对每个资料区块压缩散列过后的中继值(internal hash sum)。
SHAd 函数是一个简单的相同SHA 函数的重述:
SHAd-256(m) = SHA-256(SHA-256(m))。它会克服有关延伸长度攻击的问题。