当前位置: 首页 > 知识库问答 >
问题:

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

祁杰
2023-03-14

我有一个微控制器(msp430)和一个智能卡(se050),我正在使用Windows计算机上的Code Composer 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 00 00 00 00 00 00 00=关键多元化数据

00 03 60=关键信息

7E 25 31 3D BE 63 59 BE=卡片挑战

34 AA4BC0 F2 B9 27 B4

现在,我想检查卡密码是否正确?为此,我需要创建秘密会话密钥(S-ENC,S-MAC,S-DEK)和卡密码来验证卡。

我还需要创建主机密码,我需要重新发送到智能卡中的外部认证命令。

如何在code composer中生成这些内容?有没有什么C库可以导入我的代码来生成这些密钥和密码?

共有1个答案

孙承弼
2023-03-14

我已经开发了一段时间,最近更新了GlobhalPlatform C库。这里是一个概述页面,这里是API留档。对于您的问题,相互身份验证是一个很好的起点。请记住,您也可以使用cmake-G"..."为Visual Studio或Eclipse生成更方便的项目文件,以便有一个浏览项目的好方法。

 类似资料:
  • null 例如,轮转设定为7天。所以我在我的应用程序中编码每7天刷新一次...不好,因为很难精确计时。 另一种方法是,如果我的应用程序面临身份验证异常,只需刷新密码,建立一个新的连接,并重试应用程序逻辑。 行业标准是什么?

  • 我遇到了许多API,它们为用户提供了一个API密钥和一个秘密。但我的问题是:两者之间有什么区别? 在我看来,一把钥匙就足够了。假设我有钥匙,只有我和服务器知道。我用这个键创建了一个HMAC哈希,并进行了一个API调用。在服务器上,我们再次创建HMAC哈希,并将其与发送的哈希进行比较。如果是相同的,则呼叫经过身份验证。 那为什么要用两把钥匙呢? 编辑:或者该API密钥用于查找API机密?

  • 我试图保护Spring BootAPIendpoint。我希望只传递api密钥和秘密作为头的一部分来调用api。我尝试了这个链接中发布的代码。但是在头中使用授权调用api时拒绝访问。使用API key和secret保护Spring Boot API我想知道我应该作为头部的一部分传递什么,这样我就可以从API获得成功的响应。我做了以下步骤:我在application.properties中添加了以下

  • 我成功地实现了在terraform中创建敏感资源的流程,在任何时候都不会透露敏感细节是什么,因此在我们的github repo中不会以纯文本存储。我让TF创建一个服务帐户,它与SA密钥相关,然后创建一个引用SA密钥输出的GCP密钥。 我现在想看看是否有任何方法可以对一些预定义的数据库密码执行相同的操作。流量会略有不同: 手动创建GCP secret(在secrets manager中),该密码的值

  • 我为Jetty 9和Kafka使用ssl密钥库。我需要提供密钥库和密钥密码来访问密钥库和私钥。但是,我不想在配置文件中以明文形式提供这些密码。还有哪些其他选项可以安全地提供/加密密码?每种方法的优缺点是什么?