Skip to main content

1. Overview of Contents (内容概述)

本文档包括美利坚合众国 (USA) 联邦信息处理标准 (FIPS) 安全散列算法 (SHAs) 的规范、实现SHAs的代码、基于SHAs实现HMAC (散列消息认证码, [RFC2104]) 的代码,以及基于HMAC实现HKDF (基于HMAC的密钥派生函数, [RFC5869]) 的代码. HMAC和HKDF的规范未包含在内,因为它们出现在RFC系列的其他文档中 [RFC2104] [RFC5869].

注意: 以下大部分文本取自 [SHS],其中描述的散列算法安全性的断言由美国政府([SHS] 的作者)作出,而非本文档列出的作者. 另请参见 [RFC6194] 关于SHA-1安全性的内容.

以下文本规定了安全散列算法,SHA-224 [RFC3874], SHA-256, SHA-384和SHA-512,用于计算消息或数据文件的压缩表示. (SHA-1在 [RFC3174] 中规定.) 当长度为任意 < 2^64位 (对于SHA-224和SHA-256) 或 < 2^128位 (对于SHA-384和SHA-512) 的消息输入到这些算法之一时,结果是称为消息摘要 (Message Digest) 的输出. 消息摘要的长度范围从224位到512位,具体取决于算法. 安全散列算法通常与其他密码算法一起使用,例如数字签名算法和密钥散列认证码、随机数生成 [RFC4086] 或密钥派生函数中.

本文档中规定的算法被称为安全的,因为在计算上不可行 (1) 找到对应于给定消息摘要的消息,或 (2) 找到产生相同消息摘要的两个不同消息. 传输中消息的任何更改都将以极高的概率导致不同的消息摘要. 当安全散列算法与数字签名算法或密钥散列消息认证算法一起使用时,这将导致验证失败.

本文提供的代码支持任意位长度的输入字符串. [RFC3174] 中SHA-1的示例代码也已更新以处理任意位长度的输入字符串. 授予对此代码的所有商业和非商业用途的许可.

本文档废止 [RFC4634],与该RFC的更改总结在附录中.

取自 [RFC4055] 的SHA算法的ASN.1 OID (对象标识符) 如下:

id-sha1  OBJECT IDENTIFIER  ::=  { iso(1)
identified-organization(3) oiw(14)
secsig(3) algorithms(2) 26 }
id-sha224 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 4 }
id-sha256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 1 }
id-sha384 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 2 }
id-sha512 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 3 }

下面的第2节定义了用作构建这些算法的构建块的术语和函数. 第3节描述了构建这些算法的基本字操作. 第4节描述了如何将消息填充到所需块大小的整数倍,然后解析为块. 第5节定义了用于指定散列算法的常量和复合函数. 第6节给出了SHA-224, SHA-256, SHA-384和SHA-512函数的实际规范. 第7节提供了指向HMAC密钥消息认证码规范和基于HMAC的提取-扩展密钥派生函数规范的指针.

第8节给出了SHA算法、基于SHA的HMACs和基于HMAC的提取-扩展密钥派生函数的示例代码.