使用後量子 SSH 的最佳做法

本文說明如何設定工作站和 Compute Engine 虛擬機器 (VM) 執行個體,以便透過 SSH 連線使用後量子金鑰交換演算法。

如要進一步瞭解 Compute Engine 中的 SSH 連線運作方式,請參閱「與 Linux VM 的 SSH 連線」。如要瞭解如何使用 IAM 管理 SSH 存取權,請參閱「關於 OS 登入」。

以下各節將說明 SSH 環境中的後量子密碼術:

下列各節提供最佳做法,有助於保護 SSH 連線,防範未來量子運算威脅:

瞭解「先儲存再破解」攻擊的威脅

理論上,傳統公開金鑰密碼編譯 (例如 RSA 和橢圓曲線密碼編譯) 容易受到量子電腦攻擊。雖然目前還沒有大規模量子電腦,但有心人士可能會先擷取並儲存加密網路流量,等到量子電腦的運算能力足夠時再解密。這就是所謂的「先擷取,稍後再解密」攻擊。

為防範這項威脅,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 連線包含三個密碼編譯階段:

  1. 金鑰交換 (KexAlgorithms):用戶端和伺服器會建立共用的對稱式密鑰。使用後量子金鑰交換演算法時,這個共用密碼可防止量子電腦解密。
  2. 使用者和主機驗證:用戶端會驗證伺服器主機金鑰,伺服器則會驗證使用者的 SSH 金鑰或憑證。標準 OpenSSH 尚未將後量子簽章演算法用於使用者驗證,但由於驗證是在金鑰交換建立的加密通道內進行,因此您的憑證和主機金鑰會受到保護,不會遭到追溯解密。
  3. 工作階段資料加密 (Ciphers):交換金鑰後,工作階段會使用對稱式密碼 (例如 aes256-gcm@openssh.com 或 chacha20-poly1305@openssh.com) 加密。對稱式密碼不像非對稱式 (金鑰交換) 密碼,容易受到量子運算攻擊。

演算法協商的運作方式

在 SSH 連線交握期間,用戶端會傳送支援的金鑰交換演算法排序清單。伺服器會將用戶端清單與自身支援的演算法進行比較,並選取伺服器也支援的用戶端清單中第一個演算法。

由於用戶端會決定偏好順序,因此將工作站用戶端設定為偏好後量子演算法,可確保目標 VM 支援後量子金鑰交換時,一律使用後量子金鑰交換。

設定 SSH 用戶端

在工作站上設定 SSH 用戶端,優先採用或強制使用後量子金鑰交換演算法。完成偏好用戶端工具的步驟。

控制台

SSH-in-browser (內建於 Cloud de Confiance 控制台) 會自動支援並優先採用後量子金鑰交換演算法。

如果使用瀏覽器中的 SSH 連線至 VM,則無須在工作站上設定任何項目。如果目標 VM 支援後量子演算法,瀏覽器內建的 SSH 功能會自動協商後量子金鑰交換。

如要使用瀏覽器中的 SSH 連線,請按照下列步驟操作:

  1. 前往 Cloud de Confiance 控制台的「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體

  2. 在 VM 執行個體清單中,按一下要連線的 VM 所在列的「SSH」SSH。

gcloud

gcloud CLI (gcloud compute ssh) 會使用安裝在本機工作站的 OpenSSH 用戶端。

  1. 確認工作站已安裝 OpenSSH 9.0 以上版本:

    ssh -V
    

    如果 OpenSSH 版本低於 9.0,請使用作業系統的套件管理工具升級 OpenSSH。

  2. 如果工作站執行 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):

  1. 確認本機 OpenSSH 用戶端版本為 9.0 以上:

    ssh -V
    
  2. 開啟或建立使用者 SSH 設定檔 (Linux 和 macOS 上為 ~/.ssh/config,Windows 上為 %USERPROFILE%\.ssh\config)。

  3. 新增或更新 KexAlgorithms 指令。

    • 如要優先採用後量子演算法,同時允許使用傳統演算法做為備援 (建議做法),請新增下列設定:

      KexAlgorithms ^mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com,diffie-hellman-group-exchange-sha256
      
    • 如要嚴格強制執行後量子演算法並拒絕傳統連線,請只指定後量子演算法:

      KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com
      
  4. 使用 SSH 連線至 VM:

    ssh -i <var>PATH_TO_PRIVATE_KEY</var> <var>USERNAME</var>@<var>EXTERNAL_IP</var>
    

    更改下列內容:

    • <var>PATH_TO_PRIVATE_KEY</var>:私密安全殼層金鑰的路徑。
    • <var>USERNAME</var>:您的使用者名稱 (例如 OS 登入使用者名稱)。
    • <var>EXTERNAL_IP</var>:VM 的外部 IP 位址。

