Per convertire una password in un tasto AES, PBKDF2 è il modo più semplice di gestirlo. Assicurati che la password sia sufficiente entropy .
Tu fai devi usare un sale, perché è lì per proteggersi dagli attacchi dei tavoli arcobaleno.
A seconda della tua piattaforma, potrebbero esserci già delle librerie disponibili per aiutarti. Altrimenti, consiglierei qualcosa vicino alla soluzione di Lucus Kaufman.
Configurazione:
- Genera una chiave casuale a 128 bit (k1), un casuale IV a 128 bit, e uno casuale salt (64 bit è probabilmente sufficiente).
- Utilizza PBKDF2 per generare una chiave a 256 bit dalla tua password e il metodo salt, quindi suddividila in due 128- tasti di scelta rapida (k2, k3).
- Assicurati che l'output nativo dell'algoritmo sia almeno di 256 bit, altrimenti sarà lento. PBKDF2- SHA256 è una buona scelta. Non usare due algoritmi separati per questo, dal momento che lo renderà più lento e complicato per te, ma non rallenterà l'attaccante.
- Se la tua password ha già un'entropia sufficientemente alta, allora puoi permetterti di usare un numero piuttosto basso di iterazioni. 1000 iterazioni saranno così rapide che non te ne accorgi nemmeno (soprattutto perché dovrai solo decrittografare la chiave all'avvio del programma), quindi non ci sono molti motivi per andare al di sotto di questo. Se la tua password è più debole, puoi aumentare il numero di iterazioni da compensare.
- Non consiglio l'uso di bcrypt per questo, dato che l'output è della dimensione sbagliata e avresti bisogno di hash di nuovo, che aggiunge complessità non necessaria.
- Penso che scrypt possa generare output di dimensioni arbitrarie, quindi sarebbe una buona scelta se fosse disponibile (questo potrebbe non essere consentito se vuoi la FIPS conformità).
- Utilizza k2 per AES encrypt k1 utilizzando il IV casuale.
- Salva la chiave crittografata, k3, sale e IV in un file da qualche parte.
Crittografia / Decrittografia:
- Usa PBKDF2 + la tua password e il sale del file per rigenerare k2 e k3.
- Verifica k3. Se non corrisponde, la tua password è sbagliata o qualcuno ha manomesso il tuo file. Fermati qui.
- Usa k2 e IV dal file per decodificare k1.
- Utilizza k1 per crittografare o decodificare i file.
Modifica password
- Decrittografa k1 come nella sezione Crittografia / Decrittografia .
- Segui i passaggi di Setup , usando lo stesso k1, ma rigenera tutto il resto (new random salt e IV, generate k2 e k3 dalla nuova password).
Non memorizzare k2 ovunque. Non memorizzare k1 non crittografato. Fare una di queste cose infrange la sicurezza del tuo sistema.
Se non ti interessa essere in grado di cambiare la tua password (considererei questa funzione molto importante, ma forse non lo fai), potresti saltare i passaggi che riguardano k1 e usare k2 come tasto AES e k3 per verificarlo.
Potresti trovare utile anche generare un'altra chiave per HMAC , in modo da poter verificare che i file crittografati non sono stati manomessi Se vuoi farlo, puoi generare una chiave HMAC a 128 bit, e criptarla e memorizzarla con il tasto AES principale.