SSD Nodes Learn 🎉 VPS $5.50/月〜
ガイド Matt Connor著者 Matt Connor

Ubuntuの耐量子SSHとは?デフォルト設定と確認方法

UbuntuのOpenSSHで耐量子鍵交換がデフォルト有効化された仕組みを解説します。ssh -Q kexコマンドで対応アルゴリズムを確認し、ssh -Gで実際に使用される設定を特定する方法を学びます。ホスト鍵が依然として古典的である理由や、接続時に使用されるハイブリッド暗号の現状を正確に把握しましょう。

耐量子計算機 SSH における変更点

耐量子計算機 SSH は、すでに多くのユーザーに対して有効化されており、設定作業は不要です。現在の OpenSSH クライアントとサーバーが通信する場合、デフォルトでハイブリッド型の耐量子鍵交換が選択されます。これにより、攻撃者が今日の通信を記録し、数年後に解読しようとしても、セッション鍵は耐性を維持します。この保護は実効性のあるものですが、「耐量子 SSH」という言葉が示唆するよりも限定的な範囲を指しています。

まず2つの用語を定義します。SSH (secure shell) は、サーバーにログインするためのプロトコルです。鍵交換(通常は "kex" と表記)は、すべての SSH 接続の最初のステップです。両端で共有秘密を合意し、その秘密鍵で以降のすべての通信を暗号化します。今回変更されたのは、この鍵交換の部分のみです。それ以外の部分は一切変更されていません。

このページを鵜呑みにせず、コマンドを実行してください

以下に挙げるアルゴリズム名は、すべて手元のコマンドで確認できるものです。これには意図があります。デフォルト設定は OpenSSH のリリースごとに変更されるため、2 年前に書かれたガイドに記載されているアルゴリズムを、現在のマシンが優先するとは限りません。これらのコマンドを習得すれば、この記事を含め、設定に関する記事を頼る必要はなくなります。

まずは、使用しているビルドが対応しているアルゴリズムを確認することから始めます。

ssh -V
ssh -Q kex

ssh -VOpenSSH_ で始まるバージョン行を出力し、続いて Ubuntu パッケージのサフィックスと OpenSSL のバージョンを表示します。ssh -Q kex は、鍵交換アルゴリズムを 1 行に 1 つずつ出力します。ポスト量子暗号に対応したビルドであれば、そのリストの中に mlkem768x25519-sha256sntrup761x25519-sha512@openssh.com といった名前があり、curve25519-sha256 のような古典的なアルゴリズムと並んで表示されます。

ビルドがサポートしているものと、実際に提供されるものは別物です

これは多くの記事で省略されている重要な区別です。ssh -Q kexは「このバイナリは何ができるか」という1つの問いに答えるだけであり、ユーザーが本当に知りたい「この接続で実際に何が提案されるか」という問いには答えてくれません。この2つのリストは異なり、その乖離こそが古いアドバイスが実害をもたらす原因となります。

ssh -G example.com | grep -i '^kexalgorithms'
sudo sshd -T | grep -i '^kexalgorithms'

ssh -G <host>は、~/.ssh/configおよび/etc/ssh/ssh_configが適用された後の、そのホストに対するクライアントの有効な設定を表示します。sshd -Tはサーバー側に対して同様の処理を行います。それぞれが優先順位に従って1行のkexalgorithmsを出力し、その行の先頭にある名前がその側にとっての第一候補となります。この行の内容が実際に通信で使用されます。

この乖離は理論上の話ではありません。2021-03-03にリリースされたOpenSSH 8.5ではsntrup761x25519-sha512@openssh.comが追加されましたが、デフォルトのリストからは意図的に除外されました。そのため、このリリースにおいてssh -Q kexを実行するとそのアルゴリズムが表示されますが、ssh -Gには表示されません。つまり、バイナリ自体は耐量子計算機暗号による鍵交換が可能であっても、接続時にそれが要求されることはないのです。

接続でネゴシエーションされたアルゴリズムを確認する

ssh -v example.com 2>&1 | grep 'kex: algorithm'

現在のクライアントとサーバー間では、以下のように表示されます。

debug1: kex: algorithm: mlkem768x25519-sha256

mlkem768x25519-sha256 はハイブリッド方式です。これは ML-KEM(FIPS 203 として標準化されたモジュール格子ベースの鍵カプセル化メカニズム)のパラメータセット 768 と、X25519 楕円曲線 Diffie-Hellman を実行し、両方の出力を混合してセッション鍵を生成します。

古いサーバーに対しては、代わりに以下のように表示されることがあります。

debug1: kex: algorithm: curve25519-sha256

この名称には耐量子計算機暗号の要素が含まれていません。curve25519-sha256 は単独の楕円曲線 Diffie-Hellman であり、大規模な量子コンピュータによって解読可能です。デフォルトが変更された理由はまさにこの点にあります。

