ค่าคงที่เวทย์มนตร์ที่แตกต่างกันถูกนำมาใช้เพื่อป้องกันการโจมตีแบบง่าย ๆ โดยพิจารณาจากความสมมาตรของรอบ ค่าคงที่เวทย์มนตร์ 2654435769 หรือ 9E3779B9 16ถูกเลือกเป็นโดยที่ ϕ คืออัตราส่วนทองคำ
ซึ่งคุณสมบัติไม่มีที่ทำให้มันมีประโยชน์ในบริบทนี้?
ค่าคงที่เวทย์มนตร์ที่แตกต่างกันถูกนำมาใช้เพื่อป้องกันการโจมตีแบบง่าย ๆ โดยพิจารณาจากความสมมาตรของรอบ ค่าคงที่เวทย์มนตร์ 2654435769 หรือ 9E3779B9 16ถูกเลือกเป็นโดยที่ ϕ คืออัตราส่วนทองคำ
ซึ่งคุณสมบัติไม่มีที่ทำให้มันมีประโยชน์ในบริบทนี้?
คำตอบ:
AFAIK ค่า "เวทมนต์" ดังกล่าวมีคุณสมบัติสองอย่างต่อไปนี้:
คุณอาจพบกรณีที่คล้ายกันในMD5 พิจารณาบรรทัดต่อไปนี้:
k[i] := floor(abs(sin(i + 1)) × (2 pow 32))
ที่นี่sin(i + 1)
มีวัตถุประสงค์เพื่อสร้างค่าเวทมนตร์; ซึ่งมีลักษณะเฉพาะที่ดูสุ่มและสามารถทำงานได้หลายi
อย่าง (จริง ๆ แล้วเป็นi
ช่วงใน 0..63)
แก้ไข:อ่านกระดาษต้นฉบับใน TEAเราเข้าใจดีว่าคำตอบที่ได้รับจาก "Steven Stadnicki" นั้นถูกต้อง โปรดทราบว่าค่าคงที่มายากลคือชื่อเดลต้า:
มีการใช้เดลต้าหลายตัวที่แตกต่างกันในแต่ละรอบเพื่อไม่ให้บิตของทวีคูณจะไม่เปลี่ยนบ่อย เราสงสัยว่าอัลกอริทึมไม่ไวต่อค่าของเดลต้าและเราเพียงต้องการหลีกเลี่ยงค่าที่ไม่ดี มันจะถูกบันทึกไว้ว่าเดลต้ากลายเป็นแปลกด้วยการตัดหรือปัดเศษที่ใกล้ที่สุดดังนั้นจึงไม่จำเป็นต้องมีข้อควรระวังเพิ่มเติมเพื่อให้แน่ใจว่าตัวเลขทั้งหมดของการเปลี่ยนแปลงผลรวม
เนื่องจากมีการใช้เดลต้าเพียง 32 รายการเท่านั้น (หนึ่งรายการต่อแต่ละรอบ) จึงไม่แปลกที่อัลกอริทึมจะไม่ไวต่อเดลตาใด ๆ มากนัก (ดูคำตอบของ Steven Stadnicki สำหรับข้อมูลเพิ่มเติม)
แก้ไข 2:อนึ่งMD4ใช้รากที่สองของ 2 (0x5a827999) และ 3 (0x6ed9eba1) เป็นค่าคงที่ "เวท" ในการดำเนินการ ส่วนที่ 5.4.4 ของความปลอดภัยเครือข่ายหนังสือ: การสื่อสารส่วนตัวในโลกสาธารณะอธิบายได้ดี:
เพื่อแสดงให้เห็นว่านักออกแบบไม่ได้เลือกค่าคงที่ของค่าคงที่โดยเจตนาค่าคงที่จะขึ้นอยู่กับรากที่สองของ 2
คำอธิบายนี้เหมือนกับจุดที่ทำไว้ด้านล่างในความคิดเห็นโดย Gilles
ของเครื่องกำเนิดเลขสุ่มเชิงเส้นสมมาตรสำหรับขนาดเล็กบางตัว; สำหรับส่วนใหญ่แล้วมันเป็นเวทมนตร์สีดำชาวบ้านขึ้นอยู่กับสัญชาตญาณว่า 'ทวีคูณเล็ก ๆ ของจำนวนนี้เป็น mod ขนาดเล็กจะไม่ดี' กว่าผลทางทฤษฎีใด ๆ ที่เฉพาะเจาะจง
k[i]
ตามที่กำหนดไว้ใน MD5 หรือไม่ (ดูคำตอบของฉันด้านบน)