本文へスキップ
AZ Tools

SSH 公開鍵インスペクター

authorized_keys や known_hosts にすでに入っている行を貼り付けると、その中身が実際にどうなっているかを表示します。鍵ごとに、アルゴリズム、行の名前から推測したのではなく鍵素材から直接読み取った本当の鍵長、いまの OpenSSH が出力する形式の SHA256 フィンガープリント、古いサーバーやクラウドのコンソールがまだ表示するコロン区切りの MD5 フィンガープリント、そして付いているコメントとオプションを示します。たいていはそのファイルを開いた理由がここで片づきます。この六つのうちどれが失くしたノート PC のものか、このホスト鍵は公開されているフィンガープリントと一致するか、といったことです。さらに、鍵の行をざっと見ただけでは気づけない問題も拾います。アルゴリズム名は行の先頭語と base64 ブロブの内部の二か所に書かれますが、サーバーが実際に照合するのは後者だけなので、コピー&ペーストで名前だけが変わった鍵は見た目はまったく正常なまま、黙って認証に失敗します。アルゴリズム名と食い違う ECDSA の曲線名、base64 としては解けるのに内部が切れているブロブ、2048 ビット未満の RSA、そして OpenSSH が 7.0 で既定で無効化し 9.8 で完全に削除した ssh-dss も同様です。誤って秘密鍵を貼り付けた場合は処理を拒否し、その旨を表示します。すべてブラウザー内で動作し、鍵が送信されることはありません。

使い方

  1. 公開鍵の行を一つ以上貼り付けます。authorized_keys や known_hosts のファイル全体でも動作し、# で始まるコメント行は読み飛ばします。
  2. 公開されているホスト鍵のフィンガープリントと照合するときは SHA256 を、確認先のシステムがまだ旧形式を出すなら MD5 を使います。
  3. 鍵長とアルゴリズムから入れ替えるべき項目を探します。ssh-dss すべてと、2048 ビット未満の RSA が対象です。
  4. 行を消す前にコメントとオプションを見て、それぞれの鍵がどの端末のものかを確かめます。
  5. オレンジ色で示された項目は、行の見た目どおりには動かない鍵です。信用する前に警告を読んでください。

よくある質問

ssh-keygen が出したフィンガープリントと一致しないのはなぜですか。
違うハッシュ形式どうしを比べている可能性が最も高いです。OpenSSH 6.8 以降の既定はパディングを外した base64 で表す SHA256(SHA256:uNiVzt… の形)で、それ以前はコロン区切りの十六進の MD5 でした。まったく同じバイト列に対するフィンガープリントなのでどちらが正しいということはありませんが、見た目はまるで違います。このツールは両方を出すので、相手が示している方に合わせて比べてください。両方とも違うなら鍵そのものが違います。フィンガープリントの対象は base64 ブロブだけなので、コメントやオプションを変えても値は変わりません。
行に書かれたアルゴリズムと鍵の中のアルゴリズムは何が違うのですか。
OpenSSH の公開鍵の行はアルゴリズム名を二度書きます。一度は先頭の語として、もう一度は base64 ブロブ内の最初の長さ付きフィールドとしてです。鍵の一部なのはブロブの中だけで、先頭の語は単なるラベルにすぎず、通常の作業でこの二つが一致しているか確かめる箇所はありません。そのため手で編集した行や、二つの鍵を取り違えて貼り合わせた行は、ssh-rsa と書かれているのに中身は Ed25519 という状態になり得ます。ファイルの中ではごく普通に見えて、ただ認証だけが通りません。このツールは両者を比較し、食い違っていれば知らせます。
ここに鍵を貼り付けても安全ですか。
公開鍵なら安全です。そもそも公開する前提のものですし、このページはそれをどこにも送りません。解析も二つのハッシュもブラウザー内で動くので、ページを開いてからネットワークを切っても動き続けることで自分で確かめられます。秘密鍵は話が別です。このページを含め、どんなウェブページにも秘密鍵を貼り付けないでください。入力が PRIVATE KEY のヘッダーで始まる場合、このツールは黙って解析せず処理を拒否してその旨を表示します。
SSH の鍵は何ビットにすべきですか。
新しく作るなら Ed25519 が一般的な推奨です。256 ビット固定で、短く速く、間違えられるパラメーターがありません。古いサーバーの都合で RSA が必要なら 2048 ビットが現在の下限で、4096 ビットがよく使われます。2048 ビット未満は最近の OpenSSH と多くの認証局が拒否します。ただし RSA のビット数と Ed25519 のビット数は比較できる値ではありません。測っているものが違うので、256 ビットの Ed25519 鍵はおよそ 3072 ビットの RSA 鍵に相当する強度です。Ed25519 が使えない環境では nistp256 上の ECDSA でも構いません。
ssh-dss の鍵は動いているのに、なぜ警告が出るのですか。
古い何かがまだ受け付けているから動いているだけです。OpenSSH の DSA 鍵は 1024 ビット固定で現在のあらゆる推奨値を下回り、実装自体が悪い乱数に対して際立って弱く、ノンスが一度でも重なれば秘密鍵がそのまま漏れます。OpenSSH は 7.0 で ssh-dss を既定で無効化し、9.8 ではコードごと削除したので、サーバーを更新した瞬間に警告もなく受け付けられなくなります。authorized_keys にこの種類の鍵がまだ残っているなら、更新の後ではなく前に入れ替えておく方が安全です。
known_hosts の行や証明書も読めますか。
known_hosts の行は扱えます。先頭のホストパターンを鍵の一部と取り違えずに分離し、|1| で始まるハッシュ化された項目や @cert-authority、@revoked といったマーカーにも対応します。authorized_keys のオプション文字列(command="…"、no-pty、from="…")も同じように分離します。OpenSSH の証明書(*-cert-v01@openssh.com 系)は認識してフィンガープリントを計算しますが、本体は解析しないので、プリンシパルや有効期間をここで見ることはできません。

関連ツール