내 Linux 운영 체제는 어떻게 그렇게 빠른 로그인 프로세스를 달성합니까?

내 Linux 운영 체제는 어떻게 그렇게 빠른 로그인 프로세스를 달성합니까?

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.

사용하다소금예방하다레인보우 테이블 공격비밀번호를 해시하기 전에 비밀번호에 임의의 부분을 추가하기 때문입니다.

관련 정보