2 패스워드
1) 안전성
(1) 안전한 패스워드
- 기억하기 쉽고 크랙하기 어려워야 함
(2) 안전한 해시함수
- 해시 함수: MD5, SHA-1, SHA-256
- 해시함수H(입력 데이터X) = 출력 데이터M
- One-way: H-1(M)=x을 찾는 것은 산술적으로 가능하지 않음 | 역으로 연산하기 어려운 성질
- H(P)만 가지고 있어도 H(p)를 보고 P와 p가 다름을 알 수 있음
- Weak collision resistance: 출력과 y만 주어질 때
- Strong collision resistance: 출력만 주어질 때
2) 패스워드 보호 방법
(1) 패스워드 보호
- 암호화 키 보관방법: 난독화, 별도의 하드웨어에 보관
- 암호화 함수E( 평문 P ) = 암호문 C
- 평문 패스워드 자체를 보관하면 안됨 → 해시/암호화된 패스워드를 보관해야 함
- Salt를 사용해서 패스워드 해시 또는 암호화의 안전성을 향상시킴
- /etc/passwd: 사용자 이름, 사용자/그룹 ID, 홈 디렉토리, 쉘
- /etc/shadow: 해시된 또는 암호화된 패스워드
(2) Salt
- 난수를 사용해 생성
- salt + password를 암호화 하거나 해시 > 평문 자체를 암호화하지 않도록 함
- salt를 앞/뒤가 아닌 중간에 넣는 결합 방식 등등 > 관리자 지정
2) 패스워드 크래킹
(1) 무차별 대입 공격
- 패스워드 일부분이 될 수 있는 모든 조합을 대입해 크랙
- 효율성은 낮고 공격 비용 낮음
(2) 사전 공격
- 가정: 많은 사용자가 특정 단어/패턴 사용해 패스워드 설정
- 자주 사용되는 사전 단어/패턴으로 크랙
(3) 레인보우 테이블 공격
- 패스워드와 해시들의 체인들로 구성된 레인보우 테이블 이용해서 크랙
- R 함수 출력값 = MD5 해시값의 처음 6자리 수
- 효율성 높고 공격 비용 높음
(3) 레인보우 테이블 공격 예시
- 초기 패스워드 후보1 (234342) / 후보2 (346343)
- R 함수를 거쳐서 나온 값의 수행결과 중 앞 6자리가 다시 후보군이 됨
- 레인보우 테이블 생성
- 레인보우 테이블을 이용한 크랙
1) 크랙할 대상이 되는 암호화된 패스워드 값(/etc/shadow파일에 들어있음)이 테이블에 있는지 확인
2) 없을 경우 최초 6자리 숫자를 패스워드 후보군에 올림
3) MD5 함수를 적용해 다시 레인보우 테이블에서 찾기 → Chain 형성 과정
4) 매칭된 수에 대응되는 패스워드 값을 찾음
3) John the Ripper 패스워드 크래커
(1) john the Ripper 프로그램 컴파일
(2) 패스워드 크랙 (Hash 값을 알아낸 것 / One-Way성질 깬것 아님) > 사전의 Hash와 매칭해서 같은것 찾아냄
(3) john.pot 파일에 크랙킹 결과가 담겨있음