솜이의 데브로그

8장 ) 액세스 인증 본문

CS/Network

8장 ) 액세스 인증

somsoming 2021. 11. 9. 18:16

Reference : 그림으로 배우는 Http&Network Basic

 

8. 누가 액세스하고 있는지를 확인하는 인증

 

시스템에 액세스하는 권한을 가진 사람에게만 허용하는 인증을 수행하기 위해 '등록된 본인만이 알고 있는 정보' 또는 '등록한 본인만이 가지고 있는 정보' 등으로 확인해야 한다.

 

  • password : 본인만이 알고 있는 문자열 정보
  • Onetime Token : 본인만이 가지고 있는 기기 등에 표시되는 한 번 쓰고 버리는 패스워드 등의 정보
  • 전자 증명서 : 본인만이 가지고 있는 정보
  • 바이오 매트릭스 : 지문이나 홍채 등 본인의 신체 정보
  • IC 카드 등 : 본인만이 가지고 있는 정보

 

HTTP에서 사용하는 인증 방법

  • BASIC 인증
  • DIGEST 인증
  • SSL 클라이언트 인증
  • 폼 베이스 인증

 

 

BASIC 인증

  • 웹 서버와 대응하고 있는 클라이언트 사이에서 이뤄지는 인증 방식

 

  1. 서버는 상태코드 401 Authorization Required와 함께 인증방식과 보호공간을 식별하기 위한 문자열을 헤더필드에 포함해 리스폰스를 반환한다.
  2. 상태코드 401을 받은 클라이언트는 BASIC 인증을 위해 유저 ID와 패스워드를 서버에 송신한다. 송신 문자열은 Base64로 인코딩.
  3. Authorization 헤더필드를 포함한 리퀘스트를 수신한 서버는 인증 정보가 정확한지 여부를 판단한다.
    → 인증 정보가 정확하면 Request-URI 리소스를 포함한 리스폰스를 반환한다.

 

Base64는 암호화가 아니기 때문에 암호화되지 않은 통신 경로상에서 BASIC인증을 한 경우, 도청되면 복호화된 유저 ID와 패스워드를 뺏길 수 있다.

BASIC 인증을 하면 일반 브라우저에서는 로그아웃 할 수 없다.

 

BASIC 인증은 보안적으로 취약한 부분이 있기 때문에 많이 사용되지는 않는다.

 

 

 

 

DIGEST 인증

  • DIGEST 인증에는 챌린지 리스폰스 방식이 사용된다.
  • 챌린지 리스폰스는 최초에 상대방에게 인증 요구를 보내고 상대방 측에서 받은 챌린지 코드를 사용해 리스폰스 코드를 계산한다. 이 값을 상대에게 송신하여 인증을 하는 방식이다.

 

  1. 리퀘스트에 인증이 필요한 리소스가 있는 경우 서버는 상태코드 401 Authorization Required 와 함께 챌린지 코드(nonce)를 헤더 필드에 포함해 리스폰스를 반환한다.
    헤더 필드는 realm, nonce 를 포함해야한다.
  2. 클라이언트는 DIGEST 인증을 위해 필요한 정보를 Authorization 헤더 필드에 포함해서 리스폰스를 반환한다.
  3. Authorization 헤더필드를 포함한 리퀘스트를 받은 서버는 인증정보가 정확한지 파악.
    정확한 경우에는 Request-URI의 리소스를 포함한 리스폰스를 반환한다.

 

DIGEST 인증은 BASIC 인증에 비해 높은 보안 등급을 제공하고 있지만, HTTPS의 클라이언트 인증 등과 비교하면 낮다.

DIGEST 인증에서는 패스워드의 도청을 방지하기 위한 보호 기능은 제공하고 있지만 이 외에 위장을 방지하는 기능은 제공하고 있지 않다.

 

 

 

SSL 클라이언트 인증

  • HTTPS의 클라이언트 인증서를 이용한 인증 방식이다.
  • SSL 클라이언트 인증을 할 때는 사전에 클라이언트에 클라이언트 증명서를 배포하고 인스톨 해야한다.

 

  1. 인증이 필요한 리소스의 리퀘스트가 있는 경우 서버는 클라이언트에게 "Certificate Request" 메시지를 송신한다.
  2. 유저는 송신하는 클라이언트 증명서를 선택하고, 클라이언트는 "Client Certificate" 메시지를 송신한다.
  3. 서버는 클라이언트 증명서를 검증하여 검증 결과가 정확하다면 클라이언트의 공개키를 취득한다. 그 후 HTTPS에 의한 암호를 개시한다.

 

클라이언트 증명서를 이용하기 위해서는 비용이 필요하다.

서버 운영자 스스로 인증 기관을 만드는 것도 가능하지만, 안전하게 운용하기 위해서는 상당한 비용이 발생한다.

 

 

 

폼 베이스 인증

  • 클라이언트가 서버 상의 웹 애플리케이션에 자격 정보를 송신하여 그 자격정보의 검증 결과에 따라 인증하는 방식.
  • 대부분의 경우 사전에 등록해둔 자격 정보인 유저 ID와 패스워드를 입력해서 웹앱 측에 송신하고 검증 결과를 토대로 검증 성공 여부를 결정한다.
  • 폼 베이스 인증에서 일반적으로 세션관리를 위해 쿠키를 사용한다.
  • 폼 베이스 인증은 서버 측의 웹 애플리케이션 등에 의해 클라이언트가 송신해온 유저 ID와 패스워드가 사전에 등록하고 있는 것과 일치하는지를 검증하며 이루어진다.

 

  1. 클라이언트와 서버에 유저 id나 패스워드 등의 자격 정보를 포함한 리퀘스트를 송신한다. 보통 POST 메소드가 사용되어 엔티티 바디에 자격 정보를 저장한다.
  2. 서버 측은 유저를 식별하기 위해 세션 ID를 발행한다.클라이언트에서 수신한 자격 정보를 검증하는 것으로 인증 하고, 유저의 인증 상태를 세션 id와 연관지어 서버 측에 기록한다.
    세션 ID는 도난당하거나 쉽게 유추되지 않도록 해야하므로 추측하기 어려운 문자열을 사용하고 유효기한을 관리하는 등 보안을 유지해야한다.
  3. 서버 측에서 세션 ID를 받은 클라이언트는 쿠키로 저장한다. 다음번 서버에 리퀘스트를 송신 시에는 세션 ID가 서버에 송신된다.

 

일반적으로는 안전한 방법으로 패스워드를 salt를 붙이고 해시하여 저장한다.