Challenge-Response Authentication Mechanism

(챌린지-리스펀스 인증 매커니즘)

 

Challenge Response 정의

서버(server)와 클라이언트(client) 간에 서로 연결이 되어 있는지에 대한 여부를 판단하는 인증을 위해 사용되는 인증 매커니즘(mechanism)이다.

 

Challenge Response 형태

이 매커니즘을 사용하는 방법은 하나로 정해져 있는 것이 아니다. 사용하는 목적이나 용도에 따라 일반적으로 아래 세 가지 중 하나의 형태로 사용된다.

  1. client authentication (클라이언트 인증)
  2. server authentication (서버 인증)
  3. mutual authentication (클라이언트-서버 상호인증)

클라이언트 인증은 서버가 자신과 통신하기 위해 네트워크로 연결되어 있는 클라이언트를 인증하는 방법이고, 반대로 서버 인증은 클라이언트가 자신과 통신하려는 서버를 인증하는 방법이다. 그리고 클라이언트-서버 상호인증은 양쪽에서 서로를 인증하는 방법을 말한다.

 

Challenge Response 처리

클라이언트 인증의 경우, 서버가 challenge를 생성해서 클라이언트로 보내고, 클라이언트는 이 값을 자신이 가지고 있는 키(key)로 암호화(encrypt)를 해서 응답(response) 메시지에 첨부해서 서버에게 보낸다. 서버는 응답메시지를 복호화(decrypt)를 해서 자신이 보냈던 challenge인지 비교를 하고, 동일한 값이라면 인증성공으로, 다른 값이라면 인증실패로 처리한다. 서버 인증의 경우, 클라이언트 인증과 반대로 처리되며, 클라이언트-서버 상호인증의 경우 양쪽에서 동일한 처리를 하게 된다.

 

Challenge Response 응용

이 매커니즘을 컴퓨터 시스템에 다양한 방법으로 응용해서 적용이 가능하다. 실제 컴퓨터 시스템에서 적용해서 사용중인 일반적인 몇가지 방법들은 아래와 같다.

  1. password authentication (비밀번호 인증)
  2. hash authentication (hash or mac 인증)
  3. symmetric authentication (대칭키 인증)
  4. asymmetric authentication (비대칭키 인증)

비밀번호 인증은 웹 서비스를 위해 많이 사용되는 방법이며, 사용자는 자신의 비밀번호로 서버에서 전달받은 challenge를 암호화해서 서버에게 전달하면, 서버는 해당 사용자의 ID에 매칭되는 비밀번호 정보를 찾아서 검증하는 방법이다. hash or mac 인증은 서버와 클라이언트간에 (단방향 암호 알고리즘인) hash기반의 인증 전용 키를 서로 공유한 후에, 서로 동일한 키라면 해당 키로 challenge에 대해 hash를 했을 때 동일한 값이 나와주어야 하는 특징을 사용해서 검증하는 방법이다. 대칭키는 인증(양방향 암호알고리즘이고 두개의 동일한 키인) 암호화 방법을 사용한 방법으로, 서버와 클라이언트가 인증을 위한 똑같은 키를 사전에 서로 공유한 후에, 한쪽에서는 암호화를 다른 한쪽에서는 복호화를 해서 동일한 challenge가 나오는지를 확인하는 방법이다. 이때 양쪽이 사용하는 키는 동일하다. 비대칭키 인증 (양방향 암호 알고리즘이고 두개의 서로다른 키인) 암호화 방법을 사용한 것이며, 한쪽에서는 암호화를 다른 한쪽에서는 복호화를 해서 동일한 challenge가 나오는지를 확인하는 방법이다. 이때 양쪽이 사용하는 키는 서로 다르다.

 

Challenge Response 조건

이 매커니즘을 시스템에 적용하기 위해서는 아래와 같은 전제 조건이 있고, 이 조건을 지키며 처리된다. 아래는 클라이언트 인증의 경우에 대한 조건이며, 서버인증은 반대의 조건을 지켜서 처리된다.

(클라이언트 인증 경우)

  1. 서버는 클라이언트에서 사용하는 사용자의 키(key)에 대한 정보를 사전에 가지고 있어야 한다.
  2. 서버에서 생성되는 challenge는 매번 변경되는 값이어야 한다.

 

참고

challenge는 서버가 클라이언트를 사용하는 사용자를 인증하기 위한 용도로 사용되는 값이다. 다시 말하면, 서버가 보낸 값에 대해 클라이언트가 똑같이 답할 수 있는지 질문하는 값이다. 이 값은 보안을 위한 값으로, 공격자(Attacker)가 재사용할 수 없도록 반드시 사용할 때마다 아무 의미없는 난수(nonce)값이 되어야 한다.

key는 암호화(encrypt)가 가능한 비밀키(secret key)를 말하며, 위 매커니즘에서 사용할 때, 인증키(authenticate key), 대칭키(symmetric key), 비대칭키(asymmetric key) 등등 어떤 키든 상관없이 사용해도 된다.