BS ISO IEC 09797——消息认证码(MAC)机制标准系列

Information Technology — Security Techniques — Message Authentication Codes (MACs)(2011 版系列)

🔐 BS ISO/IEC 9797(BSI 实施号 BS ISO IEC 09797)是英国标准学会(BSI)等同采用 ISO/IEC 9797 形成的信息安全技术标准系列,主题为信息技术——安全技术——消息认证码(MAC),由 ISO/IEC JTC 1/SC 27(信息安全技术)编制,英国参与由 IST/33(IT 安全技术)技术委员会负责,ICS 分类号为 35.040。消息认证码用于在消息上附加一个由密钥生成的短认证标签,接收方通过重新计算并比对,同时验证消息的完整性(未被篡改)与来源真实性(确实来自持有共享密钥的一方),是网络协议、支付系统、金融报文、电信信令与数据交换中广泛使用的数据完整性保护机制。

💡 MAC 与数字签名的本质区别:MAC 使用对称密钥,生成方与验证方共享同一密钥,计算快速、开销小,但无法用于第三方仲裁(不可否认);数字签名使用公钥密码,可实现不可否认性。实践中按场景各取所长。

一、系列构成与适用范围 📌

BS ISO/IEC 9797 系列按底层密码原语的不同,分为三个部分,分别对应三种 MAC 构造基础。这种”分原语”的划分方式便于不同应用按自身底层算法选型:

部分标准号机制基础典型算法 / 构造
第 1 部分BS ISO/IEC 9797-1:2011分组密码(块密码)MAC 算法 1~6,如 CBC-MAC、CMAC 及其变体
第 2 部分BS ISO/IEC 9797-2:2011专用散列函数基于散列函数的 MAC 算法(HMAC 类)
第 3 部分BS ISO/IEC 9797-3:2011通用散列函数UMAC 等基于通用散列的构造
⚠️ 第 2 部分为 2011 年第二版并纳入 2015 年勘误(对 3.14、6.3、6.3.5、6.3.6 等条款的修正),应用与采购时应使用包含勘误的最新版本,避免引用旧版或勘误前文本。

二、基于分组密码的 MAC(第 1 部分) 🔧

第 1 部分规定基于分组密码的消息认证码机制。其核心思想是把消息按固定长度分块,利用分组密码(如 AES、DES、Camellia 等)进行迭代处理,最终生成一个固定长度的认证码。该部分内容涵盖:

  • 术语与符号:定义消息、密钥、初始化向量(IV)、填充(padding)方式与截断等概念;
  • MAC 算法 1~6:定义多种构造,包括经典的 CBC-MAC(算法 1)及其带密钥填充、双密钥、输出截断等变体,以及改进的 CMAC 类算法;
  • 安全要求:说明各算法适用的填充方法(如方法 1~3)、密钥管理规则与输出截断长度要求,避免错误使用导致的安全隐患。

该部分是最经典的 MAC 标准,硬件实现成熟,广泛应用于金融报文认证(如 ISO 8583 类报文)、电信信令完整性保护以及磁盘/网络加密认证一体化场景。选用时应特别注意填充方法的一致性:发送方与接收方必须采用完全相同的填充规则,否则认证必然失败。

三、基于散列函数的 MAC(第 2 部分) 🔥

第 2 部分规定基于专用散列函数的 MAC 机制。其思路是先用散列函数(如 SHA-1、SHA-256 等)对消息进行散列,再结合密钥进行密钥扩展与输出处理,从而得到认证码。内容涵盖:

  • 术语与符号:明确定义所用散列函数、密钥长度与安全参数;
  • 要求:规定密钥长度、散列函数选择与安全参数的约束条件;
  • MAC 算法 1:描述基于散列函数的构造,包含密钥扩展步骤以及散列迭代、输出处理的完整流程。
✅ 价值:基于散列函数的 MAC(典型如 HMAC)在软件实现上高效、可移植性好、无需硬件密码模块,是 TLS、IPsec、SSH 等现代安全协议中数据完整性保护的首选,本部分为这类机制提供了标准化依据。

四、基于通用散列函数的 MAC(第 3 部分) 🛠️

