OpenSSL aes-128-cfb non produce la dimensione prevista
Cerco di implementare aes-128-cfb da solo per l'apprendimento. Per confermare se la mia implementazione è corretta, voglio verificarla con una libreria nota come OpenSSL. Ma poi ho notato qualcosa di strano quando provo a utilizzare OpenSSL per crittografare.
Ho un file cleartext.txt
con il seguente contenuto:
This is cleartext that will be used to encrypt with OpenSSL.
Quindi eseguo questo comando
openssl enc -aes-128-cfb -in cleartext.txt -K 48656c6c6f20576f726c642041455321 -iv 72616e646f6d20313662797465206976 -out output.txt
La cosa strana è che il file di output contiene solo 60 byte. Il blocco AES è di 16 byte. La dimensione di output prevista in byte deve essere multipla di 16. 60 non è multipla di 16.
Mi sono perso qualcosa di importante qui?
Risposte
Perché CFB non richiede riempimento simile alla modalità operativa CTR e OFB. Queste modalità creano blocchi di cifratura e si utilizza la quantità necessaria da essi.
Nel caso
openssl enc -K -iv
dell'IV non viene scritto nel file di outputoutput.txt
. Pertanto ha la stessa dimensione del testo in chiaro in byte;61
byte ciascuno per il mio file. In questo caso, devi gestire l'IV. Dato che stai fornendo anche la flebo, assicurati che non venga riutilizzata. In caso contrario, può verificarsi un trascinamento della culla in modalità CTR o riutilizzo della chiave OTP.Nel caso di
-k/-kfile/-pass
, l'IV e la chiave sono derivati dal metodo di derivazione della chiave utilizzando la password dell'utente e il salt random a 8 byte.OpenSSL scrive prima file magic di
Salted__
salt di 8 byte quindi il testo cifrato nel file. Ora la dimensione dell'output è la tuamagic size + salt size + data-size
. Nel mio sistema,8+8+61 = 77
byte.Se viene utilizzata la modalità ECB
openssl enc -aes-128-ecb -in cleartext.txt -k -pass -out output.txt
quindi la dimensione è
80
byte a causa del riempimento. Ovviamente, ECB non usa l'IV e si dovrebbe dimenticare questa modalità!La modalità CBC ha risultati simili con ECB.
La dimensione IV derivata può cambiare in base all'algoritmo di crittografia utilizzato come il cifrario a blocchi a 8 byte TDES e Blowfish richiede IV a 8 byte e i codici a blocchi a 16 byte come AES e Twofish richiedono IV a 16 byte.
Quando si utilizza la password si potrebbe fare attenzione all'entropia della password e al metodo di derivazione della chiave utilizzato. Si consiglia di utilizzare una password Diceware e almeno PBKDF2 per la derivazione della chiave. OpenSSL fornisce vari metodi per la derivazione della chiave