Per la crittografia basata su password, è necessario:
- trasforma la password in una chiave idonea per l'algoritmo di crittografia (un processo chiamato derivazione della chiave );
- usa quella chiave per crittografare il file.
Supponendo che tutto ciò che riguarda la fase di crittografia sia stato eseguito correttamente e che l'algoritmo utilizzato non sia debole, la via di attacco più diretta è la password: l'utente malintenzionato proverà le potenziali password, applicando la derivazione della chiave e quindi la decrittografia per vedere se il risultato "ha senso". Il punto importante qui è che l'utente malintenzionato non ha bisogno di decodificare l'intero file per vedere se ha l'aspetto del cleartext previsto o meno; per esempio, se l'attaccante deduce che il file è un'immagine JPEG, allora ha solo bisogno di decrittografare i primi quattro byte per vedere se questi danno la sequenza di partenza prevista per tale file (FF D8 FF E0). Anche se l'utente onesto vuole il file completo, e quindi dovrà decifrarlo interamente (implicando I / O per leggere il file e scriverlo di nuovo), l'attaccante non è in alcun modo costretto a fare lo stesso durante il suo attacco. p>
Pertanto, NON DEVE assumere che la velocità di decifratura dell'intero file rallenti o rallenti l'attacco. In tal senso, fornire un test "veloce" per la correttezza della password non renderà le cose più facili anche per l'aggressore.
Tuttavia ...
Devi stare attento a fare le cose correttamente. Innanzitutto, il modo più semplice per progettare un formato sicuro per la crittografia dei file basata su password consiste nell'utilizzare un formato esistente per la crittografia dei file basata su password, che è già stato progettato, analizzato, implementato e testato. Un candidato ragionevole è quindi OpenPGP e (in particolare) la sua implementazione open source GnuPG .
Se continui a insistere per eseguire il tuo progetto e poi l'implementazione, allora devi capire che il nucleo della tua sicurezza risiederà nel processo di derivazione della chiave, chiamato anche hashing della password . C'è molta teoria e pratica sull'argomento, quindi ti suggerisco di iniziare leggendo questa risposta .
Ora, se hai avuto il giusto hashing della password, con tutte le iterazioni e i sali casuali, allora potresti immaginare un processo in cui la password è derivata in una chiave K di, ad esempio, 256 bit (32 byte). Quindi dividi la chiave in due metà K 1 e K 2 (128 bit ciascuna). Aggiungi una copia di K 1 nell'intestazione del file crittografato, per verificare la correttezza della password; e usa K 2 (non K 1 !) per crittografare effettivamente il file. Questo è sicuro finché la funzione di derivazione della chiave basata su password è sicura come funzione di derivazione della chiave.
Naturalmente, se hai bisogno di crittografia, allora (presumibilmente) ci sono degli attaccanti, e gli aggressori sono, nel complesso, noti per essere cattivi. Non giocano secondo le regole. In particolare, se possono vedere file crittografati, è probabile che possano modificare file crittografati. Per rilevare in modo affidabile tali modifiche, è necessario un MAC e quindi le cose diventa complesso . Il potenziale per un errore di progettazione catastrofico è elevato.