바뀜

둘러보기로 가기 검색하러 가기
6,973 바이트 추가됨 ,  2018년 6월 9일 (토) 22:07
내용 추가(/etc/shadow에 대하여)
[[File:8-5_(Debian10_install)_Repeat-user_pw.png]]
 
 
=== /etc/shadow에 대하여<ref>(2005, August 8) Linux Programmer's Manual(crypt(3) man page)</ref> ===
 
아래 실행 결과에서 root와 westporch 계정의 비밀번호가 'x'라는 뜻이 아닙니다. 두 번째 필드의 'x'는 crypt 함수를 이용해서 얻은 ‘해시 값’이 섀도 파일(/etc/shadow)의 두 번재 필드에 위치한다는 것을 의미합니다. 암호화된 데이터가 아니라는 것임에 주의해야 합니다.
 
<pre>
root@debian-buster:~# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
</pre>
 
<pre>
root@debian-buster:~# cat /etc/passwd | grep westporch
westporch:x:1000:1000:westporch,,,:/home/westporch:/bin/bash
</pre>
 
crypt 함수는 내부적으로 해시 알고리즘(MD5, SHA-256, SHA-512)을 사용합니다. 물론 crypt 함수는 대칭 키 암호 알고리즘 중의 하나인 DES(Data Encryption Standard)도 지원합니다. 하지만 DES는 키 길이(56비트)가 짧기 때문에 DES를 사용하는 것은 안전하지 않습니다. 2^56의 경우의 수는 금방 뚫립니다. 따라서 DES는 절대로 사용하면 안됩니다. 암호 알고리즘이라고 모두 안전한 것은 아닙니다.
 
RSA사가 주관한 DES의 키 찾아내기 콘테스트(DES Challenge)에서 1997년의 DES Challenge Ⅰ에서는 96일, 1998년의 DES Challenge Ⅱ-2에서는 56시간, 1999년의 DES Challenge Ⅲ에서는 22시간 15분 만에 DES 키가 깨졌습니다. <ref>이재광, 전태일, 조재신(역) (2013). 알기 쉬운 정보보호개론 흥미로운 암호 기술의 세계 (2판). 히로시 유키의 INFORMATION SECURITY and CRYPTOGRAPHY. 서울: 인피니티북스. P95.</ref>
 
DES는 1977년에 미국의 연방정보처리표준규격(FIPS: Federal Information Processing Standard)으로 채택<ref>이재광, 전태일, 조재신(역) (2013). 알기 쉬운 정보보호개론 흥미로운 암호 기술의 세계 (2판). 히로시 유키의 INFORMATION SECURITY and CRYPTOGRAPHY. 서울: 인피니티북스. P95.</ref>되었습니다. 하지만 2005년에 DES는 FIPS에서 제외되었습니다. <ref>https://web.mit.edu/kerberos/krb4-end-of-life.html</ref>
 
이뿐만 아니라 인증성을 제공하는 커버로스(Kerberos) 버전 4에서도 그동안 DES를 사용했지만 커버로스를 개발한 MIT(Massachusetts Institute of Technology)에서도 커버로스 버전 5로 마이그레이션 할 것을 권고하고 있습니다. 왜냐하면 커버로스 버전 5는 커버로스 버전 4에서 제공하던 DES보다 향상된 암호화 기능을 제공하기 때문입니다.<ref>https://web.mit.edu/kerberos/krb4-end-of-life.html</ref>
 
또한 crypt 함수는 DES의 약점을 보완하기 위해서 glibc2에서는 대칭키 암호 알고리즘인 blowfish와 해시 알고리즘인 MD5, SHA-256, SHA-512를 지원합니다.
 
