Quando un file PKCS12 viene importato in un browser Web o in un archivio Windows, all'utente viene richiesta la password della chiave privata. In che modo il browser o il sistema operativo gestiscono questa password? È sicuro?
Quando un file PKCS12 viene importato in un browser Web o in un archivio Windows, all'utente viene richiesta la password della chiave privata. In che modo il browser o il sistema operativo gestiscono questa password? È sicuro?
La password che ti viene richiesta è quella utilizzata per bloccare il file PKCS # 12 stesso. I file PKCS # 12 sono in realtà archivi piuttosto generici, estensibili in molti modi, ma in pratica sono contenitori protetti da password per privati chiavi e certificati. La "protezione password" è in realtà crittografia basata su password : la password viene trasformata in una chiave di crittografia utilizzando una Chiave Funzione di derivazione : in questo caso, è PBKDF2 .
PBKDF2 tenta di proteggere la password dagli attacchi di forza bruta essendo intrinsecamente lenti, utilizzando molte iterazioni interne. Il numero di iterazioni è configurabile ed è stato scelto dal sistema che ha generato il file PKCS # 12; un numero maggiore di iterazioni implica una maggiore sicurezza (dal momento che rende ogni password più costosa) ma anche un costo di utilizzo più elevato (poiché rende ogni password più costosa).
In ogni caso, una volta che la password è stata richiesta dall'utente e trasformata in una chiave di crittografia con PBKDF2, il contenuto del file PKCS # 12 viene decifrato (nella RAM del computer). Quello che succede dopo non è completamente correlato al file PKCS # 12: quel file è semplicemente una nave da trasporto; una volta che il tuo computer ha la chiave privata nella sua RAM, il file PKCS # 12 (e la sua password) cessa di essere di qualche utilità. Dato che stai facendo un import , il tuo browser o sistema operativo si sta occupando dello storage e della protezione della chiave privata, e lo fa usando metodi che non sono in alcun modo influenzati dal file PKCS # 12 o la sua password Windows (quindi Internet Explorer) proverà a memorizzare la chiave privata crittografata con la password di sessione, sebbene sia possibile aggiungere una password aggiuntiva.
Da un punto di vista di alto livello, se si sta importando una chiave privata nella propria macchina, significa che:
In generale, questo genere di cose è considerato subottimale. Se la chiave è tua, dovrebbe essere stata generata nel tuo computer e la chiave privata non dovrebbe mai averla lasciata. Lo scenario di utilizzo PKI consigliato è che generi la coppia di chiavi sul computer, invii la chiave pubblica alla CA (come parte di una richiesta di certificato) e riceva il certificato appena emesso. In questo scenario, viaggiano solo informazioni pubbliche e non esiste affatto un file PKCS # 12.
Per aggiungere alla risposta di Thomasm Pornin, considera un PKCS # 12 creato da OpenSSL per conservare uno o più certificati e una chiave privata.
I certificati verranno crittografati come set, per impostazione predefinita utilizzando RC2 con una chiave a 40 bit ( "rc2-40-cbc"
). La chiave è derivata dalla password, un salt casuale di 8 byte e 2048 iterazioni di SHA1 usando PKCS # 5 v1.5 ( "PBE-SHA1-RC2-40"
).
Questo semplicemente combina i byte password e i byte salt e calcola ricorsivamente l'hash SHA1. I primi cinque byte dell'hash finale sono il tasto RC2 e gli otto successivi, il IV.
La chiave privata verrà crittografata per impostazione predefinita utilizzando 3DES ( "des-ede3-cbc"
). La chiave è derivata dalla password, un salt casuale di 8 byte (che è diverso che sale utilizzato per i certificati) e 2048 iterazioni di SHA1 usando PKCS # 12 PBE ( "PBE-SHA1-3DES"
). Questo è un po 'più complicato.
Deriva la chiave e IV separatamente da diversi, noti punti di partenza. Converte anche la password in Unicode big-endian. Ma più o meno, si tratta di un hash SHA1 ricorsivamente calcolato e i primi byte dell'hash finale forniscono la chiave o IV.
Devi chiedere esplicitamente a OpenSSL di usare PKCS # 5 v2.0, alias PBKDF2 , ad esempio sul < a href="https://www.openssl.org/docs/manmaster/apps/pkcs12.html"> riga di comando con keypbe alg
e / o certpbe alg
:
these options allow the algorithm used to encrypt the private key and certificates to be selected. Any PKCS#5 v1.5 or PKCS#12 PBE algorithm name can be used (see NOTES section for more information). If a cipher name (as output by the list-cipher-algorithms command is specified then it is used with PKCS#5 v2.0. For interoperability reasons it is advisable to only use PKCS#12 algorithms.
Il file PKCS # 12 non è crittografato. Puoi leggerlo e trovare il PBE e i codici utilizzati in entrambi i casi (per certificati e chiave privata). Puoi anche leggere sia i sali che i conteggi di iterazione. Quindi, la tua chiave privata è sicura solo come da un attacco di forza bruta conoscendo il PBE, il sale, le iterazioni, il codice e il testo cifrato . Tuttavia, questo è un ostacolo piuttosto grande da superare.
Nota: potresti avere problemi nell'importazione del PKCS # 12 predefinito da un software compatibile con FIPS-140 perché non gradisce PBE-SHA1-RC2-40. OpenSSL ha uno switch di riga di comando descert
per chiedere PBE-SHA1-3DES per la crittografia del certificato (vedere sopra il link ).
Leggi altre domande sui tag public-key-infrastructure key-management pkcs12