在 Java 卡上编码公钥

Encode publicKey on Java Card

如何在 Java 卡上对 ECDSA 公钥进行编码,以便我可以在另一个平台上对其进行解码(例如,在响应 APDU 中发送编码密钥并在标准 Java 应用程序中对其进行处理)? Java 上的 keyPair.getPublic().getEncoded() 可以使用 PKCS#8 编码来解决问题,但据我所知 getEncoded() 在 Java 卡平台上不可用。

getEncoded() 方法 returns 主要编码格式的密钥,如果密钥不支持编码,则为 null。所以你不需要将它用于你的目标。你可以简单地使用向下转换为 ECPublicKey:

ECPublicKey pubKey = (ECPublicKey) keyPair.getPublic()

上一行中的 pubKey 等同于 Java 应用程序中 getEncoded() 方法的输出。

你可以这样实现这个功能:

卡面:

  • 1 KeyPair.getPublicKey() --> public键;
  • 2 publicKey.getW() --> W;
  • 3向外发送W;

标准java应用端:

  • 1得到W个数据字节;
  • 2 W 数据字节 --> ECPoint;
  • 3 使用步骤 2 中生成的 ECPoint 构建公钥使用 class ECPublicKeySpec;
  • 4 在您的应用程序中使用 public 键;