ปลอดภัยหรือไม่ที่จะเพิกเฉยต่อความเป็นไปได้ของการชนใน SHA


209

สมมติว่าเรามีภาพที่ไม่ซ้ำกันหลายพันล้านภาพแต่ละเมกะไบต์ เราคำนวณแฮช SHA-256 สำหรับเนื้อหาของแต่ละไฟล์ ความเป็นไปได้ของการชนนั้นขึ้นอยู่กับ:

  • จำนวนไฟล์
  • ขนาดของไฟล์เดียว

ไกลแค่ไหนที่เราจะเพิกเฉยต่อความเป็นไปได้นี้โดยสมมติว่ามันเป็นศูนย์?


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

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

2
@Hristo Hristov: ถ้าเราสมมติว่า hash key เป็นตัวเลขสุ่มหลอก (ซึ่งในทางทฤษฎีถูกต้อง) จากนั้นหนึ่งในพันของ 128-bit keys ให้ความน่าจะเป็นในการชนที่ 2.9 * 10 ^ -30 คุณไม่สามารถเรียกมันว่า "miniscule" มันน้อยกว่านั้น)
mojuba

3
@mojuba: ดียิ่งขึ้นเขาถามเกี่ยวกับกัญชา 256 บิต
Michael Borgwardt

FWIW: ระบบควบคุมเวอร์ชัน GIT จะระบุไฟล์ตามเนื้อหา SHA
snemarch

คำตอบ:


385

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

ถ้าเรามี "ดี" ฟังก์ชันแฮชที่มีขนาดเอาท์พุท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 ดูเหมือนแข็งแกร่งมาก


12
นี่เป็นคำตอบที่ดีมากขอบคุณ! แต่ถ้าในกรณีที่เกิดการชนโรงไฟฟ้านิวเคลียร์จะระเบิดขึ้นอยู่กับคุณคุณจะรับความเสี่ยงนั้นหรือไม่? หากคุณพูดถูกแล้วเราสามารถรับความเสี่ยงได้เพราะมันเป็นคำสั่งขนาดที่ 45 ซึ่งเป็นไปได้ที่อารยธรรมจะถูกทำลาย ขวา?
Hristo Hristov

46
@Hristo ฉันคิดว่าใช่ใครจะเสี่ยง โรงไฟฟ้านิวเคลียร์แล้วมีไกลโอกาสสูงในการระเบิดเนื่องจากสิ่งอื่น ๆ เช่นความล้มเหลวผิดพลาดของมนุษย์ในการสร้างหรือข้อผิดพลาดผู้ประกอบการในขณะที่ทำงานมันและเรามีอยู่แล้วสละโอกาสเหล่านั้น หากการชนของ SHA-256 เป็นเพียงสิ่งเดียวที่ก่อให้เกิดอุบัติเหตุนิวเคลียร์เราแทบจะไม่ได้มีศูนย์เลย
Roman Starkov

27
foxnews.com/science/2013/02/11/…ฉันเริ่มคิดถึงSHA512
Dustin Oprea

37
ตอนนี้ฉันสามารถพักผ่อนได้อย่างง่ายดายโดยรู้ว่าฉันอาจถูกล้างด้วยดาวเคราะห์น้อยนานก่อนที่ฉันจะมีชีวิตอยู่เพื่อพบกับการชน SHA-256
AaronLS

10
ขออภัยคุณหายไปจาก "วันเกิดที่ผิดธรรมดา" ลองดูที่ "nice table" ให้ดีขึ้นมันไม่ทำงานอย่างที่คุณคิด สำหรับตัวเลขที่ฉันให้ในตารางนั้นจะเป็นค่า "10 ^ 9" ในคอลัมน์ที่ระบุว่า "4.3 * 10 ^ -60" และแถว "128 บิต" (แต่ตารางไม่ต่ำกว่า 10 ^ -18 )
โทมัสพริน

47

ความเป็นไปได้ของการชนไม่ได้ขึ้นอยู่กับขนาดของไฟล์ตามจำนวนของไฟล์เท่านั้น

นี่คือตัวอย่างของที่ขัดแย้งวันเกิด หน้า Wikipedia ให้การประมาณความน่าจะเป็นของการชน หากคุณเรียกใช้ตัวเลขคุณจะเห็นว่าฮาร์ดดิสทั้งหมดที่ผลิตบนโลกนั้นไม่สามารถเก็บไฟล์ 1MB ได้เพียงพอที่จะได้รับโอกาสในการชนกันของ SHA-256 แม้แต่ 0.01%

