sha-516 해시 비밀번호 문자열을 테스트하기 위해 다음 쉘 스크립트를 작성했습니다.
myhash='$6$nxIRLUXhRQlj$t29nGt1moX3KcuFZmRwUjdiS9pcLWpqKhAY0Y0bp2pqs3fPrnVAXKKbLfyZcvkkcwcbr2Abc8sBZBXI9UaguU.' #Which is created by mkpasswd for test
i=0
while [[ 1 -eq 1 ]]
do
testpass=$(mkpasswd -m sha-512 "test")
i=$[ $i + 1 ]
if [[ "$testpass" == "$myhash" ]];
then
echo -e "found\n"
break
else
echo -e "$myhash /= $testpass :-> $i Testing....\n"
fi
done
달리고 난 후216107숫자 루프 테스트 일치하는 항목을 찾지 못했습니다. 하지만 내 Linux OS(Ubuntu) 시스템에서는 로그인 자격 증명을 매우 빠르게 일치시킬 수 있습니다. 내 질문은 왜 그렇게 빨리 동일한 결과를 얻을 수 없는가입니다.
답변1
비밀번호 해시(입력 시 myhash
)에는 어떤 해시 함수가 사용되었는지, 어떤 매개변수(예: 비용, 염분, 해시 함수 출력)가 사용되었는지를 나타내는 일부 메타데이터가 포함되어 있습니다. 최신 Unix 비밀번호 해시 형식에서는 부분이 다음으로 구분됩니다 $
.
6
표현하다Unix 반복 SHA-512 방법(비슷하지만 동일하지 않은 디자인PBKDF2).- 매개변수가 없으므로 비용 요소가 기본값입니다.
nxIRLUXhRQlj
소금이에요.t29nGt1moX3KcuFZmRwUjdiS9pcLWpqKhAY0Y0bp2pqs3fPrnVAXKKbLfyZcvkkcwcbr2Abc8sBZBXI9UaguU.
예상되는 출력입니다.
실행될 때마다 mkpasswd -m sha-512
임의의 솔트를 사용하여 비밀번호 해시를 생성합니다. 따라서 이 명령을 실행하면 매번 다른 출력이 생성됩니다.
비밀번호를 입력하면 시스템이 계산하여 iterated_sha512(default_cost, "nxIRLUXhRQlj", typed_password)
출력이 되는지 확인합니다 "t29nGt1moX3KcuFZmRwUjdiS9pcLWpqKhAY0Y0bp2pqs3fPrnVAXKKbLfyZcvkkcwcbr2Abc8sBZBXI9UaguU."
.
프로그램이 수행하는 작업은 다릅니다. 임의의 솔트를 생성한 다음 이를 암호화 해시 함수의 출력과 비교합니다 myhash
. 이것은 무시할 수 있는 확률로 동일한 솔트를 생성하는 경우에만 일치합니다(컴퓨터는 평생 동안 동일한 솔트를 두 번 생성하지 않습니다). 하지만 염분을 추측할 필요는 없습니다. 염분은 바로 비밀번호 해시에 있습니다.
답변2
mkpasswd
또한 요청소금그렇지 않으면 실행할 때마다 하나가 생성됩니다. 다음을 사용하여 원시 문자열을 분해하면$구분 기호로 표시됩니다.해싱 6그리고 nxIRLUXhRQlj
소금.
달리는 동안 소금을 추가하면 mkpasswd
처음에 올바른 결과를 얻을 수 있습니다.
$ mkpasswd -m sha-512 "test" "nxIRLUXhRQlj"
$6$nxIRLUXhRQlj$t29nGt1moX3KcuFZmRwUjdiS9pcLWpqKhAY0Y0bp2pqs3fPrnVAXKKbLfyZcvkkcwcbr2Abc8sBZBXI9UaguU.
사용하다소금예방하다레인보우 테이블 공격비밀번호를 해시하기 전에 비밀번호에 임의의 부분을 추가하기 때문입니다.