Quanto è sicuro PKCS # 12

2

Ho bisogno di spostare l'identità crittografica dell'utente tra diversi dispositivi utente. Nel sistema operativo ho solo un'opzione: utilizzare PKCS # 12 protetto da password per importare l'identità nell'archivio sicuro del sistema operativo.

Mi chiedo quanto è sicuro PKCS # 12. Il file p12 può essere distribuito su un canale non sicuro? Quanto è sicuro rispetto alla soluzione in cui viene utilizzata una password fissa per p12 (solo perché l'API lo richiede), ma il risultato viene crittografato utilizzando la combinazione di PBKDF2 + AES-256 in CBC + HMAC.

    
posta eofster 03.04.2014 - 12:01
fonte

1 risposta

3

PKCS # 12 è un formato estremamente flessibile, quindi qualsiasi risposta alla tua domanda è relativa a ciò che il produttore di archivi ha deciso fare: quali algoritmi, quali parametri ...

Normalmente, quando si esegue la crittografia basata su password, si finirà con 3DES o AES e l'algoritmo di derivazione della chiave è PBKDF2 con un parametro di costo che non puoi scegliere. Per rendere la storia breve, questo sarà sicuro come queste cose possono essere SE (e questo è un grande "se") la password utilizzata è strong .

Per un caso d'uso specializzato, puoi generare la "password" come una grande chiave reale: prendi il tuo PRNG protetto crittograficamente sicuro (ad esempio /dev/urandom su Linux e MacOS X) e usalo per produrre una sequenza di 24 esadecimali casuali cifre. Questo offrirà 96 bit di entropia e le cose andranno bene. La riservatezza della chiave privata nel file PKCS # 12 verrà mantenuta e l' integrità verrà verificata in modo affidabile.

Un modo semplice per generare una "password" casuale su un sistema Linux è:

(dd if=/dev/urandom bs=16 count=1 2>/dev/null) | sha1sum | cut -b 1-24

Su Windows puoi usare PowerShell:

$rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$buf = New-Object byte[] 12
$rng.GetBytes($buf)
([System.BitConverter]::ToString($buf) -replace "-", "").ToLowerInvariant()

Se vuoi davvero aggiungere un ulteriore livello, il modo ragionevole è non di assemblare un algoritmo di crittografia simmetrica e un MAC te stesso: queste cose sono ingannevolmente difficili, il che significa che è facile fare qualcosa quale funziona , molto più difficile da realizzare qualcosa che sia strong , e molto più difficile da fare per rendere possibile qualcosa che può essere accertato. Invece, utilizzare un protocollo esistente supportato da un'implementazione esistente e ben controllata. Suggerisco GnuPG (il formato OpenPGP implementato da GnuPG supporta sia la crittografia simmetrica che asimmetrica).

    
risposta data 03.04.2014 - 15:10
fonte

Leggi altre domande sui tag