Best practice per l'utilizzo di SSH post-quantistico

Questo documento descrive le best practice per configurare la workstation e le istanze di macchine virtuali (VM) Compute Engine in modo che utilizzino algoritmi di scambio di chiavi post-quantistici per le connessioni SSH.

Per scoprire di più su come funzionano le connessioni SSH in Compute Engine, consulta Connessioni SSH alle VM Linux. Per scoprire di più sulla gestione dell'accesso SSH con IAM, consulta Informazioni su OS Login.

Le sezioni seguenti descrivono la crittografia post-quantistica nel contesto di SSH:

Le sezioni seguenti contengono best practice che possono aiutarti a proteggere le connessioni SSH dalle future minacce del quantum computing:

Comprendere la minaccia degli attacchi di tipo "capture-now, decrypt-later"

La crittografia a chiave pubblica classica (come RSA e la crittografia a curva ellittica) è teoricamente vulnerabile agli attacchi dei computer quantistici. Sebbene i computer quantistici su larga scala non esistano ancora, gli avversari possono acquisire e archiviare il traffico di rete criptato oggi con l'obiettivo di decriptarlo in un secondo momento, quando sarà disponibile un computer quantistico sufficientemente potente. Questo è noto come attacco capture-now, decrypt-later.

Per proteggersi da questa minaccia, OpenSSH e altri client SSH moderni supportano metodi di scambio di chiavi di crittografia post-quantistica (PQC). Questi metodi utilizzano algoritmi di scambio di chiavi ibridi che combinano un algoritmo post-quantistico con un algoritmo classico (come X25519). Finché uno dei due algoritmi rimane sicuro, la chiave di crittografia della sessione non può essere derivata da un intercettatore.

Le seguenti implementazioni SSH moderne supportano gli algoritmi di scambio di chiavi post-quantistici ibridi:

  • sntrup761x25519-sha512@openssh.com: un ibrido di Streamlined NTRU Prime 761 e X25519. Supportato in OpenSSH 9.0 e versioni successive e PuTTY 0.78 e versioni successive.
  • mlkem768x25519-sha256: un ibrido di ML-KEM-768 standardizzato dal NIST (in precedenza CRYSTALS-Kyber) e X25519. Supportato in OpenSSH 10.0 e versioni successive e PuTTY 0.83 e versioni successive. mlkem768x25519-sha256 è l'algoritmo di scambio di chiavi post-quantistico preferito attuale per SSH.

Comprendere l'ambito della protezione post-quantistica in SSH

Una connessione SSH prevede tre fasi crittografiche:

  1. Scambio di chiavi (KexAlgorithms): il client e il server stabiliscono un segreto simmetrico condiviso. Quando utilizzi un algoritmo di scambio di chiavi post-quantistico, questo segreto condiviso è protetto dalla decrittografia da parte dei computer quantistici.
  2. Autenticazione di utenti e host: il client verifica la chiave host del server e il server verifica la chiave o il certificato SSH dell'utente. Standard OpenSSH non utilizza ancora algoritmi di firma post-quantistici per l'autenticazione dell'utente, ma poiché l'autenticazione avviene all'interno del canale criptato stabilito dallo scambio di chiavi, le tue credenziali e le chiavi host sono protette dalla decrittografia retroattiva.
  3. Crittografia dei dati di sessione (Ciphers): una volta scambiate le chiavi, la sessione viene criptata utilizzando una cifratura simmetrica (ad esempio aes256-gcm@openssh.com o chacha20-poly1305@openssh.com). Le cifrature simmetriche non sono vulnerabili agli attacchi di quantum computing come le cifrature asimmetriche (scambio di chiavi).

Come funziona la negoziazione algoritmica

Durante l'handshake della connessione SSH, il client invia un elenco ordinato di algoritmi di scambio di chiavi che supporta. Il server confronta l'elenco del client con i propri algoritmi supportati e seleziona il primo algoritmo nell'elenco del client supportato anche dal server.

Poiché il client determina l'ordine di preferenza, la configurazione del client della workstation in modo che preferisca gli algoritmi post-quantistici garantisce che lo scambio di chiavi post-quantistico venga utilizzato ogni volta che la VM di destinazione lo supporta.

Configura il client SSH

Configura il client SSH sulla workstation per dare la priorità o applicare gli algoritmi di scambio di chiavi post-quantistici. Completa i passaggi per lo strumento client che preferisci.

Console

SSH nel browser (integrato nella console Cloud de Confiance ) supporta e preferisce automaticamente gli algoritmi di scambio di chiavi post-quantistici.

Se ti connetti alla VM utilizzando SSH nel browser, non devi configurare alcuna impostazione sulla workstation. Quando la VM di destinazione supporta gli algoritmi post-quantistici, SSH nel browser negozia automaticamente uno scambio di chiavi post-quantistico.

Per connetterti utilizzando SSH nel browser:

  1. Nella console Cloud de Confiance , vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. Nell'elenco delle istanze VM, fai clic su SSH nella riga della VM a cui vuoi connetterti.

gcloud

