Назад | Перейти на главную страницу

Как мне импортировать ключ RSA SSH в GPG в качестве _primary_ закрытого ключа?

В настоящее время у меня есть ключ SSH, который я использовал некоторое время, и я хотел бы начать использовать GnuPG с новым набором ключей. Однако, учитывая, что я использовал свой ключ много лет, я хотел бы по-прежнему использовать этот ключ в GPG в качестве основного / первичного ключа. Я пробовал импортировать ключ через эти инструкции.

Но я получаю то, что считается «подключом». Более того, если я попытаюсь импортировать его без создания стандартного ключа GPG, GPG даже не увидит этот подключ. (Я предполагаю, что подключ должен быть сначала подписан основным ключом.)

Как использовать этот ключ в качестве основного в secring.gpg?

Простой ответ: Вы этого не сделаете.

Ключи SSH и ключи GnuPG (фактически, OpenPGP) совершенно разные, хотя оба протокола могут использовать пары ключей RSA.

И вообще, зачем тебе это делать? Даже если бы вы использовали тот же ключевой материал для создания своего ключа PGP, вам все равно нужно было бы распространять свой ключ как ключ PGP. Скорее всего, вы не распространяли свой открытый ключ SSH людям, с которыми ведете переписку, поэтому с точки зрения распространения ключей нет никакой разницы: им нужно будет получить от вас открытый ключ. И даже если вы распространяли свой открытый ключ SSH среди других людей, им необходимо было бы предпринять некоторые дополнительные шаги, чтобы иметь возможность импортировать его в свою реализацию OpenPGP, что может быть, а может быть, и нелегко.

Так как касперд Совершенно верно указано, что должен быть только один способ интерпретации (в частности) подписи. Если бы вы использовали тот же ключ как для PGP, так и для SSH, если кто-то может обманом заставить вас подписать специально созданное сообщение (что является предполагаемой возможностью при определенных атаках на систему подписи) в одном, то даже если обе системы изолированы друг от друга, можно создать такое сообщение. таким образом, который имеет одно значение в одной из систем, но другое значение в другом. Это само по себе было бы уязвимостью. (Можно использовать? Кто знает. Но зачем рисковать?)

Пары ключей PGP и SSH являются долгосрочными ключами, которые используются для защиты эфемерных симметричных ключей (сообщения и сеанса), а также для проверки подлинности удаленной стороны. Это делает закрытый ключ PGP или SSH гораздо более важной целью для злоумышленника, чем соответствующий симметричный ключ. Если вы используете один и тот же ключевой материал для обоих, и злоумышленник может это понять, он только увеличивается ценность успешной атаки на эту пару ключей.

Не рассматривая подробно ни один из протоколов, я полагаю, что признание того, что один и тот же ключевой материал используется в обоих, вероятно, было бы довольно тривиальным, поскольку открытый ключ в основном передается в открытом виде.

Просто сгенерируйте новый ключ PGP. Если хотите, сделайте его RSA такой же длины, что и ваш SSH-ключ. (Ни один здравомыслящий человек в любом случае не будет смотреть на это гораздо внимательнее, чем проверка отпечатка пальца.) Затем раздайте открытый ключ людям, с которыми вы хотите вести переписку, в виде ключа PGP. Это будет намного проще для всех и, скорее всего, безопаснее за счет небольшого количества энтропии из случайного пула энтропии вашей системы, который в любом случае следует быстро пополнять.


Если у вас есть несколько ключей на вашем секретном связке ключей и хотите указать, какой из них следует использовать по умолчанию, используйте default-key и возможно default-recipient{,-self} директивы в вашем ~ / .gnupg / gnupg.conf.

Вы можете преобразовать SSH-ключ в ключ OpenPGP с помощью инструмента pem2openpgp из проект обезьяны. Затем этот ключ может быть импортирован gnupg как обычная пара закрытого / открытого ключей. Как упоминается в другом ответе, это обычно не очень хорошая идея, потому что ssh не имеет концепции сертификатов, поэтому вы эффективно добавляете возможность к существующему ключу, которой у него не могло быть раньше. В криптографии это вообще недопустимо.

Я все равно сделал это с одним из моих ключей ssh, но я добавил пару ключей к другому моему ключу OpenPGP как подключ, который имеет только один флаг возможности: аутентификацию. Этот флаг предназначен для таких ситуаций, когда вы не хотите ничего подписывать или шифровать с помощью пары ключей (то есть --encrypt и --sign параметры для gnupg), но вы хотите, чтобы он был в вашем ящике для ключей для аутентификации с помощью OpenSSH и gnupg-agent.

Подробнее см. Документацию monkeysphere.

Могут быть веские причины преобразовать обычный ключ в формате PKCS для импорта в gpg.

Например, если вы хотите поместить его на смарт-карту. Возможности, которые предоставляет gpg с помощью команд card-info и card-edit, очень полезны для этой цели, так почему бы не использовать их в качестве инструмента? Единственное препятствие, которое необходимо преодолеть, - это ... а именно: импорт ключа из стандартного формата PKCS # 8 (или "сырого" формата RSA PKCS # 1) в хранилище ключей gpg для дальнейшей обработки.

Итак - обратите внимание на мое возражение против утвержденного ответа! :)

Фактически полезный ответ на такой вопрос можно найти здесь: https://unix.stackexchange.com/questions/276317/how-can-i-import-a-key-in-pem-format-not-openpgp-into-gpg

Используйте это в Ubuntu 16.04 или Windows WSL.

sudo apt install -y monkeysphere
cat key.pem | PEM2OPENPGP_USAGE_FLAGS=authenticate pem2openpgp "Key <key@example.com>" > key.pgp

Импортировать карту. Можно сделать в Windows или Linux.

gpg --import key.gpg

Перейти на карту

Найдите идентификатор ключевой подписи.

gpg --list-key

Перенести ключ аутентификации на карту

gpg --edit-key FFFFFFFFFFF
keytocard

Выберите номер для гнезда аутентификации.

Вы здесь закончили.

Не забудьте удалить ключ из связки ключей gpg, если вы используете карту. Используйте идентификатор ключа, указанный выше.

gpg --delete-secret-key FFFFFFFFFFF

Разное

Не требуется, но может быть полезно для получения ключа в текстовом формате pgp.

gpg -a --export FFFFFF > key.asc