第 3 部分规定基于通用散列函数的 MAC 机制。通用散列函数(universal hash-function)是一类具有特定概率性质的非密码学散列函数,配合适当的密钥化处理即可构造出安全的 MAC。内容涵盖:

  • 通用模型:给出基于通用散列函数构造 MAC 的一般框架,阐明通用散列与安全输出生成之间的分工;
  • 机制:规定具体构造,其中典型代表为 UMAC,并说明其输入处理、密钥生成、通用散列计算与最终认证码输出的完整过程。
🚨 选型提示:通用散列函数 MAC 在特定平台上可实现很高的吞吐量(如 UMAC 在软件上快于分组密码 MAC),但其安全性与实现细节、密钥管理强相关,且互操作性相对有限。选用时应综合评估平台性能、实现安全与跨系统互操作需求,而非单纯追求速度。

五、工作原理与密钥管理要点 🔍

无论采用哪一部分的机制,MAC 的基本工作流程都是相似的:发送方用共享密钥 K 对消息 M 计算 MAC 值并附于消息之后;接收方收到后用同一密钥 K 对 M 重新计算 MAC,并与收到的值比对,一致则通过验证。这一流程同时实现了完整性(若消息被篡改,MAC 不再匹配)与来源认证(只有持有 K 的一方才能产生合法 MAC)。

密钥管理是 MAC 安全的根本:密钥应遵循生成、分发、存储、轮换与废止的全生命周期管理要求,使用足够长度的随机密钥,并避免密钥重用与跨协议复用。同时应警惕时序攻击与暴力枚举:MAC 值不宜过长截断以换取性能,验证应采用恒定时间比较,防止攻击者通过响应时间差异逐位猜测认证码。

六、工程实践应用要点 📊

  • 🔍 数据完整性:在传输与存储中附加 MAC,检测数据是否被篡改,保障报文不被中间人改写。
  • 🔧 来源认证:共享密钥使接收方确认消息确实来自持有该密钥的一方,抵御伪造与重放(配合序列号/时间戳)。
  • ⚖️ 性能权衡:分组密码 MAC 硬件实现成熟、资源占用低;散列 MAC 软件实现高效、可移植性好;通用散列 MAC 吞吐极高但实现复杂。
  • 📋 选型流程:先确定底层原语(分组密码 / 散列 / 通用散列)→ 选择对应部分 → 确定填充与密钥方案 → 评估安全参数 → 通过一致性测试与互操作验证。
⚠️ MAC 只保证完整性与来源认证,不提供机密性:消息本身通常仍以明文或加密形式独立处理。需要同时保密与认证时,应采用”先加密后认证”(Encrypt-then-MAC)或 AEAD 等组合方案,并遵循标准与最佳实践。

七、常见问题解答 ❓

❓ 问:MAC 与哈希(Hash)有何不同?
答:哈希无密钥,只能检测完整性(且易被攻击者篡改后重算);MAC 使用密钥,同时检测完整性与来源真实性,可防止攻击者伪造,安全性前提是密钥保密。
❓ 问:CBC-MAC 与 CMAC 有何区别?
答:CBC-MAC(MAC 算法 1)是经典构造,对可变长消息需注意填充与长度处理;CMAC 等改进算法通过密钥派生与子密钥处理解决变长消息问题,安全性更稳健、更通用。
❓ 问:为何 MAC 标准要分成三个部分?
答:不同应用底层原语不同(分组密码、散列函数、通用散列函数),分部分可分别规定各类 MAC 机制及其参数、填充与安全要求,便于按应用场景选用,避免把所有构造混在一份文档中。
❓ 问:MAC 能否用于不可否认性?
答:不能。对称密钥使发送方与接收方都能生成合法 MAC,无法区分生成者,因而无法向第三方证明消息来源;不可否认性需依赖数字签名(非对称机制)。
❓ 问:选择 MAC 机制时应重点考虑哪些因素?
答:底层原语与平台性能、密钥管理与填充规则一致性、认证码长度与安全强度、互操作性以及是否需要硬件加速,结合场景综合权衡,并始终参考标准的最新版本与勘误。
🔒
正在加载下载地址,请稍候 10 秒

发表回复

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