Che cosa protegge davvero una passphrase su una chiave privata VPN
Blocca il file sul disco, non il tunnel in esecuzione né l'accesso al tuo account. Scopri cosa copre il prompt, cosa no e cosa fare se trapela.
Il prompt che appare all'avvio di un client VPN è facile da fraintendere. Non è la password dell'account VPN, non è la password del tunnel, e inserirla non dimostra che la connessione sia sicura. Sblocca una rappresentazione salvata di una chiave privata affinché il client possa leggere il materiale della chiave e usarlo per autenticarsi. Tutto ciò che accade dopo è un'altra questione.
In pratica la risposta sbaglia ai bordi: le persone presumono che la passphrase protegga il tunnel in esecuzione, o che cambiarla revochi una copia della chiave già trapelata. Entrambe le supposizioni falliscono, e falliscono in modo da lasciare una credenziale esposta mentre l'operatore crede che sia stata gestita.
Una finestra, diversi segreti
Una passphrase di chiave privata decifra un file. La password di un account ti autentica presso un servizio. La password di importazione PKCS#12 decifra un pacchetto che contiene una chiave e il suo certificato, e può non essere la stessa stringa della passphrase della chiave stessa. Questi prompt possono sembrare quasi identici, e indovinare quale segreto vada dove è il modo in cui le chiavi finiscono incollate nel campo sbagliato.
La cifratura del tunnel stesso è una quarta cosa. Il canale dati usa chiavi di sessione negoziate durante l'handshake; la passphrase della chiave privata non ha alcun ruolo nella protezione dei singoli pacchetti. Se qualcuno può leggere il file della chiave, può tentare di indovinare la passphrase offline, ma se può leggere i pacchetti, la passphrase è irrilevante.
Cosa copre la cifratura su disco
Una chiave PEM cifrata ha due forme, e l'intestazione ti dice quale hai. La forma moderna PKCS#8 inizia con -----BEGIN ENCRYPTED PRIVATE KEY-----; la vecchia forma PEM, ancora comune nelle installazioni OpenVPN più vecchie, inizia con -----BEGIN RSA PRIVATE KEY----- e porta Proc-Type: 4,ENCRYPTED e una riga DEK-Info subito sotto. Il file contiene la chiave privata cifrata sotto una chiave derivata dalla tua passphrase, di solito tramite un KDF basato su password con un numero di iterazioni o un fattore di lavoro dichiarato. La documentazione di OpenSSL pkey copre i formati e le opzioni della passphrase applicabili durante la lettura.
Ne derivano due conseguenze. Una passphrase debole è attaccabile offline al ritmo consentito dal KDF, quindi i permessi del file e l'accesso ai backup contano ancora anche quando il file è cifrato. E un attaccante che ottiene solo il file senza la passphrase deve indovinare; chi ottiene il file e la passphrase ha la chiave, esattamente come se non fosse mai stata cifrata.
head -3 vpn.key
openssl pkey -in vpn.key -noout -pubout
openssl pkcs12 -in bundle.p12 -info -noout
head -3 mostra l'intestazione e, su un file vecchio, le righe Proc-Type e DEK-Info che provano la cifratura; una sola riga non è prova in nessuna direzione. La riga pkey chiede la passphrase e stampa solo la metà pubblica, il che prova che il file e la passphrase funzionano senza esporre la chiave privata. Non usare -text per quel controllo: stampa i componenti privati, privateExponent, prime1, prime2 e il resto, e quell'output non deve mai essere incollato da nessuna parte, né in un ticket, né in una chat, né in un log. Il comando PKCS#12 ti dice anche se il pacchetto ha una password MAC o di cifratura separata, cosa che vale la pena sapere prima di passarlo a un collega.
Cosa smette di proteggere quando la chiave è caricata
Lo sblocco è un evento a senso unico per quel processo. Il client chiede la chiave al KDF, decifra il file e tiene la chiave privata in memoria finché ne ha bisogno. Da quel momento la passphrase non protegge più nulla della sessione in corso: né la memoria del processo, né un core dump, né una sessione di debug collegata al client, né un backup della macchina preso mentre la chiave era in uso.
È lo stesso confine di una chiave SSH con passphrase, o della cassaforte sbloccata di un gestore di password. Aumenta il costo del furto del file a riposo e non fa nulla contro malware in esecuzione come il tuo utente, un'applicazione autorizzata che chiede al client di firmare, o un amministratore che può leggere la memoria. Trattala come uno strato, non come il controllo che rende una chiave sicura da lasciare in giro.
Perché il prompt continua a tornare
Un client che richiede di nuovo a ogni riconnessione non è necessariamente guasto. Alcuni client memorizzano la passphrase per la sessione, altri la salvano nel portachiavi del sistema operativo, e altri possono essere indirizzati a un helper che la fornisce, quindi il comportamento dipende dal client e dalla sua configurazione, non dal file della chiave.
Se il prompt ripetuto è la vera lamentela, esamina le opzioni di cache e autenticazione del client prima di rimuovere la cifratura dalla chiave. Eliminare la passphrase trasforma un file protetto in una chiave in testo semplice, e la riconnessione diventa silenziosa al costo dell'unico controllo a riposo che avevi. Una risposta migliore è di solito un archivio di credenziali supportato con gli stessi permessi di file che avresti comunque usato.
Perdita ed esposizione non sono la stessa riparazione
Una passphrase persa non può essere recuperata dal certificato. Il certificato è materiale pubblico che lega un nome a una chiave; non contiene alcun percorso di ritorno alla chiave privata né alcun indizio sulla passphrase. Le opzioni pratiche sono un backup autorizzato della chiave, o una nuova identità emessa tramite il normale processo dell'operatore. Chiunque offra di 'recuperare' la passphrase offre di indovinarla.
L'esposizione richiede una risposta diversa. Ricifrare la stessa chiave con una nuova passphrase lascia invariato il materiale della chiave, quindi una copia già sbloccata altrove funziona ancora. La riparazione è revocare o sostituire la credenziale: emettere una nuova chiave e un nuovo certificato, distribuirli e ritirare il vecchio presso il peer. Finché ciò non accade, cambiare la password del file è manutenzione, non contenimento. Tieni il vecchio file fuori dai backup solo dopo aver confermato che la nuova identità funziona, e annota quale numero di serie o impronta l'ha sostituita.