PuTTY 應用程式

如果您在 Windows 上使用 PuTTY 連線至 VM:

  1. 請確認您執行的是 PuTTY 0.78 以上版本 (如要支援 ML-KEM,則須為 0.83 以上版本)。如要查看版本,請開啟 PuTTY 並按一下「About」(關於)。如有需要,請從 PuTTY 下載頁面下載最新版本。

  2. 開啟 PuTTY。

  3. 在「Category」(類別) 窗格中,依序前往「Connection」(連線) >「SSH」 > 「Kex」。

  4. 在「演算法選取政策」清單中,找出後量子演算法:

    • NTRU Prime / Curve25519 混合式金鑰交換 (適用於 PuTTY 0.78 以上版本)
    • ML-KEM / Curve25519 混合式 kex (適用於 PuTTY 0.83 以上版本)
  5. 選取後量子演算法,然後按一下「向上」,直到該演算法位於清單頂端,高於傳統 Diffie-Hellman 和 ECDH 演算法。

  6. (選用) 如要嚴格強制執行後量子演算法,請選取每個傳統演算法,然後按一下「向下」,直到演算法位於「-- Warn below here --」或「-- Don't use below here --」分隔線下方為止。

  7. 在「類別」窗格中,按一下「工作階段」。

  8. 在「已儲存的課程」下方,選取課程名稱並按一下「儲存」,即可保留演算法偏好設定。

  9. 按一下「開啟」即可連線至 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) 預設搭載的 OpenSSH 版本早於 9.0,且不支援後量子金鑰交換。

預設行為

如果 VM 執行的作業系統搭載 OpenSSH 9.0 以上版本,OpenSSH 伺服器 (sshd) 預設會支援 sntrup761x25519-sha512@openssh.com。執行 OpenSSH 10.0 以上版本的 VM 預設也支援 mlkem768x25519-sha256。

預設情況下,不需要變更 VM 設定。當支援後量子的用戶端連線時,VM 會自動協商後量子金鑰交換。同時,VM 會繼續接受僅支援傳統演算法的用戶端連線。

嚴格要求使用後量子演算法

如果貴機構要求所有 SSH 工作階段都必須使用後量子金鑰交換,您可以設定 VM 的 SSH 精靈,只接受後量子金鑰交換演算法。

如要在 VM 上嚴格要求使用後量子演算法,請按照下列步驟操作:

  1. 使用 SSH 連線至 VM。

  2. 在 /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'
    
  3. 測試 SSH 精靈設定是否有語法錯誤:

    sudo sshd -t
    

    如果指令產生錯誤,請先檢查設定檔,再繼續操作。

  4. 重新載入 SSH 精靈,套用變更,但不要捨棄有效工作階段:

    sudo systemctl reload sshd
    

    如果 Linux 發行版本使用 ssh 做為服務名稱,請改為執行 sudo systemctl reload ssh。

  5. 請勿關閉目前的終端機視窗,並開啟新的終端機視窗,測試連線至 VM。如果新連線成功,表示 VM 已順利設定為需要後量子演算法。

從 SSH 鎖定狀態復原

如果您將 VM 設定為嚴格要求後量子演算法,但用戶端不支援所需演算法,導致您無法登入,請使用下列任一救援選項:

  1. 使用瀏覽器中的 SSH:開啟 Cloud de Confiance 控制台,然後使用瀏覽器中的 SSH 連線。透過瀏覽器進行 SSH 連線的功能支援後量子金鑰交換,即使 VM 嚴格要求使用後量子演算法,也能順利連線。連線完成後,請移除或修改 /etc/ssh/sshd_config.d/99-post-quantum-kex.conf,然後重新載入 sshd。
  2. 使用虛擬序列控制台:使用特殊管理控制台 (SAC) 或序列控制台連線至 VM。使用憑證登入,移除設定檔,然後重新載入 sshd。
  3. 使用開機指令碼:如果無法進行互動式存取:
    1. 在 Cloud de Confiance 控制台中停止 VM。
    2. 編輯 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)
    3. 啟動 VM。開機指令碼會以根身分執行,並還原傳統相容性。
    4. 重新取得存取權後,請從中繼資料移除開機指令碼。

驗證協議的金鑰交換演算法

如要確認有效的 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 驗證

  1. 在 PuTTY 中連線至 VM。
  2. 在 PuTTY 視窗標題列上按一下滑鼠右鍵,然後選取「Event Log」。
  3. 在「PuTTY Event Log」(PuTTY 事件記錄) 視窗中,找出指出金鑰交換演算法的行:
    • Using NTRU Prime / Curve25519 hybrid key exchange
    • Using ML-KEM / Curve25519 hybrid key exchange

後續步驟