สมมติว่าเรามีภาพที่ไม่ซ้ำกันหลายพันล้านภาพแต่ละเมกะไบต์ เราคำนวณแฮช SHA-256 สำหรับเนื้อหาของแต่ละไฟล์ ความเป็นไปได้ของการชนนั้นขึ้นอยู่กับ:
- จำนวนไฟล์
ขนาดของไฟล์เดียว
ไกลแค่ไหนที่เราจะเพิกเฉยต่อความเป็นไปได้นี้โดยสมมติว่ามันเป็นศูนย์?
สมมติว่าเรามีภาพที่ไม่ซ้ำกันหลายพันล้านภาพแต่ละเมกะไบต์ เราคำนวณแฮช SHA-256 สำหรับเนื้อหาของแต่ละไฟล์ ความเป็นไปได้ของการชนนั้นขึ้นอยู่กับ:
ไกลแค่ไหนที่เราจะเพิกเฉยต่อความเป็นไปได้นี้โดยสมมติว่ามันเป็นศูนย์?
คำตอบ:
คำตอบปกติจะเป็นเช่นนั้น: อะไรคือความน่าจะเป็นที่ดาวเคราะห์น้อยเกิดปัญหาบนโลกภายในสองวินาทีถัดไปกำจัดอารยธรรมที่เรารู้จักและกำจัดผู้คนไม่กี่พันล้านคน เป็นที่ถกเถียงกันอยู่ว่าเหตุการณ์ที่โชคร้ายใด ๆ ที่มีความน่าจะเป็นต่ำกว่านั้นไม่ได้สำคัญมากนัก
ถ้าเรามี "ดี" ฟังก์ชันแฮชที่มีขนาดเอาท์พุทnและเรามีหน้าข้อความไปยังแฮช (ความยาวข้อความส่วนบุคคลไม่สำคัญ) แล้วน่าจะเป็นของการปะทะกันเป็นเรื่องเกี่ยวกับพี2 /2 1 + n (นี้คือประมาณซึ่งเป็น ใช้ได้กับ "เล็ก" pคือน้อยกว่า2 n / 2 ) ยกตัวอย่างเช่นมี SHA-256 ( n = 256 ) และหนึ่งพันล้านข้อความ ( p = 10 9 ) แล้วน่าจะเป็นเรื่องเกี่ยวกับ4.3 * 10 -60
หินอวกาศฆาตกรสังหารหมู่เกิดขึ้นประมาณทุกๆ 30 ล้านปีโดยเฉลี่ย นำไปสู่การนี้น่าจะเป็นของเหตุการณ์ดังกล่าวเกิดขึ้นในครั้งที่สองถัดไปที่จะเกี่ยวกับ10 -15 นั่นเป็น45คำสั่งของขนาดที่น่าจะเป็นมากกว่าการชน SHA-256 ระบุไว้สั้น ๆ หากคุณพบว่าการชนของ SHA-256 น่ากลัวความคาดหวังของคุณผิด
ในการตั้งค่าความปลอดภัยที่ผู้โจมตีเลือกข้อความที่จะถูกแฮชจากนั้นผู้โจมตีอาจใช้ข้อความมากกว่าหนึ่งพันล้านข้อความ อย่างไรก็ตามคุณจะพบว่าโอกาสในการประสบความสำเร็จของผู้โจมตีจะยังน้อยอยู่ นั่นคือจุดรวมของการใช้ฟังก์ชันแฮชที่มีเอาต์พุต 256 บิตดังนั้นความเสี่ยงของการชนอาจถูกละเลยได้
แน่นอนทั้งหมดข้างต้นถือว่า SHA-256 เป็นฟังก์ชันแฮช "สมบูรณ์แบบ" ซึ่งอยู่ไกลจากการพิสูจน์ ถึงกระนั้น SHA-256 ดูเหมือนแข็งแกร่งมาก
ความเป็นไปได้ของการชนไม่ได้ขึ้นอยู่กับขนาดของไฟล์ตามจำนวนของไฟล์เท่านั้น
นี่คือตัวอย่างของที่ขัดแย้งวันเกิด หน้า Wikipedia ให้การประมาณความน่าจะเป็นของการชน หากคุณเรียกใช้ตัวเลขคุณจะเห็นว่าฮาร์ดดิสทั้งหมดที่ผลิตบนโลกนั้นไม่สามารถเก็บไฟล์ 1MB ได้เพียงพอที่จะได้รับโอกาสในการชนกันของ SHA-256 แม้แต่ 0.01%
โดยทั่วไปคุณสามารถเพิกเฉยต่อความเป็นไปได้
ก่อนอื่นมันไม่เป็นศูนย์ แต่ใกล้กับศูนย์มาก
คำถามที่สำคัญคือสิ่งที่เกิดขึ้นหากมีการปะทะกันเกิดขึ้นจริง ? หากคำตอบคือ "โรงไฟฟ้านิวเคลียร์จะระเบิด" ดังนั้นคุณน่าจะไม่สนใจความเป็นไปได้ที่จะเกิดการชน ในกรณีส่วนใหญ่ผลที่ตามมาไม่น่ากลัวและคุณสามารถเพิกเฉยต่อความเป็นไปได้ของการชน
อย่าลืมว่าคุณอาจใช้งานซอฟต์แวร์ (หรือส่วนเล็ก ๆ ของมัน) และใช้งานในคอมพิวเตอร์หลายพันล้านเครื่อง (ไมโครคอมพิวเตอร์ฝังตัวเล็ก ๆ บางตัวที่เกือบทุกที่ในปัจจุบัน) ในกรณีเช่นนี้คุณต้องคูณค่าประมาณที่คุณได้รับด้วยจำนวนสำเนาที่มากที่สุด