このドキュメントでは、ワークステーションと Compute Engine 仮想マシン(VM)インスタンスを構成して、SSH 接続に量子耐性鍵交換アルゴリズムを使用するためのベスト プラクティスについて説明します。
Compute Engine での SSH 接続の仕組みについては、Linux VM への SSH 接続をご覧ください。IAM を使用した SSH アクセスの管理については、OS Login についてをご覧ください。
以降のセクションでは、SSH のコンテキストでポスト量子暗号について説明します。
以降のセクションでは、将来の量子コンピューティングの脅威から SSH 接続を保護するうえで有用なベスト プラクティスについて説明します。
「今すぐキャプチャ、後で復号」攻撃の脅威について
従来型の公開鍵暗号(RSA や楕円曲線暗号など)は、理論的には量子コンピュータによる攻撃に対して脆弱です。大規模な量子コンピュータはまだ存在しませんが、敵対者は、十分な能力を備えた量子コンピュータが利用可能になったときに復号することを目的として、暗号化されたネットワーク トラフィックを現在キャプチャして保存する可能性があります。これは、capture-now, decrypt-later 攻撃と呼ばれます。
この脅威から保護するため、OpenSSH やその他の最新の SSH クライアントは、ポスト量子暗号(PQC)鍵交換方式をサポートしています。これらのメソッドでは、ポスト量子アルゴリズムと古典アルゴリズム(X25519 など)を組み合わせたハイブリッド鍵交換アルゴリズムを使用します。いずれかのアルゴリズムが安全である限り、セッションの暗号鍵は盗聴者によって導出されません。
最新の SSH 実装では、次のハイブリッド ポスト量子鍵交換アルゴリズムがサポートされています。
sntrup761x25519-sha512@openssh.com: Streamlined NTRU Prime 761 と X25519 のハイブリッド。OpenSSH 9.0 以降と PuTTY 0.78 以降でサポートされています。mlkem768x25519-sha256: NIST 標準の ML-KEM-768(以前の CRYSTALS-Kyber)と X25519 のハイブリッド。OpenSSH 10.0 以降、PuTTY 0.83 以降でサポートされています。mlkem768x25519-sha256は、SSH の現在の優先ポスト量子鍵交換アルゴリズムです。
SSH でのポスト量子保護の範囲を理解する
SSH 接続には、次の 3 つの暗号フェーズがあります。
- 鍵交換(
KexAlgorithms): クライアントとサーバーが共有の対称シークレットを確立します。ポスト量子鍵交換アルゴリズムを使用すると、この共有シークレットは量子コンピュータによる復号から保護されます。 - ユーザーとホストの認証: クライアントはサーバーのホストキーを検証し、サーバーはユーザーの SSH 鍵または証明書を検証します。標準の OpenSSH は、ユーザー認証にポスト量子署名アルゴリズムをまだ使用していませんが、認証は鍵交換によって確立された暗号化チャネルの内部で行われるため、認証情報とホストキーは遡及的な復号から保護されます。
- セッション データの暗号化(
Ciphers): 鍵が交換されると、セッションは対称暗号(aes256-gcm@openssh.comやchacha20-poly1305@openssh.comなど)を使用して暗号化されます。対称暗号は、非対称(鍵交換)暗号のように量子コンピューティング攻撃に対して脆弱ではありません。
アルゴリズム ネゴシエーションの仕組み
SSH 接続のハンドシェイク中に、クライアントはサポートしている鍵交換アルゴリズムの順序付きリストを送信します。サーバーは、クライアントのリストを独自のサポート対象アルゴリズムと比較し、サーバーもサポートしているクライアントのリストの最初のアルゴリズムを選択します。
クライアントが優先順位を決定するため、ワークステーション クライアントでポスト量子アルゴリズムを優先するように構成すると、ターゲット VM がサポートしている場合は常にポスト量子鍵交換が使用されます。
SSH クライアントを構成する
ワークステーションで SSH クライアントを構成して、量子コンピューティング後の鍵交換アルゴリズムを優先または適用します。使用するクライアント ツールに応じた手順に沿って操作します。
コンソール
ブラウザでの SSH( Google Cloud コンソールに組み込まれています)は、ポスト量子鍵交換アルゴリズムを自動的にサポートし、優先します。
ブラウザでの SSH を使用して VM に接続する場合は、ワークステーションで設定を構成する必要はありません。ターゲット VM がポスト量子アルゴリズムをサポートしている場合、ブラウザでの SSH 認証はポスト量子鍵交換を自動的にネゴシエートします。
ブラウザでの SSH を使用して接続するには:
Google Cloud コンソールで、[VM インスタンス] ページに移動します。
VM インスタンスのリストで、接続する VM の行にある [SSH] をクリックします。
gcloud
gcloud CLI(gcloud compute ssh)は、ローカル ワークステーションにインストールされている OpenSSH クライアントを使用します。
ワークステーションに OpenSSH 9.0 以降がインストールされていることを確認します。
ssh -VOpenSSH のバージョンが 9.0 より前の場合は、オペレーティング システムのパッケージ マネージャーを使用して OpenSSH をアップグレードします。
ワークステーションで OpenSSH 9.0 以降を実行している場合、OpenSSH のデフォルトのアルゴリズム リストにポスト量子鍵交換が含まれます。互換性のある VM に接続すると、接続は追加のフラグなしでポスト量子鍵交換をネゴシエートします。
gcloud compute ssh <var>VM_NAME</var> --zone=<var>ZONE</var>次のように置き換えます。
<var>VM_NAME</var>: 接続先の VM の名前。<var>ZONE</var>: VM が配置されているゾーン。
OpenSSH クライアント
Linux、macOS、または Windows で標準の OpenSSH クライアント(ssh)を使用している場合:
ローカルの OpenSSH クライアントのバージョンが 9.0 以降であることを確認します。
ssh -Vユーザーの SSH 構成ファイル(Linux と macOS では
~/.ssh/config、Windows では%USERPROFILE%\.ssh\config)を開くか、作成します。KexAlgorithmsディレクティブを追加または更新します。古典的フォールバックを許可しながらポスト量子アルゴリズムを優先する(推奨)には、次の構成を追加します。
KexAlgorithms ^mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com,diffie-hellman-group-exchange-sha256ポスト量子アルゴリズムを厳密に適用し、従来の接続を拒否するには、ポスト量子アルゴリズムのみを指定します。
KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com
SSH を使用して VM に接続します。
ssh -i <var>PATH_TO_PRIVATE_KEY</var> <var>USERNAME</var>@<var>EXTERNAL_IP</var>次のように置き換えます。
<var>PATH_TO_PRIVATE_KEY</var>: 秘密 SSH 認証鍵のパス。<var>USERNAME</var>: ユーザー名(OS Login のユーザー名など)。<var>EXTERNAL_IP</var>: VM の外部 IP アドレス。
PuTTY アプリ
Windows で PuTTY を使用して VM に接続する場合:
PuTTY バージョン 0.78 以降(ML-KEM サポートの場合はバージョン 0.83 以降)を実行していることを確認します。バージョンを確認するには、PuTTY を開いて [About] をクリックします。必要に応じて、PuTTY ダウンロード ページから最新バージョンをダウンロードします。
PuTTY を開きます。
[Category] ペインで、[Connection] > [SSH] > [Kex] に移動します。
[アルゴリズム選択ポリシー] リストで、ポスト量子アルゴリズムを見つけます。
- NTRU Prime / Curve25519 ハイブリッド kex(PuTTY 0.78 以降で利用可能)
- ML-KEM / Curve25519 ハイブリッド kex(PuTTY 0.83 以降で利用可能)
ポスト量子アルゴリズムを選択し、[上へ] をクリックして、古典的な Diffie-Hellman アルゴリズムと ECDH アルゴリズムの上に移動させます。
(省略可)ポスト量子アルゴリズムを厳密に適用するには、各古典アルゴリズムを選択し、[下へ] をクリックして、[-- Warn below here --] または [-- Don't use below here --] の区切り線の下に移動させます。
[カテゴリ] ペインで、[セッション] をクリックします。
[保存済みセッション] でセッション名を選択し、[保存] をクリックしてアルゴリズム設定を保持します。
[Open] をクリックして VM に接続します。
VM を構成する
ポスト量子鍵交換アルゴリズムを使用するには、VM のオペレーティング システムと SSH デーモンがそれらをサポートしている必要があります。構成を変更する前に、互換性のあるオペレーティング システムを確認し、デフォルトの動作を理解してください。
対応オペレーティング システム
ポスト量子鍵交換をサポートするには、VM で OpenSSH 9.0 以降を含むオペレーティング システムを実行する必要があります。Compute Engine で利用可能な次の公開 Linux イメージには、OpenSSH 9.0 以降が含まれています。
- Debian: Debian 12(Bookworm)以降
- Ubuntu: Ubuntu 24.04 LTS(Noble Numbat)以降
- Fedora: Fedora 39 以降
- Container-Optimized OS: マイルストーン 109 以降
- Rocky Linux / AlmaLinux: バージョン 10 以降
古いオペレーティング システム リリース(Ubuntu 22.04 LTS、Debian 11、RHEL 9 など)には、デフォルトで 9.0 より前の OpenSSH バージョンが含まれており、量子耐性鍵交換をサポートしていません。
デフォルトの動作
VM で OpenSSH 9.0 以降のオペレーティング システムが実行されている場合、OpenSSH サーバー(sshd)はデフォルトで sntrup761x25519-sha512@openssh.com をサポートします。OpenSSH 10.0 以降を実行している VM も、デフォルトで mlkem768x25519-sha256 をサポートしています。
デフォルトでは、VM 構成の変更は必要ありません。ポスト量子対応のクライアントが接続すると、VM は自動的にポスト量子鍵交換をネゴシエートします。同時に、VM は従来のアルゴリズムのみをサポートするクライアントからの接続を引き続き受け入れます。
ポスト量子アルゴリズムを厳密に要求する
組織で、すべての SSH セッションにポスト量子鍵交換が必要な場合は、ポスト量子鍵交換アルゴリズムのみを受け入れるように VM の SSH デーモンを構成できます。
VM でポスト量子アルゴリズムを厳密に要求するには:
SSH を使用して VM に接続します。
/etc/ssh/sshd_config.d/にドロップイン構成ファイルを作成します。sudo bash -c 'cat << 'EOF' > /etc/ssh/sshd_config.d/99-post-quantum-kex.conf # Require post-quantum key exchange algorithms only KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com EOF'SSH デーモンの構成に構文エラーがないかテストします。
sudo sshd -tコマンドでエラーが発生した場合は、続行する前に構成ファイルを確認してください。
アクティブなセッションをドロップせずに変更を適用するには、SSH デーモンを再読み込みします。
sudo systemctl reload sshdLinux ディストリビューションでサービス名として
sshを使用している場合は、代わりにsudo systemctl reload sshを実行します。現在のターミナル ウィンドウを開いたまま、新しいターミナル ウィンドウを開いて、VM への接続をテストします。新しい接続が成功すると、VM はポスト量子アルゴリズムを必要とするように正常に構成されます。
SSH ロックアウトから復元する
ポスト量子アルゴリズムを厳密に要求するように VM を構成し、クライアントが必要なアルゴリズムをサポートしていないためにロックアウトされた場合は、次のいずれかの復元オプションを使用します。
- ブラウザでの SSH を使用する: Google Cloud コンソールを開き、ブラウザでの SSH を使用して接続します。ブラウザでの SSH はポスト量子鍵交換をサポートしており、VM でポスト量子アルゴリズムが厳密に要求されている場合でも接続できます。接続したら、
/etc/ssh/sshd_config.d/99-post-quantum-kex.confを削除または変更して、sshdを再読み込みします。 - 仮想シリアル コンソールを使用する: Special Administrative Console(SAC)またはシリアル コンソールを使用して VM に接続します。認証情報でログインし、構成ファイルを削除して、
sshdを再読み込みします。 - 起動スクリプトを使用する: インタラクティブ アクセスが使用できない場合:
- Google Cloud コンソールで、VM を停止します。
- VM メタデータを編集して、以前に作成した
/etc/ssh/sshd_config.d/99-post-quantum-kex.conf構成ファイルを削除し、SSH サーバー デーモンを再起動する起動スクリプトを追加します。startup-script:rm -f /etc/ssh/sshd_config.d/99-post-quantum-kex.conf && (systemctl reload ssh || systemctl reload sshd) - VM を起動します。起動スクリプトは root として実行され、従来の互換性を復元します。
- アクセス権を回復したら、メタデータから起動スクリプトを削除します。
ネゴシエートされた鍵交換アルゴリズムを確認する
アクティブな SSH 接続でポスト量子鍵交換アルゴリズムが使用されていることを確認するには、クライアントから接続の詳細を確認します。
OpenSSH または gcloud CLI を使用して確認する
-v フラグを使用して、詳細出力が有効になっている VM に接続します。
OpenSSH を使用する場合:
ssh -v -i <var>PATH_TO_PRIVATE_KEY</var> <var>USERNAME</var>@<var>EXTERNAL_IP</var>gcloud CLI を使用する場合:
gcloud compute ssh <var>VM_NAME</var> --zone=<var>ZONE</var> -- -v
接続の確立中にターミナル出力を検査します。kex: algorithm 行を探します。
debug1: kex: algorithm: sntrup761x25519-sha512@openssh.com
または
debug1: kex: algorithm: mlkem768x25519-sha256
出力に sntrup761x25519-sha512 または mlkem768x25519-sha256 が表示されている場合、接続はポスト量子鍵交換で保護されています。curve25519-sha256 や ecdh-sha2-nistp256 などのアルゴリズムが一覧表示されている場合、接続は従来の鍵交換を使用しており、「今すぐキャプチャして後で復号する」攻撃に対して脆弱です。
PuTTY を使用して確認する
- PuTTY で VM に接続します。
- PuTTY ウィンドウのタイトルバーを右クリックし、[イベントログ] を選択します。
- [PuTTY Event Log] ウィンドウで、鍵交換アルゴリズムを示す行を探します。
Using NTRU Prime / Curve25519 hybrid key exchangeUsing ML-KEM / Curve25519 hybrid key exchange
次のステップ
- Linux VM への SSH 接続の詳細を確認する。
- SSH アクセスを保護するためのベスト プラクティスを確認します。
- セキュリティ キーを使用して SSH 認証情報を保護する方法を学習する。
- ブラウザでの SSH の機能と構成について学習する。