web-dev-qa-db-ja.com

PEM形式とDSA / RSA / ECCの違いは何ですか? (PEMとこれらを混同する可能性があります)?

たとえば、ECC SSHキーを作成する場合、次のコマンドを使用できます。

ssh-keygen -o -a 100 -t ed25519

私が理解しているように、-o引数は、以下を生成するために使用されます。

より一般的に受け入れられているPEMとは対照的に、新しいフォーマットを使用する秘密鍵

これらの「新しいフォーマット」はDSA/RSA/ECCですか、それともPPK対PEMですか? SSH キーの形式とプライベートSSHキー 'ファイル拡張子を混同すると申し訳ありません。 PEMと、引用で言及されている「新しいフォーマット」との主な違いについてお伺いしたいと思います。

19
user123574

まず、私のマシンからのman pageの完全なssh-keygen -oエントリです(ssh-keygenにはバージョンフラグがないようですが、man pageは2016年2月17日のものです)

-o ssh-keygenに秘密鍵を保存させますより互換性のあるPEM形式ではなく、新しいOpenSSH形式を使用。新しい形式では、ブルートフォースパスワードクラッキングに対する耐性が向上していますが、6.5より前のバージョンのOpenSSHではサポートされていません。 Ed25519キーは常に新しい秘密キー形式を使用します。

これは、生成されるファイルのフォーマットに関するものであることがかなり明確に思われます。また、渡したフラグに関係なく、ssh-keygenはEd25519キーのみを新しい形式で保存することに注意してください。


今日の両方の質問 には同じ根本的な質問があったので、それを扱いましょう。

...これらの「新しいフォーマット」DSA/RSA/ECC ...

OK、DSA、RSA、ECCは異なるフォーマットではなく、完全に異なるアルゴリズムであり、互いにまったく無関係です。

これを説明するより良い方法を見つけることができればいいのですが、専門的すぎることなくしてできるかどうかわかりません。これを試してみましょう:httpftpはファイルを転送するための異なる形式である、または.docx.pptxはOfficeドキュメントの異なる形式であると言うのに少し似ています。これらの「形式の違いのみ」と呼ぶのは根本的に間違っており、ソフトウェアは2つのケースで非常に異なることをしています(ただし、同じ最終結果を生成する;ファイルを転送する、またはきれいなドキュメントを作成する)。


次に、フォーマットについて説明します。