ネゴシエーションのルールにより、古いマシンが1台あるだけでセッション全体の強度が制限される理由が説明できます。クライアントは優先順位順にリストを送信し、サーバーも同様にリストを送信します。選択されるアルゴリズムは、クライアントのリストの中でサーバーのリストにも含まれている最初の名称です。クライアントの優先順位が優先されるため、両端のうち古い方の機器がリストのどこまで到達できるかを決定します。ラップトップをアップグレードしても、ML-KEM を認識しないサーバーとのセッションがアップグレードされることはありません。

grep を除外すると、ssh -v によってネゴシエーションの残りの部分が表示されます。これには次セクションで扱う行も含まれます。

debug1: kex: host key algorithm: ssh-ed25519

ハイブリッド鍵交換がデフォルトになったOpenSSHのリリース

アップストリームのリリースノートに明確な順序が記載されています。バージョン番号よりも日付が重要です。これらがどれほど前から静かに運用されてきたかを示しているためです。

  • 8.5(2021-03-03リリース)で sntrup761x25519-sha512@openssh.com が追加されましたが、デフォルトでは無効でした。
  • 9.0(2022-04-08リリース)で有効化されました。リリースノートには「OpenSSHはデフォルトでハイブリッドな Streamlined NTRU Prime + x25519 鍵交換方式を使用する」とあります。このリリースから、耐量子計算機暗号(PQC)による鍵交換が標準となりました。
  • 9.9(2024-09-19リリース)で mlkem768x25519-sha256 が第2の選択肢として追加されました。同リリースで旧方式にIANA登録名である sntrup761x25519-sha512 が割り当てられたため、新しいビルドでは両方の名称でリスト表示されます。
  • 10.0(2025-04-09リリース)で mlkem768x25519-sha256 が鍵合意のデフォルトになりました。
  • 10.1(2025-10-06リリース)で、耐量子計算機暗号を含まない鍵交換で接続がネゴシエーションされた場合にクライアント側で警告が表示されるようになりました。これは ssh_config 内の WarnWeakCrypto オプションで制御され、デフォルトで有効です。

記憶しておくべき日付は2022年4月です。OpenSSH 9.0以降を実行しているマシン同士であれば、設定変更やユーザーへの通知なしに、その時点から耐量子計算機暗号による鍵交換が行われています。ssh を入力するユーザーには意識されない仕組みです。

どの Ubuntu リリースに搭載されているか

Ubuntu はリリース時に OpenSSH のバージョンを固定し、その後はバージョン番号を変えずにセキュリティ修正のみをバックポートします。そのため、デフォルトのアルゴリズムは使用している Ubuntu のリリースによって決まります。リストを鵜呑みにせず、手元のマシンで ssh -V を実行して確認してください。2026 年 8 月現在、アーカイブには以下のバージョンが含まれています。

  • 22.04 LTS は 1:8.9p1 を搭載しています。これは 9.0 のデフォルトより前であるため、標準インストールでは curve25519-sha256 がネゴシエーションされます。
  • 24.04 LTS は 1:9.6p1 を搭載しています。これは 9.0 以降 9.9 未満であるため、デフォルトは sntrup761x25519-sha512@openssh.com となり、ML-KEM は含まれません。
  • 25.10 は 1:10.0p1 を搭載しており、デフォルトは mlkem768x25519-sha256 です。
  • 26.04 LTS は 1:10.2p1 を搭載しています。デフォルトは mlkem768x25519-sha256 であり、耐量子計算機暗号ではない接続に対して警告を発します。

実際に 2 台のマシンで試してみましょう。26.04 のラップトップから 24.04 のサーバーへ接続します。クライアントの第一候補である mlkem768x25519-sha256 は、9.6 のサーバーのリストにはありません。サーバーが対応しているクライアントの次の耐量子候補は sntrup761x25519-sha512@openssh.com であり、ssh -v が報告する名前もこれになります。このセッションは、2024 年構築のサーバーに対し、設定変更なしで鍵交換に耐量子アルゴリズムを使用しています。

22.04 のケースは逆の挙動を示し、ssh -Q kex 単体では誤解を招く理由を明確に示しています。OpenSSH 8.9 は sntrup761x25519-sha512@openssh.com という名前を認識しているため、そのマシンで ssh -Q kex を実行するとリストに表示されます。しかし、デフォルトの提案には含まれないため、ネゴシエーションは curve25519-sha256 に落ち着きます。OpenSSH 10.1 以降のクライアントから接続すると、以下のように表示されます。

** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.

この警告は接続先サーバーに関する事実であり、クライアントの問題ではありません。解決策はサーバーをアップグレードすることです。WarnWeakCrypto no を設定すればメッセージは消えますが、接続の内容は何も変わりません。

