ขั้นแรกให้กำหนดการก่อสร้าง AES-GCM เมื่อใช้ในลักษณะที่แนะนำจะเทียบเท่ากับ $$\operatorname{KDF}(K,S,I)=\operatorname{AES}_K(S\|0^{32})\oplus \operatorname{GHASH}_{\operatorname{AES}_K(0^{ 128})}(ฉัน)$$
ที่ไหน $\ชื่อผู้ประกอบการ{GHASH}_H(M)\ประมาณ \sum_i H^iM_i$ สำหรับบล็อกข้อความ $M_i$ ที่มีขนาด 128 บิตและการคูณและการเพิ่มที่ทำในฟิลด์จำกัดขนาด 128 บิตที่มีการแทนชื่อพหุนาม นี่เป็นค่าประมาณของ GHASH ที่จะใช้ได้กับการสนทนาด้านล่างของเรา
การก่อสร้างนั้นปลอดภัยหรือไม่?
ฉันจะเรียกโครงสร้าง KDF นี้ว่าปลอดภัย ถ้ามันทำงานเหมือน PRF ทั้งในอินพุต โดยขึ้นอยู่กับข้อจำกัดที่มีชื่อ เช่น อินพุตที่ไม่ซ้ำกันให้เอาต์พุตสุ่มหลอกที่เป็นอิสระ
[สมมติว่า] เกลือ / nonce นั้นไม่ซ้ำกันทั่วโลกตลอดอายุการใช้งานของคีย์และรหัสอุปกรณ์ทั้งหมด?
ดังที่คุณเห็นจากนิพจน์ด้านบน สมมติว่าเกลือของคุณไม่ซ้ำใคร การดำเนินการ AES จะปิดบังผลลัพธ์ GHASH ใดๆ และผลลัพธ์จะดูสุ่มและคาดเดาไม่ได้ เมื่อได้รับคำตอบในส่วนถัดไปแล้ว ก็ยังมีข้อสงสัยว่าข้อมูลที่เกี่ยวข้องให้ประโยชน์ใดๆ ที่เป็นประโยชน์หรือไม่ นอกเหนือจากการบดบังเหตุการณ์การชนกันของเกลือเล็กน้อย
[สันนิษฐาน] เกลือ / "nonce" นั้นไม่ซ้ำกันสำหรับ ID ที่ระบุเท่านั้น และอาจมีอุปกรณ์หลายเครื่องที่ใช้เกลือเดียวกันโดยบังเอิญ (เนื่องจากการชนกันของค่าสุ่ม)?
น่าเสียดายที่ไม่มี ถ้าสองรากศัพท์ใช้เหมือนกัน $(K,S)$ จับคู่กับสองที่แตกต่างกัน $ฉัน ฉัน'$ แบบสอบถามและฝ่ายตรงข้ามเรียนรู้คีย์ผลลัพธ์ที่เกี่ยวข้อง $k,k'$จากนั้นศัตรูสามารถเรียนรู้ได้ $k\oplus k' = \operatorname{GHASH}_{\operatorname{AES}_K(0^{128})}(I) \oplus \operatorname{GHASH}_{\operatorname{AES}_K(0^{ 128})}(I')\ประมาณ \sum_i H^i(I'_i\oplus I_i)$ ซึ่งเป็นสำนวนที่ศัตรูสามารถฟื้นตัวได้ $H=\ชื่อผู้ประกอบการ{AES}_K(0^{128})$ ทำให้พวกเขาฟื้นตัวได้ $k\oplus \operatorname{GHASH}_{\operatorname{AES}_K(0^{128})}(I) = \operatorname{AES}_K(S\|0^{32})$ และจากนั้นทำนายคีย์ที่ได้มาสำหรับสิ่งใด ๆ $I$ สำหรับการแก้ไขนี้ $(K,S)$ คู่.