我实际上正在做一个使用SD卡(使用Java卡技术的智能卡)来实现一些功能的项目,例如:与另一张卡(客户端)进行相互认证。所以我写了一些java card applet,但是现在我有一个问题:
从卡片规范或全球平台规范的那些参考文献中,我没有找到重用卡片上的密钥的方法(而不是在卡片外创建密钥存储库),首先我试图在api dispo中找到一些方法,但我没有找到它;然后实际上我必须用java card applet编写程序,那么我如何检索/访问/使用卡片上现有的密钥集;以便在身份验证中用于加密?
有人能帮上忙吗?
发布于 2012-06-28 13:57:24
只需将密钥保存到applet中的一个变量中。默认情况下,所有变量都是持久的。
当然,您可以实现导入/导出功能,这些功能允许在applet安装后将现有密钥对安装到applet中。
更新
不要处理安全域-如果您想从applet中访问密钥,请将其存储在其中。
例如,使用RSA密钥,您可以逐个字段地导入它(例如,RSA公钥的模数和指数)。对于导入,您必须将所有内容传输到byte[]
格式。则可以使用一个或多个APDU将字节数组传送到卡中。如果字节数组对于一个APDU的有效载荷数据来说太长,则需要多个APDU。
一旦传输了指数或模数的数据,就可以创建公钥实例,然后设置它的组件。
RSAPublicKey pub = KeyBuilder.buildKey(ALG_RSA, LENGTH_RSA_1024);
pub.setExponent(...);
pub.setModulus(...);
如果将创建的RSAPublicKey实例保存在applet类的字段变量中,则可以确保永久保存该实例。
同样,您也可以为其他加密算法创建私钥和密钥。
发布于 2018-10-02 20:51:12
Java card小程序没有任何机制可以从放入关联安全域的密钥创建Java密钥对象。小程序可用的GP服务来自org.globalplatform.GPSystem类,包括访问安全通道、持卡人验证、锁卡等。设备上的Java card applet也可以发布它们自己的服务。
可以通过颁发者安全域(ISD)加载小程序,从而将其与该安全域相关联。因此,它基于ISD密钥获得对安全通道实现的访问权。
org.globalplatform.Application.processData()方法将在小程序可选之前处理存储数据APDU。请参阅GP卡规范v.2.3.1的7.3.2节。在小程序成为可选择的之后,小程序可以处理安全通道APDU (here)并将安全通道实现委托给ISD。
如果传入的数据包含密钥材料,则小程序可以将这些密钥字节传输到Java密钥对象。
https://stackoverflow.com/questions/11242155
复制