なぜハイブリッドなのか、そして「今すぐ収集、後で復号」とは何か

脅威の形は単純です。あなたの通信を傍受できる攻撃者は、暗号化されたバイト列を今日記録し、保存します。彼らは今日それを読むことはできません。彼らは X25519 を破るのに十分な性能を持つ量子コンピュータが存在するまでそれを保持し、その時点で読み取ります。これを「今すぐ収集、後で復号 (harvest now, decrypt later)」または「今すぐ保存、後で復号 (store now, decrypt later)」と呼びます。これは攻撃者に現在において高度な技術を要求するものではありません。必要なのはディスク容量と忍耐だけです。

暗号化にはこの問題がありますが、署名にはありません。この非対称性がすべてを決定づけます。記録された暗号文は、内部のデータが機密である限り価値を持ち続けます。署名は、検証される瞬間に偽造不可能であれば十分です。2035 年に署名アルゴリズムを破ることは、誰かが 2035 年にサーバーになりすますことを可能にします。しかし、過去に遡って 2026 年のログインを偽造することはできません。そのため、鍵交換を最初に修正する必要があり、署名側は後回しにできるのです。

ハイブリッドとは、両方のアルゴリズムを実行し、両方の結果をセッション鍵に反映させることを意味します。mlkem768x25519-sha256 の背後にある秘密を復元するには、攻撃者は ML-KEM 768 と X25519 の両方を破らなければなりません。この組み合わせは意図的なものです。ML-KEM は X25519 よりもはるかに新しく、暗号解読者による攻撃にさらされた期間がはるかに短いため、新しいアルゴリズムに欠陥が見つかったとしても、すでに得ている保護が失われることはありません。

保護されるものとされないもの

鍵交換は保護されます。セッションを暗号化する共有秘密鍵はハイブリッド交換によって生成されるため、今日記録されたセッションが将来量子コンピュータによって解読されることはありません。

ホスト鍵は保護されません。debug1: kex: host key algorithm: ssh-ed25519 行は古典的な署名を指定しており、rsa-sha2-512 や ECDSA (楕円曲線デジタル署名アルゴリズム) も同様です。量子コンピュータを持つ攻撃者は、将来のライブ接続時にその署名を偽造してサーバーになりすます可能性がありますが、現在記録されているトラフィックに対しては無力です。

ログイン鍵も同様に保護されません。~/.ssh/id_ed25519 の鍵も同じ種類の古典的な署名であり、同様の論理が適用されます。今年この鍵を保護しているのは、鍵の保存場所とアクセス権限です。そのため、適切な SSH 鍵管理を行うことが、このページに記載されているどのアルゴリズム名よりもリスク低減に寄与します。

これらについては、切り替え先が存在しないため、現時点でユーザーがとれる対策はありません。OpenSSH は将来のリリースで耐量子署名をサポートする予定です。それがリリースされるまで、OpenSSH には耐量子ホスト鍵や耐量子ユーザー鍵のタイプは存在せず、ssh-keygen もそれらを提供できません。耐量子鍵の生成を推奨するガイドは、まだ存在しないソフトウェアについて説明しています。

同一サーバー上の TLS は別の問題であり、回答も異なります。TLS (transport layer security) は Web サーバーが 443 番ポートで使用するものであり、OpenSSH とは異なるコードベースとスケジュールで管理されています。OpenSSH をアップグレードしても TLS に影響はありません。もし 同一 VPS 上のプライベートサービスで自己署名証明書を使用している場合、その署名と鍵交換は OpenSSL と Web サーバーによって決定されるため、そのスタックについては個別に確認してください。

賢明な管理者が今すべきこと

OpenSSH を最新の状態に保つこと、これに尽きます。この問題に対する戦略は、実質的にこれだけです。sudo apt update && sudo apt upgrade は使用している Ubuntu リリースが提供するバージョンを維持し、Ubuntu リリースをアップグレードすることで OpenSSH も新しいバージョンへ移行します。自動セキュリティアップグレード を有効にすれば、手動で適用を忘れることなくパッチを適用できます。特定のアルゴリズム名を目当てに OpenSSH をソースからビルドするのは、サーバーで最も攻撃にさらされやすいサービスのセキュリティ更新をディストリビューションの管理から外すことになるため、割に合いません。どうしてもソースから取得する場合は、ビルド前に 公開されているチェックサムとダウンロードしたファイルを照合 してください。

KexAlgorithms 行を手書きしないでください。これは確実に状況を悪化させる行為です。2018 年の堅牢化ガイドにあるリストは 2018 年時点では正しくても、それを sshd_config に貼り付けるとデフォルトのリストを置き換えてしまいます。それ以降に発明されたすべてのアルゴリズムが除外されるため、本来なら mlkem768x25519-sha256 でネゴシエーションできたはずのサーバーが、固定されたリストに残っている古いアルゴリズムへ密かに格下げされます。引き継いだサーバーでは sudo sshd -T | grep -i '^kexalgorithms' を実行してください。その行が同じリリースの新規インストール時よりも短ければ、誰かがリストを固定しています。

