MD5 ทำงานแตกต่างจาก CRC โดยพื้นฐานแล้ว
ฉันไม่คุ้นเคยกับอัลกอริทึม CRC ยกเว้นเพียงรู้ว่ามีการป้องกันความสมบูรณ์ของปริมาณงานสูงขั้นพื้นฐาน
MD5 (พร้อมกับฟังก์ชันอื่นๆ ในตระกูลฟังก์ชันแฮชการเข้ารหัสของ Merkle-Daamgard เช่น SHA-1, SHA-256 เป็นต้น) มีเลเยอร์ประมาณ 4 เลเยอร์:
การก่อสร้าง Merkle-Daamgard: ซึ่งประกอบด้วย
ช่องว่างภายในข้อความที่เข้ากันได้กับ MD - เพื่อให้แน่ใจว่าข้อความที่มีความยาวต่างกันจะส่งผลให้บล็อกข้อความมีลำดับต่างกัน ข้อความที่แตกต่างกันที่มีความยาวเท่ากันไม่ใช่ประเด็นหลักสำหรับช่องว่างภายในที่เข้ากันได้กับ MD
ชุดของการวนซ้ำของฟังก์ชันการบีบอัด $C(h,m)$, ที่ไหน $h$ คือไดเจสต์จากการวนซ้ำครั้งก่อนของฟังก์ชันการบีบอัด (หรือเวกเตอร์การเริ่มต้นหากนี่คือการวนซ้ำเริ่มต้น) และ $m$ เป็นบล็อกข้อความสำหรับการวนซ้ำปัจจุบัน
การสร้างฟังก์ชันการบีบอัดจากบล็อกโค้ด
โครงสร้าง Davies-Meyers เป็นโครงสร้างที่ใช้ในตระกูล MD5, SHA-1 และ SHA-2 โดยจะเข้ารหัสไดเจสต์ด้วยบล็อกข้อความเป็นคีย์ จากนั้นเพิ่มหรือ xor ไดเจสต์ไปยังบล็อกเอาต์พุตใหม่เพื่อให้ฟังก์ชันการบีบอัด ทางเดียว.
การสร้างบล็อคซิเฟอร์
มี 2 กระบวนทัศน์หลัก - a) Substitution-Permutation Network (SPN), b) Feistel Network ตระกูล MD5, SHA-1 และ SHA-2 ใช้อย่างหลัง
Feistal Network ปรับเปลี่ยนครึ่งหนึ่งของบล็อกรหัสลับซ้ำๆ ด้วยค่าที่คำนวณโดยใช้ฟังก์ชันแบบกลมจากอีกครึ่งหนึ่งของบล็อก - การคำนวณฟังก์ชันแบบกลมเกี่ยวข้องกับคีย์ย่อยที่ได้มาจากคีย์หลัก ซึ่งในกรณีของฟังก์ชันแฮชคือ บล็อกข้อความปัจจุบัน
การสร้างฟังก์ชันแบบกลม
ข้อกังวลหลักของ Feistal Network คือการเพิ่มความสับสนและการแพร่กระจายโดยการใช้ฟังก์ชัน Round ซ้ำๆ และฟังก์ชัน Round จำเป็นต้องจัดเตรียมการสุ่มขั้นต่ำที่จำเป็น
- กระบวนทัศน์ ARX (การบวกเลขคณิต การหมุน/เลื่อน และการดำเนินการ xor) เป็นตัวเลือกยอดนิยม
- พหุนามไบนารีเป็นอีกหนึ่ง