PQC Status
Guida

SSH post-quantum: mlkem768x25519-sha256 in OpenSSH

Come verificare lo scambio di chiavi negoziato dalle vostre sessioni SSH, preferire il metodo ibrido ML-KEM e interpretare correttamente l'avviso di OpenSSH 10.1.

· 7 min

OpenSSH offre già oggi l'accordo di chiavi post-quantum, senza librerie aggiuntive e senza patch. Il metodo ibrido mlkem768x25519-sha256 è stato introdotto in OpenSSH 9.9 (19 settembre 2024) ed è diventato l'accordo di chiavi predefinito in OpenSSH 10.0 (9 aprile 2025). Questa guida spiega come leggere quale metodo una sessione abbia effettivamente negoziato, come preferire il metodo ibrido sulle build che lo supportano senza usarlo come predefinito, che cosa significa l'avviso di OpenSSH 10.1 sugli accordi di chiavi non post-quantum e perché le chiavi host SSH restano ancora classiche.

Che cosa fa realmente mlkem768x25519-sha256

Il nome descrive la costruzione. ML-KEM (Module-Lattice-Based Key-Encapsulation Mechanism, un KEM o meccanismo di incapsulamento delle chiavi) con il set di parametri 768, X25519 (Diffie-Hellman su curva ellittica Curve25519) e SHA-256 come funzione di hash. Il NIST ha pubblicato ML-KEM come FIPS 203 il 13 agosto 2024 (FIPS 203), e la pagina di riferimento su ML-KEM ne elenca i set di parametri e lo stato.

Il metodo è ibrido: la chiave di sessione è derivata sia dal segreto condiviso ML-KEM sia dal segreto condiviso X25519. Un client e un server che lo negoziano restano protetti finché almeno una delle due componenti regge. È la scelta prudente mentre le implementazioni post-quantum sono ancora giovani, ed è ciò che indicano le linee guida europee: un accordo di chiavi ibrido anziché uno scambio puramente post-quantum.

In SSH l'accordo di chiavi è la prima priorità, per la stessa ragione che vale per TLS. Un attaccante che registra oggi una sessione cifrata può conservarla e attaccarla in seguito. È lo scenario harvest now, decrypt later (HNDL), descritto nel nostro articolo su harvest now, decrypt later. Se lo scambio era puramente classico, un computer quantistico sufficientemente potente consentirebbe di decifrare a posteriori il traffico registrato. L'autenticazione è diversa: un attaccante in grado di falsificare una firma host deve usarla durante una connessione attiva, quindi la migrazione delle firme può avvenire in un secondo momento senza esporre le sessioni passate.

Passo 1: verificare le versioni e ciò che le sessioni negoziano

Quali metodi supporta il binario

ssh -V
ssh -Q kex
ssh -Q kex | grep mlkem

ssh -Q kex elenca i metodi di scambio di chiavi compilati nel binario, indipendentemente dalla configurazione. Se compare mlkem768x25519-sha256, la build lo supporta. Entrambe le estremità devono supportarlo, quindi eseguite lo stesso controllo sul server: un client moderno che dialoga con un server datato ripiega su ciò che i due hanno in comune.

Quale metodo ha usato questa sessione

ssh -v user@server 2>&1 | grep -i 'kex: algorithm'

L'output dettagliato viene scritto sullo standard error, da cui il reindirizzamento. Una sessione che usa il metodo ibrido stampa una riga del tipo debug1: kex: algorithm: mlkem768x25519-sha256. È il controllo in assoluto più utile, perché riporta ciò che è stato negoziato e non ciò che si ritiene di aver configurato.

Qual è la configurazione effettiva

ssh -G server | grep -i kexalgorithms
sudo sshd -T | grep -i kexalgorithms

ssh -G stampa la configurazione client che si applicherebbe a quella destinazione, dopo la risoluzione di tutti i blocchi Host e delle inclusioni. sshd -T stampa la configurazione effettiva del server e richiede i privilegi di root. Eseguite entrambi prima di modificare qualsiasi cosa e conservatene l'output: costituisce un'evidenza di inventario.

La cronologia delle versioni

Versione di OpenSSHData di rilascioModifica all'accordo di chiavi
9.08 aprile 2022L'ibrido sntrup761x25519-sha512@openssh.com è diventato lo scambio di chiavi predefinito (post-quantum, ma non basato su uno standard NIST)
9.919 settembre 2024Aggiunto mlkem768x25519-sha256 (ML-KEM-768 con X25519), disponibile per impostazione predefinita
10.09 aprile 2025mlkem768x25519-sha256 è diventato l'accordo di chiavi predefinito
10.16 ottobre 2025Avviso quando una connessione negozia un accordo di chiavi non post-quantum (opzione WarnWeakCrypto, abilitata per impostazione predefinita)

