SCP03 外部认证
Posted
技术标签:
【中文标题】SCP03 外部认证【英文标题】:SCP03 External Authenticate 【发布时间】:2020-01-17 16:28:03 【问题描述】:我正在尝试使用 SCP03 在 eUICC 上进行相互身份验证。当我向卡发送外部身份验证命令时,我收到了它的响应:AF8023026985,我相信 SW = 6985。
谁能告诉我我错过了什么?
这就是我在 Python 3 中生成外部身份验证命令的方式:
extAuthCmdBase = '8482330010'
initialStrForMac = 16 * '00' + extAuthCmdBase + hostCryptogram
C_MAC = aes.CMAC(initialStrForMac, sMAC)
extAuthAPDU = extAuthCmdBase + hostCryptogram + C_MAC[:16]
len_apdu = hex(len(extAuthAPDU))[2:].upper().zfill(2)
expExtAuthAPDU = 'AE80' + '22' + len_apdu + extAuthAPDU + '0000'
【问题讨论】:
我看到很多包含十六进制数字的字符串,我希望在其中使用字节,例如。 G。在 initialStrForMac 中,'00' 必须替换为 '\x00'。鉴于这会影响每一个命令:你在哪里隐藏了到二进制的转换? 感谢您的评论@guidot。16*''00'
到 16*\x00'
的转换发生在 aes.CMAC()
中,我将十六进制字符串转换为 bytes.fromhex(hexString)
。
【参考方案1】:
我终于从分机得到了 SW = 9000。授权。
使用脚本链来初始化更新和扩展。授权命令。
所有这些初始化更新和外部身份验证命令都应在一个会话中发送。这取决于 eUICC 的操作系统的编程方式,可以通过脚本链接概念来实现,通过该概念,eUICC 将理解会话将继续,并且主机将发送进一步的后续命令。
有关脚本链接过程的了解,请参阅 ETSI TS 102 226,脚本链接 TLV 部分。
初始化更新命令的标签:'AE80830101' 外部认证命令的标签:'AE80830102'
这里使用的标签制度是远程管理应用程序命令“安全数据”的扩展格式 - 不定长编码。
【讨论】:
虽然很明显 Get Challenge 和 External Authenticate 必须出现在同一个会话中,但初始化应该是不相关的。以上是关于SCP03 外部认证的主要内容,如果未能解决你的问题,请参考以下文章
EMQX Cloud 更新:新增 Redis 和 JWT 外部认证授权