ghkdtlwns987
[암호학] 유닉스 패스워드 크래킹 본문
Unix 나 Linux 는 기본적으로 사용자의 password 를 MD5, SHA256, SHA512 해시값으로 변경하여 관리하고 있다.
원리는 다음과 같다.
blossom 이라는 아이디를 가진 사용자의 password 가 '1234' 라고 한다면, '1234' 에 대한
MD5 해시값을 이용한다.
근데 여기서 오류가 발생할 수 있다.
blossom1 의 password 가 '1234' 이고, blossom2 의 password 가 같다면?
서로 같은 MD5 해시값을 가지게 된다.
이러한 에러를 방지하기 위해 Unix/Linux 시스템에서는 'salt' 라 부르는 임의의 값을 원래 password 에 추가한 후
MD5 해시를 구성하는 방식을 사용한다.
예를들어 blossom1 의 password 가 '1234' 라고 한다면
salt 값으로 AA 를 추가해 blossom1 의 password 는 'AA1234' 가 될 것이다.
그리고 'AA1234' 를 MD5 해시값으로 만들어준다.
이러한 방식으로 MD5, SHA256, SHA512 을 활용하는데,
이를 활용하는 경우 salt 의 길이와 password hash 의 길이는 달라진다.
hash function | salt_len | identifier |
MD5 | 2byte | $1$ |
SHA256 | 16byte | $5$ |
SHA512 | 16byte | $6$ |
실제로 /etc/passwd 파일을 보면
다음과 같이 많은 인증에 필요한 정보를 저장한다.
암호는 /etc/shadow 에 저장이 되어있다.
막 요런식으로...
내 Ubuntu 버젼은 나름 최신버젼이라 암호 해시값이 들어있어야 할 공간에 * 로 가려놨다.
예전엔 이랬다고 한다.
root : $1$a3gSE1RAj6522:14923: 0 : 99999 : 7 : : :
samsjang:$1$zfti6chVSQLlQ:14945: 0: 99999: 7: : :
좀 이전의 리눅스 버젼이라면 $6$E3Kekad..... 와 같은 형식으로 저장이 되어 있는데,
만약 맨 처음이 $6$ 이라면 SHA512, $5$ 라면 SHA256, $1$ 이라면 MD5 해시값을 저장한다고 볼 수 있다.
만약 악의저긴 해커가 어떤 해시 알고리즘을 사용하는지 파악하고, 이를 복호화하게 된다면 서버 관리자는
특정한 공격없이 해커에게 root 암호를 내어주게 될 것이다.