Keselamatan mod kaunter AES vs mod CBC

Evgeni Vaknin 09/05/2017. 1 answers, 401 views
aes cbc ctr nonce

Untuk AES-CBC untuk menjadi CPA memastikan IV yang digunakan terpilih secara rawak untuk setiap paket. Jika IV boleh diramalkan daripada penyulitan tidak CPA selamat. Adakah sama bagi mod AES-CTR? iaitu, untuk mod AES-CTR kaunter pertama mestilah rawak atau ia boleh menjadi nonce? Terima kasih

1 Answers


Patrick K 07/31/2017.

Keperluan untuk blok input AES-CTR adalah, bahawa ia harus unique semasa hayat kunci. Dalam kebanyakan kes, nombor 96bit rawak digunakan dengan kaunter 32bit yang bermula dari 0. Jika blok input yang sama untuk AES-CTR berlaku dua kali, AES-CTR tidak CPA selamat lagi. Dalam kes ini, ini boleh disebabkan oleh lompang balas selepas $ 2 ^ {32} $ blok atau kerana bertabrakan bukan segi 96bit secara rawak (babak ulang tahun hari jadi: 50% peluang selepas $ \ sqrt {2 ^ {96}} $ mesej. Pertimbangkan kes berikut:

Dua mesej 1-Blok berbeza $ P $ dan $ P '$ dihantar di bawah kekunci yang sama $ K $ (yang mungkin dirundingkan terlebih dahulu) dan dengan yang sama tidak $ N $. Penyerang tahu bahawa teks cipher yang berkaitan $ C $ dan $ C '$ di mana dikira oleh XORing mereka dengan aliran utama (yang berdasarkan kepada nonce dan kaunter):

$ C = P \ oplus E_K (N, 0) $

$ C '= P' \ oplus E_K (N, 0) $

Kemudian penyerang hanya boleh mengetuk teks cipher

$ C \ oplus C '= P \ oplus E_K (N, 0) \ oplus P' \ oplus E_K (N, 0) = P \ oplus P '$

dan dia memperoleh '' jarak '' antara dua teks biasa. Kerana redundansi dalam bahasa Inggeris, dia mungkin dapat menentukan $ P $ dan $ P '$.

Masalah ini juga dikenali sebagai "dua kali pad". Sekali aliran yang sama adalah XORed dengan plaintext, kita mendapat masalah. Oleh itu, adalah penting, bahawa input untuk penyulitan AES adalah unik semasa hayat kunci. Ia tidak perlu menjadi tidak dapat diramalkan, hanya unik.

5 comments
Evgeni Vaknin 07/31/2017
oleh pernyataan "2 ^ 32 mesej" Saya rasa anda bermaksud 2 ^ 32 blok sebanyak 16 bait setiap satu dalam AES? jika ya, daripada 2 ^ 32 masa blok adalah 2 ^ 32 * 128 bit, yang berada dalam 10Gbps, kira-kira 1 minit ... jadi setiap 1 minit algoritma pertukaran utama perlu dilaksanakan untuk menubuhkan kunci baru dan bukan ?
1 Patrick K 07/31/2017
Ya anda betul. Saya telah menyunting jawapannya. Sekiranya anda mempunyai statik yang tidak dikenali, maka anda perlu melakukan pertukaran utama setiap minit dalam kes ini. Tetapi sejak nonce biasanya ditukar dengan setiap mesej, anda terhad kepada mesej dengan panjang maksimum $ 2 ^ {32} \ cdot128 $ bit. Bilangan maksimum mesej yang boleh dihantar di bawah kekunci yang diberikan adalah terhad oleh paradoks hari jadi. Sekiranya nombor 96bit tidak dipilih secara seragam secara rawak untuk setiap mesej, kebarangkalian perlanggaran nonce ialah $ \ approx 0.5q ^ 2/2 ^ {96} $ untuk q mesej. Sekiranya anda mahukan istilah ini paling banyak 1%, anda $ q_ {max} = 4 \ cdot10 ^ {13} $.
Evgeni Vaknin 07/31/2017
Apa yang berlaku jika saya tidak menggunakan rawak rawak, sebaliknya saya menggunakan nilai rawak untuk nilai awal bukan dan daripada kenaikan setiap paket? Sebagai contoh, katakan setiap paket mengandungi kurang daripada 256 blok AES (128 bit setiap), dan kaunter untuk AES-CTR terdiri daripada nonce 120 bit, yang diinisialisasikan secara rawak apabila kunci ditukar, dan daripada dalam paket 8 bit kaunter digunakan untuk mengira blok 128 bit. Dan setiap paket baru, (teruskan dalam komen seterusnya)
Evgeni Vaknin 07/31/2017
Saya menambah bilangan tanpa nombor 1, dan jelaskan kaunter 8 bit. Dalam kes ini, paradoks hari lahir tidak relevan, kerana perlanggaran tidak mungkin (dengan menganggap saya menggantikan kunci sebelum kaunter 120 bit yang tidak luput)
1 Patrick K 08/01/2017
Ya, jika anda pastinya pastikan anda tidak menggunakan semula pasangan yang sama (input-block, key) untuk generasi mainstream, maka semuanya baik-baik saja. (sudah tentu mengandaikan bahawa kunci disimpan rahsia dan dipilih secara seragam dari rawak)

Related questions

Hot questions

Language

Popular Tags