Fonte: le note di rilascio di OpenSSH. Lettura pratica: dalla 9.9 il metodo è già disponibile, dalla 10.0 viene preferito automaticamente, e tra la 9.0 e la 9.9 disponete comunque di un accordo di chiavi post-quantum tramite sntrup761x25519-sha512@openssh.com.

Passo 2: preferire mlkem768x25519-sha256 senza compromettere i peer meno recenti

La direttiva è KexAlgorithms, usata in ssh_config lato client e in sshd_config lato server. Accetta tre prefissi: ^ antepone i metodi indicati all'elenco predefinito integrato, + li accoda e - li rimuove. Anteporre è la scelta sicura, perché il resto dell'elenco predefinito rimane disponibile come ripiego.

Client, in ~/.ssh/config o in un file drop-in sotto /etc/ssh/ssh_config.d/:

Host *
    KexAlgorithms ^mlkem768x25519-sha256

Server, in /etc/ssh/sshd_config o in un drop-in sotto /etc/ssh/sshd_config.d/:

KexAlgorithms ^mlkem768x25519-sha256

Se preferite un elenco ordinato esplicito, mantenete i metodi classici in fondo, in modo che i peer non ancora aggiornati possano comunque connettersi:

KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org

Validate la configurazione prima di ricaricarla, ed eseguite un reload anziché un riavvio:

sudo sshd -t
# the service name varies by distribution: ssh on Debian and Ubuntu, sshd on many others
sudo systemctl reload sshd

Una sequenza di operazioni che evita di restare chiusi fuori: testate prima in staging, mantenete aperta una sessione privilegiata durante il reload, poi aprite una seconda sessione e ripetete il controllo con ssh -v prima di chiudere la prima. Non rimuovete i metodi classici dall'elenco di un server finché tutti i client che vi si connettono non sono stati inventariati: jump host, runner di automazione, agenti di backup, sonde di monitoraggio, apparati di rete e librerie SSH embedded sono la causa abituale di un disservizio in questa fase.

Passo 3: interpretare correttamente l'avviso di OpenSSH 10.1

OpenSSH 10.1 (6 ottobre 2025) emette un avviso quando una connessione negozia un accordo di chiavi non post-quantum. L'opzione è WarnWeakCrypto ed è abilitata per impostazione predefinita. Due aspetti contano sul piano operativo.

Primo, si tratta di un avviso e non di un blocco: la connessione viene comunque stabilita. Vi segnala che è l'altra estremità della connessione a richiedere attenzione. Secondo, sntrup761x25519-sha512@openssh.com è anch'esso un ibrido post-quantum, quindi una sessione che lo negozia non è il caso a cui mira questo avviso. Semplicemente non si basa su uno standard NIST, ed è per questo che ML-KEM è la direzione da seguire per l'interoperabilità e per i requisiti di approvvigionamento.

Trattate ogni avviso come una riga di inventario: quale peer, quale versione, quale team ne è responsabile. Se in seguito vorrete rifiutare gli scambi esclusivamente classici anziché limitarvi a segnalarli, impostate un elenco KexAlgorithms esplicito che contenga solo metodi post-quantum, e fatelo soltanto quando i vostri controlli dimostrano che tutti i peer li supportano.

Passo 4: per ora le chiavi host restano classiche

In SSH l'accordo di chiavi e l'autenticazione vengono negoziati separatamente. Le chiavi host e le chiavi utente sono algoritmi di firma: ssh-ed25519, rsa-sha2-256, rsa-sha2-512 e le varianti ECDSA. I rilasci sopra citati hanno modificato l'accordo di chiavi, non i tipi di chiave host, quindi la situazione realistica oggi è uno scambio ibrido che protegge una sessione ancora autenticata con una chiave host classica. Potete vedere quale chiave è stata usata nello stesso output dettagliato:

ssh -v user@server 2>&1 | grep -i 'host key'

Questa situazione intermedia è accettabile per la ragione indicata in precedenza: la falsificazione di una firma richiede un attacco durante la connessione e non espone le sessioni registrate in passato. Il NIST ha standardizzato ML-DSA come FIPS 204 il 13 agosto 2024 (si veda la pagina su ML-DSA), e la migrazione delle firme SSH dipende da ulteriore lavoro sul protocollo e sulle implementazioni. Nel frattempo, documentate il divario anziché nasconderlo, preferite chiavi host ed25519 e, dove si usa RSA, seguite le indicazioni sulla dimensione delle chiavi applicabili alla vostra organizzazione.

