Dove conservare le chiavi AES quando si crittografano i file a riposo?

1

Ho esaminato la seguente domanda:

Leggi gli articoli di seguito su come crittografare i file utilizzando AES in% modalità% co_de:

Ma non ho ricevuto la mia risposta. Al posto del file si presuppone che io abbia un testo per la crittografia, quindi faccio come segue:

from Crypto.Cipher import AES
import hashlib

password = 'A_VERY_STRONG_RANDOM_PASSWORD'
key = hashlib.sha256(password).digest()

IV = ''.join(chr(random.randint(0, 0xFF)) for i in range(16))

mode = AES.MODE_CBC
encryptor = AES.new(key, mode, IV=IV)

text = 'j' * 64 + 'i' * 128
ciphertext = encryptor.encrypt(text)

Gli utenti del sistema hanno centinaia di file e tutti devono essere crittografati a riposo, quindi voglio usare AES perché la sua crittografia è veloce e sicura.

La prima domanda è che devo generare una nuova password ogni volta che voglio crittografare un file? O dovrebbe essere per utente? o a livello di sistema? Qual è la migliore pratica e più sicura?

La seconda domanda è che dove dovrei memorizzare queste / queste password?

NOTA: non voglio usare CBC o alcun hardware esterno per questo.

    
posta ALH 06.08.2018 - 09:23
fonte

1 risposta

0

Chiamiamo il sistema che esegue la crittografia E e qualsiasi sistema che memorizza i file crittografati S (per l'archiviazione).

I file memorizzati su S sono sicuri fintanto che l'utente malintenzionato non ha la chiave corrispondente.

Poiché non si desidera utilizzare un HSM, possiamo presumere che qualsiasi chiave memorizzata su E verrà compromessa se E è compromessa. Ora avete fondamentalmente due opzioni per la memorizzazione: disco o memoria. Su disco è piuttosto banale: si utilizza OS ACL per limitare l'accesso alla chiave di crittografia e si spera che andrà bene. Per memoria è possibile creare un sistema che richiede di fornire manualmente un segreto segreto (digitando, leggi un codice QR tramite webcam, ecc.) All'avvio del servizio di crittografia (o alla rotazione delle chiavi, vedi sotto). In questo modo non è possibile accedere alla chiave tramite vulnerabilità che forniscono solo l'accesso ai file system (ad esempio, path traversal). Nota che in Python avrai un tempo difficile che cancella i segreti dalla memoria, ma puoi usare gli hack sporchi come questo .

(nota che Sicurezza basata sulla virtualizzazione può "emulare "HW extra che avrebbe notevoli vantaggi ma non credo che corrisponda al tuo caso d'uso)

Aspettando il compromesso di E, sarebbe una buona idea ruotare periodicamente i tasti (e spostare le vecchie chiavi da E a un'archiviazione sicura in linea), così qualsiasi incidente non avrà effetto sui file crittografati con chiavi precedenti. Il periodo di rotazione delle chiavi dovrebbe dipendere dalle tue esigenze.

Modifica: in caso di crittografia decente come la crittografia AES, un numero elevato di file con la stessa chiave non è un problema, quindi l'utilizzo di una singola chiave non comporta una crittografia più debole rispetto all'utilizzo di più chiavi. Alla fine della giornata si parla di gestione delle chiavi.

L'uso di encrp per file o per utente dipende anche dai requisiti di gestione delle chiavi. Le chiavi per utente possono avere senso se è necessario decrittografare i file per utente. Le password per file possono limitare l'impatto di un compromesso, ma l'archiviazione delle vecchie chiavi può essere problematica e si dovrebbe tenere presente che i sistemi di solito rimangono in uno stato compromesso per lunghi periodi di tempo, quindi questo non può essere di aiuto molto più di un normale processo di rekey periodico .

    
risposta data 06.08.2018 - 14:10
fonte

Leggi altre domande sui tag