2011-09-01 12 views
6

Per la crittografia in Java ... l'articolo in http://cwe.mitre.org/data/definitions/329.html afferma che il vettore di inizializzazione dovrebbe essere diverso ogni volta, ma se utilizzo una IV diversa da decifrare rispetto a quella che ho usato per crittografare, Ricevo caratteri inutili invece dei dati che mi aspettavo.Come rendere IvParameterSpec casuale ma ancora decrittato

Qual è il modo corretto di crittografare su un server e decifrare su un altro senza dover comunicare l'IV avanti e indietro tra i server?

La tecnica comune sembra essere l'hardcode di un array di byte, ma presumibilmente è insicuro ???

+0

Hai frainteso l'articolo. L'IV dovrebbe essere diverso per ogni messaggio crittografato, ma è necessario utilizzare lo stesso IV per decrittografare un determinato messaggio che è stato utilizzato per crittografarlo. Vedi la risposta di Jon Skeet qui sotto. –

risposta

9

I credo un IV è come un sale - non è un segreto, è solo usato per introdurre un elemento extra di casualità in modo che lo stesso messaggio crittografato con la stessa chiave venga sempre fuori in modo diverso ogni volta.

Quindi è possibile trasmettere l'IV utilizzato per crittografare come parte del valore crittografato, proprio come si memorizzerebbe il sale insieme a un hash per un valore hash.

Ovviamente, potrei essere completamente errato ...

+1

Questo è corretto, IV è XOR con il primo blocco di testo normale, quindi crittografato con la chiave. I blocchi rimanenti sono XOR'd con il blocco precedente. Questo è chiamato Cipher Block Chaining (CBC). Devi decifrare con la stessa IV che hai usato per crittografare. Non è un segreto e può essere inviato/archiviato. Dovresti generare casualmente una nuova IV ogni volta che crittografa i dati. Il suo scopo è di aggiungere casualità ai dati crittografati, quindi gli stessi dati, crittografati con la stessa chiave, produrranno un testo di cifratura diverso. –

+0

supponiamo che se il server crittografa il testo in chiaro, il server deve inviare il testo crittografato insieme alla IV al client? E IV può essere inviato così com'è, come un semplice testo? – OnePunchMan

+0

@kaze: non è chiaro di quale scenario si stia parlando, ma sì, è possibile inviare l'IV come testo normale. –

Problemi correlati