Я пытаюсь сгенерировать пару открытого/закрытого ключа, используя кривую ECDSA secp256k1
При генерации открытого ключа из ec256.pem (закрытый ключ) возникает следующая ошибка:
"Загрузить ключ "ec256.pem": неверный формат"
Команды, используемые для генерации закрытого ключа:
openssl ecparam -name secp256k1 -out secp256k1.pem
openssl ecparam -in secp256k1.pem -genkey -noout -out ec256.pem
chmod 400 ec256.pem
Команда, используемая для генерации открытого ключа:
ssh-keygen -y -f ec256.pem
Below is the error thrown on running the above cmd ,
Load key "ec256.pem": invalid format
Используемая версия:
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips
Мне нужно сгенерировать открытый ключ в формате ssh для закрытого ключа ec256.pem
решение1
Если я посмотрю на кривые, которые необходимо поддерживать встандарт RFC 5656: «Интеграция алгоритма эллиптической кривой в транспортный уровень Secure Shell» (раздел 10)то я не вижу никакой поддержки, указанной для secp256k1. Конечно, реализации все еще могут реализовать это, но это будет стоить несовместимости с другими реализациями.
Поэтому я думаю, что простая причина, по которой закрытый ключ не может быть проанализирован, заключается в том, что его формат не поддерживается. Если вы просто замените кривую на secp256r1 (случайная простая кривая, а не кривая Коблица secp256k1, обратите внимание на "r" вместо "k" там), то все будет работать гладко и на том же или более высоком уровне безопасности. Структура закрытого ключа идентична кривой secp256k1, поэтому это ясно показывает, что проблема в кривой, а не в формате файла.
В качестве альтернативы вы можете выбрать более изысканный вариант.кривая Ed25519, вероятно, за счет обратной совместимости и дополнительных проблем. Это может быть несовместимо с командной строкой OpenSSL,см. комментарий ниже.