โดยทั่วไปคุณสามารถเพิกเฉยต่อความเป็นไปได้


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

11
@sharptooth: ไม่ฉันไม่ได้บิดเบือนสถานการณ์ ความเป็นไปได้ของคุณและทุกคนที่คุณรู้จักการเสียชีวิตจากอุบัติเหตุบนท้องถนนในวันเดียวกันนั้นต่ำมาก แต่ก็ยังสามารถเกิดขึ้นได้ (และสูงกว่าการชน SHA-256 มาก) แต่คุณไม่สนใจความเป็นไปได้นั้น
Michael Borgwardt

11
@sharptooth: ฉันกำลังพูดถึงอุบัติเหตุทางถนนที่แยกจากกันพร้อมกันของคนสองสามร้อยคน คุณไม่สามารถทำตามขั้นตอนใด ๆ เพื่อลดขั้นตอนได้ มันคงไม่มีจุดหมายเพราะมันต่ำมากแล้ว แต่ยังมีโอกาสมากกว่าการชนแบบ SHA-256 มากจนคุณไม่สามารถจินตนาการได้ มันเป็นข้อโต้แย้งแบบเดียวกับที่โธมัสทำ
Michael Borgwardt

12
@sharptooth: ไม่โอกาสไม่เพิ่มขึ้นอย่างมีนัยสำคัญเพราะจำนวนนั้นยังคงแคระอย่างแน่นอนโดยขนาดของพื้นที่แฮช SHA-256 นี่คือสิ่งหนึ่งที่คุณไม่ได้คำนึงถึงอย่างถูกต้องปัจจัยทั้งหมดต้องถูกถ่วงด้วยขนาดที่แท้จริงของพวกเขาไม่เท่ากัน หากคุณสร้างหนึ่งพันล้านแฮชต่อวินาทีสำหรับทุก ๆ คนบนโลกและทำอย่างนั้นเป็นเวลาหนึ่งพันปีคุณยังมีโอกาสน้อยกว่า 1% ในการชน
Michael Borgwardt

3
หากคุณไม่ได้ตรวจสอบความเป็นไปได้ของข้อผิดพลาดที่ไม่ได้แก้ไขในทุกดึงข้อมูลจากหน่วยความจำหรืออ่านจากดิสก์ (ซึ่งมีความห่างไกลความน่าจะเป็นสูงกว่า SHA-256 ชน) คุณอาจไม่เข้าใจความน่าจะเป็น
Christophe

17

ก่อนอื่นมันไม่เป็นศูนย์ แต่ใกล้กับศูนย์มาก

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

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


... ไม่ใช่โดย # ของสำเนา แต่ # ของชุดข้อมูลคัดลอกทั้งหมดชุดย่อย
Andreas Spindler

1
นี่เป็นสิ่งที่ผิดจำนวนสำเนาของซอฟต์แวร์ที่ทำงานนั้นไม่เกี่ยวข้อง สิ่งเดียวที่สำคัญคือจำนวนของไฟล์ที่ไม่ซ้ำกันที่ถูกประมวลผลและวันเกิดความขัดแย้งคือคณิตศาสตร์สำหรับการคำนวณ
Dirk Bester

1
ฉันได้ยินคนอื่นพูดถึงความเป็นไปได้ของความล้มเหลวของฮาร์ดแวร์ - เช่นการพลิกที่ใดที่หนึ่งเนื่องจากการแผ่รังสี ฯลฯ - มีแนวโน้มที่จะมากกว่าการชนกันของแฮช โดยส่วนตัวแล้วฉันพยายามปกปิดทั้งสองกรณีเพื่อความปลอดภัย (ยิ่งความปลอดภัยในโรงไฟฟ้านิวเคลียร์ดีกว่า) แต่การชนกันของแฮชอาจจะต่ำมากในรายการของอันตรายที่อาจเกิดขึ้น (สมมติว่าพื้นที่แฮชมีขนาดใหญ่พอ) . อย่างไรก็ตามทั้งหมดนี้จะถือว่าไม่มีพฤติกรรมที่ซ่อนอยู่ในฟังก์ชันแฮชซึ่งทำให้เกิดการชนบ่อยขึ้น
Chris Middleton


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