เราศึกษาแฮช $H$ ที่กำหนดโดย $H(ม.):=H_2(H_1(ม.))$ด้วย SHA-256 สำหรับ $H_1$ และ MD5 สำหรับ $H_2$.
เดอะ ความต้านทานการชนกันของ MD5 นั้นแย่มากดังนั้นอาร์กิวเมนต์ทั่วไปที่ความต้านทานการชนของ $H$ เป็นอย่างน้อยที่สุดของความต้านทานการชนของ $H_1$ และ $H_2$ ทำให้เราไม่ไปไหน
อาร์กิวเมนต์ทั่วไป² ที่ต้านทาน preimage แรกของ $H$ เป็นอย่างน้อยของ $H_2$ ทำงานได้เนื่องจากเราเชื่อมั่นในการต้านทานพรีอิมเมจของ MD5; ซึ่งถูกตั้งคำถาม (ดู นี้) แต่ไม่แตกในทางปฏิบัติ
สิ่งเดียวที่ฉันคิดได้เกี่ยวกับความต้านทานพรีอิมเมจที่สองของ $H$ คือมันไม่สามารถดีกว่าความต้านทานพรีอิมเมจที่สองของ $H_1$. นั่นไม่ได้รับประกันความปลอดภัย และเนื่องจากการต้านทานพรีอิมเมจที่สองของ SHA-256 นั้นเชื่อว่าดีซึ่งไม่ก่อให้เกิดการโจมตีเช่นกัน
จากมุมมองที่นำไปใช้ (ซึ่งเป็นสิ่งที่คำถามดูเหมือนจะเกี่ยวกับเนื่องจากกล่าวถึงแอปพลิเคชันที่เป็นรูปธรรม) ฉันไม่เห็นว่าการโจมตีแบบเข้ารหัสลับใด ๆ ที่มีอยู่ใน MD5 หรือ SHA-256 นั้นมีความเกี่ยวข้อง
- ความต้านทานการชนของ MD5 ถูกทำลายแต่ขนาดอินพุต MD5 ที่สั้น (ขนาดเอาต์พุต 256 บิตของ SHA-256 เป็นเพียงครึ่งหนึ่งของบล็อกอินพุตของ MD5) และข้อจำกัดที่หนักหน่วงที่อินพุตนี้เป็นแฮช แต่ละขนาดก็เพียงพอแล้วที่จะทำให้การโจมตีการชนกันของ MD5 ที่มีอยู่ใช้ไม่ได้ (การจำกัด ดีกว่ากำลังดุร้าย)
- ทั้ง SHA-256 และ MD5 มีสิ่งไม่พึงประสงค์ คุณสมบัติการขยายความยาวแต่ความยาวคงที่ของอินพุต MD5 นั้นบล็อกสำหรับคุณสมบัติของ MD5 และการแฮชเอาต์พุต SHA-256 ใหม่เป็นบล็อกขนาดครึ่งหนึ่งของ SHA-256
ดังนั้นการโจมตีที่เกี่ยวข้องกับการเข้ารหัสเท่านั้นที่ฉันเห็นคือการโจมตีที่เหลืออยู่สำหรับแฮชในอุดมคติ $H_1$ และ $H_2$ ด้วยความกว้างเอาต์พุตตามลำดับ เนื่องจาก $H_2$ แคบกว่ามาก $H_1$, การโจมตีด้วยกำลังดุร้ายถูกจำกัดด้วยความกว้างของ $H_2$ และการพิจารณาความเร็ว โดยเฉพาะอย่างยิ่ง:
- แฮชผสมของคำถามมีความกว้างเพียง 128 บิต ดังนั้นจึงสามารถแสดงการชนกันได้โดยประมาณ $2^{66}$ การประเมิน (ทั้ง SHA-256 และ MD5) โดยใช้มาตรฐาน การค้นหาการชนแบบกระจาย. ฉันสามารถจินตนาการถึงสถานการณ์ที่ความต้านทานการชนต่ำเป็นปัญหาได้ (และไม่สามารถบอกได้ว่าขึ้นอยู่กับแอปพลิเคชัน)
- แฮชแบบผสมไม่สามารถใช้ได้สำหรับ การยืดที่สำคัญที่จำเป็นสำหรับรหัสผ่าน เพราะมันเร็วเกินไปและหน่วยความจำไม่แข็ง แม้ว่าจะไม่มีการระบุการยืดคีย์เป็นข้อกำหนด
แฮชแบบผสมนั้นไม่มีอาร์กิวเมนต์ด้านความปลอดภัยที่ชัดเจน ไม่เร็วมากโดยเฉพาะอย่างยิ่งสำหรับการป้อนข้อมูลสั้นๆ และอย่างน้อยก็แย่ในแง่ของการประชาสัมพันธ์เนื่องจาก MD5 ใช้งานไม่ได้ เท่าที่ฉันสามารถบอกได้ก็คือ ในทางปฏิบัติ ดีพอ ๆ กับแฮช 128 บิตที่เร็วเล็กน้อยใด ๆ ที่สามารถทำได้ทั้งหมด ทางเทคนิค จุดยืน รวมทั้งไม่เป็นที่พอใจในการต้านทานการชน (แต่ไม่มีความแน่นอนว่าการต้านทานการชนเป็นข้อกำหนดในกรณีการใช้งาน)ฉันไม่เห็นเหตุผลที่จะใช้แฮชสารประกอบนั้นมากกว่าสิ่งที่ทันสมัยและปลอดภัยกว่า MD5 รวมถึง SHA-2 บางส่วน (อาจถูกตัดทอน) หรือ SHAKE128 ของ SHA-3 ที่มีขนาดเอาต์พุตที่ปรับได้ หรือ Blake2b (หรือ Blake3 หลังจากฝุ่นตกลง) .
¹ ตั้งสมมุติฐานการชนกันของ $H$, นั่นคือ $(ม,ม')$ กับ $m\ne ม'$ และ $H(m)=H(m')$. เราสามารถคำนวณ $w=H_1(ม)$ และ $w'=H_1(m')$. ถ้า $w=w'$, เรามีการปะทะกันสำหรับ $H_1$. มิฉะนั้นเรามี $H_2(w)=H_2(w')$ กับ $w\ne w'$จึงชนกันเพื่อ $H_2$. ดังนั้นเราจึงหักต้านทานการชนสำหรับ $H_1$ หรือ $H_2$.
² ตั้งสมมติฐานของอัลกอริทึมในการค้นหาภาพจำลองแรกสำหรับ $H$ที่ได้รับ $h$ การหา $m$ ดังนั้น $H(ม)=h$ ด้วยความน่าจะเป็นที่ไม่สำคัญและความพยายามที่เป็นไปได้ เราสามารถคำนวณ $w=H_1(ม)$ และเป็นเช่นนั้น $h=H_2(w)$. ดังนั้นเราจึงสร้างวิธีการค้นหาภาพตัวอย่างแรกสำหรับ $H_2$ ด้วยความน่าจะเป็นของความสำเร็จที่ไม่สำคัญเท่าเดิม และโดยพื้นฐานแล้วความพยายามเช่นเดียวกับอัลกอริทึมที่ตั้งสมมติฐานไว้
³ อัลกอริทึมในการค้นหาพรีอิมเมจที่สองสำหรับ $H_1$ที่ได้รับ $m$ การหา $m'\ne ม$ ดังนั้น $H_1(ม)=H_1(ม')$, ยังค้นหาภาพพรีอิมเมจที่สองสำหรับ $H$.