ฉันต้องการเข้าใจพีชคณิตที่อยู่เบื้องหลังความปลอดภัยของ GCM
คุณได้เขียนกลไกการทำงานของการตรวจสอบสิทธิ์ของ GCM แล้ว อย่างไรก็ตาม เพื่อทำความเข้าใจว่าเหตุใดกลไกเหล่านั้นจึงทำงานได้ จะเป็นการดีหากใช้วิธีอื่น
GCM ใช้เลขคณิตใน $GF(2^{128})$; มันคือ สนาม; ประเด็นสำคัญก็คือ ในฟิลด์หนึ่งๆ พหุนามของดีกรีที่ไม่ใช่ศูนย์ใดๆ $n$ มีมากที่สุด $n$ ศูนย์; นั่นคือสำหรับสมการใดๆ:
$$a_n x^n + a_{n-1} x^{n-1} + ... + a_0 x^0 = 0$$
มีมากที่สุด $n$ โซลูชั่นสำหรับ $x$ (สมมติว่าอย่างน้อยหนึ่งใน $a_i$ ค่าไม่เป็นศูนย์)
เหตุใดสิ่งนี้จึงสำคัญจะชัดเจนในภายหลัง
ตอนนี้ สิ่งที่ GCM ทำเพื่อตรวจสอบความถูกต้องคือใช้ข้อมูลที่เข้ารหัส (และ AAD) และแปลเป็นพหุนาม จากนั้นจะแปลง nonce เป็นค่าคงที่ของพหุนาม จากนั้นประเมินพหุนามนั้นด้วยค่าลับ $k$และผลลัพธ์ของการประเมินนั้นคือแท็ก นั่นคือ:
$$tag := a_n k^n + a_{n-1} k^{k-1} + ... + a_1 k^1 + \text{hash}(ไม่มี)$$
ตอนนี้ สมมติว่าเรามีคู่ข้อความ/แท็กที่แตกต่างกันสำหรับ nonce เดียวกัน ข้อความ/แท็กนั้นจะผ่านการตรวจสอบความสมบูรณ์ของ GCM หาก:
$$tag' := a'_n k^n + a'_{n-1} k^{k-1} + ... + a'_1 k^1 + \text{hash}(ไม่มี)$$
สิ่งที่เราทำได้คือลบพหุนามสองชื่อออก (อันที่สอดคล้องกับข้อความเข้ารหัสที่ดีที่สร้างโดยตัวเข้ารหัสที่ถูกต้อง และอันที่สอดคล้องกับการเดาโดยผู้โจมตี) เราจะได้ [1]:
$$0 = (a_n-a'_n)k^n + (a_{n-1} - a'_{n-1})k^{n-1} + ... + (a_1 - a'_1) k^1 + (แท็ก - แท็ก')k^0$$
สมการนี้จะคงอยู่ก็ต่อเมื่อคู่ไซเฟอร์เท็กซ์/แท็กที่สองถูกต้องเท่านั้น
ตอนนี้ เรากลับไปที่การสังเกตเดิมของเรา นี่คือพหุนามของดีกรีเป็นส่วนใหญ่ $n$ และมีมากที่สุด $n$ ค่าต่างๆของ $k$ ซึ่งสมการนี้เป็นจริง เรายังทราบด้วยว่าอย่างน้อยหนึ่งค่าสัมประสิทธิ์ของพหุนามนั้นไม่เป็นศูนย์ (พหุนามที่เป็นศูนย์ทั้งหมดจะเป็นจริงหากไซเฟอร์เท็กซ์ที่ 'ปลอมแปลง' นั้นเหมือนกับค่าที่ถูกต้องทุกประการ ซึ่งไม่ถือว่าเป็นการปลอมแปลง) และถ้า $k$ ถูกเลือกอย่างคาดเดาไม่ได้ก็มี $2^{128}$ ค่าที่เป็นไปได้ และความน่าจะเป็นที่จะเป็นหนึ่งในนั้น $n$ ค่าสูงสุด $n2^{-128}$ซึ่งเล็กมากจริงๆ
ตอนนี้ เพื่อเปลี่ยนข้อโต้แย้งนี้ให้เป็นหลักฐานจริง (ซึ่งได้ทำไปแล้ว) เราต้องถือว่า ก) $k$ ถูกเลือกอย่างเท่าเทียมกันโดยการสุ่ม และ b) $\text{hash}(ไม่มี)$ จะถูกเลือกแบบสุ่ม (เพราะหากไม่เป็นเช่นนั้น ผู้โจมตีสามารถอนุมานบางสิ่งเกี่ยวกับค่าของพหุนามได้ ซึ่งจะไม่ดี) ปรากฎว่าเราสามารถเชื่อมโยงทั้งสองอย่างเข้ากับความแข็งแกร่งของการเข้ารหัสของ AES
ตอนนี้เพื่อตอบคำถามของคุณ:
- ข้างต้นถูกต้องหรือไม่?
ปิด; คุณได้รับรายละเอียดผิดไปหนึ่งข้อ เมื่อใช้สัญกรณ์ของคุณ เราจะได้การคำนวณแท็กเป็น $tag_k(c_1, c_2,...c_n) = c_0 + \sum k^nc_n$ (โปรดทราบว่า $c_0$ ไม่ได้คูณด้วย $k$):
- AES-GCM เลือกอย่างไร $k$?
มันเข้ารหัสบล็อกศูนย์ทั้งหมดโดยใช้ AES โดยใช้คีย์ GCM
- ถ้า $k=0$, $tag(\text{any_ciphertext})=0$
ไม่, $c_0$ ไม่ได้รับการคูณด้วย $k$ดังนั้นเราจึงมีในกรณีนี้:
$$แท็ก(\text{any_ciphertext}) = c_0$$
ซึ่งยังคงหมายความว่า ในกรณีนี้ ciphertext สามารถแก้ไขได้ตามอำเภอใจโดยไม่ต้องแก้ไขแท็ก แต่ก็ไม่ชัดเจน
คำถามที่ชัดเจนคือ: "นี่ยังไม่แย่อีกหรือ" ด้วยแท็ก 128 บิต ผู้โจมตีมีโอกาสเสมอ $2^{-128}$ ของการคาดเดาคู่รหัส / แท็กที่ถูกต้อง - $k=0$ มีความน่าจะเป็นที่จะเกิดขึ้นเท่าๆ กัน และด้วยเหตุนี้จึงไม่เพิ่มความน่าจะเป็นของการปลอมแปลง
- ทำ $c_n=0$ ก่อปัญหา?
ไม่; หากคุณทำตามตรรกะข้างต้น $c_n=0$ ไม่ได้เป็นกรณีพิเศษ
- แต่ถ้า $k$ เกิดขึ้นเป็นลำดับต่ำ แผนจะล้มเหลว
สถานการณ์ความล้มเหลวเฉพาะนี้ยังคงอยู่ในความน่าจะเป็น $n2^{-128}$ ดังที่แสดงไว้ข้างต้น ถ้าคุณ (พูด) ทดสอบว่า $k$ มีคำสั่งซื้อเล็กน้อยและปฏิเสธค่าเหล่านั้น คุณจะไม่ลดความน่าจะเป็นของการปลอมแปลง
[1]: ในฟิลด์ลักษณะคู่เช่น $GF(2^{128})$การบวกและการลบเป็นการดำเนินการเดียวกัน ดังนั้นเรามักจะเขียนทั้งสองอย่างเป็น $+$; ผมก็เก็บไว้เป็น $-$ เพื่อให้ชัดเจนขึ้นสำหรับคนที่ไม่คุ้นเคยกับอนุสัญญาดังกล่าว