SSHキーの説明 Ed25519 と ECDSA と RSA(Enterを押さないで)
あなたは ssh-keygen を入力し、Enter を4回押して、RSAに至りました。なぜ Ed25519 が適切な選択であり、ECDSA が間違っていること、そしてRSAが実際に必要となる唯一の状況について説明します。
すべての開発者はこれをしてきました。あなたは ssh-keygen、ウィザードが表示され、キーの種類、ビット長、パスフレーズ、出力パスについて尋ねられます。そして、ランダムアートのフィンガープリントが表示されるまでEnterを繰り返します。おめでとうございます、あなたはRSA-2048キーを持ち、その数字についての理由を理解していません。
短い答え: Ed25519を使用してください。実行 ssh-keygen -t ed25519 -C "you@example.com" をして、2012年のStackOverflowの回答を読むのをやめましょう。このガイドの残りの部分ではその理由を説明し、RSAが実際に必要となる正当なケースについても述べます。
3つのアルゴリズム
RSA
RSA(Rivest–Shamir–Adleman、1977)は、デシadesのインターネットのデフォルトの公開鍵アルゴリズムとして長年にわたり使用されています。その安全性は、大きな整数を因数分解するのが難しいことにより保たれています。そのため、安全に保つには大きな鍵が必要で、少なくとも2048ビット、好ましくは4096ビットが必要です。4096ビットのRSA公開鍵は約800バイトです。すべての接続では、これらの大きな数値に対する計算が行われ、現代の代替手段よりも遅いです。
RSAの唯一の実際のメリットは互換性です。古いSSHサーバー、レガシーなハードウェア、2010年代初期のプロパティネットワークアプライアンスなど、すべてがRSAをサポートしています。オバマ政権時代に設定されたもので、それ以降触られていない場合、RSAが唯一の選択肢になる可能性があります。
ECDSA
ECDSA(楕円曲線デジタル署名アルゴリズム)は、RSAよりも速く、小さい代替案として登場しました。256ビットのECDSA鍵は、3072ビットのRSA鍵と同等のセキュリティを提供します。より優れた数学、小さい鍵、速い演算——これは勝ちです。
問題は、OpenSSHがデフォルトで使用する曲線はNIST曲線(P-256、P-384、P-521)であることです。これらの曲線には正当な懸念があります。NISTが楕円曲線標準に参加した歴史的背景は、その機関がDual_EC_DRBG(NSAに影響を受けたランダム数生成器)を標準化したことに由来し、その生成器にはバックドアが含まれていたことが後に明らかになりました。ECDSA自体は破損していませんが、NIST曲線の定数には不透明な設計基準があります。誰もがそれらが誰かの非対称優位を与えるために選ばれたことを証明できません。ほとんどの開発者はNSAのターゲットではありませんが、「おそらく問題ない」というのは、確実に優れた代替案が存在する場合に受け入れるべきではありません。
Ed25519
Ed25519(Curve25519上のEdDSA)は、あなたが使用すべきアルゴリズムです。Daniel J. Bernsteinによって設計され、完全に公開された設計基準があります。この曲線のパラメータは、何も隠れていない数値から導かれ、不透明な委員会プロセスではなく、公開された数値から導かれています。
実際の数値:Ed25519の公開鍵は68バイトです。署名および検証はRSAやECDSAよりも速く、構造的にタイミング攻撃に耐性があります——秘密に依存するブランチや変数時間の演算は一切ありません。OpenSSH 6.5(2014年)からサポートされています。GitHub、GitLab、Bitbucketはすべてそのサポートを長年提供しています。RSAと比較して劣る点はなく、ECDSAと比較して優れた点がすべてあります。
並べて比較する
| 財産 | RSA(4096ビット) | ECDSA(P-256) | Ed25519 |
|---|---|---|---|
| 公開鍵サイズ | 約800バイト | 約200バイト | 68バイト |
| 同等のセキュリティ | 約140ビット | 約128ビット | 約128ビット |
| 署名速度 | スロー | ファスト | 非常に速い |
| タイミング攻撃に耐性がある | いいえ | いいえ | はい(設計上) |
| 曲線の信頼性の懸念 | なし | NIST曲線(議論の対象) | なし(Curve25519) |
| OpenSSHでのサポート開始 | 常に | 5.7 (2011) | 6.5 (2014) |
| GitHub / GitLab / Bitbucket | はい | はい | はい |
各タイプの生成方法
デフォルトの選択肢——これを使用してください:
ssh-keygen -t ed25519 -C "you@example.com"
古いシステムでRSAが必要ですか?最小4096ビットを使用してください:
ssh-keygen -t rsa -b 4096 -C "you@example.com"
ECDSAを使用する場合、Ed25519を避ける特別な理由がある場合(おそらくありません):
ssh-keygen -t ecdsa -b 521 -C "you@example.com"
UIを好み、フラグを覚えて覚えるのを避けたい場合、 IO ToolsのSSH鍵生成ツール では、アルゴリズム、ビット長、パスフレーズの選択を終端に触れずに行えます。
実際に必要なRSAのケース
Ed25519を使用できない正当なケースがあります:
- 2014年以前のSSHデーモン —— OpenSSH 6.5より古いものはEd25519を受け入れません。珍しいが現実的:埋め込まれたシステム、ネットワークアプライアンス、OpenSSHが更新されていない古いRHEL 6のボックスなどです。
- FIPS-140-2環境 —— 国家機関や一部の規制対象企業環境では、FIPS検証アルゴリズムが義務付けられています。Ed25519はFIPS認証されていません。その環境ではRSA-3072+またはP-384を使用してください。
- 組織内のSSH CAポリシー —— 一部の企業は独自のSSH認証局を運営しており、鍵タイプの要求を強制しています。生成する鍵が登録時に拒否される可能性があるため、生成前に確認してください。
これらの3つのケース以外では、RSAの利点は慣性に過ぎず、正当性はありません。
スキップしたパスフレーズ
いつ ssh-keygen パスフレーズを要求されますが、Enterを押してスキップします。その結果、プライベートキーはディスク上に明文で保存されます。もし誰かがあなたのラップトップを取得すれば、その鍵がアクセスできるすべてのリソース——すべてのサーバー、すべてのGitホスト、すべてのプロダクション環境——を取得できます。パスフレーズを追加してください。使用 ssh-agent ので、セッションごとに一度だけ入力します:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
macOSでは --apple-use-keychain に ssh-add を追加して、パスフレーズが再起動後に保持されます。Linuxでは、ほとんどのデスクトップ環境がssh-agentを自動的に開始します—— echo $SSH_AUTH_SOCK.
を確認してください。
恵 スコアボードが到着しました!
スコアボード ゲームを追跡する楽しい方法です。すべてのデータはブラウザに保存されます。さらに多くの機能がまもなく登場します!
