มี MD5 Fixed Point ที่ md5 (x) == x หรือไม่


114

มีจุดตายตัวในการแปลง MD5 หรือไม่เช่นมี x อยู่md5(x) == xหรือไม่?


8
การแปลง md5 ตัวไหน? หนึ่งทางคณิตศาสตร์ (จาก bitstring ใด ๆ ถึง 128 บิต) หรือจาก bytestring ใด ๆ ไปยัง hexstring 32-char (อันที่ใช้ได้จริง)? ไม่ชัดเจนว่าคำตอบของทั้งคู่เหมือนกัน ...
Rafał Dowgird

4
พวกเขาเป็นคำตอบเดียวกันใช่ไหม? เราทราบดีว่าไม่มี x ที่ไม่ใช่ 128 บิตที่มีความยาวmd5(x) == xเนื่องจากmd5(x) มีความยาว 128 บิต ดังนั้นจึงมีจุดคงที่ใน md5 สำหรับอินพุตที่กำหนดขนาดโดยพลการถ้ามีจุดคงที่ใน md5 บนโดเมน 128 บิตเท่านั้น
พอล

1
ฉันไม่คิดว่าคำตอบเหล่านี้จะเป็นคำตอบเดียวกันเนื่องจากสำหรับการใช้งานจริง 32 ตัวอักษร hexstring มันเป็นตัวเลือกที่กำหนดไม่ว่าคุณจะแทนเลขฐานสิบหกในตัวพิมพ์ใหญ่ [AF] หรือตัวพิมพ์เล็ก [af] การแสดงทั้งสองสอดคล้องกับตัวเลข 128 บิตเดียวกัน แต่จะให้แฮชที่แตกต่างกันเมื่อระบุเป็นอินพุตให้กับ MD5 ดังนั้นความน่าจะเป็นที่จะมีจุดคงที่ในการเป็นตัวแทนอย่างใดอย่างหนึ่งในความเป็นจริง1-(1/e)*(1/e) ≈ 86.47%
Dušan

คำตอบ:


138

เนื่องจากผลรวม MD5 มีความยาว 128 บิตจุดคงที่ใด ๆ จึงจำเป็นต้องมีความยาว 128 บิตด้วย สมมติว่าผลรวม MD5 ของสตริงใด ๆ กระจายอย่างสม่ำเสมอมากกว่าจำนวนเงินที่เป็นไปได้ทั้งหมดแล้วน่าจะเป็นที่ได้รับสตริง 128 บิตใด ๆ ที่เป็นจุดคงเป็น1 / 2 128 128

ดังนั้นจึงน่าจะเป็นที่ไม่มีสตริง 128 บิตเป็นจุดคงที่คือ (1 - 1 / 2 128 ) 2 128จึงน่าจะเป็นที่มีจุดคงที่ 1 - (1 - 1 / 2 128 ) 2 128 128

เนื่องจากขีด จำกัด เมื่อ n ไปที่อินฟินิตี้ของ (1 - 1 / n ) nคือ1 / eและ 2 128เป็นจำนวนที่มากที่สุดความน่าจะเป็นนี้เกือบจะเท่ากับ 1 - 1 / e ≈ 63.21%

แน่นอนว่าไม่มีการสุ่มเกี่ยวข้องจริง ๆ - ไม่ว่าจะมีจุดตายตัวหรือไม่มี แต่เรามั่นใจได้ 63.21% ว่ามีจุดที่แน่นอน (นอกจากนี้โปรดสังเกตว่าตัวเลขนี้ไม่ได้ขึ้นอยู่กับขนาดของคีย์สเปซ - หากผลรวม MD5 เป็น 32 บิตหรือ 1024 บิตคำตอบจะเหมือนกันตราบใดที่มีขนาดใหญ่กว่าประมาณ 4 หรือ 5 บิต)


11
คุณสามารถตั้งสมมติฐานได้จริงหรือว่าผลรวม MD5 ของสตริงใด ๆ มีการกระจายอย่างสม่ำเสมอในผลรวมทั้งหมดที่เป็นไปได้?
Ori Pessach

13
ใช่. ตัวเลขจำนวนมากและรูปแบบโมดิฟายด์เป็นการแจกแจงแบบสุ่มคร่าวๆ หากไม่เป็นเช่นนั้นคุณจะมีการชนกันอย่างต่อเนื่อง ลักษณะของ md5 บังคับให้กระจายเอาต์พุตแบบสุ่ม
Stefan Kendall

2
ฉันใช้คำตอบของคุณเป็นฐานสำหรับคำตอบนี้: security.stackexchange.com/questions/3851/…
CesarB

