นอกจากการโจมตีแบบชนกันและแบบพรีอิมเมจแล้ว ยังมีปัญหาของการโจมตีแบบขยายความยาว (ซึ่งฉันคิดว่าเป็นเหตุผล "ที่แท้จริง" สำหรับคุณสมบัตินี้ของ SHA3)
หากคุณมีฟังก์ชันแฮช $H$ แล้วมันน่าดึงดูดใจที่จะรักษา $H(ก,ม)$ เป็น MAC ของ $m$พร้อมรหัสลับ $k$.
น่าเสียดายที่สิ่งนี้ไม่ได้นำไปสู่ MAC ที่ปลอดภัยหากคุณใช้ฟังก์ชันแฮชรุ่นก่อนหน้า (SHA1, SHA2)
การโจมตีส่วนขยายความยาวเกิดขึ้นอย่างแม่นยำเนื่องจากฟังก์ชันแฮชส่งออก สถานะภายในทั้งหมด
แนวคิดเบื้องหลังการโจมตีแบบขยายความยาวมีดังต่อไปนี้:
ถ้า $m$ เป็นคำนำหน้าของ $m'$ จากนั้นผลลัพธ์ $H(ก,ม)$ เกิดเป็นสถานะภายในเมื่อคำนวณ $H(k,m')$.
ในความเป็นจริงตั้งแต่ $H(ก,ม)$ คือ ทั้งหมด สถานะภายใน ณ จุดใดจุดหนึ่ง จากนั้นคุณสามารถคำนวณได้ $H(k,m')$ ถ้าคุณรู้ $H(ก,ม)$ -- แม้ไม่รู้ $k$!
สิ่งนี้ละเมิดคุณสมบัติความปลอดภัยที่คุณต้องการจาก MAC (การเรียนรู้ MAC ของ $m$ ไม่ควรช่วยให้คุณคาดการณ์ MAC ของรายการอื่นได้ $m'$แม้ว่า $m$ เป็นคำนำหน้าของ $m'$).
(ในที่นี้ฉันกำลังพูดถึงประเด็นของการเติมความยาวซึ่งไม่ได้เป็นอุปสรรคสำคัญต่อประเภทของการโจมตีที่ฉันกำลังร่าง)
ในระหว่างการแข่งขัน SHA3 ผลงานส่วนใหญ่ได้รับการออกแบบมาให้ทนทานต่อการโจมตีทางยาว
วิธีการทำเช่นนี้คือการสร้างที่เรียกว่า "ท่อกว้าง": เพียงแค่ทำให้สถานะภายในมีขนาดใหญ่กว่าเอาต์พุต
แฮชควรแสดงเฉพาะส่วนของสถานะภายในเมื่อสิ้นสุดการคำนวณ
ถ้าคุณทำอย่างนั้น $H(ก,ม)$ จะไม่มีทุกสิ่งที่จำเป็นในการคำนวณ $H(k,m')$และสิ่งนี้ขัดขวางการโจมตีแบบขยายความยาว