web-dev-qa-db-ja.com

sshが使用するRSA、DSA、およびECDSAキーの違いは何ですか?

私の/etc/ssh/ディレクトリには、3つの異なるタイプのsshキーがあることがわかります。

-rw------- 1 root root    607 Oct  4 22:43 ssh_Host_dsa_key
-rw-r--r-- 1 root root    623 Oct  4 22:43 ssh_Host_dsa_key.pub
-rw------- 1 root root    241 Oct  4 22:43 ssh_Host_ecdsa_key
-rw-r--r-- 1 root root    194 Oct  4 22:43 ssh_Host_ecdsa_key.pub
-rw------- 1 root root   1602 Oct  4 22:43 ssh_Host_rsa_key
-rw-r--r-- 1 root root    378 Oct  4 22:43 ssh_Host_rsa_key.pub

SshのRSA、DSA、およびECDSA鍵の違いは何ですか?3つすべてが必要ですか?

それらの違いと使い方を教えてください。

11

これらのファイルは何のためのものですか?

これらは、ホストを一意に識別するホストキーです。 OpenSSHを初めて起動すると、これらのキーペアが生成されます。 SSHクライアントがサーバーに接続すると、特定のアルゴリズムを使用してホストを認証することを通知します。いくつかサポートされているため、OpenSSHは単純に各タイプの1つを生成します。これにより、サーバーを複数のタイプのフィンガープリントで識別できます。

OpenSSHのmanページから引用 ssh(1)

_When connecting to a server for the first time, a fingerprint of the server's
public key is presented to the user (unless the option StrictHostKeyChecking
has been disabled). Fingerprints can be determined using ssh-keygen(1):

    $ ssh-keygen -l -f /etc/ssh/ssh_Host_rsa_key

If the fingerprint is already known, it can be matched and the key can be
accepted or rejected. If only legacy (MD5) fingerprints for the server are
available, the ssh-keygen(1) -E option may be used to downgrade the fingerprint
algorithm to match. 
_

_.pub_で終わるファイルは機密ではありません。それらは、接続を試みるすべてのクライアントに送信されます。その拡張子のないファイルは秘密鍵です。それらが開示された場合、誰でもあなたのSSHサーバーをあらゆるクライアントに偽装することができます。秘密鍵は、送信される公開鍵が実際にサーバーによって所有されていることをクライアントに証明するために使用されます。

SSHサーバーに接続すると、一連のイベントが発生します。

  • SSHクライアントはサーバーに接続し、優先アルゴリズムをアドバタイズします。
  • サポートされている場合、サーバーは必要な公開鍵をクライアントに送信します。
  • クライアントは公開鍵のフィンガープリントを計算します。
  • 最初の接続では、フィンガープリントは_known_hosts_に保存されます。
  • 以降の接続では、フィンガープリントが保存されたものと比較されます。

最初の接続では、指紋がユーザーに表示され、ユーザーは指紋を受け入れるように求められます。これは[〜#〜] tofu [〜#〜]、またはTrust-On-First-Useとして知られています。以降の接続では、指紋はサイレントかつ自動的に検証されます。不一致がある場合、SSHクライアントは接続を拒否し、MITM攻撃が発生している可能性があることをユーザーに警告します。この動作により、最初の接続が本物である限り、今後のすべての接続が本物であることが保証されます。 MITM攻撃、またはSSHサーバーが何らかの理由でホストキーを変更すると、これが無効になり、再認証が必要になります。

どのファイルが必要ですか?

3つすべてを必要とする必要はなく、それらのいずれかを削除できますが、SSHクライアントは、サポートされているフィンガープリントが_known_hosts_ファイル。少なくとも、RSAキーは保持する必要があります。すべてのクライアントがECDSAをサポートしているわけではなく、(EC)DSAにはいくつかのセキュリティ問題があるため、通常は推奨されません。ただし、これらすべてを保持することには欠点はありません。セキュリティの観点から一般的に利用可能なアルゴリズムの概要:

  • [〜#〜] rsa [〜#〜]は評判が良く、どこでもサポートされています。それは非常に安全であると考えられています。一般的なキーのサイズは最大4096ビットで、1024まで低くなります。キーサイズは調整可能です。 RSAを選択する必要があります
  • [〜#〜] dsa [〜#〜]poor randomness when署名の生成により、秘密鍵が漏洩する可能性があります。以前は RFC 4251 のようにどこでも動作することが保証されていましたが、これは当てはまりません。 DSAは1024ビットのみとして標準化されています(FIPS 186-2ですが、FIPS 186-3ではその制限が増加しています)。OpenSSH7.0以降の実際 disable このアルゴリズム。
  • [〜#〜] ecdsa [〜#〜]はより新しく、DSAに基づいています。 DSAと同様に 同じ弱点 がありますが、鍵のサイズが小さい場合でも、通常はより安全であると考えられています。 NIST曲線(P256)を使用します。
  • Ed25519は、リストされていない場合でも、新しいOpenSSHインストールで使用できます。これはECDSAに似ていますが、 優れた曲線 を使用し、DSA/ECDSAとして弱いRNGを使用する場合と同じ弱点はありません。それは一般的に数学的に最強であると考えられています。
16
forest