Appendix B. Supporting Techniques (支持技术)
本附录包含本文档中使用的支持技术的规范,包括哈希函数和掩码生成函数.
B.1. Hash Functions (哈希函数)
哈希函数用于将任意长度的消息映射到固定长度的输出. 本文档的方案中使用的哈希函数应满足以下属性:
- 抗原像性 (Preimage Resistance): 给定哈希值h,在计算上不可行找到消息m使得Hash(m) = h
- 抗第二原像性 (Second Preimage Resistance): 给定消息m1,在计算上不可行找到不同的消息m2使得Hash(m1) = Hash(m2)
- 抗碰撞性 (Collision Resistance): 在计算上不可行找到任意两个不同的消息m1和m2使得Hash(m1) = Hash(m2)
推荐的哈希函数
本文档推荐使用以下哈希函数:
| 哈希函数 | 输出长度(比特) | 输出长度(字节) | 状态 |
|---|---|---|---|
| SHA-1 | 160 | 20 | ⚠️ 已废弃(仅向后兼容) |
| SHA-256 | 256 | 32 | ✅ 推荐 |
| SHA-384 | 384 | 48 | ✅ 推荐 |
| SHA-512 | 512 | 64 | ✅ 推荐 |
| SHA-512/224 | 224 | 28 | ✅ 可用 |
| SHA-512/256 | 256 | 32 | ✅ 可用 |
哈希函数的ASN.1标识
SHA-256的算法标识符:
id-sha256 OBJECT IDENTIFIER ::= {
joint-iso-itu-t(2) country(16) us(840) organization(1)
gov(101) csor(3) nistalgorithm(4) hashalgs(2) 1
}
SHA-384的算法标识符:
id-sha384 OBJECT IDENTIFIER ::= {
joint-iso-itu-t(2) country(16) us(840) organization(1)
gov(101) csor(3) nistalgorithm(4) hashalgs(2) 2
}
SHA-512的算法标识符:
id-sha512 OBJECT IDENTIFIER ::= {
joint-iso-itu-t(2) country(16) us(840) organization(1)
gov(101) csor(3) nistalgorithm(4) hashalgs(2) 3
}
B.2. Mask Generation Functions (掩码生成函数)
掩码生成函数 (Mask Generation Function, MGF) 接受可变长度的八位字节串和所需的输出长度作为输入,生成指定长度的输出八位字节串. 掩码生成函数可能基于哈希函数或其他函数.
掩码生成函数的主要用途是在填充方案中生成随机外观的数据.
B.2.1. MGF1
MGF1是一种基于哈希函数的掩码生成函数. MGF1 (mgfSeed, maskLen)接受一个可变长度的种子和所需的掩码长度作为输入,并输出指定长度的掩码.
MGF1 (mgfSeed, maskLen)
输入 (Input)
mgfSeed 掩码生成种子,长度为任意的八位字节串
maskLen 预期掩码的长度(以八位字节为单位)
输出 (Output)
mask 长度为maskLen的掩码,八位字节串
错误 (Error)
"mask too long" (掩码过长)
步骤 (Steps)
-
如果maskLen > 2^32 * hLen,输出 "mask too long" 并停止.
-
令T为空八位字节串.
-
对于从0到⌈maskLen / hLen⌉ - 1的计数器C:
- 将计数器C转换为长度为4的八位字节串C: C = I2OSP(C, 4)
- 连接mgfSeed和C的哈希值到T: T = T || Hash(mgfSeed || C)
-
输出T的前maskLen个八位字节作为掩码.
MGF1选项 (MGF1 Options)
MGF1的默认哈希函数是SHA-1. 对于新应用,推荐使用SHA-256或更高的哈希函数.
MGF1与SHA-256的ASN.1标识:
id-mgf1 OBJECT IDENTIFIER ::= { pkcs-1 8 }
-- MGF1的参数是使用的哈希函数
AlgorithmIdentifier { ALGORITHM:IOSet } ::= SEQUENCE {
algorithm ALGORITHM.&id({IOSet}),
parameters ALGORITHM.&Type({IOSet}{@algorithm}) OPTIONAL
}
MGF的安全考虑
在随机预言模型下,如果基础哈希函数表现良好,MGF1的输出在计算上与真正的随机串不可区分. 这使得MGF1适合在OAEP和PSS等方案中使用.