You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中PACE PIN通用映射的AES-CMAC计算结果不符问题排查

PACE PIN通用映射协议AES-CMAC计算结果不符问题排查

问题概述

已完成从Hmap派生会话密钥的步骤:

  • Kenc = SHA1(Kshared || 00000001)
  • Kmac = SHA1(Kshared || 00000002)

需计算认证令牌:

  • TPCD = MAC(Kmac, PKPICC, map)
  • TPICC = MAC(Kmac, PKPCD, map)

参考示例实现AES-CMAC后,计算结果与PlatinumReader的已知结果不符,甚至长度不一致。

核心排查方向

1. 密钥适配性检查

SHA1输出为20字节,但AES-CMAC要求密钥为AES标准长度(16/24/32字节):

  • 确认是否直接将20字节的Kmac作为AES密钥使用?PlatinumReader可能对Kmac做了截断(取前/后16字节)或补全(用0填充至16字节)处理。
  • 核对密钥长度处理逻辑是否与目标实现一致。

2. 输入数据拼接规则

验证PKPICC与map的拼接方式:

  • 是直接字节流拼接PKPICC || map,还是包含TLV长度字段等额外结构?
  • 检查PKPICC、map的字节序(大端/小端)是否与PlatinumReader对齐。

3. AES-CMAC实现细节

  • 确认填充规则:AES-CMAC必须使用ISO/IEC 9797-1 Padding Method 2(先补0x80,再补0x00至块长度),避免误用其他填充方式。
  • 核对输出长度:默认AES-CMAC输出为16字节,检查是否存在截断(如PlatinumReader取前8字节作为令牌)的情况。

4. 关键数据验证

需提供以下数据进一步定位问题:

  • Kshared、Kmac的十六进制值
  • PKPICC、map的十六进制字节流
  • PlatinumReader给出的TPCD/TPICC预期结果
  • C#实现中AES-CMAC核心逻辑及数据拼接的代码片段

内容的提问来源于stack exchange,提问作者Bouls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:20:57