跳到主要内容

1. 内容概览 (Overview of Contents)

本文档包含 United States of America (USA) Federal Information Processing Standard (FIPS) Secure Hash Algorithms (SHA) 的规范, 实现这些 SHA 的代码, 基于这些 SHA 实现 HMAC (Hashed Message Authentication Code, [RFC2104]) 的代码, 以及基于 HMAC 实现 HKDF (HMAC-based Key Derivation Function, [RFC5869]) 的代码. HMAC 和 HKDF 的规范不包含在本文档中, 因为它们已在 RFC 系列的其他文档中给出 [RFC2104] [RFC5869].

注意: 下文的大部分文本取自 [SHS], 其中关于所述哈希算法安全性的断言由 [SHS] 的作者美国政府作出, 而不是由本文档列出的作者作出. 关于 SHA-1 的安全性, 另见 [RFC6194].

下文规定 Secure Hash Algorithms, 即 SHA-224 [RFC3874], SHA-256, SHA-384 和 SHA-512, 用于计算消息或数据文件的压缩表示. (SHA-1 在 [RFC3174] 中规定.) 当任意长度小于 2^64 bit 的消息 (适用于 SHA-224 和 SHA-256), 或小于 2^128 bit 的消息 (适用于 SHA-384 和 SHA-512) 输入这些算法之一时, 结果输出称为 message digest. 根据算法不同, message digest 的长度从 224 bit 到 512 bit 不等. Secure Hash Algorithm 通常与其他密码算法一起使用, 例如数字签名算法和 keyed-hash authentication code, 随机数生成 [RFC4086], 或密钥派生函数.

本文档规定的算法被称为 secure, 是因为在计算上不可行去 (1) 找到与给定 message digest 对应的消息, 或 (2) 找到两个会产生相同 message digest 的不同消息. 传输中消息的任何变化都极有可能导致不同的 message digest. 当 Secure Hash Algorithm 与数字签名算法或 keyed-hash message authentication algorithm 一起使用时, 这会导致验证失败.

本文提供的代码支持任意 bit 长度的输入字符串. 来自 [RFC3174] 的 SHA-1 示例代码也已更新, 可处理任意 bit 长度的输入字符串. 本代码允许用于所有用途, 包括商业和非商业用途.

本文档取代 [RFC4634], 与该 RFC 相比的变更汇总在附录中.

SHA 算法的 ASN.1 OID (Object Identifier) 取自 [RFC4055], 如下所示:

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 节描述构成这些算法的 word 基本操作. 第 4 节描述如何将消息填充到所需块大小的整数倍, 然后解析为块. 第 5 节定义用于规定哈希算法的常量和组合函数. 第 6 节给出 SHA-224, SHA-256, SHA-384 和 SHA-512 函数的实际规范. 第 7 节提供 HMAC keyed message authentication code 规范以及基于 HMAC 的 extract-and-expand key derivation function 规范的指针.

第 8 节给出 SHA 算法, 基于 SHA 的 HMAC, 以及基于 HMAC 的 extract-and-expand key derivation function 的示例代码.