OpenSSL aes-128-cfb non produce la dimensione prevista

Aug 17 2020

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.txtcon 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

2 kelalaka Aug 17 2020 at 22:02

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 -ivdell'IV non viene scritto nel file di output output.txt. Pertanto ha la stessa dimensione del testo in chiaro in byte; 61byte 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 tua magic size + salt size + data-size. Nel mio sistema, 8+8+61 = 77byte.

    • Se viene utilizzata la modalità ECB

      openssl enc -aes-128-ecb -in cleartext.txt -k -pass -out output.txt
      

    quindi la dimensione è 80byte 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