13장 다이제스트 인증
13.1 다이제스트 인증의 개선점
다이제스트 인증의 특징은 다음과 같다.
- 비밀번호를 절대로 네트워크를 통해 평문으로 전송하지 않는다.
- 인증 체결을 가로채서 재현하려는 악의적인 사람들을 차단한다.
- 구현하기에 따라서, 메시지 내용 위조를 막는 것도 가능하다.
- 그 외 몇몇 잘 알려진 형태의 공격을 막는다.
13.1.1 비밀번호를 안전하게 지키기 위해 다이제스트 사용하기
비밀번호를 보내는 대신, 클라이언트는 비밀번호를 비가역적으로 뒤섞은 '핑거프린트(fingerprint)' 혹은 '다이제스트(digest)'를 보낸다.
- 클라이언트가 보호된 문서를 요구한다.
- 서버는 클라이언트가 비밀번호를 알고 있음을 스스로 증명하여 신원을 인증하기 전까지 문서를 제공하는 것을 거부한다. 서버는 클라이언트에게 사용자 이름과 다이제스트 형태의 비밀번호를 요구한다.
- 클라이언트는 비밀번호의 다이제스트를 전달하여 자신이 비밀번호를 알고 있음을 증명한다. 서버는 모든 사용자의 비밀번호를 알고 있으므로, 클라이언트가 제공한 다이제스트와 서버가 스스로 계산한 다이제스트가 일치하는지 비교하여 사용자가 비밀번호를 알고 있는지 확인할 수 있다. 비밀번호를 모르는 사람은 올바른 다이제스트를 만들어 내기 쉽지 않을 것이다.
- 서버는 클라이언트가 제공한 다이제스트와 서버가 내부적으로 계산한 다이제스트를 비교한다. 일치하면 이는 클라이언트가 비밀번호를 알고 있는 것이다. 이 다이제스트 함수는 매우 긴 자릿수의 숫자를 만들어낼 수 있도록 되어 있기 때문에 사실상 찍어서 맞추는 것은 불가능하다. 서버가 일치 여부를 확인하면, 클라이언트에게 문서가 제공된다. 이 모든 과정에서 비밀번호는 결코 네트워크를 통해 전송되지 않는다.