1
ที่นี่มีป้ายทอง
Dennis

ยกเว้นว่า md5 ถูกกำหนดไม่ใช่แบบสุ่ม
PyRulez

13

ความพยายามที่ดุร้ายของฉันพบคำนำหน้า 12 คำและคำต่อท้าย 12 คำ

คำนำหน้า 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762

คำต่อท้าย 12: df12c1434cec7850a7900ce027af4b78 -> b2f6053087022898fe920ce027af4b78

บล็อกโพสต์: https://plus.google.com/103541237243849171137/posts/SRxXrTMdrFN


ลิงค์ไม่ทำงาน Google plus ปิดตัวลงในเดือนเมษายน
พิมพ์ดีด

ขออภัย ... ฉันไม่ได้บันทึกโพสต์ในบล็อกและการสำรองข้อมูล google + ใช้งานไม่ได้สำหรับฉัน แต่นี่คือโครงการ github ของฉัน: github.com/thomasegense/MD5FixPointSearch
Thomas Egense

คุณแน่ใจหรือไม่: คำนำหน้า 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762 ฉันใช้md5sumคำสั่ง linux ฉันได้ผลลัพธ์ที่แตกต่างกัน
ThunderPhoenix

ไม่แน่ใจว่าคุณใช้ md5sum ถูกต้องแล้ว คุณสามารถยืนยันทางออนไลน์ได้ที่นี่: onlinemd5.com
Thomas Egense

11

เนื่องจากแฮชไม่สามารถย้อนกลับได้จึงเป็นเรื่องยากมากที่จะคิดออก วิธีเดียวที่จะแก้ปัญหานี้คือการคำนวณแฮชในทุกเอาต์พุตที่เป็นไปได้ของแฮชและดูว่าคุณได้ผลลัพธ์ที่ตรงกันหรือไม่

ในการอธิบายอย่างละเอียดมี 16 ไบต์ในแฮช MD5 นั่นหมายความว่ามี 2 ^ (16 * 8) = 3.4 * 10 ^ 38 ชุดค่าผสม หากใช้เวลา 1 มิลลิวินาทีในการคำนวณแฮชที่มีค่า 16 ไบต์จะต้องใช้เวลา 10790283070806014188970529154.99 ปีในการคำนวณแฮชทั้งหมดเหล่านั้น


2
ความจริงหากคุณได้ลองทุกคน แต่คุณจะต้องลองป้อนข้อมูลที่เป็นไปได้ทั้งหมดเพื่อตรวจสอบว่าไม่มีจุดตายตัว หากมีจุดคงที่ (และคำตอบของ Adam Rosenfield แสดงให้เห็นว่าอาจมี) การคาดเดาที่โชคดีคือสิ่งที่จำเป็น
Naaff

ฟังก์ชันนี้ไม่สามารถย้อนกลับได้ในแง่ที่ว่าไม่มีการผกผันทางคณิตศาสตร์ แต่หมายความว่าสำหรับเอาต์พุตที่ระบุอาจมีมากกว่าหนึ่งอินพุต โดยทั่วไปพื้นที่ของอินพุตสำหรับเอาต์พุตที่กำหนดจะไม่มีที่สิ้นสุด แต่ถ้าคุณรู้ว่ามันเริ่มต้นเป็นค่า 128 บิตคุณสามารถ จำกัด ความเป็นไปได้ให้แคบลง มีโอกาส "ทำงานย้อนกลับ" หากคุณไม่ถือว่าฟังก์ชันเป็นกล่องดำ แต่ให้อ่านข้อมูลจำเพาะและใช้ความคิดทางคณิตศาสตร์แทน
rndmcnlly

2
@ Naaff: "ต้องลองทุกอินพุตเท่านั้น" - และง่ายกว่าการลองแฮชทุกครั้งอย่างไร? ค่อนข้างตรงกันข้ามเนื่องจากอินพุตที่เป็นไปได้หลายตัวอาจแฮชลงในเอาต์พุตเดียวกัน
Piskvor ออกจากอาคาร

1
@Piskvor: คุณเข้าใจผิดว่า Naaff หมายถึงอะไร (ใช้เวลาสักครู่ด้วย) วิธีที่ชัดเจนกว่าในการพูดคือ "เฉพาะในกรณีที่ไม่มีจุดตายตัวคุณจะได้ลองป้อนข้อมูลที่เป็นไปได้ทุกอย่าง (จากช่องว่าง 2 ^ 128)" กล่าวอีกนัยหนึ่งคุณจะต้องพยายามทุกวิถีทางหากไม่มีผลก่อนหน้านั้น 1.08e28 ปีหรือหนึ่งการเดา!
P Daddy

