Кодировать 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.