- 기본 인증은 편리하고 유연하지만, 전혀 안전하지 않음.
- 메세지를 위조하지 못하게 보호하려는 어떠한 시도도 하지 않음.
- 다이제스트 인증은 기본 인증과 호환되는 더 안전한 대체재로서 개발됨.
- 다이제스트 인증은 널리 쓰이지는 않지만, 그 개념은 보안 트랜잭션을 구현하고자 하는 이들에게 여전히 유용함.
특징 및 동작 원리
- 특징
- 비밀번호를 네트워크를 통해 평문으로 전송하지 않음.
- 인증 체결을 가로채 재현하려는 악의적인 사람들을 차단함.
- 메시지 내용 위조를 막는 것도 가능.
- 그 외 여러 형태의 공격을 막음.
- 공인인증서 등에 쓰이는 공개키 기반 메커니즘과 비교해 그다지 안전한 프로토콜은 아님.
- 요청과 응답의 나머지 부분은 다른 누군가가 엿보는 게 가능함. 그래도 CRAM-MD5 등 다른 보안 체계들보다는 강력함.
SSL을 이용한 암호화된 HTTP의 인기와 폭넓은 채택을 고려할 때, 다이제스트 인증의 필요성에 대한 논란이 계속됨.
- 다이제스트 인증이 동작하는 방법 (실제보다 간략히 표현함).
- 서버에 비밀번호를 보내는 대신, 비밀번호를 비가역적으로 뒤섞은 지문(fingerprint) 혹은 요약(digest)를 보냄.
- 비밀번호는 네트워크에 전송되지 않음.

- 클라가 보호된 문서를 요구함.
- 서버는 클라가 비밀번호를 알고 있음을 증명하여 신원을 증명하기 전까지 문서 제공을 거부. 클라에게 사용자 이름과 요약된 형태의 비밀번호를 요구.
- 클라는 비밀번호의 요약을 전달하여 신원 증명. 서버는 모든 사용자의 비밀번호를 알고 있음. 클라가 제공한 요약과 서버가 스스로 계산한 요약이 일치하는지 비교하여 인증.
- 서버는 클라가 제공한 요약과 계산한 요약을 비교하여 일치하면 문서를 제공함.
단방향 요약
- 요약은 단방향 함수로 동작함.
- 가능한 무한 가지의 입력 값들을 유한한 범위의 압축으로 변환함. 두 개의 서로 다른 입력이 같은 다이제스트로 변환하는 충돌(collision)이 발생하기도 함(아주 희박).
- 인기 있는 요약 함수 중 하나인 MD5(
Message Digest #5
)는 임의의 바이트 배열을 원래 길이와 상관 없이 128비트 요약으로 변환. 128비트는 종종 32글자의 16진수 문자로 표현됨.

- 비밀번호 혹은 요약 둘중 하나만 가져도 나머지를 추측하기 쉽지 않음.
- 요약 함수는 보통
암호 체크섬(cryptographic checksums)
로 불리고, 단방향 해시 함수이거나 지문함수(fingerprint function)임.
재전송 방지를 위한 난스(nonce) 사용
- 불투명 비밀번호 자체로는 가로채서 서버로 몇 번이고 재전송할 수 있으므로 안전하지 않음.
- 재전송 공격을 방지하기 위해, 서버는 난스를 건네줆. 난스는 자주 바뀜.
- 난스를 비밀번호에 섞으면 난스가 바뀔때 마다 요약도 바뀌게 됨. 따라서 비밀번호 요약이 특정한 난스 값에 대해서만 유효하게 만듦.
- 자잘한 재전송 공격들이 난스를 쓰지 않는 다이제스트 인증을 기본 인증만큼 허약한 것으로 만듦.
- 난스는 WWW-Authenticate 인증 요구에 담겨 서버에서 클라로 넘겨짐.
다이제스트 인증 핸드셰이크

- 서버는 난스 값 계산.
- 서버는 난스를 WWW-Authenticate 인증 요구 메시지에 담아 지원하는 알고리즘 목록과 함께 클라에 전송.
- 클라는 알고리즘 선택, 비밀번호와 그 외 데이터에 대한 요약 계산.
- Authorization 메시지에 요약을 담아 서버에 돌려줆.
- 클라이언트 난스를 보내 서버가 인증하게 할 수 있음.
- 서버는 요약, 선택한 알고리즘, 그 외 보조 데이터들을 받아 클라이언트가 했던 그대로 요약을 계산함.
- 계산한 요약과 클라이언트의 요약이 같은지 확인.
- 클라가 대칭적으로 서버에게 클라이언트 난스를 갖고 인증을 요구하면, 클라 요약이 만들어짐.
- 서버는 클라이언트가 다음번 요약을 생성할 수 있도록 다음번 난스를 미리 계산해 클라에게 넘겨줄 수도 있음.

다이제스트 인증의 내부 동작에 대해 좀 더 면밀히 살펴보자.
요약 계산
…