5. 哈希算法考虑事项和注册
可用于完整性目的的哈希算法种类繁多. 算法选择取决于多个因素, 如完整性用例, 实现需求或约束, 或应用设计和工作流.
IANA 将在 "Hash Algorithms for HTTP Digest Fields" 注册表中注册一组初始算法; 参见 Section 7.2. 可按照本节规定的策略注册其他算法.
每个算法都有一个状态字段, 旨在帮助实现进行选择.
状态值为 "Active" 的算法适用于许多目的, 应用使用这些算法是 RECOMMENDED. 它们可用于对抗性场景, 在这类场景中, 哈希函数可能需要提供对碰撞, 第一原像和第二原像攻击的抵抗能力. 对于对抗性场景, 可接受的 "Active" 算法的选择将取决于具体情况所要求的保护级别. Section 6.6 给出了更多考虑事项.
状态值为 "Deprecated" 的算法要么不提供这些属性, 要么已知较弱 (see [NO-MD5] and [NO-SHA]). 这些算法 MAY 用于维护针对损坏的完整性, 但 MUST NOT 用于潜在的对抗性环境, 例如为真实性而签名完整性字段的值. 允许使用这些算法可以帮助一些应用避免因使用其他更安全算法重新计算而造成的不当运行开销, 例如那些此前使用 [RFC3230], 正在迁移到本规范 (Appendix E), 且已有已计算摘要值存储集合的应用. 此类应用并不免除本节中的要求. 此外, 没有这类遗留或历史负担的应用应遵循关于使用状态值为 "Active" 的算法的指导.
Section 6.6 讨论了算法敏捷性.
"Hash Algorithms for HTTP Digest Fields" 注册表的注册请求使用 Specification Required 策略 (Section 4.6 of [RFC8126]). 请求应使用以下模板:
-
Algorithm Key: 在 Content-Digest, Repr-Digest, Want-Content-Digest 或 Want-Repr-Digest 字段 Dictionary 成员 key 中使用的 Structured Fields key 值.
-
Status: 算法的状态. 选项为:
- "Active": 没有已知问题的算法
- "Provisional": 未经证实的算法
- "Deprecated": 已弃用或不安全的算法
-
Description: 算法的简短描述.
-
Reference(s): 指向定义 Algorithm Key 和算法技术细节的主要文档的指针.
在审查注册请求时, 指定专家应关注所请求的状态. 状态值应反映标准化状态以及相关利益群体的广泛意见, 例如 IETF 或与安全相关的标准制定组织 (SDOs)."Active" 状态不适用于已知较弱, 已被攻破或实验性的算法. 如果注册请求试图将此类算法注册为 "Active", 指定专家应建议使用 "Deprecated" 或 "Provisional" 作为替代状态.
在审查注册请求时, 指定专家不能以 "Deprecated" 或 "Provisional" 状态作为拒绝理由.
允许请求更新或更改现有注册中的字段. 例如, 随着安全环境演进, 这可以允许算法状态从 "Active" 转换为 "Deprecated".