Как, если вообще, ключи SSH отличаются от асимметричных ключей, используемых для других целей, например, почтовом подписании?
Мне предлагают спросить это, частично, потому что на OS X, существуют приложения, доступные для управления ключами SSH (ssh-агент, SSHKeychain, и т.д.), а также приложения, разработанные для управления ключами GPG (Доступ Связки ключей GPG, и т.д.), и по-видимому ne'er двойка, встречаются. Однако я не полагаю, что это - конкретный вопрос OS X.
Состоит в том это разделение проблем, потому что ключи являются очень отличающимися видами, или потому что они хранятся в различных местах, или это по некоторой другой причине или комбинации причин, например, исторических причин?
Ключами SSH является просто RSA, DSA или асимметричные пары ключей ECDSA. Такая пара ключей, сгенерированная OpenSSH, может уже использоваться OpenSSL и большинством других программ.
( .pub
файл, произведенный ssh-keygen
находится в OpenSSH-определенном формате, но это не важно, так как "частный" файл уже содержит и закрытые и открытые ключи.)
Другое программное обеспечение SSH может иметь их собственные форматы устройства хранения данных, такие как RFC 4716 или PPK PuTTY, но они хранят ту же RSA/DSA/ECDSA информацию.
X.509 (используемый SSL, S/MIME) немного более сложен: "частный" ключ является все еще тем же, но вместо пустого файла с открытым ключом у Вас есть "сертификат" – структура ASN.1, содержащая открытый ключ, предмет и имена выпускающего, даты законности. В сертификатах X.509 v3 будут присутствовать расширения, такие как "ключевое использование" и "альтернативное подчиненное имя". Весь сертификат подписывается ключом выпускающего (или самоподписывается, если нет никакого отдельного выпускающего).
Можно легко использовать файл "с закрытым ключом" X.509 для SSH – OpenSSH даже использует тот же формат.
Можно создать сертификат X.509 из простой пары ключей и затем самоподписать его, или можно создать "запрос сертификата" и отправить его, чтобы быть подписанными CA (центр сертификации).
Для отображения информации в сертификате X.509 используйте:
certtool -i < foo.pem
certtool -i --inder < foo.crt
openssl x509 -noout -text < foo.pem
openssl x509 -noout -text -inform der < foo.crt
(certtool
часть GnuTLS.)
OpenPGP (используемый GPG) ключи являются самыми сложными. Что Вы называете "ключом PGP", или "пара ключей PGP" является сложной структурой, названной "сертификатом OpenPGP", содержа:
Все пары ключей имеют биты использования и даты истечения срока: данные знака, сертифицируйте (подписывают) ключи, шифруют, проходят проверку подлинности к сервисам. Первичный ключ по умолчанию имеет "знак", и "сертифицируйте" биты, и первый подраздел должен "зашифровать". Если Вы добавляете подраздел "аутентификации", можно использовать его через gpg-agent
для аутентификации SSH.
Для наблюдения то, что содержит сертификат:
gpg --export joe@example.com | gpg -vv
gpg --export joe@example.com | certtool --pgp-certificate-info
(certtool
часть GnuTLS.)
Сертификаты X.509 и их связанные закрытые ключи появляются в несколько форматов:
DER является двоичным кодированием структуры ASN.1 сертификата. Такие файлы обычно имеют .crt
или .cer
расширения файла (.der
менее распространено, но не невидим).
Файлы формата "PEM" содержат те же DER-закодированные данные, но дополнительно закодированное использование Base64 и между "НАЧИНАЕТ ЭТО" и "КОНЕЦ ЭТО" заголовки. Общее расширение файла .pem
, хотя оба .crt
и .cer
иногда используются здесь также (но никогда .der
).
Для закрытых ключей, принадлежащих сертификатам, формат "PEM" обычно используется – Base64, окруженные заголовками ", НАЧИНАЮТСЯ, ЗАКРЫТЫЙ КЛЮЧ" (введите структуру PKCS#7), или "НАЧИНАЮТ RSA (или DSA) ЗАКРЫТЫЙ КЛЮЧ" (пустой ключ, формат OpenSSL). Иногда ключ находится в отдельном .key
файл, иногда это связывается сертификатом.
PKCS#12 и немного более старый PFX являются зашифрованными контейнерами, хранящими и сертификат и закрытый ключ (часто сертификат выпускающего также). Этот формат используется большей частью программного обеспечения при экспорте или "резервном копировании" сертификатов с закрытыми ключами.
Менее запутывающая ситуация находится в OpenPGP: все данные следуют за тем же двоичным форматом и дополнительно "бронируются" (закодированный Radix64 и между подобными PEM заголовками).
Сохраненный в различных местах и в различных форматах (форматы, используемые PGP, GnuPG, ssh
, и несколько различных форматов X.509, среди других, очень отличаются). Возможно транскодировать между ними в некоторой степени путем смешивания и соответствия правильным опциям к ssh-keygen
, pgp
, gpg
/gpg2
, openssl
, и т.д.; но в целом это не стоит усилия. Кроме того, различные форматы ключа поддерживают различные объемы информации, с ssh
содержание наименее дополнительной информации и X.509 PEM и форматов DER, несущих большинство. Кроме того, Связка ключей OSX является просто зашифрованным ключом / устройство хранения данных значения, таким образом, другой механизм обычно необходим каждому приложению для преобразования между собственным ключом программы + формат метаданных и чем-то, что может быть сохранено в Связке ключей. (Подобные проблемы относятся к кошельку KDE и связке ключей GNOME.)