암호에 대한 소금의 목적을 이해하는 데 문제가 있습니다. 무지개 테이블 공격을 막는 것이 주된 용도라는 것을 이해하고 있습니다. 그러나 이것을 구현하는 것으로 보았던 방법으로 실제로 문제가 더 어려워지는 것은 아닙니다.
소금을 다음과 같이 사용할 것을 제안하는 많은 자습서를 보았습니다.
$hash = md5($salt.$password)
해시는 이제 원래 비밀번호가 아니라 비밀번호와 솔트의 조합으로 매핑된다는 추론입니다. 그러나 말을 $salt=foo
하고 $password=bar
와 $hash=3858f62230ac3c915f300c664312c63f
. 이제 레인보우 테이블을 가진 사람은 해시를 되돌리고 입력 "foobar"를 얻을 수 있습니다. 그런 다음 모든 암호 조합 (f, fo, foo, ... oobar, obar, bar, ar, ar)을 시도 할 수 있습니다. 암호를 얻는 데 몇 밀리 초가 더 걸릴 수 있지만 그다지 많지는 않습니다.
내가 본 다른 용도는 Linux 시스템에서 사용됩니다. / etc / shadow에서 해시 된 비밀번호는 실제로 salt 와 함께 저장 됩니다 . 예를 들어, "foo"의 소금과 "bar"의 암호는 다음과 같이 해시됩니다 $1$foo$te5SBM.7C25fFDu6bIRbX1
. 해커가 어떻게 든이 파일을 손에 넣을 수 있다면 리버스 해시에 te5SBM.7C25fFDu6bIRbX
"foo"가 포함되어 있기 때문에 소금이 어떤 용도로 사용되는지 알 수 없습니다 .
누구든지 이것을 비출 수있는 빛에 감사드립니다.
편집 : 도움을 주셔서 감사합니다. 내가 이해하는 것을 요약하면 솔트는 해시 된 암호를보다 복잡하게 만들어 사전 계산 된 레인보우 테이블에 존재하지 않을 가능성을 줄입니다. 내가 전에 오해했던 것은 무지개 테이블이 모든 해시에 존재한다고 가정하고 있다는 것입니다.