我是 Java 卡开发的新手。我想知道我们如何在 Java 卡小程序中存储安全密钥值。因为我想使用 PKI(公钥基础设施)进行身份验证。有可能吗?如果是,我们如何将密钥存储在 java 卡小程序中。
问问题
1776 次
2 回答
2
是的,这是可能的,因为 javacard 支持非对称加密,即 RSA。
您可以在创建小程序期间使用预定义的数组、小程序特定的安装参数或专有的 APDU 来实例化您的密钥。然后将私钥存储在RSAPrivateKey
.
如果您的卡支持全球平台,请查看卡规范。它们提供了多种按键加载和内容加载方式。
于 2013-06-11T06:12:11.627 回答
2
这当然是可能的,你应该做以下事情:
- 在 card 上生成一个密钥对,尝试获取最大密钥大小(2048 位),注意这可能需要很长时间,如果卡或读卡器不能优雅地处理连接超时,你可能会遇到麻烦;
- 在终端上的卡上创建一个 PKCS#10 证书请求 - 这是一个数据结构,它使用 ASN.1 DER 编码;
- 使用密钥对的私钥对PKCS#10 请求进行签名;
- 将 PKCS#10 请求发送到证书颁发机构 (CA);
- 导入返回的证书;
您的 Java 卡应支持 RSA 或 EC 密钥对生成和签名/验证操作。现在大多数卡都有,但可能有一些卡没有不对称协处理器。
这个答案假设您创建了一个新的密钥对,因为使用旧的私钥不太安全。如果您想加载现有的私钥,您可以简单地调用 的所有设置器RSAPrivateKey
,或者调用更快的RSAPrivateCrtKey
. 这两个对象都需要使用 Java CardKeyBuilder
实例创建。
请注意,这可能需要大量知识。使用像MuscleCard这样的开源解决方案可能会更好。
于 2013-06-12T21:59:40.997 回答