`md5sum` แม่นยำแค่ไหน?


27

เมื่อใช้md5sumเพื่อตรวจสอบความถูกต้องของไฟล์กระบวนการนี้มีความแม่นยำเพียงใด?

MD5 ที่ผ่านการตรวจสอบแล้วหมายความว่าทุกบิตเหมือนกันทุกประการหรือมีเกณฑ์ที่ต้องใช้งานไม่ได้ก่อนที่จะมีการแก้ไขไบนารีใน MD5

เอกสารใด ๆ เกี่ยวกับวิธีสร้าง md5 จะได้รับการชื่นชมเช่นกัน



@choroba ถ้าฉันอ่านทั้งหมดนี้ถูกต้องความน่าจะเป็นของการตรวจจับการเปลี่ยนแปลงจะเพิ่มขึ้นตามขนาดของไฟล์ที่กำลังตรวจสอบ อย่างไรก็ตามมันยังคงเป็นความน่าจะเป็นและความมั่นใจ 100% สามารถมีได้ด้วยไฟล์ 16 ไบต์เท่านั้น ฉันถูกไหม?
Konner Rasmussen

@ Konner ฉันอ่านคำถามของคุณที่เกี่ยวข้องกับการถ่ายโอนไฟล์ เพื่อจุดประสงค์นั้นมันปลอดภัย โอกาสของบิตการเสียหายในการถ่ายโอนมีขนาดเล็กและมันเป็นโอกาสที่คุณจะสูญเสียส่วนหนึ่งของไฟล์คัดลอกเกี่ยวกับการโอนบางสมมติว่าผมเข้าใจสถานการณ์ก่อนหน้าของคุณ MD5 นั้นเทียบเท่ากับการเปรียบเทียบไฟล์ทั้งสองด้วยความได้เปรียบจากข้อเท็จจริงที่ว่าคุณไม่จำเป็นต้องเข้าถึงไฟล์ทั้งสองในเวลาเดียวกัน
Doktoro Reichard

15
"MD5 ที่ผ่านการตรวจสอบแล้วหมายความว่าทุกบิตเหมือนกันทุกประการ" โปรดทราบว่านี่เป็นไปไม่ได้ขอบคุณ Pigeonhole Principle en.wikipedia.org/wiki/Pigeonhole_principle
พลูโต

3
ฉันไม่คิดว่าคุณจะได้รับการรับประกันสำหรับ 16 ไบต์เช่นกัน
Mooing Duck

คำตอบ:


65

MD5 ใช้งานไม่ได้เพื่อจุดประสงค์นี้กับฝ่ายตรงข้ามที่ชาญฉลาด เป็นไปได้ที่จะสร้างบล็อกข้อมูลที่แตกต่างกันสองบล็อกที่สร้างแฮช MD5 เดียวกัน

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

แม้ว่าคุณจะมีหน่วยข้อมูลเป็น Quadrillion แต่ความน่าจะเป็นที่ MD5 ที่ไม่ตรงกันนั้นจะสร้างแฮช MD5 ที่เป็นของหนึ่งในสี่ล้านหน่วยนั้นมีค่าน้อยกว่าหนึ่งในสี่ล้านหน่วย


แม้ว่ามันอาจเป็นไปได้ในทางทฤษฎีในการสร้างไฟล์สองไฟล์ที่มีแฮชเดียวกัน แต่ก็อาจเป็นไปไม่ได้ในทางปฏิบัติ โดยเฉพาะอย่างยิ่งหากไฟล์ทดแทนควรมีเหตุผล ตัวอย่างเช่นหากไฟล์ต้นฉบับเป็นข้อความภาษาอังกฤษอาจไม่มีการจับคู่อื่น ๆ ที่เป็นภาษาอังกฤษด้วย หรือถ้าเป็นสเปรดชีต Excel ไม่มีไฟล์อื่นใดที่มีแฮชเดียวกันจะเป็นสเปรดชีตที่ถูกต้อง
Barmar

1
@Barmar: win.tue.nl/hashclash/Nostradamusพวกเขาสร้างไฟล์ PDF จำนวนหนึ่งพร้อมกับแฮช MD5 เดียวกันเพื่อพิสูจน์ว่าเป็นไปได้จริง
philfr

26

MD5 เป็นแฮช โดยทั่วไปจะแมปเนื้อหาทั้งหมดของไฟล์เป็นสตริงขนาดเล็กซึ่งมีความยาว 16 ไบต์ IIRC

จะเห็นได้ชัดว่ามีหลายไฟล์ที่แฮชไปยังผลรวม MD5 เดียวกัน ดังนั้นผลรวม MD5 ที่ตรงกันจึงไม่รับประกันการจับคู่ที่ตรงกันระหว่างไฟล์

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


1
เรื่องสั้นที่สั้นมากคือ md5 ไม่มีอะไรมากไปกว่าวิธีที่รวดเร็วและสกปรกในการตรวจสอบความถูกต้องของไฟล์และควรจะใช้เฉพาะเมื่อข้อผิดพลาดที่ตรวจไม่พบจะไม่ทำให้เกิดผลสะท้อนกลับอย่างรุนแรง ... ถูกต้อง?
Konner Rasmussen