"ถ้าใช้เวลา 1 มิลลิวินาทีในการคำนวณแฮช" GPU สมัยใหม่สามารถคำนวณแฮชหลายพันล้านครั้งต่อวินาทีได้เร็วกว่านี้มาก แต่ถึงกระนั้นก็ต้องใช้เวลานานมาก
markasoftware

0

แม้ว่าฉันจะไม่มีคำตอบใช่ / ไม่ใช่ แต่การคาดเดาของฉันคือ "ใช่" และยิ่งไปกว่านั้นอาจมีจุดคงที่ 2 ^ 32 จุด (สำหรับการตีความบิตสตริงไม่ใช่การตีความสตริงอักขระ) ฉันทำงานอย่างแข็งขันเพราะดูเหมือนว่าเป็นปริศนาที่น่ากลัวและกระชับซึ่งจะต้องใช้ความคิดสร้างสรรค์เป็นอย่างมาก (หากคุณไม่ตัดสินใจค้นหาพลังดุร้ายในทันที)

แนวทางของฉันมีดังต่อไปนี้ถือว่าเป็นปัญหาทางคณิตศาสตร์ เรามีตัวแปรบูลีน 128 ตัวแปรและ 128 สมการที่อธิบายผลลัพธ์ในรูปของอินพุต (ซึ่งควรจะตรงกัน) การเสียบค่าคงที่ทั้งหมดจากตารางในอัลกอริทึมและบิตการขยายความหวังของฉันคือสมการสามารถทำให้ง่ายขึ้นอย่างมากเพื่อให้อัลกอริทึมที่ปรับให้เหมาะสมกับกรณีอินพุต 128 บิต จากนั้นสมการที่เรียบง่ายเหล่านี้สามารถตั้งโปรแกรมเป็นภาษาที่ดีเพื่อการค้นหาที่มีประสิทธิภาพหรือถือว่าเป็นนามธรรมอีกครั้งโดยกำหนดทีละบิตโดยระวังการฝ่าฝืน คุณต้องดูผลลัพธ์เพียงไม่กี่บิตเพื่อให้ทราบว่าไม่ตรงกับอินพุต!


นี่เป็นเรื่องที่น่าสนใจมากโปรดแบ่งปันความคืบหน้าของคุณเมื่อคุณไปตามถนนสายนี้?
user230910

-1

อาจเป็นไปได้ แต่การค้นหาจะใช้เวลานานกว่าที่เรามีหรืออาจเกี่ยวข้องกับการประนีประนอม MD5


6
มันยังไม่พัง สิ่งที่พวกเขาทำได้คือในระยะเวลาที่เหมาะสมทำให้เกิด 2 สตริงที่เท่ากับแฮชเดียวกัน ยังคงเป็นเรื่องยากมากที่จะสร้างสตริงซึ่งจะเท่ากับแฮชเฉพาะ
Kibbee

9
ไม่แน่ใจว่าการหาใครจะประนีประนอม md5 อีกต่อไปกว่าที่มันจะประนีประนอมอัลกอริทึมถ้าฉันบอกคุณว่า MD5 ("สุนัขจิ้งจอกสีน้ำตาลกระโดดข้ามสุนัขขี้เกียจ") = 9e107d9d372bb6826bd81d3542a419d6
Kip

5
จุดคงที่อาจทำให้เกิดประโยชน์ในการคำนวณที่อาจนำไปสู่การละเมิด MD5 ที่ครอบคลุมมากขึ้น ฉันไม่มั่นใจว่า Glomek สามารถพิสูจน์ได้ว่า 'น่าจะ' จริงๆ ฉันจะยอมรับ 'เป็นไปได้' โดยไม่มีการเทียบเคียง
Jonathan Leffler

-9

มีการตีความสองแบบและหากได้รับอนุญาตให้เลือกอย่างใดอย่างหนึ่งความน่าจะเป็นในการหาจุดคงที่จะเพิ่มขึ้นเป็น 81.5%

  • การตีความ 1: ทำ MD5 ของเอาต์พุต MD5 ในไบนารีตรงกับอินพุตหรือไม่
  • การตีความ 2: MD5 ของเอาต์พุต MD5 ในฐานสิบหกตรงกับอินพุตหรือไม่

13
ไม่มีอะไรเกี่ยวกับอัลกอริทึม MD5 ที่แสดงถึงฐานสิบหก - มันทำงานบนไบต์และสร้างไบต์ - ดังนั้นฉันคิดว่าการตีความหลังไม่ถูกต้อง
Nick Johnson