リストを変更する正当な理由がある場合は、置き換えるのではなく追加してください。OpenSSH は先頭に + があれば追加、- があれば削除、^ があれば先頭への移動として解釈します。

KexAlgorithms ^mlkem768x25519-sha256

設定を適用する前にテストしてください。sudo sshd -t は設定を解析し、有効であれば何も出力しません。KexAlgorithms 行でビルドに含まれていないアルゴリズムを指定すると sshd は起動しなくなります。リモートサーバーでこれが発生するとログインできなくなるため、作業中は必ず別のセッションを開いておいてください。両者のリストが一致しなくなると、クライアントは明確に次のように警告します。

Unable to negotiate with 203.0.113.10 port 22: no matching key exchange method found. Their offer: curve25519-sha256,ecdh-sha2-nistp256

「量子耐性」というマーケティング用語は、特定のレイヤーに関する主張として読んでください。ベンダーが製品を量子耐性と呼ぶ場合、それは特定のレイヤー(通常は鍵交換のどこか)を指しています。アルゴリズム名と、それが適用されるプロトコルを確認してください。2026 年 8 月時点の OpenSSH において、誠実な主張とは「鍵交換はハイブリッドな耐量子計算機暗号だが、署名は従来型である」というものです。それ以上の広範な主張であれば、ssh -Q kex の出力で確認できる名前が伴っているはずです。

退屈な作業を続けてください。耐量子鍵交換も、推測可能なパスワードや、盗難されたノート PC にコピーされた秘密鍵に対しては無力です。実際にサーバーが侵害される原因はこれらであり、VPS における標準的な SSH 堅牢化 が依然としてほとんどの役割を担っています。ここでのネゴシエーション手順が不明な場合は、SSH 接続時の動作 を参照してください。このページで前提としている各段階を解説しています。

FAQ

SSH 接続はすでに耐量子計算機(ポスト量子)対応になっていますか?

ssh -v yourserver 2>&1 | grep 'kex: algorithm' を実行し、表示される名前を確認してください。mlkem768x25519-sha256 および sntrup761x25519-sha512@openssh.com はハイブリッド型の耐量子鍵交換方式です。curve25519-sha256ecdh-sha2-nistp256、およびその他の diffie-hellman-group という名前が含まれるものは古典的な方式です。鍵交換はクライアントが提示した選択肢のうち、サーバーもサポートしている最初のものを採用するため、古いマシンが上限となります。そのため、両端で耐量子対応のバージョンを使用する必要があります。

OpenSSH のどのリリースから耐量子鍵交換がデフォルトになりましたか?

2022-04-08 リリースの OpenSSH 9.0 で、sntrup761x25519-sha512@openssh.com がデフォルトの鍵交換方式となりました。2024-09-19 リリースの OpenSSH 9.9 で mlkem768x25519-sha256 が追加され、2025-04-09 リリースの OpenSSH 10.0 ではこれがデフォルトに変更されました。2025-10-06 リリースの OpenSSH 10.1 からは、耐量子方式がネゴシエーションされない場合に警告が表示されるようになりました。使用している Ubuntu のリリースによって利用可能なバージョンが異なるため、ssh -Q kex および ssh -G <host> を使用して自身のビルド状況を確認してください。

耐量子 SSH 鍵を生成すべきですか?

いいえ、OpenSSH にはそのような鍵タイプが存在しないためです。これまでの耐量子対応は鍵交換に関するものであり、ユーザー側での鍵ファイルの生成や設定は不要です。ホスト鍵やログイン鍵は依然として Ed25519 や RSA といった古典的な署名方式を使用しており、アップストリームによれば耐量子署名は将来のリリースで導入される予定です。引き続き Ed25519 鍵を使用し、その保管場所を保護してください。

なぜ ssh は接続が耐量子ではないと警告するのですか?

OpenSSH 10.1 以降では、ネゴシエーションされた鍵交換に耐量子要素が含まれていない場合、** WARNING: connection is not using a post-quantum key exchange algorithm. が表示されます。この警告はクライアントではなくサーバーに関するものです。クライアントが耐量子方式の名前を提示したにもかかわらず、サーバーがそれらを受け入れなかったことを意味します。サーバーの OpenSSH をアップグレードするか、sshd_config 内で KexAlgorithms 行が指定され、最新の方式が除外されていないかを確認してください。WarnWeakCrypto no を設定するとメッセージは非表示になりますが、接続の脆弱性はそのまま残ります。

#ssh#openssh#post-quantum#cryptography#hardening