gcloud CLI (gcloud compute ssh) utilizza il client OpenSSH installato sulla tua workstation locale.

  1. Verifica che sulla workstation sia installato OpenSSH 9.0 o versioni successive:

    ssh -V
    

    Se la tua versione di OpenSSH è precedente alla 9.0, esegui l'upgrade di OpenSSH utilizzando il gestore di pacchetti del sistema operativo.

  2. Quando la workstation esegue OpenSSH 9.0 o versioni successive, OpenSSH include lo scambio di chiavi post-quantistico nell'elenco degli algoritmi predefiniti. Quando ti connetti a una VM compatibile, la connessione negozia uno scambio di chiavi post-quantistico senza flag aggiuntivi:

    gcloud compute ssh <var>VM_NAME</var> --zone=<var>ZONE</var>
    

    Sostituisci quanto segue:

    • <var>VM_NAME</var>: il nome della VM a cui vuoi connetterti.
    • <var>ZONE</var>: la zona in cui si trova la VM.

Client OpenSSH

Se utilizzi il client OpenSSH standard (ssh) su Linux, macOS o Windows:

  1. Verifica che la versione del client OpenSSH locale sia 9.0 o successiva:

    ssh -V
    
  2. Apri o crea il file di configurazione SSH dell'utente (~/.ssh/config su Linux e macOS o %USERPROFILE%\.ssh\config su Windows).

  3. Aggiungi o aggiorna la direttiva KexAlgorithms.

    • Per dare la priorità agli algoritmi post-quantistici consentendo il fallback classico (consigliato), aggiungi la seguente configurazione:

      KexAlgorithms ^mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com,diffie-hellman-group-exchange-sha256
      
    • Per applicare rigorosamente gli algoritmi post-quantistici e rifiutare le connessioni classiche, specifica solo gli algoritmi post-quantistici:

      KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com
      
  4. Connettiti alla VM utilizzando SSH:

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

    Sostituisci quanto segue:

    • <var>PATH_TO_PRIVATE_KEY</var>: il percorso della chiave SSH privata.
    • <var>USERNAME</var>: il tuo nome utente (ad esempio il nome utente OS Login).
    • <var>EXTERNAL_IP</var>: l'indirizzo IP esterno della VM.

App PuTTY

Se ti connetti alle VM utilizzando PuTTY su Windows:

  1. Assicurati di eseguire PuTTY versione 0.78 o successive (o versione 0.83 o successive per il supporto di ML-KEM). Per controllare la versione, apri PuTTY e fai clic su Informazioni. Se necessario, scarica l'ultima versione dalla pagina di download di PuTTY.

  2. Apri PuTTY.

  3. Nel riquadro Categoria, vai a Connessione > SSH > Kex.

  4. Nell'elenco Policy di selezione dell'algoritmo, individua l'algoritmo post-quantistico:

    • NTRU Prime / Curve25519 hybrid kex (disponibile in PuTTY 0.78+)
    • Scambio di chiavi ibrido ML-KEM / Curve25519 (disponibile in PuTTY 0.83 e versioni successive)
  5. Seleziona l'algoritmo post-quantistico e fai clic su Su finché non si trova all'inizio dell'elenco, sopra gli algoritmi Diffie-Hellman e ECDH classici.

  6. (Facoltativo) Per applicare rigorosamente gli algoritmi post-quantistici, seleziona ciascun algoritmo classico e fai clic su Giù finché non si trova sotto il separatore -- Avviso sotto questa riga -- o -- Non utilizzare sotto questa riga --.

  7. Nel riquadro Categoria, fai clic su Sessione.

  8. In Sessioni salvate, seleziona il nome della sessione e fai clic su Salva per mantenere la preferenza dell'algoritmo.

  9. Fai clic su Apri per connetterti alla VM.

Configura la VM

Per utilizzare gli algoritmi di scambio di chiavi post-quantistici, il sistema operativo della VM e il daemon SSH devono supportarli. Esamina i sistemi operativi compatibili e comprendi il comportamento predefinito prima di apportare modifiche alla configurazione.

Sistemi operativi compatibili

Per supportare lo scambio di chiavi post-quantistiche, la VM deve eseguire un sistema operativo che includa OpenSSH 9.0 o versioni successive. Le seguenti immagini Linux pubbliche disponibili su Compute Engine includono OpenSSH 9.0 o versioni successive:

  • Debian: Debian 12 (Bookworm) e versioni successive
  • Ubuntu: Ubuntu 24.04 LTS (Noble Numbat) e versioni successive
  • Fedora: Fedora 39 e versioni successive
  • Container-Optimized OS: Milestone 109 e versioni successive
  • Rocky Linux / AlmaLinux: versione 10 e successive

Le versioni precedenti del sistema operativo (come Ubuntu 22.04 LTS, Debian 11 o RHEL 9) includono per impostazione predefinita versioni di OpenSSH precedenti alla 9.0 e non supportano lo scambio di chiavi post-quantistico.

Comportamento predefinito

