13. 다이제스트 인증
- 기본 인증은 편리하고 유연하지만 전혀 안전하지 않습니다.
- 다이제스트 인증은 기본 인증과 호환되는 더 안전한 대체재로서 개발되었습니다.
#
13.1 다이제스트 인증의 개선점다이제스트 인증의 특징은 다음과 같습니다.
- 비밀번호를 절대로 네트워크를 통해 평문으로 전송하지 않습니다.
- 인증 체결을 가로채서 재현하려는 악의적인 사람들을 차단합니다.
- 구현하기에 따라서 메시지 내용 위조를 막는 것도 가능합니다.
- 그 외 몇몇 잘 알려진 형태의 공격을 막습니다.
다이제스트 인증이 가장 안전한 프로토콜이 아니며, 그러한 요구사항들에는 전송 계층 보안(TLS) 와 HTTPS가 더 적합한 프로토콜입니다.
다이제스트 인증은 기본 인증을 대체하기 위해 설계되었으며 LDAP, POP, IMAP 등보다 더 강력합니다. 다만, 다이제스트 인증은 널리 쓰이고 있지 않습니다.
#
비밀번호를 안전하게 지키기 위해 요약 사용하기- 다이제스트 인증의 좌우명은 "절대로 비밀번호를 네트워크를 통해 보내지 않는다"입니다.
- 비밀번호 대신 클라이언트는 비밀번호를 비가역적으로 뒤섞은 지문 혹은 요약(digest)를 보냅니다.
다이제스트 인증은 다음의 순으로 진행합니다.
#
단방향 요약- 요약은 '정보 본문의 압축' 입니다.
- 요약은 단방향 함수로 동작하고, 일반적으로 입력 가능한 무한 가지의 모든 입력값들을 유한한 범위의 압축으로 변환합니다.
- 요약 함수는 보통 암호 체크섬(cryptographic checksums)으로 불리며, 단방향 해시함수이거나 지문 함수(fingerprint function) 입니다.
#
재전송 방지를 위한 난스(nonce) 사용- 단방향 요약은 비밀번호를 그대로 전송할 필요없이 요약을 보내주고, 쉽게 해독할 수 없음을 보장받기만 하면 됩니다.
- 그러나 악당이 요약을 가로쳐서 서버로 몇번이고 재전송할 수 있기 때문에 요약도 비밀번호 자체와 다름이 없습니다.
- 이러한 재전송 공격을 방지하기 위해서 서버는 클라이언트에게 난스라고 불리는 특별한, 그리고 자주 바뀌는 증표를 건네줍니다.
- 다이제스트 인증은 난스를 사용할 것을 요구합니다.
- 난스는
WWW-Authenticate
인증요구에 담겨서 서버에서 클라이언트로 넘겨집니다.
- 난스는
#
다이제스트 인증 핸드세이크- HTTP 다이제스트 인증 프로토콜은 기본 인증에서 사용하는 것과 비슷한 헤더를 사용하는 강화된 버전의 인증입니다.
- 기존 헤더에 몇몇 새 옵션이 추가되었고, 선택적인 헤더인
Authorization-Info
가 추가되었습니다.