ปัญหา:
ฉันกังวลเล็กน้อยเกี่ยวกับการนับซ้ำในโหมด CTR เมื่อใช้ IV แบบสุ่ม
- หากคุณแบ่ง (เช่น half IV, half counter) จะเพิ่มโอกาสของ IV เดียวกัน (ซึ่งมีขนาดเล็กกว่า) และจำกัดความยาวของข้อความ (หากน้อยกว่าครึ่งหนึ่ง)
- หากคุณเริ่มต้นด้วย IV เต็มบล็อก ตัวนับอาจทับซ้อนกัน
ฉันอยากได้ตัวนับบล็อก IV เต็มและครึ่งบล็อกโดยไม่ทับซ้อนกัน
วิธีแก้ปัญหาที่เสนอ:
แทนที่จะใช้ IV แบบสุ่มเป็น nonce ในตัวนับ เราสร้างคีย์ใหม่โดยเข้ารหัส IV ด้วยคีย์ เราใช้คีย์ใหม่นั้นในการเข้ารหัส ตัวนับเริ่มต้นด้วยศูนย์ครึ่งหนึ่งและครึ่งหนึ่งของ IV หรือด้วยมาสเตอร์คีย์ครึ่งหนึ่ง เพื่อทำ การโจมตีหลายเป้าหมาย ยากขึ้น
สมมติว่าคีย์, IV, รหัสบล็อกมีขนาดเท่ากันทั้งหมด
$k_{data} = E_{k_{master}}(IV)$
$keystream_i = E_{k_{data}}(ครึ่ง(IV) || counter_i)$
สิ่งนี้ดีขึ้น / แย่ลงหรือไม่?
ฉันกังวลว่าสิ่งนี้จะทำให้คีย์อ่อนลง ชุดค่าผสมของคีย์และ IV ที่แตกต่างกันจะให้คีย์ใหม่เหมือนกัน แต่โดยพื้นฐานแล้วมันเหมือนกับฟังก์ชันการหาค่าคีย์อย่างง่ายด้วยเกลือสิ่งนี้ควรอนุญาตให้ทุกข้อความได้รับการผูกมัดวันเกิด