ไม่ว่าจะมีจุดคงที่ภายใต้การตีความ 1 หรือไม่ก็ยังอาจมี (หรือไม่มี) อยู่ภายใต้การตีความ 2 อย่างไรก็ตามหากคุณสนใจที่จะสำรวจปัญหาการตีความ 1 ดูเหมือนจะเป็นจุดเริ่มต้นที่ดีกว่ามากเพราะคุณชนะ ไม่จำเป็นต้องทำการตัดสินใจโดยพลการทุกประเภทเกี่ยวกับการเข้ารหัสและการเข้ารหัสอักขระ ยิ่งไปกว่านั้นกรณีไบนารีมีบิตน้อยกว่า!
rndmcnlly

4
คุณกำลังตีความผิดว่าฐานสิบหกคืออะไร คุณสามารถแทนเลขฐานสองเป็นเลขฐานสิบหกได้เช่นเดียวกับที่คุณสามารถแทนเลขฐานสองเป็นฐานสิบหรือฐานแปดหรือฐาน 3 ได้ซึ่งเป็นตัวเลขและมีการแทนค่าต่างกัน ดังนั้นการตีความ 1 และ 2 จึงเหมือนกัน สิ่งที่คุณคิดคือการแสดงสตริงอักขระซึ่งไม่ใช่เลขฐานสิบหกเดียวกัน แต่เป็นค่าไบนารีที่แตกต่างกันอย่างสิ้นเชิง ในความเป็นจริงคุณสามารถมีสตริงเลขฐานสิบหกได้หลายแบบในชุดอักขระต่างๆ ค่าแฮช 128 บิตสามารถแสดงเป็นสตริง "ฐานสิบหก" ได้ แต่จะไม่เท่ากับสตริง สตริงไม่ใช่ข้อมูลไบนารีเดียวกัน
กำหนด

Dustin การตีความ 2 หมายถึง MD5 ของสตริงการแสดงผล
Joshua

4
มีปัญหาใหญ่เกี่ยวกับความคิดนั้นเนื่องจากมันขึ้นอยู่กับการเข้ารหัสอักขระของคุณโดยตรง สคีมาการเข้ารหัสที่แตกต่างกันจะส่งผลให้ชุดผลลัพธ์แตกต่างกันอย่างสิ้นเชิง มีแม้กระทั่งโครงการทั้งหมดและบทความที่หักล้างโดยอาศัยความเข้าใจผิดว่า MD5 ดำเนินการอย่างไร acodingfool.typepad.com/blog/2009/05/the-kembler-identity.html
กำหนด

-23

พูดอย่างเคร่งครัดเนื่องจากอินพุตของ MD5 มีความยาว 512 บิตและเอาต์พุตคือ 128 บิตฉันจะบอกว่าเป็นไปไม่ได้ตามคำจำกัดความ


4
ไม่ได้มีสตริง MD5 จาก 1 ไบต์อยู่
Joshua

7
อินพุตสามารถมีขนาดใดก็ได้ หากอินพุตน้อยกว่า 512 ไบต์แสดงว่ามีการบุนวม แต่อินพุตขนาดเล็กยังคงยอมรับได้ จาก Wikipedia: "MD5 ประมวลผลข้อความที่มีความยาวผันแปรเป็นเอาต์พุตที่มีความยาวคงที่ที่ 128 บิตข้อความที่ป้อนจะถูกแบ่งออกเป็นกลุ่มของบล็อก 512 บิต (จำนวนเต็ม endian ขนาด 32 บิตจำนวนสิบหกตัว) ข้อความจะถูกบุนวมเพื่อให้ ความยาวหารด้วย 512 "
Naaff

คุณก็สมมติว่า 0000000001 = 1? ฉันจะเถียงว่าคำถามนั้นระบุไม่ดีอย่างดีที่สุด
Ori Pessach

11
การป้อนข้อมูลเพื่อ MD5 สามารถเป็น 128 บิต ถ้า MD5 ต้องการเพิ่มข้อมูลนั้นตรงไปตรงมานั่นคือธุรกิจของ MD5 อินพุตยังคงกำหนดไว้อย่างดี ในทำนองเดียวกันเอาต์พุตคือ 128 บิตที่กำหนดไว้อย่างดี หากอินพุต (กำหนดไว้อย่างดี) และเอาต์พุต (กำหนดไว้อย่างดี) เหมือนกันดังนั้น MD5 (x) = x
Naaff

2
@Joshua MD5 ของสตริงว่าง (เช่น 0 ไบต์) ยังมีอยู่
Kip
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.