사전 설정 passwd/user-password-crypted 항목에 어떤 해싱 알고리즘을 사용할 수 있나요?

사전 설정 passwd/user-password-crypted 항목에 어떤 해싱 알고리즘을 사용할 수 있나요?

passwd/user-password-crypted대부분의 예는 프로필의 문과 관련하여 MD5 해시를 사용합니다. 예:

# Normal user's password, either in clear text
#d-i passwd/user-password password insecure
#d-i passwd/user-password-again password insecure
# or encrypted using an MD5 hash.
#d-i passwd/user-password-crypted password [MD5 hash]

~에서데비안용 부록 B. 사전 설정을 사용한 자동 설치..

일부 소스에서는 SHA-512도 사용할 수 있음을 나타냅니다.

다음과 같이 해시된 비밀번호를 사용해 보세요.

$ mkpasswd -m sha-512

[...]

그런 다음 프로비저닝 파일에서 다음을 수행합니다.

d-i passwd/user-password-crypted password $6$ONf5M3F1u$bpljc9f1SPy1w4J2br[...]

~에서AskUbuntu에서 프로비저닝을 통해 자동으로 사용자를 생성할 수 없습니다..

이것은 MD5보다 약간 낫지만 여전히 무차별 공격과 레인보우 테이블에 대한 저항력은 그다지 크지 않습니다.

다른 어떤 알고리즘을 사용할 수 있나요? 예를 들어, PBKDF2가 지원됩니까, 아니면 사용된 /etc/shadow알고리즘 에 의해 제한됩니까?MD5, 복어, SHA-256 및 SHA-512?

답변1

/etc/shadow 파일에서 지원되는 모든 것을 사용할 수 있습니다. 구성 파일에 제공된 문자열은 /etc/shadow에 배치됩니다. 솔트된 비밀번호를 더 어렵게 만들려면 mkpasswd에 솔트 옵션(-S)을 사용하세요.

mkpasswd -m sha-512 -S $(pwgen -ns 16 1) mypassword
$6$bLyz7jpb8S8gOpkV$FkQSm9YZt6SaMQM7LPhjJw6DFF7uXW.3HDQO.H/HxB83AnFuOCBRhgCK9EkdjtG0AWduRcnc0fI/39BjmL8Ee1

위 명령에서 salt는 다음과 같이 생성됩니다.보편적인 뿌리.

답변2

해당 섹션 보기데비안 설치 프로그램 소스 코드usermod USER --password=CRYPTED-PASSWORD대상 chroot 내부에서 호출된 것을 볼 수 있습니다 .

Further usermod의 맨페이지에는 이 --password옵션이 "crypt(3)에 의해 반환된 암호화된 비밀번호"를 허용한다고 나와 있습니다. 및 "비밀번호는 로컬 /etc/passwd 또는 /etc/shadow 파일에 기록됩니다." 이는 crypt(3)매뉴얼 페이지에 설명된 암호화된 비밀번호 형식 만 사용할 수 있음을 나타냅니다 .

그러나 모든 희망이 사라지지는 않습니다. 위 매뉴얼 페이지에서 우리는 crypt암호화된 비밀번호 문자열이 실제로 형식의 솔트 필드를 포함한다는 것을 알고 있습니다. 따라서 최소한 원칙적으로는 레인보우 테이블에 저항해야 합니다.$hash_id$salt$hash

레인보우 테이블 공격 외에도 무차별 공격(Brute Force Attack)도 고려해야 합니다. 우리가 보면glibc 구현 crypt 비밀번호 확장을 달성하기 위해 실제로 SHA-512의 여러 라운드를 사용하는 것을 볼 수 있습니다. 이는 완전히 다르지는 않지만 불행히도 PBKDF2와 같은 표준 방법을 사용하지 않습니다.

