Cryptography 如何使用卡质询和卡密码创建秘密会话密钥(S-ENC、S-MAC和S-DEK)?

Cryptography 如何使用卡质询和卡密码创建秘密会话密钥(S-ENC、S-MAC和S-DEK)?,cryptography,smartcard,apdu,globalplatform,Cryptography,Smartcard,Apdu,Globalplatform,我有一个微控制器(msp430)和一个智能卡(se050),我正在使用windows计算机上的CodeComposer Studio将APDU从微控制器发送到智能卡 我正在尝试使用AES对称密钥创建一个安全通道(SCP03)。我已在智能卡上使用此AES密钥创建了一个会话,现在为了执行相互身份验证,我已向智能卡发送了“初始化更新”命令APDU 初始化更新APDU: 80 50 00 00 08 00 00 00 00 00 00 00 00 00 该卡的响应为: 00 00 00 00 00 0

我有一个微控制器(msp430)和一个智能卡(se050),我正在使用windows计算机上的CodeComposer Studio将APDU从微控制器发送到智能卡

我正在尝试使用AES对称密钥创建一个安全通道(SCP03)。我已在智能卡上使用此AES密钥创建了一个会话,现在为了执行相互身份验证,我已向智能卡发送了“初始化更新”命令APDU

初始化更新APDU:

80 50 00 00 08 00 00 00 00 00 00 00 00 00
该卡的响应为:

00 00 00 00 00 00 00 00 00 00 00 03 60 7E 25 31 3D BE 63 59 BE 34 AA 4B C0 F2 B9 27 B4 
在哪里

00 00
=关键多元化数据

00 03 60
=关键信息

7E 25 31 3D BE 63 59 BE

34 AA 4B C0 F2 B9 27 B4
=卡密码

现在,我想检查一下卡密码是否正确?为此,我需要创建秘密会话密钥(S-ENC、S-MAC、S-DEK)和卡密码,以便对卡进行身份验证

我还需要创建主机密码,我需要在“外部身份验证”命令中将其重新发送到智能卡


如何在CodeComposer中生成这些内容?是否有任何C库可以导入我的代码中以生成这些密钥和密码?

我不久前开发了,最近更新了。这是一个,这是一个。对于你的问题是一个很好的起点。
请记住,您还可以使用
cmake-G“…”
为VisualStudio或Eclipse生成更方便的项目文件,以便有一种浏览项目的好方法。

我不久前开发并最近更新了。这是一个,这是一个。对于你的问题是一个很好的起点。
请记住,您还可以使用
cmake-G“…”
为VisualStudio或Eclipse生成更方便的项目文件,以便浏览项目。

感谢您的回复。我在CodeComposer中编写了一个C代码,它将APDU从微控制器发送到智能卡。我还发送了'INITIALIZEUPDATE'命令。在我得到的智能卡(卡密码、卡挑战、多样化数据)的响应中,现在我需要创建会话加密密钥S-ENC、卡密码,以便与从智能卡收到的卡密码进行比较。我正在试图找到一种方法,如何在C中实现,以便我可以制定外部身份验证命令。因此,您不想使用完整的库,但您的目标是使用代码片段来支持您的需要?查看
mutual_authentication
函数中的文件
globalplatform.c
,该文件引用了
crypto.c
中的代码,其中包含您正在搜索的操作。如果您的目标是以后添加更多的GP函数,而不是复制代码,那么尝试将库移植到您的平台可能是更明智的方法。GP库正在使用LGPL许可证,即链接到封闭源代码作品,复制源代码片段1:1将需要在LGPL或GPL下发布作品。感谢您的回复。我在CodeComposer中编写了一个C代码,它将APDU从微控制器发送到智能卡。我还发送了'INITIALIZEUPDATE'命令。在我得到的智能卡(卡密码、卡挑战、多样化数据)的响应中,现在我需要创建会话加密密钥S-ENC、卡密码,以便与从智能卡收到的卡密码进行比较。我正在试图找到一种方法,如何在C中实现,以便我可以制定外部身份验证命令。因此,您不想使用完整的库,但您的目标是使用代码片段来支持您的需要?查看
mutual_authentication
函数中的文件
globalplatform.c
,该文件引用了
crypto.c
中的代码,其中包含您正在搜索的操作。如果您的目标是以后添加更多的GP函数,而不是复制代码,那么尝试将库移植到您的平台可能是更明智的方法。GP库正在使用LGPL许可证,即链接到封闭源代码作品,复制源代码片段1:1也需要在LGPL或GPL下发布作品。