Score:1

หลีกเลี่ยงการชนกันของ MD5 กับแฮชบางส่วนรอง

ธง cn

ฉันกำลังพยายามออกแบบ VCS เช่นโปรแกรมที่กำหนดว่าไฟล์เหมือนกันหรือไม่โดยการเปรียบเทียบแฮช MD5

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

มีปัญหาอะไรบ้างเกี่ยวกับวิธีการนี้ที่สามารถคาดการณ์ล่วงหน้าได้?

bk2204 avatar
fr flag
โปรดอย่าใช้ MD5 หรือแม้แต่ SHA-1 เพื่อจุดประสงค์นี้ (หรือจุดประสงค์ใดก็ตาม) เมื่อเร็ว ๆ นี้ Git ได้เพิ่มการรองรับ SHA-256 โดยเฉพาะเนื่องจากอีกสองตัวนั้นแย่มาก และตามที่ kelalaka เสนอ BLAKE2, BLAKE3 หรือ SHA-2 ล้วนเป็นตัวเลือกที่ยอดเยี่ยม
Score:3
ธง in

อาจเป็นปัญหาใหญ่ในกรณีของคุณเนื่องจากมี การชนกันของคำนำหน้าเหมือนกันใน MD5;

 |คำนำหน้านามเดียวกัน | ส่วนฟรีของไฟล์ A | คำต่อท้ายที่เหมือนกัน |
 |คำนำหน้านามเดียวกัน | ส่วนฟรีของไฟล์ B | คำต่อท้ายที่เหมือนกัน |
                                         ^
                 พวกเขาชนกันที่นี่| ส่วนที่เหลือเหมือนกัน

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

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

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

  • เบลค2 เร็วที่สุดในตอนนี้ เบลค3 ซึ่งเร็วกว่า BLAKE2 ~2 เท่า และ BLAKE3 ~9 เท่า เร็วกว่า MD5 ใช้ BLAKE2/3 กับเอาต์พุต 512 บิต และมีไฟล์ $2^{256}$- ความต้านทานการชนกันของเวลา ดังนั้นการสร้างการชนกันจึงเป็นไปไม่ได้ในการคำนวณ
  • SHA-512 ซึ่งเกือบจะมีความเร็วเท่ากับ MD5 และสามารถรับประกันการต้านทานการชนได้ดีกว่ามาก ซึ่ง MD5 ไม่สามารถเทียบเคียงได้ไม่ว่าด้วยวิธีใด

เดอะ บทสรุปของ Corkami;

ฆ่า MD5!

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

ไม่ใช่แฮชการเข้ารหัส แต่เป็นฟังก์ชั่นของเล่น!

kelalaka avatar
in flag
[Git ใช้ SHA-1](https://www.zdnet.com/article/linus-torvalds-on-sha-1-and-git-the-sky-isnt-falling/)และตอนนี้ [ พวกเขาปรับปรุง](https://github.blog/2021-09-01-improving-git-protocol-security-github/)
Morrolan avatar
ng flag
โปรดทราบว่าค่าเริ่มต้นของ Git และในความเป็นจริงสิ่งเดียวที่รองรับโดยโฮสต์ Git หลักเช่น Github คือ *ยังคง* SHA1 ดูเช่น [คำตอบนี้](https://stackoverflow.com/a/65874596) ลิงก์ที่สองของคุณนั้นเกี่ยวกับ Github ที่เลิกสนับสนุน SHA1 ร่วมกับ SSH นั่นเป็นเรื่องเกี่ยวกับการขนส่งรูปแบบหนึ่งซึ่งเราสามารถเข้าถึง Git ได้ ไม่ใช่เกี่ยวกับการใช้ git เป็นวิธีจัดการกับเนื้อหา

โพสต์คำตอบ

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