Slappasswd 출력 무작위


10

slappasswd고정 해시를 생성 할 것으로 예상 했지만 동일한 입력 암호에 대해 동일한 출력을 얻지 못하므로 출력이 무작위로 표시됩니다.

$ slappasswd -s secret
{SSHA}mCXsPZkfgQYZr2mKHpy5Iav+2S2XlVU3
$ slappasswd -s secret
{SSHA}62oXsalJBuopYfHhi6hGp6AESuWNIVnd
$ slappasswd -s secret
{SSHA}0Ulc8+ugMi3NbTtWnclOFW1LKCqRdsT8

인증 중에 slapd 는 처음에 정의 된 비밀번호와 일치하도록 제공된 비밀번호의 해시를 동일한 방식으로 무작위 화하는 방법을 어떻게 알 수 있습니까?

답변:


8

여기서 사지로 나가지 만 slappasswd가 일반 해시 대신 소금에 절인 해시를 사용한다고 가정합니다. 이것은 암호에 임의의 접두사를 추가하고 slappasswd 출력에 표시되는 문자열의 일부로 임의의 접두사를 저장한다는 것을 의미합니다. 암호를 입력하면 접두사가 추가되고 결과가 해시되어 slappasswd 출력의 문자열과 비교됩니다. 일치하면, 당신은에 있습니다. 그렇지 않으면, 당신은 암호가 잘못되었습니다 :)


3
과연. 특히, 기본 해시 방법 slappasswd은 {SSHA} 또는 솔트 버전 SHA-1입니다.
justarobert

동의하지만 내 질문은 남아 있습니다. 소금이 해시의 일부로 끝나면 해시 된 암호에서 소금을 추출 할 수 없다는 것을 의미합니다. 따라서 slapd는 암호 확인시 어떤 소금을 추가해야하는지 어떻게 알 수 있습니까? (해시 된 암호가 동일하려면 동일한 소금을 추가해야합니다).
Max

3
@user : 이후 부분 {SSHA}에는 솔트와 해시 가 모두 포함 됩니다.
user1686

8

SSHA는 소금에 절인 SHA-1입니다. 기본적으로 마지막 4 바이트가 소금입니다. slappasswd의 출력은

'{<Hash Method>}<base64 converted hash and salt>'

따라서 일반 텍스트 비밀번호가 소금에 절인 SHA와 같은지 테스트하려면 다음을 수행해야합니다.

  1. 예를 들어 sed로 해시 메소드 지정자를 제거하십시오.
  2. base64 문자열을 디코딩
  3. 마지막 4 바이트를 추출하면 소금입니다
  4. 소금을 평문 암호에 연결하십시오
  5. 해시
  6. 비교

base64로 디코딩 된 문자열에는 이진 형식의 해시가 포함되어 있으며 인쇄 할 수 없으므로 od를 사용하여 16 진수로 변환합니다. 처음 3 단계는 다음 코드에 의해 수행됩니다.

#!/bin/bash
output=$(slappasswd -h {SSHA} -s password)
hashsalt=$( echo -n $output | sed 's/{SSHA}//' | base64 -d)
salt=${hashsalt:(-1),(-4)}
echo $output
echo $(echo -n $hashsalt | od -A n -t x1)
echo "Salt: $salt"

출력은 다음과 같습니다.

{SSHA}fDu0PgKDn1Di9W1HMINpPXRqQ9jTYjuH

7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8 d3 62 3b 87
<------------------------- Hash --------------------------> <-- Salt-->

Salt: ▒b;▒

이제 우리는 소금을 일반 텍스트 암호에 연결하고 이번에는 소금을 뿌리지 않고 해시해야합니다! 내가 가진 문제는 소금이 실제로 인쇄 할 수없는 문자를 포함한 모든 문자가 될 수 있다는 것을 이해하고있었습니다. 인쇄 할 수없는 이러한 문자를 연결하기 위해 printf 및 16 진수 표현을 사용합니다.

slappasswd -h {SHA} -s $(printf 'password\xd3\x62\x3b\x87') | sed 's/{SHA}//' | base64 -d | od -A n -t x1

출력은 다음과 같습니다.

7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8

위의 해시와 같습니다. 이제 'password'가 소금에 절인 SHA와 일치하는지 확인했습니다.

감사와 추가 읽기 : http://cpansearch.perl.org/src/GSHANK/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.