【问题标题】:How to create secret session keys (S-ENC, S-MAC and S-DEK) using card-challenge and card-cryptogram?如何使用卡片挑战和卡片密码创建秘密会话密钥(S-ENC、S-MAC 和 S-DEK)?
【发布时间】:2020-10-22 11:54:44
【问题描述】:

我有一个微控制器 (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)和卡密码以对卡进行身份验证。

我还需要创建 'Host Cryptogram',我需要在“EXTERNAL AUTHENTICATE”命令中重新发送到智能卡。

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

【问题讨论】:

    标签: cryptography smartcard apdu globalplatform


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。我在代码编写器中编写了一个 C 代码,将 APDU 从微控制器发送到智能卡。我还发送了“INITIALIZEUPDATE”命令。在我得到的智能卡的响应中(卡密码、卡挑战、多样化数据),现在我需要创建会话加密密钥 S-ENC、卡密码,以便与从智能卡接收到的卡密码进行比较。我正在尝试找到一种如何在 C 中实现的方法,以便我可以制定 External Authenticate 命令。
    • 所以,您不想使用完整的库,但您的目标是使用代码片段来支持您的需求?在mutual_authentication 函数中查看文件globalplatform.c,它引用了来自crypto.c 的代码,其中包含您正在搜索的操作。如果您的目标是稍后添加更多 GP 功能而不是复制代码,那么尝试将库移植到您的平台可能是更聪明的方法。 GP 库使用 LGPL 许可证,即链接到封闭源代码的作品,复制源代码片段 1:1 将需要在 LGPL 或 GPL 下发布作品。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2010-12-28
    • 2018-09-27
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    相关资源
    最近更新 更多