1

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

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

有人可以帮忙吗?

4

2 回答 2

0

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

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

更新

不要处理安全域——如果你想从你的小程序中访问一个密钥,把它存储在里面。

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

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

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

如果将创建的 RSAPublicKey 实例保存在 applet 类的字段变量中,则可以确保它是持久保存的。

与您可以为其他加密算法创建私钥和密钥的方式相同。

于 2012-06-28T13:57:24.177 回答
0

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 节。在applet 可选择之后,applet 可以处理安全通道APDU(此处)并将安全通道实现委托给ISD。

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

于 2018-10-02T20:51:12.273 回答