如何使用卡挑战和卡密码创建秘密会话密钥S-ENC,S-MAC和S-DEK?

问题描述

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

我正在尝试使用AES对称密钥创建安全通道(SCP03)。我已经使用智能卡上的此AES密钥创建了一个会话,现在要执行相互身份验证,我已向智能卡发送了'INITIALIZE UPDATE'命令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 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 = 卡密码

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

我还需要创建“主机密码” ,并需要使用“ EXTERNAL AUTHENTICATE ”命令重新发送到智能卡。

如何在代码编辑器中生成这些东西?我可以在代码中导入任何C库来生成这些密钥和密码吗?

解决方法

我已经开发了一段时间,最近更新了GlobhalPlatform C Library。这是Overview Page,这是API documentation。对于您的问题,mutual authentication是一个很好的起点。 请记住,您还可以使用cmake -G "..."为Visual Studio或Eclipse生成更方便的项目文件,以提供一种浏览项目的好方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...