สามารถเปลี่ยนไฟล์ในทางที่เป็นอันตรายซึ่งรักษาความเป็น SHA-1 Hash ดั้งเดิมไว้ได้หรือไม่?


33

ตามนี้บทความและอื่น ๆ อีกมากมาย SHA-1 นั้นไม่ปลอดภัย

ในกรณีของฉันฉันไม่ได้กังวลเกี่ยวกับรหัสผ่านหรือใบรับรองดิจิทัล ฉันกังวลเกี่ยวกับความสมบูรณ์ของไฟล์

เป็นไปได้อย่างสมเหตุสมผลที่ไฟล์ (เช่นอิมเมจ ISO หรือไฟล์ที่เรียกใช้งานได้) จะมีการเปลี่ยนแปลงที่เป็นอันตรายในลักษณะที่:

  • รักษาแฮช SHA-1 ของไฟล์ดั้งเดิมและ
  • รักษาเนื้อหาและการทำงานโดยรวมของไฟล์ (แต่แน่นอนตอนนี้มีเนื้อหาที่เป็นอันตรายซึ่งไม่ได้มีอยู่ในตอนนี้)

วิธีที่ฉันเห็นการแก้ไขไฟล์ในแบบที่ทำให้การชน SHA-1 จะทำให้ไฟล์นั้นไร้ประโยชน์โดยสิ้นเชิง ISO จะเสียหายอย่างสมบูรณ์หรือไฟล์ที่เรียกทำงานได้จะถูกรบกวนอย่างที่สุดดังนั้นแม้จะไม่ได้เป็นไฟล์ที่ปฏิบัติการได้อีกต่อไป

แต่วิธีที่ฉันเห็นมันอาจผิดพลาดได้ จนถึงตอนนี้ฉันไม่พบสิ่งใดในการค้นหาของ Google เกี่ยวกับความเหมาะสมอย่างต่อเนื่องของ SHA-1 สำหรับการยืนยันไฟล์ ข้อมูลเชิงลึกใด ๆ


7
คำตอบคือ "มันขึ้นอยู่กับ" หาก ISO เกิดขึ้นกับไฟล์ jpegs หรือไฟล์ภาพยนตร์จำนวนมาก - พร้อมกับเป้าหมายในการปฏิบัติการของคุณก็เป็นไปได้ คุณสามารถแก้ไขไฟล์ jpeg ได้อย่างมากโดยไม่ต้องเปลี่ยนขนาดหรือลักษณะที่ปรากฏ ท้ายที่สุดยิ่งไฟล์ใหญ่มากเท่าไรคุณก็ยิ่งต้องเล่นมากเท่านั้นและยิ่งมีโอกาสเกิดการชนที่ไม่ทำลายมากขึ้น
Paul

7
@cpast แน่นอนว่าเว็บไซต์หลายรายการมีแฮช SHA-1 เพื่อให้คุณสามารถตรวจสอบการดาวน์โหลดของคุณได้ เมื่อพิจารณาแล้วดูเหมือนว่าแฮ็กเกอร์จะประนีประนอมเว็บไซต์ด้วยการแก้ไขเนื้อหาและแฮชที่เผยแพร่ งั้นคุณก็เมาจริงๆ
misha256

1
เพียงแค่ fyi คำถามของฉันถามเกี่ยวกับ SHA-1 โดยเฉพาะเพราะเป็นเรื่องธรรมดาโดยเฉพาะอย่างยิ่งกับการดาวน์โหลดจาก Microsoft / MSDN แน่นอนว่าบางเว็บไซต์เผยแพร่ MD5 hashes, SHA256 อื่น ๆ และอื่น ๆ
misha256

2
คำถามคือทำไมคุณจะต้องการที่จะใช้กัญชาที่มีใด ๆช่องโหว่ที่รู้จักกันเมื่อมีทางเลือกที่เป็นเพียงเป็นไปอย่างรวดเร็วและง่ายต่อการใช้งานและสามารถใช้ได้อย่างกว้างขวางที่ทำไม่ได้(เช่น. SHA-256) ? นอกจากนี้ยังมีเหตุผลที่ cryptographers ประกาศแฮชที่ไม่ปลอดภัยหลังจากพบช่องโหว่เพียงช่องเดียวเท่านั้น: ประวัติแสดงให้เห็นว่าเมื่อพบสิ่งหนึ่งแล้วคนอื่น ๆ จะติดตามอย่างรวดเร็ว คำพูดที่มีชื่อเสียงของ Bruce Schneier คือ"การโจมตีดีขึ้นเสมอพวกเขาไม่เคยแย่กว่านี้"
BlueRaja - Danny Pflughoeft

