Il mio reparto al lavoro è richiesto dal potere di utilizzare una libreria di crittografia scritta da un altro reparto, il problema è che la libreria di crittografia ha codificato il proprio AES vettore di inizializzazione della modalità contatore (tutti zeri). (Fondamentalmente, l'altro dipartimento ha preso la biblioteca di Bouncycastle e gli ha avvolto il proprio codice.) Abbiamo documentato i problemi con questo codice per i poteri, quindi ora, a meno che la direzione non decida di agire, siamo bloccati usando una libreria di crittografia rotta .Modalità contatore AES - la libreria di crittografia ha codificato il proprio vettore di inizializzazione
Mi chiedo se potremmo simulare un vettore di inizializzazione appropriato anteponendo un IV univoco al testo in chiaro e quindi troncando i primi sedici byte di testo in chiaro dopo la decrittografia, ad es.
ciphertext = encrypt(++sixteenByteCounter + plaintext)
plaintext = decrypt(ciphertext).subArray(16, ciphertext.length)
Questo sembra che vada bene per me, ma io sono certo un esperto di crittografia
No, troncare qualsiasi cosa non farà nulla di buono :). IV viene utilizzato per concatenare le modalità e prende parte alla crittografia. –
@ EugeneMayevski'EldoSCorp Un IV viene comunemente utilizzato anche come valore iniziale per il nonce nella crittografia in modalità contatore. E penso che la domanda fosse di ottenere maggiore sicurezza preponendo un valore, non troncando il testo in chiaro decifrato. –
Non ti servirà a niente. Il 96 bit superiore del contatore DEVE essere univoco per messaggio, altrimenti un semplice xor tra i messaggi comprometterà i dati. L'aggiunta di spazzatura da crittografare non aiuterà qui. L'implementazione deve essere modificata. –