Se la tua VM esegue un sistema operativo con OpenSSH 9.0 o versioni successive, il server OpenSSH (sshd) supporta sntrup761x25519-sha512@openssh.com per impostazione predefinita. Le VM che eseguono OpenSSH 10.0 o versioni successive supportano anche mlkem768x25519-sha256 per impostazione predefinita.

Per impostazione predefinita, non sono necessarie modifiche alla configurazione della VM. Quando si connette un client in grado di eseguire operazioni post-quantistiche, la VM negozia automaticamente uno scambio di chiavi post-quantistico. Allo stesso tempo, la VM continua ad accettare connessioni da client che supportano solo algoritmi classici.

Richiedere rigorosamente algoritmi post-quantistici

Se la tua organizzazione richiede lo scambio di chiavi post-quantistico per tutte le sessioni SSH, puoi configurare il daemon SSH della VM in modo che accetti solo algoritmi di scambio di chiavi post-quantistico.

Per richiedere rigorosamente algoritmi post-quantistici sulla tua VM:

  1. Connettiti alla VM utilizzando SSH.

  2. Crea un file di configurazione drop-in in /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. Testa la configurazione del daemon SSH per verificare la presenza di errori di sintassi:

    sudo sshd -t
    

    Se il comando genera errori, controlla il file di configurazione prima di procedere.

  4. Ricarica il daemon SSH per applicare la modifica senza interrompere le sessioni attive:

    sudo systemctl reload sshd
    

    Se la tua distribuzione Linux utilizza ssh come nome del servizio, esegui sudo systemctl reload ssh.

  5. Mantieni aperta la finestra del terminale corrente e aprine una nuova per testare la connessione alla VM. Se la nuova connessione va a buon fine, la VM è configurata correttamente per richiedere algoritmi post-quantistici.

Recuperare l'accesso dopo un blocco SSH

Se configuri la VM in modo che richieda rigorosamente algoritmi post-quantistici e non riesci ad accedere perché il client non supporta gli algoritmi richiesti, utilizza una delle seguenti opzioni di recupero:

  1. Utilizza SSH nel browser: apri la console Cloud de Confiance e connettiti utilizzando SSH nel browser. SSH nel browser supporta lo scambio di chiavi post-quantistico e può connettersi anche quando gli algoritmi post-quantistici sono strettamente necessari sulla VM. Una volta connesso, rimuovi o modifica /etc/ssh/sshd_config.d/99-post-quantum-kex.conf e ricarica sshd.
  2. Utilizza la console seriale virtuale: connettiti alla VM utilizzando la console di amministrazione speciale (SAC) o la console seriale. Accedi con le tue credenziali, rimuovi il file di configurazione e ricarica sshd.
  3. Utilizza uno script di avvio: se l'accesso interattivo non è disponibile:
    1. Nella console Cloud de Confiance , arresta la VM.
    2. Modifica i metadati della VM per aggiungere uno script di avvio che elimini il file di configurazione /etc/ssh/sshd_config.d/99-post-quantum-kex.conf creato in precedenza, quindi riavvia il daemon del server SSH: startup-script: rm -f /etc/ssh/sshd_config.d/99-post-quantum-kex.conf && (systemctl reload ssh || systemctl reload sshd)
    3. Avvia la VM. Lo script di avvio viene eseguito come root e ripristina la compatibilità classica.
    4. Rimuovi lo script di avvio dai metadati dopo aver riacquisito l'accesso.

Verifica l'algoritmo di scambio di chiavi negoziato

Per verificare che una connessione SSH attiva utilizzi un algoritmo di scambio di chiavi post-quantistico, controlla i dettagli della connessione dal client.

Verifica utilizzando OpenSSH o gcloud CLI

Connettiti alla VM con l'output dettagliato attivato utilizzando il flag -v:

  • Utilizzo di OpenSSH:

    ssh -v -i <var>PATH_TO_PRIVATE_KEY</var> <var>USERNAME</var>@<var>EXTERNAL_IP</var>
    
  • Utilizzo di gcloud CLI:

    gcloud compute ssh <var>VM_NAME</var> --zone=<var>ZONE</var> -- -v
    

Ispeziona l'output del terminale durante la creazione della connessione. Cerca la riga kex: algorithm:

debug1: kex: algorithm: sntrup761x25519-sha512@openssh.com

oppure:

debug1: kex: algorithm: mlkem768x25519-sha256

Se l'output elenca sntrup761x25519-sha512 o mlkem768x25519-sha256, la connessione è protetta dallo scambio di chiavi post-quantistico. Se elenca un algoritmo come curve25519-sha256 o ecdh-sha2-nistp256, la connessione utilizza lo scambio di chiavi classico ed è ancora vulnerabile agli attacchi"capture now, decrypt later".

Verifica utilizzando PuTTY

  1. In PuTTY, connettiti alla VM.
  2. Fai clic con il tasto destro del mouse sulla barra del titolo della finestra di PuTTY e seleziona Event Log (Registro eventi).
  3. Nella finestra PuTTY Event Log, cerca la riga che indica l'algoritmo di scambio delle chiavi:
    • Using NTRU Prime / Curve25519 hybrid key exchange
    • Using ML-KEM / Curve25519 hybrid key exchange

Passaggi successivi