秘密鍵をファイルに保存したいですか? [〜#〜] pem [〜#〜] は、一般的な暗号情報を格納するためのファイル形式ですが、他のファイル形式も存在します。 PEMは、プライベートキー、証明書、または暗号化または署名する電子メールのテキストなど、さまざまな用途に使用できます。これは単なる「暗号化されたもの」のコンテナです。

類推時間:Word文書を保存する。すべてのバージョンのOfficeで広く受け入れられている古い.doc形式で保存することも、オープンソースプログラム(PEMも古く、一般的に受け入れられている)で保存することも、新しい.docx形式を使用することもできます( -o OpenSSH形式)。新しい機能は下位互換性がなく、新しい形式(ed25519など)でのみ保存できる場合があります。

(この類推のために@GordonDavissonに感謝します)

下位互換性を除いて、どの形式を選択するかは、実際にはファイルの内容とは関係ありません。

例:

RSAキーを使用したPEM形式。

メッセージが-----BEGIN RSA PRIVATE KEY-----で始まることに注意してください。これは業界全体の標準的なPEM形式です。PEMを読み取ることができるすべてのソフトウェアがこれを読み取ることができます。

$ ssh-keygen -a 100 -t rsa
$ cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAwTLkTDZUisg0M/3BDBOjrmBvJXb8cdfveGG1KQhAhFDLMp5w
XKgGFMy339m3TGB1+ekKoXnX3dcRQtpQbuFeDB59cmKpDGZz7BzfetpjeIOGCzG+
Vt2BnDf2OlKb6EE7tC3PSmFgL0nQPSyz8x7rE7CMOQEnz1tKkK9Gpttcku8ifwmd
LAHlVaTV3BIiFJN23fwe7l0czFaV98iy8YRgk/Av3gRlsBABGT5qD8wPiI4Ygpxv
UuT2kq53lhBTWO9hIth5tUU0N7x7QN6/rRSi2uHcmJYXFkpsLie697G17TN5ln3E
X5frsrjVyu0JhjvC5mlRBudSJWcWm/KrcTQxdQIDAQABAoIBAFR6nWtZ4nPhATqu
veg6+jq4vkEim1ZodrUr/FxZ2GRDM+cJctaBPk+ACPMgL099ankB1v0u2x6M+WZD
MiKZ91bTSkVnMMZUUmIvaeU9c3tx/34LnVA8gX0+1zM/hh7zz1iFI3xBwh5LZ3wo
fPNVVLOCYn5WrAK2x48mpX02tG8m0OY5kdCdFW1f6UbCGk3K9ov82yQ+JbjWydOS
ZaS7bnJCRsjDhPm/Ooe2DZ8CKHRO3DOiZAAFYqsosxM2C12+alC+hdKHoJ0pWZWe
eckZiALTENi+PzgSq4ykdBaoreeI84lpIzYQO06rrjM2/fw1x/SQsDYhCsQnNRib
sipl2mECgYEA74rBQDIEWaIVVZ72foeZYOMmAUKCLQtNxVuGl/XoMZO3evN2vbOv
Nw/nn5lVt6PRykVUUl6yb5gHvRSGtGJSB1q6pBVN1EF2sfvUep6mmpEwbSbENiAX
IftE0ap7PKT1aLKbLllwdsJlLCRMJIk07AvsulbkhSC+UmJVkfjblgkCgYEAznkE
fzmWS358MLxb0JM+4v1DO/1ne8z29ddHNppxSNj2Xjf+MMvOY4KaRQa8dMwc3Eqa
1EvPqnK6ila4L08Ai4CyWoGkkkIQBO9jO3mLp24xk6TRo002DbfJRnu4qW4zeryp
gYeFfBzwhc/IQKjXhv8AAfEUFCSYiFaWBsENuw0CgYEAwmyDyCAQqdPFrzYT6cUT
t7EGYtVhpT/cgshz6Rk9uiekL9Y2VWjnWTC+liq1iRUdLSiydRzJhYwHE+/6GaUH
4VJB1PY5soLj3TiCUHg+z4vym1VwwmGvhPRV+jt+RU26ppz5GVic0LeduINJjgoT
e1d+cAwg9PELqQCJZa5wREkCgYBPEuPZAaoAsalIVOro32uHLS1xrSPTsvSlxFO+
orleB9Ga1eDguT0KuTrx0pmcNYucBmpzgbE/ev7b+khBvgTcaGZl6R6o8OoHqdKc
NXl5nucXv1iWLPzVlhxchQd8w/qtN9HHDKrflIm9BY2Qzdj1F3XeSIDDEhzkohyE
66yhhQKBgGh9knh8SxnVxaPk0Rk/bQope9AwIDuIpfsf4KC/EPSZmMNHP8xBh8al
eymUot7Pj6dck31V4C3q74NKobY3p6fZ5t7tP9K6Br+J/FQFhvAdFAwpTD2Bks5H
fhZO5cniPpydb0YvOnoaVnb0nzXVsf1jIgPKfsCsZxoyE0jLb9oV
-----END RSA PRIVATE KEY-----

Ed25519キーを使用したOpenSSH形式:

メッセージが----BEGIN OPENSSH PRIVATE KEY-----で始まることに注意してください(ECCキーがであるはるかに短いため)短いことに加えて、これは他のソフトウェアとは異なるOpenSSH固有の形式です読み取ることができる場合とできない場合があります。

$ ssh-keygen -o -a 100 -t ed25519
$ cat .ssh/id_ed25519.o
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACC7gIlwBMp+H6VVNZSHI0in2iCU/yi67WfeFPfuyAdkBAAAAJh7nk7je55O
4wAAAAtzc2gtZWQyNTUxOQAAACC7gIlwBMp+H6VVNZSHI0in2iCU/yi67WfeFPfuyAdkBA
AAAEBHl+qBAosBAUIGuvdDR8gJN/PEhempLe4NtyKiO7hCPLuAiXAEyn4fpVU1lIcjSKfa
IJT/KLrtZ94U9+7IB2QEAAAAEm1pa2VATWlrZS1zYW1zdW5nMQECAw==
-----END OPENSSH PRIVATE KEY-----
32
Mike Ounsworth

以下は、OpenSSH 7.8リリースノート2018-08-24からの抜粋です。 ( http://www.openssh.com/txt/release-7.8


このリリースには、既存の構成に影響を与える可能性のあるいくつかの変更が含まれています。

ssh-keygen(1):OpenSSLのPEM形式を使用する代わりに、デフォルトでOpenSSH形式の秘密鍵を書き込みます。 OpenSSH形式は、2014年以降のOpenSSHリリースでサポートされ、ソース配布のPROTOCOL.keyファイルに記述されていますは、オフラインパスワードの推測に対する実質的により優れた保護を提供し、秘密鍵のキーコメントをサポートします。必要に応じて、キーを生成または更新するときにssh-keygenの引数に「-m PEM」を追加することで、古いPEMスタイルのキーを書き込むことができます。

3
ColdCold

これらの「新しいフォーマット」はDSA/RSA/ECCですか、それともPPK対PEMですか?

DSA/RSA/ECCは、公開鍵暗号で使用されるアルゴリズムであり、フォーマットではありません。これらのアルゴリズムに使用されるキーは、実際のキーのバイナリデータのさまざまなラッパーやエンコーディングなど、さまざまな形式で保存できます。

-oスイッチは、以前に使用されたPEMとは異なる秘密鍵の新しい形式を適用するために使用されます。この新しい形式は 新しいopensshキー形式とbcrypt pbkdf で説明されています。しかし要約すると、MD5の代わりにパスフレーズで適切な鍵導出関数を使用しているため、攻撃者がパスフレーズで保護された秘密鍵にアクセスした場合の保護が向上します。

1
Steffen Ullrich

より簡単な答えは、PEMはアプリケーションがそれを解析するのを助ける暗号情報へのメタラッパーであるということです。

そして、元の質問で述べられたこれらの3文字の頭字語は、暗号化情報を作成するために使用されます。

0
John Greene