如何使用我们在 SD 卡中创建的密钥(兼容全球平台的智能卡)

Posted

技术标签:

【中文标题】如何使用我们在 SD 卡中创建的密钥(兼容全球平台的智能卡)【英文标题】:how to use the keys we have created in SD card(smart card compliant to global platform) 【发布时间】:2012-06-28 09:56:26 【问题描述】:

我实际上正在做一个使用 SD 卡(使用 java 卡技术的智能卡)来实现一些功能的项目,例如:与另一张卡(客户端)进行相互身份验证。所以我写了一些java卡小程序,但现在我有一个问题:

从卡片规范或全球平台规范的那些参考资料中,我没有找到一种方法来重用卡片上的密钥(不在卡片外创建密钥存储库), 首先我试图在 api dispo 中找到一些方法,但我没有找到它;然后实际上我必须在 java 卡小程序中编写程序,所以我如何检索/访问/使用卡上现有的键集;为了在身份验证中使用加密?

有人可以帮忙吗?

【问题讨论】:

对于一个对于了解全球平台的人来说可以接受(如果写得不好)的问题,已经对新用户没有任何解释的情况下进行了两次接近投票。请不要在没有评论的情况下关闭。欢迎,刘。 【参考方案1】:

只需将密钥保存到小程序中的变量中即可。默认情况下,所有变量都是持久的。

您当然可以实现导入/导出功能,允许在小程序安装后将现有密钥对安装到小程序中。

更新

不要处理安全域 - 如果您想从小程序中访问密钥,请将其存储在其中。

例如,使用 RSA 密钥,您可以逐个字段地导入它(例如 RSA 公钥的模数和指数)。对于导入,您必须将所有内容传输到 byte[] 表单中。然后可以使用一个或多个 APDU 将字节数组传输到卡中。如果字节数组对于一个 APDU 的有效载荷数据来说太长,则需要多个 APDU。

一旦您传输了指数或模数数据,您就可以创建公钥实例,然后设置它的组件。

RSAPublicKey pub = KeyBuilder.buildKey(ALG_RSA, LENGTH_RSA_1024);
pub.setExponent(...);
pub.setModulus(...);

如果您将创建的 RSAPublicKey 实例保存在您的小程序类的字段变量中,您可以确定它是持久保存的。

您可以为其他加密算法创建私钥和密钥。

【讨论】:

谢谢你的回复,但你能解释清楚一点吗? “导入/导出?”我们在java卡小程序代码中实现了吗?但是通过在java card api中使用哪种方法?对不起,但我对这个域有点新(事实上,现在我们有一个工具/软件,我们可以直接在 SD 卡上的安全域中添加新密钥,所以目前我们想直接使用这些密钥,但不创建通过加密方法在我们的代码中) 是的,我在api中也看到了,有很多方法可以处理按键操作;但这是否意味着我在软件卡上创建的密钥数据库以后不能在我的代码中重用?但是那个软件有什么好处呢?此外,例如,这种类型的java卡也有全球平台的java/c++应用程序,我们可以在SD卡上执行PUT KEYS/存储数据/安装小程序等。如果他们放在卡里的东西不能在以后的程序中使用,那么做这样的努力是不是很奇怪? 它们可以重复使用,正如我在回答中所写,但不是直接重复使用。它们通常仅用于“个性化”。全局平台密钥用于管理卡上的小程序(例如,通常需要 MAC 密钥才能将小程序上传到卡。有关更多信息,请参阅 GlobalPlatform 规范。 据我所知,在小程序中使用 SD 密钥的唯一方法是使用 org.globalplatform.GPSystem.getSecureChannel() 获得的 org.globalplatform.SecureChannel 将安全消息传递给 SD。 没有什么能阻止您使用相同的 API(即 PUT KEY)对您的小程序进行密钥管理。但是你必须自己实现它。【参考方案2】:

Java 卡小程序没有任何机制可以从 PUT 到相关安全域的密钥创建 Java 密钥对象。小程序可用的 GP 服务来自 org.globalplatform.GPSystem 类,包括访问安全通道、持卡人验证、锁定卡等。设备上的 Java 卡小程序也可以发布自己的服务。

可以通过颁发者安全域 (ISD) 加载小程序,然后它与该安全域相关联。因此,它可以访问基于 ISD 密钥的安全通道实现。

org.globalplatform.Application.processData() 方法将在applet 可选择之前处理STORE DATA APDU。请参阅 GP 卡规范 v.2.3.1 的第 7.3.2 节。小程序可选择后,小程序可以处理安全通道 APDU (here) 并将安全通道实现委托给 ISD。

如果传入的数据包含密钥材料,则小程序可以将这些密钥字节传输到 Java Key 对象。

【讨论】:

以上是关于如何使用我们在 SD 卡中创建的密钥(兼容全球平台的智能卡)的主要内容,如果未能解决你的问题,请参考以下文章

贴片SD卡移植FATFS文件系统

系统的谈下STM32H7的SD卡驱动兼容性问题,现在兼容性很强,主流厂家16GB以上容量全部通过

通过 C# 连接到在 XAMPP 中创建的数据库

Android判断SD卡是不是存在的实现

即使令牌是在邮递员中创建的,JWT 令牌也会返回空

如何导出在 storybook 中创建的 React Native 组件以便在实际应用中使用?