Identifikasi Mode AES

Oct 22 2020

Katakanlah saya memiliki API yang menerima Plaintext dan IV sebagai parameter input dan mengembalikan ciphertext. Saya tahu bahwa API menggunakan enkripsi AES 128 tetapi sekarang saya perlu mengidentifikasi mode enkripsi mana (ECB, CBC, OFB, CFB, atau CTR) yang digunakannya. Bagaimana saya bisa mengidentifikasi mode enkripsi? Setiap saran, petunjuk, atau panduan akan sangat dihargai.

Contoh:

curl "http://dev/api/v1.0/test?iv=00112233445566778899&text=01234567"

Tanggapan: 7fcb5212d14de7ddcc334ec31acec6ae

Jawaban

4 Gilles'SO-stopbeingevil' Oct 22 2020 at 21:39

Anda memiliki kotak hitam yang mengenkripsi data, dan Anda bekerja dengan asumsi bahwa kotak hitam ini menerapkan mode populer (ECB, CBC, CTR, OFB atau CFB) enkripsi (tidak diautentikasi) melalui cipher blok. Anda dapat mengirimkan input teks biasa untuk dienkripsi, serta IV pilihan Anda.

Pertama, Anda dapat dengan mudah membedakan antara mode aliran dan mode non-aliran:

  • CTR, OFB dan CFB adalah mode cipher aliran. Ciphertext selalu memiliki panjang yang sama dengan plaintext.
  • ECB dan CBC hanya dapat mengenkripsi seluruh blok. Panjang ciphertext selalu merupakan kelipatan dari panjang blok (16 byte untuk AES, Camellia, ARIA, SM4).
  • Ada mode non-aliran yang ciphertext memiliki panjang yang sama dengan teks biasa, misalnya CTS di atas mode seperti CBC atau XEX. Tetapi saya tidak akan mempertimbangkan mereka dalam analisis ini.

Jadi mengenkripsi 1 byte. Jika Anda mendapatkan 1 byte ciphertext, itu adalah mode streaming. Jika Anda mendapatkan 16 byte, itu adalah mode blok utuh dengan padding. Jika Anda mendapatkan kesalahan tetapi mengenkripsi 16 byte berfungsi, itu adalah mode blok utuh tanpa padding.

Mode bantalan dan blok

ECB sebenarnya tidak menggunakan IV. Jadi jika Anda mendapatkan output yang sama terlepas dari IV-nya, itu ECB, jika tidak maka mungkin tidak. Tetapi jika itu adalah sistem yang dirancang dengan aneh, IV dapat digunakan dengan cara yang tidak standar, misalnya "quasi-ECB" dapat menggunakan ECB pada teks biasa IV +.

Enkripsi dua blok identik. Jika dua blok ciphertext pertama identik, itu ECB. Jika tidak, dengan elimitasi, itu CBC. (Mungkin ada atau mungkin tidak ada blok ketiga tergantung pada metode padding.)

Padding CBC (atau ECB) biasanya meningkatkan ukuran ciphertext sebesar 1 hingga 16 byte. Alasan padding selalu minimal 1 byte adalah untuk membuat dekripsi tidak ambigu: jika ada kasus padding kosong, tidak mungkin untuk mengetahui dengan melihat ciphertext yang didekripsi-tapi-belum-belum-belum diisi. Sebagian besar metode padding menyampaikan panjang padding melalui nilai byte terakhir dari ciphertext yang didekripsi-tapi-belum-belum-belum diisi. Namun, dimungkinkan untuk mengizinkan padding kosong jika panjang teks biasa ditransmisikan secara terpisah, atau jika teks biasa memiliki properti yang diketahui seperti diakhiri dengan byte tertentu. (Ini bukan ide yang bagus, tetapi kita berbicara tentang menganalisis sistem yang dirancang dengan buruk di sini.)

Membedakan mode aliran

(Notasi: $E$ adalah fungsi enkripsi blok, $||$ adalah penggabungan string, $\oplus$ bitwise xor, $+$ adalah tambahan pada nilai counter, $\mathbf{0}$ adalah blok nol semua-bit, $\mathbf{1}$ adalah blok di mana semua bit adalah nol kecuali bit terakhir adalah 1.)

