如何在 APDU (Javacard) 中发送我的 public 密钥?
How can I send my public key in an APDU (Javacard)?
我正在尝试从 APDU 中的密钥对发送我的 public 密钥,以便可以在另一个程序中验证签名。到目前为止,我一直无法找到将密钥放入 APDU 缓冲区的方法。
我在网上找到了使用 RSAPublicKey.getExponent()
将密钥存储在字节数组中(然后将其添加到缓冲区)的解决方案,但由于我没有使用 RSAPublicKey,所以这并没有太大帮助。这是唯一的方法吗?我是否需要使用 RSAPublicKey 而不是密钥对,或者是否有某种方法可以将密钥对中的 public 密钥放入 APDU 缓冲区?
这是我的密钥生成代码:
KeyPair key = new KeyPair(KeyPair.ALG_RSA, (short)5120);
key.genKeyPair();
我面前没有有效的 JavaCard IDE,但应该可以使用:
KeyPair keyPair = new KeyPair(KeyPair.ALG_RSA, (short)xxx);
keyPair.genKeyPair();
RSAPublicKey pubKey = (RSAPublicKey) keyPair.getPublicKey();
short len = pubkey.getExponent(apdu.getBuffer(), (short)0);
从这里继续...
首先,RSA public 密钥由模数和指数组成。首先,您需要使用 getPublic() 并恢复具有 RSAPublicKey 接口的对象,该接口公开 getExponent 和 getModulus 方法,这些方法将为您提供可以放入 APDU 缓冲区的字节数组。
Public 指数可能类似于 0x010001,但模数将是您声明为 KeyPair 参数的位长。
对于如此长的模数,您将需要扩展 APDU 或将其拆分为多个 APDU 交换来检索。为了兼容性,我通常会推荐第二种方法,但如果你处理的系统肯定会在两端处理扩展的 APDU,你可以尝试一次性完成。
我正在尝试从 APDU 中的密钥对发送我的 public 密钥,以便可以在另一个程序中验证签名。到目前为止,我一直无法找到将密钥放入 APDU 缓冲区的方法。
我在网上找到了使用 RSAPublicKey.getExponent()
将密钥存储在字节数组中(然后将其添加到缓冲区)的解决方案,但由于我没有使用 RSAPublicKey,所以这并没有太大帮助。这是唯一的方法吗?我是否需要使用 RSAPublicKey 而不是密钥对,或者是否有某种方法可以将密钥对中的 public 密钥放入 APDU 缓冲区?
这是我的密钥生成代码:
KeyPair key = new KeyPair(KeyPair.ALG_RSA, (short)5120);
key.genKeyPair();
我面前没有有效的 JavaCard IDE,但应该可以使用:
KeyPair keyPair = new KeyPair(KeyPair.ALG_RSA, (short)xxx);
keyPair.genKeyPair();
RSAPublicKey pubKey = (RSAPublicKey) keyPair.getPublicKey();
short len = pubkey.getExponent(apdu.getBuffer(), (short)0);
从这里继续...
首先,RSA public 密钥由模数和指数组成。首先,您需要使用 getPublic() 并恢复具有 RSAPublicKey 接口的对象,该接口公开 getExponent 和 getModulus 方法,这些方法将为您提供可以放入 APDU 缓冲区的字节数组。 Public 指数可能类似于 0x010001,但模数将是您声明为 KeyPair 参数的位长。
对于如此长的模数,您将需要扩展 APDU 或将其拆分为多个 APDU 交换来检索。为了兼容性,我通常会推荐第二种方法,但如果你处理的系统肯定会在两端处理扩展的 APDU,你可以尝试一次性完成。