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