WordPressサイトの保守作業をSSH経由で行う場面は多い。wp-cliをリモートで叩く、サーバーにログインしてログを確認する、rsyncでファイルを転送する——どれもSSH鍵認証が土台になっている。ところが「鍵を作る時に -t オプションで何を選べばいいのか」は、意外と説明されないまま済まされることが多い。この記事では、代表的な3種類の鍵(RSA / ECDSA / ED25519)が何を根拠に安全性を担保しているのか、そして実務でどれを選ぶべきかを整理する。
補足: SSH鍵認証は「公開鍵暗号」という仕組みを使う。手元に秘密鍵(誰にも渡さない)、サーバー側に公開鍵(渡してよい)を置き、秘密鍵でしか解けない計算問題をサーバーが出題することで、パスワードを送らずに本人確認ができる。
3種類の鍵は何が違うのか
ssh-keygen -t <アルゴリズム名> の <アルゴリズム名> に指定できる代表的な選択肢は次の3つ。
| 種類 | 数学的基盤 | 標準的な鍵長 | 登場時期 |
|---|---|---|---|
| RSA | 大きな数の素因数分解の困難さ | 2048〜4096ビット | 1990年代後半〜(SSHでの利用) |
| ECDSA | 楕円曲線上の離散対数問題 | 256〜521ビット | 2000年代後半〜 |
| ED25519 | 楕円曲線暗号(Ed25519固有のTwisted Edwards曲線) | 固定256ビット相当 | 2011年発表・OpenSSH 6.5(2014年)から対応 |
3つとも「秘密鍵を知らない限り偽装できない」という点では同じ土俵にあるが、根拠にしている数学の種類と鍵の作られ方が異なる。RSAは「素因数分解が難しい」という古典的な一方向性、ECDSAとED25519は「楕円曲線上の離散対数問題が難しい」という比較的新しい一方向性を使う。
同じ「楕円曲線暗号」でもECDSAとED25519は別物である。ECDSAはNIST(米国標準技術研究所)が標準化した曲線パラメータを使うのに対し、ED25519は特定の政府機関が定めたパラメータに依存しない設計で公開された。この違いは実用上の脅威というより設計思想の違いだが、「パラメータの出自を気にする」文脈でED25519が選ばれる理由の一つになっている。
鍵長と処理速度の実感差
同じセキュリティ強度(総当たり攻撃にかかる計算量が同程度)を得るために必要な鍵長は、アルゴリズムによって大きく異なる。RSAで一般的に推奨される2048ビットは、ED25519の256ビット相当と近いセキュリティ強度を持つとされる。鍵のビット数だけを見て「RSAの方が長いから安全」と早合点しないほうがよい。数学的基盤が違えば、同じ強度に必要なビット数もまったく違う。
実務上体感しやすい違いは、鍵の生成・署名・検証にかかる処理時間である。ED25519は鍵長が短い分、署名・検証の計算が高速で、ssh-keygenの実行や毎回のログイン時の負荷が軽い。RSAで4096ビットのような大きな鍵を使うと安全性は高まるが、処理はその分重くなる。日常的に何度もSSH接続する保守作業では、この差が積み重なる。
どれを選ぶべきか——実務判断の軸
結論から言うと、新しく鍵を作るなら現時点ではED25519が第一候補になる。理由は次の3つ。
- 短い鍵で十分な強度が出る: 前述のとおり256ビット相当でRSA 2048〜3072ビットに匹敵する強度を持つ
- 処理が軽い: 鍵長が短い分、生成・署名・検証すべてが高速
- 実装上のミスが起きにくい: RSA実装は歴史的に「乱数生成の質が低いと鍵が推測されやすくなる」等の実装依存の脆弱性が繰り返し報告されてきたが、ED25519は仕様として実装のばらつきが生まれにくい設計になっている
一方で、ED25519を選べない、あるいは選ぶべきでない場面もある。
- 古いサーバー・ネットワーク機器: OpenSSH 6.5(2014年)より前の環境や、対応が限定的な組み込み機器のSSHサーバーではED25519に対応していないことがある。この場合はRSA(2048ビット以上、できれば3072〜4096ビット)を使う
- 社内ポリシーやコンプライアンス要件でRSAが指定されている場合: 監査対応などで特定のアルゴリズムが明示的に要求されるケースでは、その指定に従う
- ECDSA: 前述のNISTパラメータへの依存という設計上の懸念から、新規採用が推奨される場面は限定的。既存環境で使われている場合に無理に置き換える必要はないが、新規発行時にあえてECDSAを選ぶ積極的な理由は乏しい
鍵の作り方(一般的な手順)
# ED25519鍵の生成(推奨・コメントで用途を明記しておくと後で分かりやすい)
ssh-keygen -t ed25519 -C "example-comment"
# 互換性が必要な場合のRSA鍵(3072ビット以上を推奨)
ssh-keygen -t rsa -b 4096 -C "example-comment"
生成時にはパスフレーズの設定を求められる。パスフレーズは秘密鍵ファイル自体を暗号化するもので、万が一ファイルが盗まれても即座に悪用されるリスクを下げる。ここを空欄のまま運用すると、鍵ファイルの管理がそのままアカウントの安全性に直結してしまうため、可能な限り設定しておくのが望ましい。
公開鍵(.pub拡張子のファイル)はサーバー側の ~/.ssh/authorized_keys に追記する。秘密鍵は手元の端末から外に出さないのが大原則で、複数人でサーバーを共有する場合も「鍵ファイルを共有する」のではなく「各人が自分の鍵ペアを作り、公開鍵だけをサーバーに登録する」運用にするのが基本になる。
まとめ
| 判断軸 | 選ぶべき鍵 |
|---|---|
| 新規に鍵を作る(対応環境なら) | ED25519 |
| OpenSSH 6.5より古い環境・組み込み機器 | RSA(3072〜4096ビット推奨) |
| 監査・社内ポリシーで指定されている | 指定されたアルゴリズムに従う |
| 既存のECDSA鍵をどうするか | 動いているものを急いで置き換える必要はないが、新規発行では選ばない |
SSH鍵の種類選びは一度決めてしまえば頻繁に見直すものではないが、根拠を理解しておくと、古い記事や社内ドキュメントが「とりあえずRSA」と書いている理由と、今の標準がED25519に移った理由の両方を切り分けて判断できるようになる。複数のWordPress環境をSSH経由で安全に切り替える運用については、WP-CLIのaliasで複数環境を扱う方法も参考にしてほしい。