ISO/IEC 10118-3:2004 (IEC 10118-3-04) 专用哈希函数标准详解

覆盖SHA-1/SHA-2/RIPEMD系列算法的密码哈希标准

1. 标准概况与适用范围

ISO/IEC 10118-3:2004(等同采用为IEC 10118-3-04、CAN/CSA-ISO/IEC 10118-3-04)是信息技术安全技术领域中关于哈希函数的重要国际标准,全称为《信息技术 — 安全技术 — 哈希函数 — 第3部分:专用哈希函数》。该标准由ISO/IEC JTC 1/SC 27(信息技术安全技术分委会)制定,2013年经复审确认继续有效(故常标记为2013年版)。截至2026年,该标准依然是许多密码系统和安全协议的核心参考之一。

本标准的适用范围包括:定义了一系列专门设计的哈希函数(dedicated hash-functions),这些函数不依赖于其他密码原语(如分组密码或模运算),而是通过特定布尔函数、循环移位和模加操作来提供抗碰撞和抗原像能力。标准规定的算法包括SHA-1、RIPEMD-128、RIPEMD-160、SHA-256、SHA-384和SHA-512。这些哈希函数广泛用于数字签名、消息认证码(MAC)、随机数生成以及数据完整性校验等场景。标准适用于安全服务提供商、密码模块开发者、认证机构以及需要实现哈希算法的软硬件厂商。

2. 主要技术内容与要求

2.1 哈希函数的一般结构

标准中所有专用哈希函数均遵循Merkle-Dåmgård强化结构:输入消息被分成固定大小的数据块;每个数据块与前一步的中间值通过压缩函数迭代处理;最后输出固定长度的杂凑值。填充规则采用位填充(先补’1’,再补’0’至长度除区块大小的余数位置,最后附上64位或128位消息长度表示)。

2.2 算法参数表

标准定义的六种专用哈希函数主要参数如下表所示:

算法名称 输出长度(bit) 区块大小(bit) 字长(bit) 循环轮数 预期安全强度(bit)
SHA-11605123280弱(≤80)
RIPEMD-128128512326464(碰撞)
RIPEMD-160160512328080(碰撞)
SHA-2562565123264128
SHA-38438410246480192
SHA-51251210246480256

说明:预期安全强度为抗碰撞攻击的推荐强度一般为输出长度的一半(或更少)。SHA-1已不再安全,标准虽包含但建议避免在新系统中使用。

2.3 压缩函数设计

每种算法均定义了详细的布尔函数、常量和初始值(IV)。例如,SHA系列使用非线性函数(如Ch、Maj等),RIPEMD系列则基于MD4设计但进行了改进。标准附录提供了测试向量(Test Vectors),用于验证实现的正确性。

3. 实施与应用要点

3.1 算法选择原则

实施者应根据应用的安全需求、性能约束和合规性要求选择适当的哈希函数。对于新系统,建议使用SHA-256或更高强度的算法。

⚠ 注意: SHA-1算法已在2017年被Google和CWI研究所成功实施碰撞攻击,其抗碰撞能力已远低于安全阈值。任何依赖SHA-1的安全机制(如数字签名、证书认证)均面临严重风险。实施者应立即迁移到SHA-2或更高版本算法。

3.2 实现正确性

由于哈希函数对每个输入比特敏感,实现必须严格遵循标准定义的字运算(加、移位、异或、逻辑函数)和字节序(大端序)。建议使用标准附录A提供的测试向量对所有算法进行测试,包括空字符串、单块、多块消息场景。

💡 实用提示: 在软件实现中,注意防止边信道攻击(如时序分析),对于高安全应用,应使用恒时代码比较哈希值。

3.3 使用场景

这些专用哈希函数常用于:

  • 数字签名方案的标准哈希组件(如ISO/IEC 14888系列);
  • 消息认证码(MAC)的基础函数(如HMAC标准ISO/IEC 9797-2);
  • 随机数生成(如DRBG);
  • 完整性校验(如软件更新、文件校验)。
✅ 遵循本标准的好处: 确保不同实现之间的哈希值互操作性;便于接受第三方安全评估;满足常见密码合规要求(如FIPS 140-3、PCI DSS等)。
⚠️ 强制性条款: 标准中所有算法在初始化向量(IV)、轮常数、逻辑函数的定义均为强制要求,不得任意修改。任何与标准参数不一致的输出均视为无效实现。

4. 与其他标准的关系

ISO/IEC 10118-3是ISO/IEC 10118系列的一部分,该系列包括:

  • 第1部分(ISO/IEC 10118-1): 哈希函数的通用模型和安全性要求;
  • 第2部分(ISO/IEC 10118-2): 使用分组密码算法的哈希函数;
  • 第3部分(ISO/IEC 10118-3): 专用哈希函数(本文件);
  • 第4部分(ISO/IEC 10118-4): 使用模运算的哈希函数。

此外,本标准与以下标准紧密关联:

  • ISO/IEC 9797-2 — 消息认证码(MAC)第2部分:使用专用哈希函数的机制(如HMAC);
  • ISO/IEC 14888系列 — 数字签名标准,将其作为签名方案的哈希组件;
  • ISO/IEC 18033系列 — 加密算法,部分模式涉及哈希函数;
  • PKCS#1 (RSA Labs) — 使用SHA-1/SHA-2作为EMSA-PSS/EMSA-PKCS1-v1_5中的哈希函数。

本标准与FIPS 180-4(美国联邦信息处理标准安全哈希标准)在SHA系列算法上保持一致,但ISO/IEC 10118-3还纳入了RIPEMD族算法。

常见问题(FAQ)

问: IEC 10118-3-04是否包含SHA-3算法?
答: 不包含。SHA-3(Keccak)是在2018年发布的ISO/IEC 10118-3:2018中才纳入的。IEC 10118-3-04 (2004版)仅包含SHA-1、SHA-256/384/512和RIPEMD-128/160。
问: 为什么标准中仍包含已被攻破的SHA-1?
答: 标准制定时SHA-1仍被认为是安全的,且标准作为规范文本具有历史延续性。实际应用中,用户应当评估自身风险,新系统不应选择SHA-1。标准本身不禁止使用,但安全责任由实施方承担。
问: 在不同平台(32位/64位)实现SHA-512有何注意事项?
答: SHA-512使用64位运算,在32位平台上需要模拟64位算术,效率较低。标准允许在不支持64位的环境中选择SHA-256(32位字长)。另外,小端与大端平台需注意字节序转换。
问: 如何确认我的实现符合ISO/IEC 10118-3?
答: 使用标准附录A中提供的测试向量(对每个算法多个消息输入预期的哈希值)。如所有测试向量匹配,则可认为实现正确。此外,可参考NIST的测试程序进行更广泛验证。

📥 标准文件下载

🔒
请等待 10 秒,广告加载完成后将自动显示下载链接

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注