/etc/shadow의 해시는 어떻게 생성되나요?

/etc/shadow의 해시는 어떻게 생성되나요?

나는 읽고 있었다위키피디아 기사섀도우 파일에서 줄의 형식이 다음과 같다고 언급했습니다.

$id$salt$hashed

그래서 제 질문은 이것이 어떻게 작동하는가입니다.

비밀번호가 있는 내 계정의 해시를 계산하려고 했기 때문에 다음 명령을 사용했습니다.

sha512sum {salt}+{my_clear_text_password}

그러나 출력은 내가 직접 보는 해시와 다릅니다. 그럼 어떻게 작동하나요? 내가 무엇을 놓치고 있나요?

답변1

고려해야 할 몇 가지 사항(확인하려면 Linux coreutils 및 glibc2의 소스를 읽어야 함)

  • sha512sum의 출력은 인쇄 가능한 16진수 표기법으로 나타나는 반면 섀도우 파일에 저장된 출력은 base64로 나타나므로 서로 다릅니다.

  • 섀도우 파일의 sha512sum은 해시 함수를 두 번 이상( #define ROUNDS_DEFAULT 5000) 통과한 반면 sha512sum은 해시를 통해 '파일'을 한 번만 전달한 것 같습니다.

  • 데이터를 정렬하기 위해 하나 또는 두 명령 모두에 의해 패딩이 추가될 수 있으며 다를 수 있습니다.

답변2

파일이 저장하는 것과 동일한 방식으로 해시를 생성하려면 /etc/shadow다음 명령을 사용하십시오.

mkpasswd --method=sha-512 --salt=YOUR_SALT PASSWORD

답변3

로부터shadow(5)맨페이지:

암호화된 비밀번호

인용하다토굴(3) 이 문자열이 어떻게 해석되는지 자세히 알아보세요.

비밀번호 필드에 유효한 결과가 아닌 일부 문자열이 포함된 경우토굴(3) 예를 들어! 또는 *를 사용하면 사용자는 unix 비밀번호를 사용하여 로그인할 수 없습니다(그러나 사용자는 다른 방법으로 시스템에 로그인할 수 있습니다).

이 필드는 비어 있을 수 있으며, 이 경우 지정된 로그인 이름으로 인증하는 데 비밀번호가 필요하지 않습니다. 그러나 /etc/shadow 파일을 읽는 일부 응용 프로그램은 비밀번호 필드가 비어 있으면 액세스를 전혀 허용하지 않기로 결정할 수 있습니다.

느낌표로 시작하는 비밀번호 필드는 비밀번호가 잠겨 있음을 의미합니다. 줄의 나머지 문자는 비밀번호가 잠기기 전의 비밀번호 필드를 나타냅니다.

로부터crypt(3)맨페이지:

crypt()는 비밀번호 암호화 기능입니다. 이는 키 검색의 하드웨어 구현 사용을 방지하기 위해 변형된 데이터 암호화 표준 알고리즘을 기반으로 합니다.

key는 사용자가 입력한 비밀번호입니다.

salt는 [a–zA–Z0–9./] 집합에서 선택한 두 문자 문자열입니다. 이 문자열은 4096가지 방법 중 하나로 알고리즘을 교란하는 데 사용됩니다.

키의 처음 8개 문자 중 가장 낮은 7비트를 취하여 56비트 키를 얻습니다. 이 56비트 키는 상수 문자열(일반적으로 모두 0으로 구성된 문자열)을 반복적으로 암호화하는 데 사용됩니다. 반환된 값은 인쇄 가능한 일련의 13개 ASCII 문자(처음 두 문자는 솔트 자체를 나타냄)인 암호화된 비밀번호를 가리킵니다. 반환 값은 호출할 때마다 내용을 덮어쓰는 정적 데이터를 가리킵니다.

관련 정보