crypt또한 암호화된 비밀번호에 추가 필드( )를 사용하여 적용되는 해싱 라운드 수를 실제로 제어할 수 있음을 알 수 있습니다 $rounds=$. mkpasswd(1)매뉴얼 페이지를 보면 이것이 -R옵션으로 노출되어 있음을 알 수 있습니다. 이 기능을 사용하면 기본 라운드 수인 5000( ROUNDS_DEFAULT소스 코드 참조)을 크게 늘릴 수 있으며 내 컴퓨터에서는 몇 초가 아닌 몇 밀리초도 채 걸리지 않고 1,000만 라운드까지 계산할 수 있습니다.

> mkpasswd -R 10000000 -m sha-512 mypassword
$6$rounds=10000000$Rq30Hdd.0LzWq3x$XRXHvd5MnIi5MD2H8Jtn5W0cjvq4siGtUgWUaETc4QZyvuR4iY0Af.DoNfj1E6SvoHaVotAEjIiOPS3GvwJjM0

답변3

레인보우 테이블과 무차별 대입은 여기서 관련이 없습니다.

sha-512 비밀번호는 솔트 처리되어 있습니다. 즉, 어떤 해시를 가지고 있든 비밀번호는 솔트(이 경우 ONf5M3F1u)로 시작됩니다. 레인보우 테이블을 생성하려면 "ONf5M3F1u"로 시작하는 모든 입력 가능한 문자열에 대해 sha-512 해시의 전체 목록을 생성해야 합니다.

문자만 추가하고 최하위 비트에서 2비트 해시 값을 생성하는 이론적인 해싱 알고리즘 "CSUM-2"를 사용했다고 가정해 보겠습니다. CSUM-2 레인보우 테이블은 다음과 같습니다.

0 d
1 a
2 b
3 c

두 개의 LSB만 관련되므로 실제로 d, a, b 및 c의 네 가지 솔트가 있습니다.

따라서 비밀번호 "b"의 솔트 처리된 해시 4개를 상상해 보세요. 솔트가 앞에 배치되므로 "db"를 해시하여 "b"를 얻거나 "ab"를 해시하여 "c"를 얻을 수 있습니다.

$-1$d$b
$-1$a$c
$-1$b$d
$-1$c$a

레인보우 테이블을 사용하여 CSUM-2를 크랙하려면 각각 4개의 항목이 있는 4개의 개별 레인보우 테이블이 필요합니다.

위의 9자리 솔트를 사용하여 SHA-512를 해독하려면 62개의 완전한 레인보우 테이블이 필요합니다. 최대 9개의 영숫자 문자를 수용할 수 있을 만큼 큰 sha-512 레인보우 테이블은 864GB입니다. 이 솔팅에는 62개 또는 52TB 테이블이 필요합니다.

2^512는 9자리 비밀번호가 제공할 수 있는 것보다 훨씬 더 많은 숫자입니다. 1.3 x 10^154 해시와 1.35 x 10^19 9자 영숫자 비밀번호가 있습니다. 암호가 길수록 암호 공간이 커지고 항목이 많아지며 테이블도 커집니다. 이는 소금 양의 선형 곱과 소금 길이의 지수 곱입니다.

누군가는 이 모든 테이블을 생성하고 저장해야 합니다.

PBKDF2는 단순히 여러 계산을 수행하지만 PBKDF2의 출력은 항상 동일하므로 다른 알고리즘과 마찬가지로 레인보우 테이블을 사용하여 PBKDF2를 해킹합니다.

PAM은 키 확장을 위해 이 매개변수를 사용할 수도 있습니다 rounds. 기본값은 5,000이고 최소값은 1,000입니다. rounds=65536SHA-512는 로그인을 시도할 때마다 2^16번 실행됩니다. 미리 계산된 레인보우 테이블은 여전히 ​​신경쓰지 않지만 이렇게 하면 무차별 대입 공격이 느려집니다. 위에서 언급했듯이 레인보우 테이블을 만들고 보관하는 것은 매우 어렵습니다.

관련 정보