Che cosa documentare per audit e inventari

SSH manca spesso dagli inventari crittografici che già coprono correttamente TLS. Il requisito 12.3.3 di PCI DSS v4.0.1 impone che le cipher suite e i protocolli in uso siano documentati e riesaminati almeno ogni 12 mesi, ed è obbligatorio dal 31 marzo 2025 (si veda PCI DSS v4.0.1). Nell'ambito di DORA, il Regolamento delegato (UE) 2024/1774 della Commissione all'Art. 6 richiede una politica in materia di cifratura e controlli crittografici che includa disposizioni per aggiornare o modificare la tecnologia crittografica in base agli sviluppi della crittoanalisi, e all'Art. 7 richiede la gestione delle chiavi lungo l'intero ciclo di vita (si veda la pagina sugli RTS DORA). Ciò che questi testi richiedono letteralmente è la politica e l'inventario. La corrispondenza riportata di seguito è la nostra interpretazione di come dimostrarlo per SSH, non la citazione di alcun requisito. Si tratta di un'informazione, non di una consulenza legale.

Evidenza da conservareCome produrla
Versione di OpenSSH di ogni client e serverssh -V, raccolto dal vostro strumento di gestione della configurazione
Elenco effettivo degli accordi di chiavi per serversudo sshd -T filtrato su kexalgorithms
Metodo negoziato sui percorsi criticila riga kex algorithm di ssh -v, acquisita per ciascun flusso
Algoritmi di chiave host in usola riga host key di ssh -v, oppure un inventario dei file di chiave host
Peer che negoziano ancora scambi esclusivamente classiciavvisi WarnWeakCrypto raccolti dai log dei client
Data dell'ultimo riesame e responsabile designatoil vostro registro di inventario, riesaminato almeno ogni 12 mesi

Passo successivo: verificare il resto della vostra superficie

SSH è un protocollo tra tanti, e la stessa costruzione ibrida esiste in TLS come X25519MLKEM768. Il modo più rapido per capire a che punto sono i vostri servizi pubblici è analizzare il vostro dominio con PQC Status, che riporta i gruppi di scambio di chiavi negoziati, le versioni TLS e la catena di certificati. Affiancate questo risultato ai controlli SSH descritti sopra, una riga per host, e avrete l'inizio di un vero inventario crittografico anziché una supposizione.

Domande frequenti

Come faccio a sapere se le mie sessioni SSH usano già un accordo di chiavi post-quantum?

Connettetevi con ssh -v e cercate la riga che riporta il kex algorithm negoziato. Se indica mlkem768x25519-sha256 o sntrup761x25519-sha512@openssh.com, lo scambio è ibrido post-quantum. Se indica soltanto un metodo classico come curve25519-sha256, una delle due estremità deve essere aggiornata o riconfigurata.

Serve OpenSSH 10 per usare mlkem768x25519-sha256?

No. Il metodo è stato introdotto in OpenSSH 9.9, rilasciato il 19 settembre 2024, ed è disponibile per impostazione predefinita in quella versione. OpenSSH 10.0, rilasciato il 9 aprile 2025, lo ha reso l'accordo di chiavi predefinito, quindi sulla 9.9 potrebbe essere necessario anteporlo con la direttiva KexAlgorithms perché venga preferito. Sia il client sia il server devono supportarlo.

L'avviso WarnWeakCrypto significa che la connessione non è sicura?

Significa che la connessione ha negoziato un accordo di chiavi non post-quantum. L'avviso è stato introdotto in OpenSSH 10.1, rilasciato il 6 ottobre 2025, ed è abilitato per impostazione predefinita. La sessione viene comunque stabilita, quindi considerate il messaggio come un segnale di inventario relativo al peer anziché come un errore, e pianificate l'aggiornamento di quel peer.

Una sessione SSH è interamente post-quantum una volta negoziato mlkem768x25519-sha256?

No. L'accordo di chiavi è ibrido, ma nelle versioni di OpenSSH qui descritte le chiavi host e le chiavi utente restano algoritmi di firma classici come ed25519, RSA o ECDSA. È un ordine di priorità ragionevole, perché il traffico registrato è protetto solo dallo scambio di chiavi, mentre la falsificazione di una firma richiede un attacco in tempo reale. Registrate il divario sulle firme nel vostro inventario come elemento noto.