해시 함수는 일방항성(one-way)을 갖기 때문에 섀도 파일의 두 번재 필드에 저장된 해시 값은 절대로 알아낼 수 없습니다. 따라서 정확히 말하면 섀도 파일의 두 번째 필드에 저장된 값은 ‘암호화’된 것이 아닙니다. 왜냐하면 해시 값은 ‘복호화’해서 원래의 메시지(평문)를 얻을 수 없기 때문입니다. <ref>이재광, 전태일, 조재신(역) (2013). 알기 쉬운 정보보호개론 흥미로운 암호 기술의 세계 (2판). 히로시 유키의 INFORMATION SECURITY and CRYPTOGRAPHY. 서울: 인피니티북스. P222.</ref>
 
그동안 ‘암호화’된 데이터가 섀도 파일에 저장된다고 알았다면 잘못 알고 있는 것입니다. 앞에서 설명한 것처럼 섀도 파일의 두 번째 필드에는 암호화된 데이터가 아닌 ‘해시 값’이 저장됩니다. (단, crypt 함수를 사용해서 대칭키 암호 알고리즘인 blowfish를 사용했을 경우에는 암호화가 맞습니다. 왜냐하면 대칭 키를 사용하여 암호화와 복호화가 가능하기 때문입니다. 하지만 blowfish는 일부 리눅스 배포판에서만 지원합니다. 적어도 데비안에서는 섀도 파일의 두 번째 필드에 blowfish가 아닌 해시 알고리즘을 적용합니다.)
 
그렇다면 정말로 해시 값이 저장되는지 살펴볼까요? 아래와 같이 섀도 파일에서 westporch라는 계정에 대한 두 번째 필드를 살펴보겠습니다.
<pre>
root@debian-buster:~# cat /etc/shadow | grep westporch
westporch:$6$pFB/iNmg$3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1:17691:0:99999:7:::
</pre>
 
섀도 파일의 두 번째 필드($6$pFB/iNmg$3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1)는 $id$salt$encrypted와 같은 형태로 구성되어 있습니다.
 
id가 6인 것은 SHA-512라는 해시 알고리즘을 사용했다는 것을 의미합니다. 512는 해시 값의 크기가 512비트(2^512) 라는 것을 의미합니다. 즉 $6$salt$encrypted 이라는 것은 SHA-512로 인코딩 되었음을 의미합니다. 참고로 $5$salt$encrypted는 SHA-256으로 인코딩된 것 입니다.
 
salt는 pFB/iNmg입니다.
86개의 문자로 구성된 Encrypted는 3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1입니다. 파이썬(python)의 len 함수를 이용하면 86개의 문자임을 쉽게 확인할 수 있습니다.
 
<syntaxhighlight lang="python">
root@debian-buster:~# python3
Python 3.6.5 (default, May 11 2018, 13:30:17)
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> str='3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1'
>>> len(str)
86
>>>
</syntaxhighlight>
 
해시 값($6$pFB/iNmg$3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1)에 대한 원래 메시지(평문)를 역산(逆算)을 통해 알아 낼 수 없다면, 도대체 이 해시 값에 대한 비밀번호는 어떻게 알아낼까요? 이럴 때 사용하는 것 이 레인보 테이블(rainbow table)입니다. 레인보 테이블은 여러 평문들을 해시 값들로 매핑한 일종의 표입니다. 이 표에서 공격 대상의 해시 값과 일치하는 것을 찾아내면 해당 메시지를 알아낼 수 있습니다. 하지만 salt가 추가되었기 때문에 정확한 비밀번호를 알아내려면 salt까지도 알아내야 합니다. 이처럼 salt를 추가함으로써 공격자가 원래의 메시지를 알아내는 것을 지연시킬 수 있습니다. 따라서 비밀번호를 알아내는 데에는 오랜 시간이 걸립니다. 또한 시간이 아주 충분히 많다면 몇 십년이 걸릴지라도 언젠가는 해시 값의 원래 메시지를 알아 낼지도 모릅니다. 하지만 많은 시간을 투자하여 암호를 알아낸 것에 비해 해당 정보(비밀번호)에 대한 가치가 현저히 떨어질 경우에는 비밀번호를 알아내더라도 의미가 없습니다.
== 파티션 설정 ==

둘러보기 메뉴