md5 비밀번호가 다르게 해시되는 이유는 무엇입니까?


22

한동안 궁금해했는데 왜 "echo 'helloworld'| openssl passwd -1 -stdin"을 실행하면 매번 다른 결과가 나옵니까? 암호 및 시스템에 로그인하면 어떻게 작동합니까?

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 2016 년

답변:


37

그들 모두는 다른 소금을 가지고 있습니다 . 소금은 절대 재사용해서는 안되므로 매번 고유 한 소금이 선택됩니다. 각 비밀번호에 고유 한 솔트를 사용하면 레인보우 테이블 공격에 대한 내성이 있습니다 .



6
출력에 $ 1 $ 이후에 소금이 포함되어 있음을 언급하는 것이 좋습니다 (달러 기호는 구분 기호 임).
찌르다

6
'$ 1 $ xlm86SKN $ vzF1zs3vfjC9zRVI15zFl1'의 해시에서 xlm86SKN은 소금이고 vzF1zs3vfjC9zRVI15zFl1은 소금에 절인 helloworld의 해시입니까?
피터

2
@ 피터 : 정확히.
Joachim Sauer 2016 년

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.