Я пытаюсь реализовать шифрование PGP на основе апплета Yubikey NEO OpenPGP Smart Card в приложении Java. Кажется, это мрачное искусство, и гуглить это непросто, но вот где я дошел до сих пор:
Карта инициализируется, ключи генерируются с помощью инструмента gpg. Это вообще работает. У меня есть открытый ключ в формате
.asc
, и мне удалось загрузить его вorg.bouncycastle.openpgp
Подключитесь к смарт-карте в USB-адаптере с помощью
javax.smartcardio
API.Выберите апплет OpenPGP
val pgpAID = bytes(0xD2, 0x76, 0x00, 0x01, 0x24, 0x01) val answer = cardChannel.transmit(CommandAPDU(0x00, 0xA4, 0x04, 0x00, pgpAID))
Успешно введите правильный PIN-код на карту
val pin = "123456" return bytes(0x00, 0x20, 0x00, 0x82, pin.length) + pin.toByteArray(Charsets.UTF_8)
- # P6 #
# P7 #bytes(0x00, 0x2a, 0x80, 0x86, data.size) + data + bytes(0x00)
# P8 #
Я понятия не имею, как зашифровать данные и преобразовать их в формат PKCS # 1.
Я также пробовал прочитать тесты реализации карты Yubico OpenPGP, но это только еще один пример "неудачи" (строка 196). Я попытался запустить это, но результат другой: тест ожидает SW=0050
(указывает на исключение?), А я получаю SW=6f00
(нет точного диагноза, согласно basic_organizations.aspx "rel =" noreferrer "> этот документ).
Я создал репозиторий GitHub со всем кодом. Он написан на Котлине, но должен быть легко читаемым.