- 리눅스에서는 사용자의 정보를 /etc/passwd 파일에 보관합니다.
- passwd파일의 수정은 불가하지만 누구나 볼 수 있습니다.
- 과거에는 패스워드 정보도 함께 포함되었지만, 보안상의 이유로 /etc/shadow 파일에 별도 보관됩니다.
- shadow파일은 root만 읽을 수 있도록 설정되어 있습니다. (퍼미션 400)
- shadow에 저장되는 패스워드는 단방향 해시함수에 의하여 암호화됩니다.
"A > B"는 가능하지만, "B > A"는 어렵습니다.
- 패스워드는 임의의 값(salt)과 추가 연산되어 보안을 강화하여 저장됩니다.
shadow의 구조
- 9개 항목으로 구성되며, 각 항목은 콜론(:)으로 구분됩니다.
1. Login Name: 사용자 계정
2. Encrypted: 패스워드를 암호화시킨 값 (다시 3개의 항목으로 나뉘며, "$"로 구분됩니다.)
3. Last Changed: 1970년부터 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산
4. Minimum: 패스워드가 변경되기 전 최소사용기간 (일)
5. Maximum: 패스워드 변경 전 최대사용기간 (일)
6. Warn: 패스워드 만기일 전 경고 메시지 제공 기간
7. Inactive: 로그인 접속 차단(패스워드 파기/비활성화) 기간
8. Expire: 로그인 사용을 금지하는 계정 만료 기간 (월/일/연도)
9. Reserved: 사용되지 않음 (예약필드)
**암호화된 패스워드는 다음의 구조로 저장됩니다.
[$Hashid $Salt $Hash vlaue]
Hashid
- 어떤 "scheme"을 사용했는지 표시합니다.]
- 사용한 scheme에 따라 값이 달라지며, 주로 $1, $5, $6이 사용됩니다.
Salt
- 해시함수의 특성상 해시 값으로 원래 값을 구할 수 없습니다.
- 공격자들은 모든 해시 쌍을 미리 구해놓은 "레인보우테이블"을 사용하여 크래킹을 시도합니다.
- 이를 통해 값을 대입하여 고속으로 패스워드를 크랙할 수 있습니다.
- 레인보우 테이블의 사용을 방해하기 위하여 "salt" 값을 넣습니다.
- salt는 해시 함수가 참고하는 임의의 값입니다.
- salt값을 모른다면 레인보우테이블을 가지고 있어도 의미가 없습니다.
Hash value
- hashid의 방법과 salt값을 가지고 해시함수를 수행한 결과입니다.
참고자료
댓글 없음:
댓글 쓰기