สรุป: SHA-1 มีความปลอดภัยเทียบเท่ากับสิ่งใด ๆ ก็ตามจากการโจมตีของ preimage อย่างไรก็ตามมันง่ายในการคำนวณซึ่งหมายความว่าง่ายต่อการติดตั้งการโจมตีแบบ bruteforce หรือพจนานุกรม (เช่นเดียวกับผู้สืบทอดเช่น SHA-256) ฟังก์ชั่นแฮชซึ่งได้รับการออกแบบให้มีราคาแพงในการคำนวณ (เช่น bcrypt) อาจเป็นทางเลือกที่ดีกว่า
บางคนพูดอย่างเช่น "SHA-1 เสีย" มากดังนั้นฉันพยายามที่จะเข้าใจความหมายที่แท้จริง สมมติว่าฉันมีฐานข้อมูลของรหัสผ่านแฮช SHA-1 และผู้โจมตีที่มีอัลกอริทึมการทำลาย SHA-1 ที่ทันสมัยและบอตเน็ตที่มี 100,000 เครื่องเข้าถึงได้ (การควบคุมคอมพิวเตอร์ที่ใช้ภายในบ้านมากกว่า 100k หมายความว่าพวกเขาสามารถทำงานได้ประมาณ 10 ^ 15 ต่อวินาที) พวกเขาจะต้องใช้เวลานานเท่าใด
- ค้นหารหัสผ่านของผู้ใช้คนใดคนหนึ่งหรือไม่
- ค้นหารหัสผ่านของผู้ใช้ที่กำหนดหรือไม่
- ค้นหารหัสผ่านของผู้ใช้ทั้งหมดหรือไม่
- หาวิธีเข้าสู่ระบบในฐานะผู้ใช้คนใดคนหนึ่ง?
- หาวิธีเข้าสู่ระบบในฐานะผู้ใช้เฉพาะหรือไม่?
จะเปลี่ยนไปอย่างไรหากรหัสผ่านถูกใส่เกลือ วิธีการเติมเกลือ (คำนำหน้า, คำนำหน้า, ทั้งสองหรือบางสิ่งที่ซับซ้อนกว่าเช่น xor-ing) มีความสำคัญหรือไม่?
นี่คือความเข้าใจปัจจุบันของฉันหลังจาก googling โปรดแก้ไขคำตอบหากฉันเข้าใจผิดบางอย่าง
- หากไม่มีเกลือการโจมตีแบบสายรุ้งจะค้นหารหัสผ่านทั้งหมดทันที (ยกเว้นรหัสที่ยาวมาก)
- หากมีเกลือสุ่มนานพอวิธีที่มีประสิทธิภาพที่สุดในการค้นหารหัสผ่านคือการใช้กำลังดุร้ายหรือการโจมตีพจนานุกรม การชนกันของข้อมูลหรือการโจมตีล่วงหน้าไม่ได้มีส่วนช่วยในการค้นหารหัสผ่านจริงดังนั้นการโจมตีด้วยรหัสลับกับ SHA-1 จึงไม่ช่วยอะไรเลย มันไม่สำคัญเลยว่าอัลกอริทึมใดที่ใช้ - ใครสามารถใช้ MD5 หรือ MD4 และรหัสผ่านจะปลอดภัยเหมือนกัน (มีความแตกต่างกันเล็กน้อยเนื่องจากการคำนวณแฮช SHA-1 ช้ากว่า)
- ในการประเมินความปลอดภัย "เพียงแค่ปลอดภัย" สมมติว่าการรัน sha1 ครั้งเดียวนั้นใช้เวลา 1,000 การดำเนินการและรหัสผ่านประกอบด้วยตัวพิมพ์ใหญ่ตัวพิมพ์เล็กและตัวเลข (นั่นคือ 60 ตัวอักษร) นั่นหมายความว่าผู้โจมตีสามารถทดสอบ 10 15 * 60 * 60 * 24/1000 ~ = 10 17รหัสผ่านที่เป็นไปได้ต่อวัน สำหรับการโจมตีที่ดุร้ายนั่นหมายถึงการทดสอบรหัสผ่านทั้งหมดสูงสุด 9 ตัวอักษรใน 3 ชั่วโมงสูงสุด 10 ตัวอักษรในหนึ่งสัปดาห์มากถึง 11 ตัวอักษรในหนึ่งปี (ใช้เวลาเพิ่มขึ้น 60 เท่าสำหรับตัวละครทุกตัว) การโจมตีพจนานุกรมนั้นเร็วกว่ามาก (แม้แต่ผู้โจมตีที่ใช้คอมพิวเตอร์เครื่องเดียวก็สามารถดึงมันออกได้ในเวลาไม่กี่ชั่วโมง) แต่จะพบรหัสผ่านที่อ่อนแอเท่านั้น
- ในการเข้าสู่ระบบในฐานะผู้ใช้ผู้โจมตีไม่จำเป็นต้องค้นหารหัสผ่านที่แน่นอน มันก็เพียงพอที่จะหาสตริงที่ส่งผลให้แฮชเดียวกัน นี่เรียกว่าการโจมตีครั้งแรก เท่าที่ฉันสามารถหาได้ไม่มีการโจมตีล่วงหน้ากับ SHA-1 (การโจมตี Bruteforce จะใช้เวลา 2 160การดำเนินงานซึ่งหมายถึงการโจมตีทางทฤษฎีเราจะต้อง 10 30ปีที่จะดึงมันออก. ขอบเขตของความเป็นไปได้ในทางทฤษฎีมีรอบ 2 60การดำเนินงานที่การโจมตีจะใช้เวลาไม่กี่ปีที่ผ่านมา.) มีการโจมตี preimage เทียบกับรุ่นที่ลดลงของ SHA-1 ที่มีเอฟเฟกต์เล็กน้อย (สำหรับ SHA-1 ที่ลดลงซึ่งใช้ 44 ขั้นตอนแทน 80, เวลาโจมตีลดลงจาก 2 160การดำเนินการเป็น 2 157) มีการโจมตีการปะทะกันกับ SHA-1 ซึ่งมีความเป็นไปได้ในทางทฤษฎี ( ที่ดีที่สุดที่ฉันค้นพบทำให้เวลาลดลงจาก 2 80เป็น 2 52 ) แต่สิ่งเหล่านั้นไร้ประโยชน์สำหรับการแฮชรหัสผ่าน
กล่าวโดยสรุปการจัดเก็บรหัสผ่านด้วย SHA-1 ดูเหมือนปลอดภัยอย่างสมบูรณ์ ฉันพลาดอะไรไปหรือเปล่า?
ปรับปรุง:มาร์เซโลชี้ให้เห็นบทความที่ระบุว่าการโจมตี preimage ที่สองใน 2 106การดำเนินงาน ( แก้ไข:ตามที่โทมัสอธิบายการโจมตีนี้เป็นสิ่งก่อสร้างเชิงสมมุติฐานซึ่งไม่สามารถนำไปใช้กับสถานการณ์ในชีวิตจริงได้) ฉันยังไม่เห็นว่าสิ่งนี้จะเป็นอันตรายต่อการใช้งาน SHA-1 อย่างไร โดยทั่วไปมีเหตุผลที่ดีหรือไม่ที่คิดว่าการโจมตีแบบชนกันหรือการโจมตีแบบ preimage ครั้งที่สองสามารถเปลี่ยนเป็นการโจมตีแบบ preimage เป็นครั้งแรกได้หรือไม่?