이 포스트는 “HTTP 완벽가이드”의 “13장, 다이제스트 인증”을 정리한 내용입니다.


  • 기본 인증은 편리하고 유연하지만 안전하지 못함
  • 다이제스트 인증은 기본 인증과 호환되는 대체재로서 개발
  • 널리 쓰이지는 않지만 개념은 보안트랜잭션의 구현에 유용함

#다이제스트 인증의 개선점

특징

  • 비밀번호를 네트워크를 통해 평문으로 전송하지 않음
  • 인증 체결을 가로채서 재현하지 못함
  • 구현 방법에 따라 메시지 내용 위조 방지 가능

단방향 다이제스트

  • 다이제스트(요약)는 단방향 함수로 동작, 무한 가지의 모든 입력값을 유한의 범위로 압축 변환
  • MD5(메시지 다이제스트 #5), SHA(Secure Hash Algorithm)…
  • 요약함수는 보통 cryptographic checksums로 불림, 단반향 해시 함수이거나 fingerprint function임

재전송 방지를 위한 난스 사용

  • 난스(nonce)라 불리는 자주 바뀌는 증표를 발급
  • 다이제스트를 탈취하여 서버로 전송하는 해킹을 막기위한 방법
  • 다이제스트는 특정 난스 값에 대해서만 유효

다이제스트 인증 핸드쉐이크

그림1. 다이제스트 인증 핸드셰이크
자료 출처: David Gourley and Brian Totty, "HTTP: The Definitive Guide (Definitive Guides)", O'Reilly, 2002

  1. 서버는 난스값을 계산
  2. 난스를 WWW-Authenticate 인증요구 메시지에 담아, 서버가 지원하는 알고리즘 목록과 함께 클라이언트에 전송
  3. 클라이언트는 알고리즘 선택, 비밀번호와 그 외 데이터에 대한 요약 계산
  4. 클라이언트는 Authorization 메시지에 요약을 담아 서버로 전송, 서버를 인증하려면 클라이언트를 난수를 보낼 수 있음
  5. 서버는 요약, 알고리즘, 그외 보조데이터를 받아 요약을 검증함. 클라이언트가 서버에게 인증을 요구했다면 클라이언트 요약이 만들어 클라이언트에 전송. 다음번 난스를 클라이언트에게 미리 전송하기도 함

#요약(digest) 계산

다이제스트 인증이 핵심은 공개된 정보, 비밀 정보, 시한부 난스 값을 조합한 단방한 요약

다이제스트 알고리즘의 입력 값

H(d) 단방향 해시함수
KD(s,d) 요약함수. s는 secret, d는 data를 의미
A1 비밀번호 등 보안 정보를 담고 있는 데이터 덩어리
A2 요청 메시지의 비밀이 아닌 속성을 담고 있는 데이터 덩어리

H(d)와 KD(s,d) 알고리즘

  • RFC2617에서 제안된 알고리즘은 MD5, MD5-sess(‘sess’는 세션을 의미)
  • 만약 알고리즘이 정해지지 않았다면 MD5가 기본
  • KD 요약 함수는 콜론으로 연결된 비밀 데이터와 일반데이터의 MD5를 계산

    H(<데이터>) = MD5(<데이터>)  
    KD(<비밀>,<데이터>) = H(연결(<비밀>:<데이터>)
    

보안 관련 데이터(A1)

  • 사용자 이름, 비밀번호, 보호 영역, 난스와 같은 비밀 보호 정보로 이루어짐

    MD5: A1 = <사용자>:<영역>:<비밀번호>
    MD5-sess: A1 = MD5(<사용자>:<영역>:<비밀번호>):<난스>:<c난스>
    

메시지 관련 데이터(A2)

  • URL, 요청 메서드, 메시지 엔티티 본문과 같은 메시지 자체의 정보
  • qop(quality of protection)에 따라 A2의 두가지 사용법이 있음

    정의되지 않음:  <요청메서드>:<uri 지시자 값>
    auth:  <요청메서드>:<uri 지시자 값>
    auth-int:  <요청메서드>:<uri 지시자 값>
    

#보호수준(qop) 향상

  • qop 필드는 WWW-Authenticate, Authorization, Authentication-Info에 모두 존재 가능
  • qop 필드는 클라이언트와 서버가 어떤 보호 기법을 어느 정도 수준으로 사용할 수 있지 협상할 수 있게 허용

메시지 무결성 보호

  • qop=”auth-int”면 메시지 무결성 보호가 적용
  • auth-int의 경우 계산되는 H(엔티티 본문)은 메시지 본문의 해시가 아닌 엔티티 본문의 해시

#실제 상황에 대한 고려

다중 인증 요구

  • 서버는 클라이언트에게 가능한 가능한 인증 요구를 보냄

오류 처리

  • 다이제스트 인증에서, 지시자나 그 값이 적절하지 않거나 요구된 지시자가 빠진 경우 400 Bad Request가 절절한 응답임
  • 인증서버는 반드시 uri 지시자가 가리키는 리소스가 요청줄에 명시된 리소스와 같음을 확인해야함
    다를 경우 이는 공격의 징후일 수 있으므로 로그를 남기는 것이 좋음

#보안에 대한 고려사항

  • 헤더 부당 변경
  • 재전송 공격
  • 다중 인증 메커니즘
  • 사전(dictionary) 공격
  • 악의적인 프락시와 중간자 공격
  • 선택 평문 공격
  • 비밀번호 저장

#다이제스트 인증 기능의 구현을 위한 지원 데이터

WWW-Authenticate 지시자들

realm 사용자 이름과 비밀번호가 어디 사용될 것인지 알려주기 위해 사용자에게 보여질 문자열
nonce 401 응답이 만들어질 때마다 유일하게 생성되어야 하는 서버에 특화된 데이터 문자열
domain 보호될 공간을 정의한 따옴표로 감싸진 URI들의 공백으로 분리된 목록
opaque 서버에 의해 정의된 데이터의 문자열, 클라이언트는 같은 보호 공간의 URI에 대한 다음번 요청에서 Authorizaiton 허더에 이 값을 담아 반환
stable 클라이언트로부터의 이전 요청이 nonce 값이 신선하지 않아서 거부되었음을 의미하는 플래그
algorithm 다이제스트와 체크섬을 생성할 때 사용하는 알고리즘, 기본 값은 MD5
qop 선택적, 서버가 지원하는 보호 수준을 의미

Authorization 지시자들

username 특정 realm에서의 사용자 이름
realm WWW-Authenticte 헤더에 담겨 클라이언트에게 넘겨진 releam
nonce WWW- Authenticate 헤더에 담겨 클라이언트에게 넘겨진 nonce
uri 요청 URI에서의 URI, 프락시에 의해 요청이 변경될 수 있기 때문에 존재
response 다이제스트 값, 사용자가 비밀번호를 알고 있음을 증명
algorithm 다이제스트와 체크섬을 생성할 때 사용하는 알고리즘, 기본 값은 MD5
opaque 서버에 의해 정의된 데이터의 문자열, 같은 보호 공간의 URI에 대한 다음번 요청에서 값을 그대로 넣어서 반환
cnonce qop 지시자가 보내진 경우만 포함. 메시지 무결성 보호를 제공
qop 클라이언트가 메세지에 적용한 “보호 수준”의 정도
nc qop 지시자가 보낸 경우에만 포함. 클라이언트가 이 요청의 nonce값과 함께 보낸 요청들의 횟수 합계

Authentication-Info 지시자들

nextnonce 미래의 인증 응답 시에 클라이언트가 사용해주기를 서버가 원하는 nonce
qop 서버에 의해 응답에 적용된 ‘보호 수준”의 정도
rspauth response auth를 의미. 선택적인 응답 다이제스트가 들어있으며 이를 이용해 상호 인증을 지원
cnonce 응답 대상인 클라이언트의 요청에 들어있는 값과 반드시 같아야 함
nc 응답 대상인 클라이언트 요청에 들어있는 값과 반드시 같아야 함

#추가 정보 RFC 2617,”HTTP Authentication: Basic and Digest Access Authentication”


출처: "HTTP 완벽가이드", 이응준, 정상일 옮김, 인사이트, 2014