OpenSSL aes-128-cfb tidak menghasilkan ukuran yang diharapkan

Aug 17 2020

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

2 kelalaka Aug 17 2020 at 22:02

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 -ivIV tidak ditulis ke file output output.txt. Oleh karena itu, ia memiliki ukuran yang sama dengan teks biasa dalam byte; 61byte 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 Anda magic size + salt size + data-size. Di sistem saya, 8+8+61 = 77byte.

    • Jika mode ECB digunakan

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

    maka ukurannya adalah 80byte 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