Karena Anda dapat mengirimkan IV yang sama untuk enkripsi beberapa kali, dimungkinkan untuk membedakan antara mode streaming. Mari kita lihat bagaimana teks biasa dua blok$P_1 || P_2$ dienkripsi menjadi ciphertext dua blok $C_1 || C_2$:

  • OFB: $C_1 = E(\mathrm{IV}) \oplus P_1$, $C_2 = E(E(\mathrm{IV})) \oplus P_2$
  • CFB: $C_1 = E(\mathrm{IV}) \oplus P_1$, $C_2 = E(E(\mathrm{IV}) \oplus P_1) \oplus P_2$
  • RKT: $C_1 = E(\mathrm{IV}) \oplus P_1$, $C_2 = E(\mathrm{IV}+1) \oplus P_2$

Mari gunakan ini untuk menyusun cara untuk membedakan ketiga mode ini.

  1. Enkripsi teks biasa satu blok semua-bit-nol dengan IV semua-bit-nol. Tidak peduli yang mana dari ketiga mode ini yang diterapkan kotak hitam, hasilnya adalah$E(\mathbf{0})$.
  2. Enkripsi teks biasa satu blok semua-bit-nol dengan IV $E(\mathbf{0})$. Outputnya adalah$E(E(\mathbf{0}))$.
  3. Enkripsi teks biasa satu blok semua-bit-nol dengan IV $\mathbf{1}$(semua-bit-nol kecuali bahwa bit terakhir adalah 1). Outputnya adalah$E(\mathbf{1})$.
  4. Enkripsi teks biasa satu blok semua-bit-nol dengan IV $E(\mathbf{0}) \oplus \mathbf{1}$. Outputnya adalah$E(E(\mathbf{0}) \oplus \mathbf{1})$.
  5. Sekarang mengenkripsi teks biasa dua blok: $\mathrm{IV} = \mathbf{0}$, $P_1 = \mathbf{1}$, $P_2 = \mathbf{0}$. Lihatlah blok kedua dari ciphertext.
    • OFB: $C_2 = E(E(\mathbf{0}))$ (dihitung pada langkah 2).
    • CFB: $C_2 = E(E(\mathbf{0}) \oplus \mathbf{1})$ (dihitung pada langkah 4).
    • RKT: $E(\mathrm{0} + 1)$. Ini biasanya$E(\mathrm{1})$ (dihitung pada langkah 3) tetapi mungkin berbeda jika penerapan RKT melakukan penambahan penghitung secara berbeda.
3 SEJPM Oct 22 2020 at 09:13

Bagaimana saya bisa mengidentifikasi mode enkripsi?

Anda tidak dapat sepenuhnya mengidentifikasi mode ini tanpa mengirim $2^{64}$ish byte data di bawah kunci yang sama, karena hanya dengan mode streaming (CFB, OFB, CTR) mulai rusak keamanan dengan cara yang berbeda.

Namun Anda dapat yakin bahwa jika Anda melihat ciphertext yang bukan kelipatan dari panjang blok (16 byte untuk AES) maka Anda memiliki salah satu CFB, OFB atau CTR (atau mode yang mirip dengan streaming mode atau yang dibangun di atas salah satu dari mereka).

Sekarang, jika Anda selalu mendapatkan keluaran yang merupakan kelipatan dari panjang blok, maka kemungkinan itu adalah mode CBC atau ECB. Anda dapat membedakan keduanya berdasarkan kerentanan ECB klasik yang tidak dimiliki CBC: Blok input yang sama diproses menjadi blok output yang sama. Dalam praktiknya, ini berarti Anda dapat mengirim 32 semua-0 byte dan jika Anda mendapatkan sesuatu yang menunjukkan dua urutan 16-byte yang sama, Anda memiliki ECB atau CBC. Atau jika Anda menentukan IV yang berbeda untuk teks biasa yang sama dan masih mendapatkan kembali teks sandi yang sama, Anda juga tahu ECB digunakan (meskipun CBC IV benar - benar harus dipilih secara acak dan bukan oleh musuh ...).