3
@ misha256 แฮช sh1 เหล่านั้นเหมาะสำหรับคุณที่จะตรวจสอบความเสียหายของการดาวน์โหลดไม่ใช่เพื่อความปลอดภัย หากคุณต้องการความปลอดภัยให้ใช้ไฟล์ที่มีลายเซ็นของ gpg
Daenyth

คำตอบ:


41

ยังไม่มีใครทำสิ่งนี้ได้สำเร็จสำหรับ SHA-1 เป็นไปได้ในทางทฤษฎี แต่ยังไม่สามารถใช้งานได้จริง รายงานเกี่ยวกับความไม่มั่นคงใน SHA-1 เพียงหมายความว่าระดับความปลอดภัยไม่สูงเท่าที่เราต้องการและนั่นหมายความว่าเราไม่ได้มีเวลาหลายปีก่อนที่เราจะต้องกังวลเกี่ยวกับเรื่องนี้อย่างที่เราคิด

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


มีแม้แต่การโจมตีที่รู้จักใน SHA-1 สำหรับการชนกับไฟล์ที่กำหนด ฉันรู้สึกว่าการโจมตีนั้นไม่ได้ถูกค้นพบสำหรับ MD5 หรือ SHA-1 (มีเพียงแค่การปะทะกันของการโจมตีไม่ใช่การโจมตีครั้งที่สอง
cpast

@cpast the Flame Malware ใช้การชน MD5 เพื่อให้ปรากฏว่ามาจาก Microsoft และจี้ Windows Update พวกเขาอาจมี Microsoft certs ให้เลือกมากมาย แต่พวกเขาไม่เพียงแค่พยายามหาไฟล์ 2 ไฟล์ที่มี MD5 เดียวกัน
Aron Foster

2
@Aron ไม่ใช่นั่นไม่ใช่ตัวอย่างของการชนกับไฟล์ที่กำหนด ด้วย Flame นั้น Microsoft มีเซิร์ฟเวอร์ที่ให้สิทธิ์การใช้งานซึ่งจะลงนามใบรับรอง X.509 ตามคำขอลงนามใบรับรองซึ่งหมายความว่าผู้โจมตีควบคุมสิ่งที่กำลังลงชื่อภายในข้อ จำกัด บางประการ ไม่มีใบรับรองมาก่อนที่พวกเขาพบว่ามีการปะทะกัน; Microsoft ลงนาม CSRs จากลูกค้าเป็นส่วนหนึ่งของการเปิดใช้งานซึ่งทำให้สามารถใช้การโจมตีแบบชนกัน (ซึ่งไม่ใช่การโจมตีแบบ preimage ครั้งที่สอง)
cpast

2
@OlivierDulac ไม่มันยังไม่เคยทำ ไม่มีการชนกันของ SHA-1 ที่รู้จักกัน ประเมินค่าใช้จ่ายเป็นเพียงการประมาณการ - ยังไม่ได้ว่าคนที่ไม่ได้และนี่คือวิธีที่เราคิดว่ามันมีค่าใช้จ่ายก็ว่าไม่มีใครได้ทำมัน แต่เราคิดว่านี่เป็นเท่าใดก็จะเสียค่าใช้จ่าย
cpast

4
@cpast เราไม่ทราบแน่ชัดว่าได้ทำไปแล้วหรือยัง แต่การโจมตี 3 ล้านเหรียญน้อยกว่า 0.03% ของงบประมาณประจำปีของ NSA (อันที่จริงการโจมตีควรถูกกว่าเพราะพวกเขามีฮาร์ดแวร์อยู่แล้วและไม่ ต้องเช่า). มันมีเหตุผลที่จะสรุปว่าเนื่องจากพวกเขามีวิธีการและแรงจูงใจที่จะทำมันแล้วพวกเขาก็อาจจะทำไปแล้ว จำFlameได้
bain

26

เป็นไปได้ในทางทฤษฎี แต่ยังไม่ได้ดำเนินการ

สิ่งที่คุณกำลังมองหาเรียกว่า "แฮชการชนกัน:" สองไฟล์ที่มีแฮชเดียวกัน รหัสแฮชการเข้ารหัสเช่น SHA-1 ได้รับการออกแบบโดยทั่วไปเพื่อทำให้ยาก เนื่องจาก SHA-1 เป็นรหัส 160 บิตจะใช้เวลาเฉลี่ย 2 ^ 159 กำลังดุร้ายพยายามค้นหาซ้ำ หากพบอัลกอริทึมที่เชื่อถือได้ดีกว่าแฮชที่เข้ารหัสลับแฮชจะถือว่า "ใช้งานไม่ได้"

MD-5 เป็นตัวอย่างของแฮชที่เสียมาก มันควรจะมีความแข็งแรงของ 128 บิตต้องการโดยเฉลี่ย 2 ^ 127 ครั้ง ตามที่เป็นอยู่การละเมิดช่องโหว่ที่ทราบจำนวนความพยายามที่แท้จริงที่ต้องการอาจต่ำถึง 2 ^ 47 นี่คือล็อตเล็กกว่า 2 ^ 127 ในความเป็นจริงมันได้รับการดำเนินการภายในหนึ่งวันในกลุ่มคอมพิวเตอร์ที่ทันสมัย

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

การโจมตีแบบนี้จะช่วยให้มีเคล็ดลับที่น่าสนใจที่เรียกว่า " การโจมตีวันเกิด " เรื่องสั้นสั้น ๆ การใช้การโจมตีวันเกิดจะลดความแรงของอัลกอริธึมลงครึ่งหนึ่งดังนั้น SHA-1 ต้องใช้ 2 ^ 80 ครั้ง (โดยเฉลี่ย) และ MD5 ต้องใช้ 2 ^ 64 ครั้ง (โดยเฉลี่ย) เหล่านี้ครึ่งหนึ่งของ 160 และ 128 ตามลำดับ

SHA-1 รู้จักการโจมตีที่ลดความแข็งแกร่งจาก 2 ^ 80 เป็น 2 ^ 69 สิ่งนี้จะไม่สำคัญกับคุณมากนัก 2 ^ 69 ครั้งเป็นเวลานาน

อย่างไรก็ตามจากประวัติศาสตร์เราพบว่าอัลกอริธึมการแฮชไม่ได้เกิดขึ้นเองตามธรรมชาติ ไม่มีใครถอดรหัสอัลกอริทึมอย่าง MD-5 ได้ตั้งแต่ 2 ^ 64 ถึง 2 ^ 47 ข้ามคืน มันเกิดขึ้นเมื่อเวลาผ่านไปเนื่องจากผู้คนจำนวนมากเผยแพร่เอกสารเกี่ยวกับคณิตศาสตร์ที่พวกเขาใช้ต่อต้านมัน เราสามารถดูความซับซ้อนของการจู่โจมลงอย่างช้าๆจากขั้นตอนวิธี (ซึ่งการโจมตีที่ดีที่สุดคือการโจมตีวันเกิด)

ความจริงที่ว่าเราเห็นการเปลี่ยนแปลงบางอย่างในการชนแสดงให้เห็นว่า SHA-1 กำลังมองเห็นแสงที่ปลายอุโมงค์ มันยังคงแข็งแกร่ง แต่อาจมีความปรารถนาที่จะขึ้นไปสู่ ​​SHA-3 ใหม่ล่าสุดซึ่งมีความปลอดภัยมากกว่าในปัจจุบัน

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


8
เกี่ยวกับย่อหน้าโจมตีวันเกิดของคุณ 2 ^ 80 คือสแควร์รูทของ 2 ^ 160 ไม่ใช่ครึ่งหนึ่งของมัน (ซึ่งก็คือ 2 ^ 159)
Andrew Morton

คำถามนั้นเกี่ยวกับการโจมตีครั้งที่สอง แต่คำตอบของคุณเกี่ยวกับการชน การโจมตีก่อนหน้าสำหรับ SHA-1 & mdash; และแม้กระทั่ง MD5 & mdash; ทำไม่ได้อย่างไร้เหตุผล (มีการโจมตี preimage 2 ^ 123 กับ MD5 แต่ด้วย SHA-1 คุณติดอยู่กับกำลังดุร้าย 2 ^ 160)
Matt Nordhoff

"เนื่องจาก SHA-1 เป็นรหัส 160 บิตจะใช้เวลาเฉลี่ย 2 ^ 159 กำลังดุร้ายพยายามค้นหาสำเนาซ้ำ" แต่รหัส 2 ^ 2 จะเดาได้ 2 ^ 2 ฉันไม่เห็นว่าทำไมคุณ -1 "เรื่องสั้นสั้น" ... "ลดความแรงของอัลกอริธึมลงครึ่งหนึ่งดังนั้น SHA-1 จึงต้องการ 2 ^ 80" ... "MD5 ต้องการ 2 ^ 64" ... "นี่คือครึ่งหนึ่งของ 160 และ 128 ตามลำดับ" ที่นี่คุณควรมี -1'ed บิตเพิ่มความแข็งแรงแบบทวีคูณดังนั้นการลดความแรงของ 160 บิตแฮชจะถือว่าเป็นแฮช 159 บิตไม่ใช่แฮช 80 บิต แต่ละบิตจะเพิ่มความท้าทายในการโจมตีแบบเดรัจฉาน
TOOGAM

@TOOGAM: เขาพูดว่า 'โดยเฉลี่ย'; ในการทดลองหลายครั้งเพียง 50% ของพื้นที่คีย์ต้องค้นหาโดยเฉลี่ยเพื่อให้ประสบความสำเร็จในการโจมตีด้วยกำลังดุร้าย สำหรับความคิดเห็นที่ลดลงความคิดเห็นของแอนดรูมอร์ตันด้านบนอธิบายว่า มันควรเป็นสแควร์รูท, ไม่ใช่ครึ่งหนึ่งของความซับซ้อน
เรด

@ Andrewrewort ดีจุดฉันไม่ชัดเจนด้วยถ้อยคำของฉัน ฉันพบว่าวรรณกรรมสลับระหว่างจำนวนของรัฐและลอการิทึมฐาน 2 ของจำนวนรัฐค่อนข้างบ่อย ข้อความของฉันอ้างถึงการลดจำนวนบิตลงเล็กน้อยเนื่องจากผู้คนมักพูดถึง "ความแข็งแกร่ง" ในจำนวนบิต ฉันคุ้นเคยกับการสลับไปมาที่ฉันไม่ได้ทำโดยไม่รู้ตัว ฉันจะแก้ไขเพื่อลบความสับสน
Cort Ammon - Reinstate Monica

8

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

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

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


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


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


5

คุณต้องแยกความแตกต่างระหว่างการโจมตีชนและการโจมตี preimage การค้นหาข้อความสองข้อความใด ๆที่แฮชไปที่ค่าเดียวกันเป็นการโจมตีการชนกัน
การแทนที่ข้อความที่ได้รับอย่างใดอย่างหนึ่ง (ที่นี่: ปฏิบัติการ) ด้วยข้อความอื่นที่มีแฮชเดียวกันคือการโจมตี preimage (ที่สอง)

SHA-1 นั้นถูกทำลายได้ตราบเท่าที่การชนกันของข้อมูลสามารถทำได้ใน 2 52การดำเนินงานตามบทความของ Wikipedia ที่ไม่ได้อ้างถึงหมายเลขนั้น (การโจมตีที่ดีที่สุดที่ฉันรู้ว่าน่าเชื่อถือจริง ๆ คือ Marc Stevens ซึ่งใช้เวลา 2 60การดำเนินการ) แต่ให้ถือว่าคดีในแง่ร้าย 2 52

เรื่องนี้เกี่ยวข้องกับการโจมตีในระดับนั้นไม่เพียง แต่เป็นไปได้ในทางทฤษฎี แต่สามารถทำได้อย่างสมบูรณ์แบบในหนึ่งวันบนอุปกรณ์ที่ใช้ GPU หลายตัว แน่นอนว่าเป็นปัญหาสำหรับแอปพลิเคชันที่ข้อความ "สอง" จะทำ แม้แต่ตัวเลข2 60 ที่สตีเวนส์ให้ไว้ (ซึ่งมีการทำงานมากกว่า 256 ครั้ง) ก็เป็นไปได้อย่างสมบูรณ์แบบหากผู้โจมตีของคุณเต็มใจที่จะทุ่มเงินเพิ่มที่ปัญหาหรือยินดีที่จะใช้เวลาหนึ่งปี
ซึ่งเป็นประเภทของสิ่งที่จะไม่ป้องกันไม่ให้คนที่เกี่ยวข้องกับการจารกรรมหรืออาชญากรรมไซเบอร์จากการปลอมแปลงใบรับรอง

ตอนนี้การโจมตี preimage มีเลขชี้กำลังที่มีขนาดใหญ่เป็นสองเท่าดังนั้นสมมติว่า 2 52สำหรับการปะทะกันของการปะทะนั่นจะเป็นการปฏิบัติการ2 104ครั้งซึ่งเป็นสนามเบสบอลที่แตกต่างกันโดยสิ้นเชิง

สิ่งนี้ไม่เพียงทำไม่ได้ (เครื่องจักรที่เร็วกว่าหนึ่งพันล้านครั้งที่กล่าวถึงในวรรคก่อนหน้านั้นยังคงใช้เวลาประมาณ 6 ล้านปีหรือมากกว่านั้น) แต่ด้วยวิธีการสร้างพลังงานที่ไม่สามารถทำได้

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

คุณสามารถคาดหวังได้อย่างสมจริงว่าจะได้อะไรจาก 10 ถึง 50 GFLOPS จากหนึ่งวัตต์ สมมติว่าปาฏิหาริย์บางอย่างเกิดขึ้นและโปรเซสเซอร์ได้รับการประหยัดพลังงานมากกว่าหนึ่งพันเท่าในชั่วข้ามคืนเราสามารถสันนิษฐานได้ว่า 1 SHA ≈ 1 FLOP (มองโลกในแง่ดี!) นี่หมายความว่าในการคำนวณแฮช2 ครั้ง104 ครั้งภายใน 10 ปีคุณต้องมีโรงไฟฟ้าขนาด10 12วัตต์ ในการดำเนินการโจมตีภายใน 1 ปีคุณต้องมีโรงไฟฟ้าขนาด10 13 W นั่นคือประมาณ 50 เท่าของสิ่งที่โรงไฟฟ้านิวเคลียร์ทั้งหมดในสหรัฐอเมริกาฝรั่งเศสและญี่ปุ่นสามารถผลิตได้ด้วยกันเพียงเพื่อทำการแฮชเพียงครั้งเดียว

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


"... วิธีที่ง่ายกว่ามากในการบรรลุสิ่งเดียวกัน ... " ดังที่แสดงในxkcd.com/538
Ralph J

2

ทั่วไปจุดของบทความอ้างในคำถามคือ SHA1 จะเลิกและควรจะค่อย ๆ ออกมาในขณะที่คุณยังมีเวลาที่จะทำมันได้อย่างราบรื่น ในบางพื้นที่เวลาหมดเนื่องจาก Google และ Microsoft บังคับใช้กำหนดเวลา

Rule of thumb สำหรับเทคโนโลยีที่เลิกใช้แล้ว :

  • หากคุณออกแบบใหม่หรือเพิ่มคุณสมบัติอย่าใช้มัน (SHA1)
  • หากคุณรักษาสิ่งเก่า ๆ ให้วางแผนเมื่อใดที่จะแทนที่ (SHA1)

ข้อความสรุปจากบล็อกโพสต์ 2012 โดย Bruce Schneier: "ประเด็นก็คือเราในชุมชนจำเป็นต้องเริ่มต้นการย้ายออกจาก SHA-1 และ SHA-2 / SHA-3 ทันที"


2

สำหรับการแฮชส่วน SHA-1 ของคำถามของคุณคำตอบนี้ได้รับการแก้ไขแล้ว

อย่างไรก็ตามส่วนใหญ่ของบานพับนี้กับประเภทของไฟล์ที่เรากำลังทำงานกับ:

รักษาเนื้อหาและการดำเนินงานโดยรวมของไฟล์ (แต่แน่นอนตอนนี้มีเนื้อหาที่เป็นอันตรายซึ่งเดิมไม่ได้มีการเปลี่ยนแปลงเนื้อหา)

สิ่งนี้หมายความว่าแตกต่างกันอย่างมากในสิ่งที่ตรวจจับการเปลี่ยนแปลง:

  • หากเป็นไฟล์ปฏิบัติการที่ลงนามแล้วไม่มีโอกาส (สมเหตุสมผล): คุณจะต้องได้รับแฮชสองครั้ง: SHA-1 ของไฟล์และลายเซ็นภายใน. exe
  • หากเป็นไฟล์ปฏิบัติการที่ไม่ได้ลงชื่อ,. com, ไม่ได้ลงทะเบียน. dll หรือคล้ายกันส้อมทรัพยากรของพวกเขาสามารถเพิ่มในรูปแบบที่จะไม่เปลี่ยนการดำเนินการของพวกเขาและทำให้คุณสามารถ (ในที่สุด) ได้รับการชนแฮช การทำงาน
  • หากเป็นไฟล์รหัสต้นฉบับหรือโครงสร้างที่คล้ายกัน (.cs, .c, .h, .cpp, .rb, .yml, .config, .xml, .pl, .bat, .ini) การเพิ่มการแก้ไขหรือการลบ สามารถถูก จำกัด ให้ใช้กับไวยากรณ์ความคิดเห็นที่ถูกต้องซึ่งการเปลี่ยนแปลงนั้นจะไม่สามารถมองเห็นได้โดยการใช้งานส่วนใหญ่ (การคอมไพล์หรือรันมันโดยไม่เปิดขึ้นด้วยโปรแกรมแก้ไขข้อความ)
  • หากเป็น. iso หรือ. zip หรือรูปแบบคอนเทนเนอร์อื่น ๆ ก็เป็นไปได้ยากกว่าเนื่องจากการเปลี่ยนแปลงแบบสุ่มส่วนใหญ่จะทำให้ภาชนะเสียหาย เป็นไปได้ที่จะทำ: เพิ่มรายการไฟล์ปลอมหรือแก้ไขเนื้อหาภายในคอนเทนเนอร์และตรวจสอบอีกครั้ง แต่คุณกำลังเพิ่มเลเยอร์ของความซับซ้อนและเพิ่มเวลาเพิ่มเติมในการตรวจสอบผลลัพธ์เช่นเดียวกับการมีองศาอิสระ จำกัด ด้วยความเคารพ เป็นอย่างไรและเนื้อหาใดบ้างที่อาจมีการเปลี่ยนแปลง
  • หากเป็นรูปแบบข้อความหรือข้อความพวกเขาสามารถเปลี่ยนได้เกือบทุกอย่างที่คุณต้องการในขณะที่ยังคงเป็นไฟล์ 'ถูกต้อง' แม้ว่าเนื้อหาอาจจะสังเกตเห็นได้
  • ด้วยรูปแบบที่หลากหลายเช่น. rtf, .doc, .html, .xslx และรูปแบบมาร์กอัป - เอสก์อื่น ๆ พวกเขาสามารถเพิ่มหรือแก้ไขด้วยวิธีที่ตัวแยกวิเคราะห์ไม่สามารถตรวจพบได้นอกเหนือจากความยาว (หรือแม้กระทั่งความยาวที่ จำกัด อิสระน้อยลง) ไฟล์ที่สามารถเปลี่ยนแปลงได้ (ในที่สุด) จะได้รับการชนกันของแฮชในขณะที่ยังไม่เพียง แต่เป็นไฟล์ที่ถูกต้อง แต่ไม่เปลี่ยนแปลงอย่างเห็นได้ชัดในทุก ๆ ทางที่จะปรากฏให้เห็นในแอปพลิเคชันทั่วไป

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

  1. ทำการเปลี่ยนแปลงการทำงานใด ๆ ที่คุณต้องการ (อาจแทรกเนื้อหาที่เป็นอันตราย) และทำการเปลี่ยนแปลงเพิ่มเติมเพื่อรักษาความถูกต้องเฉพาะของรูปแบบไฟล์
  2. เพิ่มส่วนที่จะไม่สามารถใช้งานได้ (ระหว่างบล็อกความคิดเห็นที่ส่วนท้ายสุดของไฟล์ข้อความที่มีการขึ้นบรรทัดใหม่ 3k carriage ข้างต้นแยกบล็อกความคิดเห็นปัจจุบัน)
  3. เพิ่มหรือเลือกอักขระ / รหัสจุด / ไบต์สำหรับการปรับเปลี่ยนและลองชุดค่าผสมที่ถูกต้องทุกอันที่เป็นไปได้ (ตัวอย่างเช่นชุดรหัสไบต์ไม่ถูกต้องสำหรับการเข้ารหัสที่แตกต่างกัน)
  4. คำนวณแฮชใหม่ดูว่าการชนกันตรงกันหรือไม่
  5. ถ้าไม่เช่นนั้นไปที่ 3

สมมติว่าคุณมีคอมพิวเตอร์ที่เร็วเป็นพิเศษและไฟล์ขนาดเล็กเช่นการปรับเปลี่ยนที่มีลำดับไบต์ที่ถูกต้องและการคำนวณใหม่การแฮชจะใช้เวลา 1 มิลลิวินาที (อาจต้องใช้ฮาร์ดแวร์เฉพาะ) หากการแจกแจงแฮชสุ่มและกระจายอย่างสมบูรณ์แบบในช่วงนั้นคุณจะได้รับการชนกับ SHA-1 ทุก2^160ครั้ง

2^160/1000/60/60/24/365.24 
= 4.63x10^37 years 
= 46,300,000,000,000,000,000,000,000,000,000,000,000 years 
= 46 undecillion years.

แต่เดี๋ยวก่อนลอง2^60และ2^52รุ่นและแสร้งว่าพวกเขาอนุญาตให้เราแก้ไขไฟล์ในแบบที่เราชอบ (พวกเขาไม่ได้) และพวกเขาก็สามารถทำได้ใน 1ms แต่ละครั้ง:

2^52 yields 142,714 years 
/*humans might still be around to care, but not about these antiquated formats*/
2^60 yields 3.65x10^7 years = 36,500,000 years 
/*machines will probably have taken over anyway*/

แต่เดี๋ยวก่อนคุณอาจโชคดี จริง ๆ แล้วมหัศจรรย์มากกว่าสิ่งใดผู้คนเรียกปาฏิหาริย์


0

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


1
สวยมากเป็นไปไม่ได้เลย ด้วยพลังการประมวลผลที่เพียงพอทุกอย่างเป็นไปได้

-6

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

นั่นหมายความว่าไฟล์จะใหญ่ขึ้น แต่ในกรณีของ EXE คุณอาจลบรหัสที่ใช้น้อยบางส่วนได้เพื่อให้โปรแกรมปรากฏขึ้นครั้งแรกเท่านั้น ในกรณีของ JPEG คุณสามารถบีบอัดรูปภาพเพิ่มเติมหรือใช้รูปภาพอื่นทั้งหมด สำหรับ ISO คุณสามารถลบชุดไฟล์ได้ การคำนวณที่จำเป็นในการทำซ้ำแฮชจะยากขึ้นและอาจเป็นไปไม่ได้ทางคณิตศาสตร์ในบางกรณี แต่อาจจะเป็นไปได้โดยทั่วไป


7
-1 ทุกอย่างในโพสต์นี้ถูกสร้างขึ้นอย่างสมบูรณ์ การโจมตีของความยาวส่วนขยายไม่ได้ "รักษากัญชาเดียวกัน" (กัญชาเพียงการเปลี่ยนแปลงในทางที่เป็นที่รู้จักกัน) นอกจากนี้ยังมีเหตุผลที่ไวรัสจะต้องลบ "รหัสสินค้าน้อย" ไม่(ว่ามันจะแม้กระทั่งตรวจสอบว่ามันคืออะไร?) และ jpegs เกี่ยวข้องกับอะไร!
BlueRaja - Danny Pflughoeft

2
นี่เป็นเพียงความผิดทั้งหมดฉันไม่สามารถแม้แต่จะแนะนำการแก้ไขโดยไม่ต้องเขียนคำตอบทั้งหมดใหม่
Mark K Cowan

2
-1 ไม่ถูกต้องเลย อาคา "ไม่ผิดเลย" (Wolfgang Pauli)
Olivier Dulac

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