다이제스트 인증의 개선점
기본 인증의 가장 심각한 결함을 수정한 또 다른 HTTP 인증 프로토콜.
특징
- 비밀번호를 네트워크를 통해 평문으로 전송하지 않음.
- 인증 체결을 가로채 재현하려는 악의적인 사람들을 차단함.
- 메시지 내용 위조를 막는 것도 가능.
- 여러 형태의 공격을 막음.
공개키 기반 메커니즘과 비교해 그다지 안전한 프로토콜은 아님
- 요청과 응답의 나머지 부분은 다른 누군가가 엿보는 게 가능함.
- CRAM-MD5 등 다른 보안 체계들보다는 강력함.
-
비밀번호를 안전하게 지키기 위해 요약 사용하기
- 서버에 비밀번호를 보내는 대신, 비밀번호를 비가역적으로 뒤섞은 지문(fingerprint) 혹은 요약(digest)를 보냄.
- 서버는 클라가 보낸 요약이 비밀번호에 알맞게 대응하는지 검사할 수 있음.
- 요약만 주어지면, 모든 비밀번호를 하나씩 시도해보지 않고선 알아내기 어려움.
간단한 동작 원리
- 클라이언트는 보호된 문서 요구.
- 서버는 클라이언트가 비밀번호를 알고 있음을 증명하며 신원을 증명하기 전까지 문서 제공 x.
- 클라이언트는 비밀번호의 요약을 전달하여 신원 증명.
- 서버는 클라이언트가 제공한 요약과 계산한 요약을 비교하여 일치하면 문서를 제공.
-
단방향 요약
- 요약은 단방향 함수로 동작함.
- 가능한 무한 가지의 입력 값들을 유한한 범위의 압축으로 변환함(충돌 가능하긴 함)
- 비밀번호 혹은 요약 둘중 하나만 가진다면 나머지를 추측하기 쉽지 않음. (둘 다 가져야함)
-
재전송 방지를 위한 난스(nonce) 사용
- 불투명 비밀번호 자체로는 가로체서 서버로 몇 번이고 재전송 할 수 있으므로 안전하지 않다.
- 재전송 공격을 방지하기 위해, 서버는 난스를 건내줌. (대략 1밀리초마다, 혹은 인증시마다 바뀜)
- 난스를 비밀번호에 섞으면 난스가 바뀔때마다 요약도 바뀌게 됨. 따라서 비밀번호 요약이 특정한 난스 값에 대해서만 유효함.
- 자잘한 재전송 공격들이 난스를 쓰지 않는 다이제스트 인증을 기본 인증만큼 허약한 것으로 만듬.
-
다이제스트 인증 핸드셰이크
- 서버는 난스 값 계산.
- 서버는 난스를 WWW-Authenticate 인증 요구 메시지에 담아 지원하는 알고리즘 목록과 함께 클라이언트에 전송
- 클라이언트는 알고리즘을 선택, 비밀번호와 그 외 데이터에 대한 요약 계산
- Authorization 메시지에 요약을 담아 서버에 돌려줌.
- 클라이언트 난스를 보내 서버가 인증하게 함.
- 서버는 요약, 선택한 알고리즘, 그 외 보조 데이터들을 받아 클라이언트가 했던 그대로 요약을 계산함.
- 계산한 요약과 클라이언트 요약이 같은지 확인.
요약 계산
<aside>
💡 다이제스트 인증의 핵심은 공개된 정보, 비밀 정보, 시한부 난스 값을 조합한 단방향 요약이다.
</aside>