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

16

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

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

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

Брендан Берд
источник
В каком смысле вы имеете в виду « закрытый ключ »?
MadHatter

Ответы:

16

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

Ключи 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.

CVn
источник
1
Я согласен с этим ответом. Однако есть еще одна причина не использовать тот же материал ключа. По соображениям безопасности должен быть только один способ интерпретации подписи. Может ли одна и та же подпись быть интерпретирована двумя различными способами, это будет уязвимость. Даже если ssh и gpg сами по себе безопасны, злоумышленник может заставить вас подписать сообщение одним, а затем передать подпись другой программе, где это может иметь другое значение.
Касперд
@kasperd Хороший вопрос. Я исправил ответ; как ты относишься к этому сейчас?
CVn
Звучит хорошо.
Касперд
1
Я думаю, что этот ответ не совсем точен: в monkeysphere есть сценарий использования, в котором вы можете использовать существующие ключи OpenSSH в качестве подразделов только для аутентификации в вашем личном ключе OpenPGP. По крайней мере, я хотел бы использовать это таким образом.
user134450
Эти ключи ничем не отличаются; их метаданные есть.
Foo
5

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

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

Для более подробной информации смотрите документацию по monkeysphere.

user134450
источник
2

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

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

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

Действительно полезный ответ на этот вопрос можно найти здесь: /unix/276317/how-can-i-import-a-key-in-pem-format-not-openpgp-into -gpg

Foo
источник
1

Используйте это в 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
Пожар
источник