พูดง่ายๆ คือ อัลกอริทึมการแฮชรหัสผ่าน $pH$ ใช้เวลาเกลือ $เกลือ$ และป้อนรหัสผ่าน $pwd$ และคำนวณ $h' = pH(เกลือ,pwd)$ และตรวจสอบ $h$ ด้วยแฮชของรหัสผ่านที่เก็บไว้ในปัจจุบัน $h$, $h \overset{?}{=} h'$.
การป้อนรหัสผ่านที่ไม่ถูกต้องที่เพิ่งแฮชเหมือนกันจะทำให้ฉันเข้าไปได้หรือไม่
หากคุณป้อนรหัสผ่านโดยพลการ อาจมีการเปลี่ยนแปลงเล็กน้อยเพื่อให้แฮชรหัสผ่านเดียวกันกับเกลือ หากสิ่งนี้เกิดขึ้นแสดงว่าถูกต้องและคุณสามารถเข้าสู่ระบบได้
ฉันจะไม่เรียกมันว่ารหัสผ่านที่ไม่ถูกต้อง แต่เรียกอีกภาพล่วงหน้าสำหรับ $h$. นอกเหนือจากกำลังเดรัจฉาน (และตารางสีรุ้งที่เกลือป้องกันสิ่งนี้) นี่คือการโจมตีที่ผู้โจมตีต้องดำเนินการ การโจมตีนี้เป็นการโจมตีแบบพรีอิมเมจ
- กำหนดค่าแฮช $h$ ค้นหาและป้อนข้อมูลดังกล่าว $m$ นั่น $h = แฮช (m)$. ค่าใช้จ่ายทั่วไปของการโจมตีนี้คือ $\mathcal{O}(2^n)$ สำหรับ $n$- ฟังก์ชันแฮชบิต (ฟังก์ชันแฮชรหัสผ่านหรือฟังก์ชันแฮชเข้ารหัส)
จุดอ่อนที่สุดในการแคร็กรหัสผ่านคือปัจจัยจากมนุษย์ มนุษย์ มักจะมีรหัสผ่านที่ไม่รัดกุม และปัจจุบันวิธีหนึ่งที่ดีคือ ลูกเต๋า. ใช้ dicewire เพื่อสร้างรหัสผ่านของคุณ หรือดีกว่าใช้ตัวจัดการรหัสผ่านที่พวกเขาสร้างรหัสผ่านแบบสุ่มจริง ๆ และคุณเก็บฐานข้อมูลรหัสผ่านของคุณด้วยรหัสผ่านที่รัดกุมซึ่งสร้างโดย dicewire
แต่มันทำงานอย่างไรในการป้องกันการชนกันของรหัสผ่านที่ใช้แทนกันได้?
คุณไม่สามารถป้องกันได้ มันมีอยู่โดย หลักการของนกพิราบ. แต่อัลกอริธึมการแฮชรหัสผ่านโดยการออกแบบนั้นปลอดภัยแม้คุณจะใช้ MD5 เพียงอย่างเดียว MD5 ยังคงปลอดภัยจากการโจมตีภาพล่วงหน้า คุณจะมีความต้านทานภาพล่วงหน้าประมาณ 128 บิต แน่นอนว่าเราต้องใช้อัลกอริธึมการแฮชสมัยใหม่ เช่น Argon2
กล่าวอีกนัยหนึ่ง เทคนิคเหล่านี้เป็นสาเหตุของการผ่านที่ไม่ถูกต้องจะไม่ให้คุณเข้าหรือใช้งานไม่ได้หรือไม่?
นี่คือวิธีการทำงาน มันจะได้ผลเสมอ โปรดทราบว่าคุณจะมีโอกาสที่จะ $\dfrac{1}{2^{128}}$ สำหรับรหัสผ่านเดียวแบบสุ่มที่ตรงกับแฮชของรหัสผ่านของคุณ ( สมมติว่าเอาต์พุต 128 บิต) หากความน่าจะเป็นของเหตุการณ์คือ $\geq \dfrac{1}{2^{100}}$ เราก็พูดอย่างนั้น มันจะไม่เกิดขึ้น.
แม้ว่าคุณจะกลัวสิ่งนี้ ให้ใช้ระบบตรวจสอบสิทธิ์แบบสองปัจจัย และจริงๆ แล้วควรใช้ระบบนี้ทุกครั้งที่ทำได้
หมายเหตุด้านข้าง: การค้นหาการชนกันนั้นไม่เกี่ยวข้องกับการแฮชรหัสผ่านในแง่ของการโจมตีการชนกัน ซึ่งคุณจะต้องค้นหาอินพุตตามอำเภอใจสองรายการเท่านั้น $a$ และ $ข$ ดังนั้น $hash(a) = hash(b)$. ในการแฮชรหัสผ่าน ผู้โจมตีมีแฮชและพยายามค้นหาแฮชที่สร้างแฮชเดียวกัน