ทำไมรหัสผ่าน md5 จึงถูกแฮชต่างกัน?


22

ฉันสงสัยอยู่พักหนึ่งแล้วทำไมการใช้ "echo 'helloworld' | openssl passwd -1 -stdin" ให้ผลลัพธ์ที่แตกต่างกันทุกครั้งถ้าฉันใส่ hash ลงใน / etc / shadow ฉันสามารถใช้มันเป็นของฉันได้ รหัสผ่านและเข้าสู่ระบบของฉันมันทำงานอย่างไร

computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$xlm86SKN$vzF1zs3vfjC9zRVI15zFl1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$/0.20NIp$pd4X9xTZ6sF8ExEGqAXb9/
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$sZ65uxPA$pENwlL.5a.RNVZITN/zNJ1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$zBFQ0d3Z$SibkYmuJvbmm8O8cNeGMx1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$PfDyDWER$tWaoTYym8zy38P2ElwoBe/

ฉันคิดว่าเพราะฉันใช้แฮชนี้เพื่ออธิบายระบบว่ารหัสผ่านของฉันควรเป็นอะไรฉันควรได้รับผลลัพธ์เดียวกันทุกครั้ง ทำไมฉันไม่


3
หากพวกเขาเหมือนกันทุกครั้งผู้โจมตีสามารถแฮรหัสผ่านทั่วไปหลายพันล้านรายการและตรวจสอบได้ง่าย
David Schwartz

คำตอบ:


37

พวกเขาทั้งหมดมีที่แตกต่างกันเกลือ เลือกเกลือที่ไม่ซ้ำกันในแต่ละครั้งเนื่องจากไม่ควรใช้เกลือซ้ำ การใช้เกลือที่ไม่ซ้ำกันสำหรับแต่ละรหัสผ่านทำให้พวกเขาทนต่อการโจมตีตารางรุ้ง



6
มันอาจจะเป็นความคิดที่ดีที่จะพูดถึงว่าการส่งออกรวมถึงเกลือหลังจาก $ 1 $ (สัญลักษณ์ดอลลาร์เป็นตัวคั่น)
กระตุ้น

6
ดังนั้นในแฮชของ '$ 1 $ xlm86SKN $ vzF1zs3vfjC9zRVI15zFl1' xlm86SKN คือเกลือและ vzF1zs3vfjC9zRVI15zFl1 คือ hash ของ helloworld ที่เค็ม?
ปีเตอร์


3

แน่นอนถ้าคุณให้เกลือกับบรรทัดคำสั่งคุณจะได้ผลลัพธ์เดียวกันเสมอ

$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/
$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/
$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.