如何与同一物理智能卡上的多个 javacard 应用程序交互(如 yubikey)

Posted

技术标签:

【中文标题】如何与同一物理智能卡上的多个 javacard 应用程序交互(如 yubikey)【英文标题】:How to interact with multiple javacard applications on the same physical smartcard (like yubikey) 【发布时间】:2020-04-02 23:45:50 【问题描述】:

我已经在我的 2.2.2 javacard 上安装了流行的 IsoApplet (https://github.com/philipWendland/IsoApplet),并且能够使用 OpenSC 项目中的 pkcs11-toolpkcs15-tool 在卡上生成私钥并使用它们进行身份验证通过 SSH 连接到服务器。

另外,我能够成功地使用我的 Yubikey 5 (https://www.yubico.com/products/services-software/personalization-tools/challenge-response/) 的质询-响应来增加解密 KeepassXC 数据库的安全性。

现在,我想将https://github.com/arekinath/YkOtpApplet 添加到具有 IsoApplet 的同一个 javacard 中。外部应用程序如何与 javacard 上的单独应用程序交互?我可以将这两个应用程序放在同一个 javacard 上吗?限制只是卡上的存储空间吗?

我有两张卡可用:

恩智浦 JCOP3 J3H145 Java 卡 3.0.4 JavaCOS A22 155K Java 卡 2.2.2

【问题讨论】:

据我所知,JavaCard 上的每个应用程序都通过Application Id 标识。您的应用程序已经有 tis Id。 【参考方案1】:

是的,您可以将这两个应用程序放在同一张卡上,唯一的限制是卡上的永久存储空间(除非其中一个应用程序与您的卡不兼容,例如,如果它需要一些由卡操作系统)。

每个应用程序都有一个标识符,想象地命名为 AID,“应用程序 ID”,当应用程序安装在卡上时分配。当外部系统想要与卡交互时,第一个命令(称为SELECT)使用 AID 作为参数选择它想要与之交谈的应用程序。然后任何后续命令都会路由到该应用程序,直到卡被重置或接收到另一个应用程序的 SELECT

【讨论】:

以上是关于如何与同一物理智能卡上的多个 javacard 应用程序交互(如 yubikey)的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaCard 中将字节转换为短字节

JavaCard 存储(秘密)数据

多个硬盘挂载到同一个目录

JAVACARD减少应用开发风险的建议

Cassandra 多个节点位于同一服务器上的不同数据中心

验证充气城堡上的 javacard 签名 ALG_ECDSA_SHA