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 外部认证的主要内容,如果未能解决你的问题,请参考以下文章

容器内部安装scp,拷贝到外部物理机

Spring Security:外部认证和内部认证

EMQX Cloud 更新:新增 Redis 和 JWT 外部认证授权

第12章 添加对外部认证的支持

华为5700交换机通过外部开源protal和本地aaa用户认证的一些问题

第七章:外部服务认证