3
การใช้งานที่ดีที่สุดของมันคือการตรวจสอบความเสียหายในระหว่างการถ่ายโอนหรือคัดลอก ไม่ได้เป็นเรื่องความปลอดภัย
Michael Martinez

12
@ KonnerRasmussen - มันไม่ใช่เรื่องของระดับของผลกระทบมันเป็นธรรมชาติของการคุกคาม หากคุณกังวลว่าเอกสารสองฉบับอาจมี MD5 เหมือนกันโดยไม่ตั้งใจให้หยุดกังวล: อัตราต่อรองจะสูงกว่ามากที่คอมพิวเตอร์ของคุณจะปะทุเป็นเปลวไฟ หากคุณกังวลว่าผู้โจมตีอัจฉริยะอาจสร้างเอกสารที่ตรงกับที่คุณมีอยู่นั่นเป็นข้อกังวลที่ร้ายแรงและคุณควรได้รับแฮชที่ดีกว่า หากคุณกังวลว่าผู้โจมตีที่ชาญฉลาดอาจสร้างเอกสารสองฉบับที่จับคู่กันไม่ต้อง "กังวล": มันจะเกิดขึ้นอย่างแน่นอน
Malvolio

5
แน่นอนในขณะที่สร้างแฮชน MD5 เป็นไปได้ในทางทฤษฎีการสร้างประโยชน์ชน (ในขณะที่ไฟล์ชนเป็นชนิดเดียวกันของไฟล์และเนื้อหาของมันอย่างน้อยฟังแท้) ยากมาก ...
Shadur

6
@Shadur: เคยเป็นอย่างนั้น แต่การวิจัยด้านความปลอดภัยอย่างต่อเนื่องได้ค้นพบวิธีใหม่ในการสร้างการชน MD5 ซึ่งทำให้ง่ายขึ้น โดยเฉพาะอย่างยิ่งหากรูปแบบไฟล์ของคุณอนุญาตให้มีข้อมูล "ความคิดเห็น" รูปแบบอิสระเป็นไปได้ที่จะจับคู่แฮช MD5 ใด ๆ โดยการใส่ความคิดเห็นที่เหมาะสม
MSalters

17

MD5-Hash ประกอบด้วย 128 บิต บิตพลิกหนึ่งครั้งในแหล่งที่มาจะพลิก (โดยเฉลี่ย) 64 บิตในแฮช

ความน่าจะเป็นของการชนสองครั้งโดยบังเอิญคือ 1/2 ^ 128 ซึ่งเป็น 1 ใน 340 ล้านล้าน 282 ล้านล้าน 366 nonillion 920 octillion 938 ล้านล้าน 463 ล้าน 463 ล้านล้าน 374 ล้านล้าน 377 quadrillion 431 พันล้าน 768 ล้าน 211 พัน 456

อย่างไรก็ตามถ้าคุณเก็บแฮชทั้งหมดไว้ขอบคุณความน่าจะเป็นวันเกิดเส้นขนานจะสูงขึ้นเล็กน้อย เพื่อให้มีโอกาส 50% ของการชนกันของแฮชคุณต้องมีแฮช 2 ^ 64 ซึ่งหมายความว่าโดยเฉลี่ยคุณจะต้องแฮ็ชไฟล์ 6 พันล้านไฟล์ต่อวินาทีเป็นเวลา 100 ปี

ที่มา: porneL, https://stackoverflow.com/questions/201705/how-many-random-elements-before-md5-produces-collisions


8
ดังนั้นคุณกำลังพูดว่ายังมีโอกาสหรือไม่ : p
Holloway

1
ปัญหาคือแม้ว่าคุณจะต้องแฮชไฟล์ 6 พันล้านไฟล์ต่อวินาทีเป็นเวลา 100 ปีเพื่อให้แน่ใจว่าคุณพบการชนกัน มันอาจเกิดขึ้นได้ภายในวินาทีแรก
Deroby

จริงมันอาจเกิดขึ้นในวินาทีแรก แต่เช่นเคยเกี่ยวกับการสร้างความสมดุลด้วยเหตุผล อาจเป็นแอพพลิเคชั่นทางทหารที่ความเสี่ยงนั้นไม่เป็นที่ยอมรับ แต่ฉันจะเช่ารถโดยไม่คิดเลยว่าเซ็นเซอร์ airbag ใช้ md5 โปรดจำไว้ว่ามีโอกาสที่คุณจะถูกฟ้าผ่าหลายครั้งในขณะที่รอการชน md5
Zsolt Szilagy

ฉันขอโทษ แต่ครึ่งหนึ่งของ 2 ^ 128 คือ 2 ^ 127 ไม่ใช่ 2 ^ 64
fischi

2
@fischi อ่านลิงค์เกี่ยวกับวันเกิดความขัดแย้งและen.wikipedia.org/wiki/Birthday_attack - มันไม่ใช่เรื่องของการลดจำนวนแฮชทั้งหมด เมื่อให้พื้นที่การค้นหา H จำนวนแฮชที่คุณต้องสร้างก่อนที่จะได้รับโอกาส 50% ของการชนคือประมาณ sqrt ((pi / 2) * H) ถ้าคุณทำคณิตศาสตร์ด้วย 2 ^ 128 คุณจะได้ตัวเลขประมาณ 2 ^ 64
Paul Dixon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.