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

基于GlobalPlatform SCP03规范:无法生成匹配eUICC的卡片密码

问题分析与修正方案

看起来你在SCP03卡片密码验证时踩了几个规范细节的坑,我帮你梳理一下关键错误点和修正步骤:

1. 会话密钥S-MAC派生的参数错误

你当前计算S-MAC时用了错误的derivationConstant和L值:

  • 派生常量混淆:根据GlobalPlatform SCP03 v2.3 Amendment D规范,S-MAC会话密钥的派生常量是0x06(你用的0x00是S-ENC的派生常量)。所以Label应该是11个00 + 06,即000000000000000000000006。
  • 密钥长度L错误:你的母密钥是16字节(128位),所以L值应该是0080(表示128位),而不是0040(对应64位)。

修正后的S-MAC派生输入数据应为:

000000000000000000000006 00 0080 01 AF6B2B0E174BA140E7359F8EEC577E51

用这个输入和母密钥AA75D7A83CF20FE79C606FF1B7E2CEB4计算CMAC,就能得到正确的S-MAC会话密钥。

2. 卡片密码的计算逻辑错误

你现在误用了密钥派生的输入格式来计算卡片密码,这完全不符合规范!卡片密码的计算逻辑是直接用S-MAC会话密钥对固定格式的数据做CMAC,取前8字节。

正确的卡片密码输入数据格式是:

00 [HostChallenge] [CardChallenge] [SequenceNumber]

代入你的参数后具体为:

00 AF6B2B0E174BA140 E7359F8EEC577E51 000007

用修正后的S-MAC密钥计算这个数据的CMAC,取前8字节就应该和eUICC返回的86B91FBEA0E67D33匹配了。

3. 额外检查点

  • 确认所有多字节字段(比如Sequence Number、L值)都采用大端(Big-Endian)字节序,这是GlobalPlatform规范的默认要求。
  • 验证母密钥配置:你标注了keyMAC = keyENC = AA75D7A83CF20FE79C606FF1B7E2CEB4,虽然部分场景下母密钥会复用,但要确认目标eUICC确实配置为MAC和ENC母密钥相同,否则派生的会话密钥也会出错。

按照以上步骤修正后,应该就能得到匹配的卡片密码了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:09:05