Кодировать publicKey на Java-карте

Как кодировать ECDSA PublicKey на Java Card, чтобы после этого я мог декодировать его на другой платформе (например, отправив закодированный ключ в ответный APDU и обработав его в стандартном приложении Java)? keyPair.getPublic().getEncoded() на Java справился бы с кодировкой PKCS#8, но насколько я знаю getEncoded() недоступно на платформе Java Card.

2 ответа

Решение

Вы можете реализовать эту функцию следующим образом:

Сторона карты:

  • 1 KeyPair.getPublicKey () -> publicKey;
  • 2 publicKey.getW () -> W;
  • 3 Отправьте W на улицу;

Стандартная сторона приложения Java:

  • 1 получить W байтов данных;
  • 2 байт данных -> ECPoint;
  • 3 Создайте PublicKey с ECPoint, сгенерированным на шаге 2, используйте класс ECPublicKeySpec;
  • 4 Используйте открытый ключ в вашем приложении;

getEncoded() Метод возвращает ключ в его первичном формате кодирования или ноль, если ключ не поддерживает кодировку. Так что вам не нужно использовать это для вашей цели. Вы просто можете использовать приглушение к ECPublicKey:

ECPublicKey pubKey = (ECPublicKey) keyPair.getPublic()

pubKey в приведенной выше строке, равно выводу getEncoded() метод в приложениях Java.

Другие вопросы по тегам