-
다이제스트 인증이란 무엇인가CS지식/네트워크 2021. 6. 20. 20:21
다이제스트 인증은 HTTP에서 제공하는 인증 방법 중 하나이다.
지난번에 알아 본 기본 인증은 편리하고 유연하지만 안전하지 않다.
그 이유는 사용자 이름과 비밀번호를 평문으로 보내는데 이 정보를 위조하지 못하게 보호하는 장치가 없기 때문이다.
비밀번호를 base-64 인코딩을 한다고는 하지만 쉽게 디코딩이 가능하여 보호기능이 약하다.
(기본 인증: https://straw961030.tistory.com/111)
다이제스트 인증은 기본 인증과 호환되는데 기본 인증보다 안전한 인증 방법이다.
그러면 다이제스트의 개선점은 무엇일까?
- 비밀번호를 네트워크를 통해 통신할 때 평문으로 전송하지 않는다.
- 인증 과정 중 중간에 침입하여 정보를 가로채는 사람을 차단한다.
- 메시지 내용 위조를 막는 것도 구현이 가능하다.
다이제스트 인증의 메커니즘에서 가장 중점이 되는 점은 "절대로 비밀번호를 네트워크를 통해 보내지 않는다"이다.
클라이언트는 비밀번호를 그대로 보내는 대신에 비가역적으로 섞은 요약(digest)상태로 보낸다.
서버는 비밀번호를 알고 있으므로 이렇게 요약만 보내도 요약이 비밀번호에 대응하는지 검사하여 인증을 할 수 있다.
이렇게 요약상태로 보내면 악의적으로 접근하는 사람은 모든 가능성있는 비밀번호를 하나씩 대입해보지 않는 이상 알 수가 없게 되어 보안성이 높아진다.
위에서 말하는 요약(digest)는 무엇일까?
요약은 정보(여기서는 비밀번호가 될 수 있다.) 본문의 압축을 말한다.
요약은 단방향 함수로 동작하여 모든 입력값들을 유한한 범위의 값으로 압축하여 변환한다.
단방향 함수란 계산하기는 쉽지만 역을 구하는 것은 어려운 함수이다. 다시 말해서, 결과값이 주어졌을 때 입력값을 구하는 것이 어려운 함수이다.
여기서 자주 쓰이고 인기 있는 요약 함수(다이제스트 알고리즘)은 MD5이다.
MD5는 입력값(바꾸고자하는 값)의 바이트 배열을 원래 길이와 상관없이 128비트로 변환한다.
(128비트로 약 2^128가지의 서로 다른 압축결과를 만들 수 있다.)
하지만 이렇게 요약(digest)로 변환하여 보낸다고 해서 클라이언트와 서버간의 통신은 안전할까?
요약으로 보내게 되면 중간에 가로채더라도 원본의 비밀번호를 알아지 못한다는 것은 좋은 점이다.
하지만, 공격자가 중간에 요약을 가로채어 그 요약을 서버로 보내어 몇 번이고 재전송하여 접속을 할 수 있기때문이다.
이러한 재전송 공격을 막기 위해서 서버는 클라이언트에게 난스(nonce)불리는 일종의 증표를 보낸다.
난스는 대략 1ms혹은 인증할 때마다 바뀌는 것인데 이 난스를 비밀번호에 섞으면 난스가 바뀔 때마다 요약도 바뀌게 된다.
난스가 재전송 공격을 막을 수 있는 이유는 저장된 비밀번호 요약이 특정 난스 값에 대해서만 유효하기 때문이다.
즉, 요약을 가로챈 공격자는 비밀번호 없이는 요약을 계산할 수 없기 때문에 재전송하더라도 인증을 통과할 수 없다.
난스를 사용한 간략한 다이제스트 인증 핸드셰이크 모습을 보면 아래와 같다.
'CS지식 > 네트워크' 카테고리의 다른 글
내용 협상(content negotiation)이란 무엇인가 (0) 2021.07.12 HTTPS란 무엇인가 (0) 2021.06.23 HTTP 인증이란 무엇인가 (0) 2021.06.17 쿠키(Cookie)란 무엇인가? (0) 2021.06.14 클라이언트 식별이란 무엇인가? (0) 2021.06.11