La hashing della password riguarda la trasformazione di un < em> password (che è debole, per definizione) in una sequenza di bit adatta per la memorizzazione (token di verifica password) o utilizzata come chiave di crittografia (nel qual caso stiamo eseguendo derivazione della chiave basata su password ). Per tollerare l'uso delle password, dobbiamo seguire alcune regole rigide:
- Usa hashing lento con molte iterazioni (più facile a dirsi che a farsi, quindi non diventare creativo e utilizzare uno standard ben studiato come bcrypt o PBKDF2).
-
Mai mai riutilizzare un valore di sale per un'altra istanza di password . Infatti, se due password sono state sottoposte a hash con lo stesso valore di sale, allora l'attacco di uno consentirà di attaccare l'altro "gratuitamente".
Tuttavia, una volta che hai trasformato la password in una chiave, puoi usarla come qualsiasi chiave. Se il tuo sistema di crittografia non è ridicolo, non ci dovrebbero essere problemi nell'usare la stessa chiave per crittografare molti file. Nel caso di qualcosa basato su AES, ciò implica, in effetti, una nuova IV per ogni file. Le proprietà di tale IV dipendono dal meccanismo di crittografia effettivo; AES-CBC richiede un IV casuale, uniforme, imprevedibile, mentre alcune modalità più recenti come GCM richiedono solo un ripetersi non ripetitivo IV e quindi funziona bene con un semplice contatore.
Si noti che molti schemi di crittografia basati su password utilizzano un sistema salt-and-iterations per hash la password in una sequenza di bit contenenti entrambi la chiave e la IV. Tali sistemi non possono essere utilizzati per più di un file; altrimenti, riutilizzerai la IV, e questo è un peccato mortale (di solito è peggio che riutilizzare un sale, che è già piuttosto brutto). Se si desidera riutilizzare la chiave risultante dall'hash della password, è necessario generare una nuova IV per ogni esecuzione di crittografia.
Inoltre, tieni presente che se due file sono crittografati con la stessa chiave derivata da password, è probabile che le loro intestazioni includano il sale (devi metterlo da qualche parte, in modo che sia disponibile per la decrittografia), in questo modo perderai l'informazione che entrambi i file sono protetti con la stessa password e quindi hanno la stessa fonte. A seconda del contesto, questo potrebbe o non potrebbe essere un problema per te.
Altre persone hanno trovato conveniente usare il semplice espediente di memorizzare i loro dieci file in un unico archivio Zip e crittografarlo come un unico file. A seconda del contesto, questo può essere applicabile (o meno) ed è molto più semplice da implementare senza effettuare il "botching" del livello crittografico. In generale, progettare il proprio formato di crittografia e assemblare algoritmi è un percorso pieno di pericoli, e non puoi sapere se l'hai fatto correttamente o no (la sicurezza non è funzionalità: non può essere testata).