La maggior parte delle persone incontra la parola nonce in un profilo VPN e presume che sia un altro segreto condiviso da copiare tra pari. Non lo è. Un nonce è un valore che non deve mai ripetersi sotto la stessa chiave, e nella maggior parte della crittografia basata su nonce viaggia in chiaro. La confusione resta innocua finché qualcuno non lo modifica a mano, ed è lì che inizia il vero guasto.

Da dove viene davvero il nonce

La cifratura autenticata richiede un nonce diverso per ogni messaggio cifrato sotto una chiave. I protocolli soddisfano questo requisito in modi diversi: un contatore che cresce in modo monotono, un sale combinato con un identificatore di pacchetto o un valore casuale sufficientemente lungo. IKEv2 scambia nonce durante lo scambio iniziale, e sono input pubblici per la derivazione delle chiavi, non segreti.

L’unicità può essere strutturale o probabilistica. Un contatore non può ripetersi finché non si avvolge, ed è per questo che il protocollo definisce un punto di rinnovo della chiave molto prima. Un valore casuale si affida a bit sufficienti perché una collisione sia inverosimile entro il limite di messaggi, che è un argomento diverso con un diverso modo di guasto. La documentazione del protocollo indica quale metodo si applica, ed entrambi sono sicuri solo finché il limite dichiarato viene rispettato.

DesignWhere uniqueness comes fromExhaustion is handled by
AES-GCM recordsAn IV, typically a counterRekey before the counter wraps
ChaCha20-Poly1305A 96-bit nonce from a counter or generatorA message limit per key
WireGuardA per-key 64-bit counterRekey at a message cap
OpenVPN AEADPacket identifier plus implicit key materialRekey on the packet-id limit
IKEv2Fresh nonces per exchangeA new security association

Quanto costa davvero il riutilizzo

Riutilizzare un nonce sotto una chiave non è una questione minore di efficienza. Con GCM, due messaggi che condividono un IV consentono a un osservatore di recuperare la chiave di autenticazione e calcolare l’OR esclusivo dei due testi in chiaro. Le costruzioni basate su flusso riutilizzano il flusso di chiave allo stesso modo, il che trasforma il testo cifrato in un enigma invece che in un segreto.

Ecco perché le implementazioni rinnovano la chiave prima che un contatore si avvolga, e perché si fermano invece di continuare quando il loro stato è incerto. Un riavvio che azzera un contatore mentre il pari detiene ancora la vecchia chiave, o una macchina virtuale ripristinata da uno snapshot scattato a metà sessione, è esattamente la situazione che i limiti esistono per prevenire. Non serve alcun attaccante; le operazioni ordinarie bastano.

Perché la modifica manuale è la soluzione sbagliata

Contatori, sali e identificatori di pacchetto sono macchine a stati condivise da entrambe le estremità. Cambiare un lato desincronizza l’altro, e il tunnel fallisce in modi che sembrano un problema di instradamento. La leva supportata è un nuovo scambio di chiavi, che azzera lo stato su entrambe le estremità insieme.

Anche password e nonce svolgono ruoli diversi. Una password è un input segreto per la derivazione della chiave; un nonce è un input pubblico per messaggio. Un campo del profilo etichettato nonce che chiede un segreto lungo è di solito una chiave statica o un segreto precondiviso sotto un altro nome, quindi leggete la documentazione di quel campo invece di presumere.

Quando un avviso riguarda la gestione dei nonce, la correzione è la versione corretta del manutentore, non un’altra cifratura o una chiave più corta. Cambiare la cifratura per evitare la parola nonce sposta il problema invece di risolverlo.

Leggere un avviso senza indovinare

Una riga di log su contatori o nonce di solito descrive uno stato perduto, non un attacco. Verificate se un pari si è riavviato, se una macchina virtuale clonata ha riutilizzato la stessa identità e se le due estremità concordano sulle impostazioni di rinnovo della chiave. Poi stabilite una nuova sessione e osservate se il messaggio ritorna.

Tenete la diagnosi separata dai guasti non correlati. Una pagina che non si carica, o una richiesta di credenziali che si ripete in ciclo, non è prova di riutilizzo del nonce, e trattarla come tale vi manda nello strato crittografico quando il problema è sopra di esso.

Per l’uso ordinario, la regola sicura è breve: lasciate che l’implementazione gestisca il nonce, mantenete entrambe le estremità su versioni supportate e trattate qualsiasi azzeramento dello stato come motivo per rinnovare la chiave invece di modificare un valore. Se un campo del profilo non è nella documentazione del fornitore, non inventate un valore per esso. Riparare il tunnel comincia dal sapere quale strato state guardando.

Articoli correlati