OpenSSL aes-128-cfb tidak menghasilkan ukuran yang diharapkan
Saya mencoba menerapkan aes-128-cfb sendiri untuk belajar. Untuk mengonfirmasi apakah penerapan saya benar, saya ingin memverifikasinya dengan pustaka terkenal seperti OpenSSL. Tapi kemudian saya melihat sesuatu yang aneh ketika saya mencoba menggunakan OpenSSL untuk mengenkripsi.
Saya memiliki file cleartext.txt
dengan konten berikut:
This is cleartext that will be used to encrypt with OpenSSL.
Kemudian saya menjalankan perintah ini
openssl enc -aes-128-cfb -in cleartext.txt -K 48656c6c6f20576f726c642041455321 -iv 72616e646f6d20313662797465206976 -out output.txt
Yang aneh adalah file keluaran hanya berisi 60 byte. Blok AES berukuran 16 byte. Ukuran keluaran yang diharapkan dalam byte harus kelipatan 16. 60 bukan kelipatan 16.
Apakah saya melewatkan sesuatu yang penting di sini?
Jawaban
Karena CFB tidak memerlukan padding yang mirip dengan mode operasi CTR dan OFB. Mode ini membuat blok sandi dan seseorang menggunakan jumlah yang diperlukan darinya.
Dalam kasus
openssl enc -K -iv
IV tidak ditulis ke file outputoutput.txt
. Oleh karena itu, ia memiliki ukuran yang sama dengan teks biasa dalam byte;61
byte masing-masing untuk file saya. Dalam hal ini, Anda harus menangani IV. Karena Anda juga memberikan IV, pastikan tidak digunakan lagi. Jika tidak, penyeretan tempat tidur dapat terjadi dalam mode CTR atau penggunaan ulang kunci OTP.Dalam kasus
-k/-kfile/-pass
, IV dan Kunci diturunkan dari metode derivasi kunci dengan menggunakan kata sandi pengguna dan garam acak 8-byte.OpenSSL pertama menulis sihir berkas dari
Salted__
kemudian 8-byte garam kemudian ciphertext ke dalam file. Sekarang ukuran keluaran adalah milik Andamagic size + salt size + data-size
. Di sistem saya,8+8+61 = 77
byte.Jika mode ECB digunakan
openssl enc -aes-128-ecb -in cleartext.txt -k -pass -out output.txt
maka ukurannya adalah
80
byte karena padding. Tentu saja, ECB tidak menggunakan IV dan orang harus melupakan mode ini!Mode CBC memiliki hasil yang mirip dengan ECB.
Ukuran IV yang diturunkan dapat berubah sesuai dengan algoritma enkripsi yang digunakan seperti block cipher TDES 8-byte dan Blowfish membutuhkan 8-byte IV dan 16-byte block cipher seperti AES dan Twofish membutuhkan 16-byte IV.
Saat menggunakan kata sandi, orang mungkin berhati-hati tentang entropi kata sandi dan metode derivasi kunci yang digunakan. Direkomendasikan menggunakan sandi Diceware dan setidaknya PBKDF2 untuk derivasi kunci. OpenSSL menyediakan berbagai metode untuk derivasi kunci