Domanda

Sto scrivendo un programma che prende una passphrase dall'utente e quindi scrive alcuni dati crittografati su file. Il metodo che ho escogitato finora è il seguente:

  • Genera un IV a 128 bit da hashing il nome file e il tempo di sistema e scrivi questo all'inizio del file.
  • Genera una chiave da 256 bit dalla passphrase usando Sha256.
  • Crittografare i dati (a partire da una firma statica a 32 bit) con questa chiave usando gli eventi avversi in modalità CBC e scriverli su file.

Durante la decrittografia, la IV viene letta e quindi la passphrase utilizzata per generare la chiave allo stesso modo e i primi 32 bit vengono confrontati con ciò che dovrebbe essere la firma per dire se la chiave è valida.

Tuttavia stavo guardando il Esempio AES fornito in Polarssl (La libreria che sto usando per fare l'hashing e la crittografia) e usano un metodo molto più complesso:

  • Genera un IV a 128 bit da hashing il nome file e dimensioni del file e scrivi questo all'inizio del file.
  • Genera una chiave da 256 bit da hashing (Sha256) la passphrase e la IV insieme 8192 volte.
  • Inizializza l'HMAC con questa chiave.
  • Crittografare i dati con questo tasto utilizzando AES in modalità CBC e scriverli su file, aggiornando l'HMAC con ogni blocco crittografato.
  • Scrivi l'HMAC fino alla fine del file.

Ho l'impressione che il secondo metodo sia più sicuro, ma non ho abbastanza conoscenze per sostenerlo, a parte questo sembra più complicato.

  • Se è più sicuro, quali sono le ragioni per questo?
  • L'aggiunta di un HMAC alla fine del file è più sicuro che avere una firma all'inizio dei dati crittografati?
  • Hashing 8192 volte aumenta la sicurezza?

Nota: Questo è un progetto open source, quindi qualunque metodo utilizzo, sarà liberamente disponibile per chiunque.

È stato utile?

Soluzione

La seconda opzione è più sicura.

Il tuo metodo, non fornisce alcuna integrità dei messaggi. Ciò significa che un utente malintenzionato può modificare parti del testo cifrato e alterare ciò a cui si decrittica il testo semplice. Finché non modificano nulla che modificherà la tua firma statica a 32 bit, ti fiderai. L'HMAC sul secondo metodo fornisce l'integrità dei messaggi.

Hashing the Key 8192 volte aggiunge ulteriori passaggi computazionali per qualcuno che provi a bluteforcing la chiave. Supponiamo che un utente sceglierà una password basata sul dizionario. Con il tuo metodo un attaccante deve eseguire SHA256(someguess) E poi prova a decrittografare. Tuttavia, con la versione polarssl, dovranno calcolare SHA256(SHA256(SHA256...(SHA256(someguess))) per 8192 volte. Questo rallenterà solo un aggressore, ma potrebbe essere sufficiente (per ora).

Per quello che vale, si prega di utilizzare una biblioteca esistente. La crittografia è dura ed è soggetta a errori sottili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top