09. 기본 인증
네트워크/HTTP 완벽 가이드

09. 기본 인증

쿠키에서 이미 '클라이언트 IP'와 '로그인 방식'으로 사용자를 식별하는 방법을 배웠습니다. 이렇게 사용자를 식별하는 것이 인증의 시작입니다. 이번에는 이에 대한 간단한 인증을 배워봅시다.

 

HTTP 인증

1. 기본적인 HTTP 인증 과정

HTTP에서는 인증 요구/응답 프레임워크를 제공하고 있습니다. 8장 쿠키에서 배운 '로그인 방식'을 떠올리면 됩니다.

인증이 필요한 데이터를 요청하면, 그에 대한 권한을 확인하기 위해 인증을 요구하는 방식이었습니다.

그림 1 HTTP 인증 과정

1. 클라이언트가 인증이 필요한 데이터를 요청한다.

2. 서버가 401 응답 코드 + WWW-Authenticate 헤더를 통해 인증을 요구한다.

3. 클라이언트는 로그인을 통해 인증을 한다. (보통 로그인 창 입력)

3-1. 클라이언트가 매 요청마다 로그인 정보(ID, Password, 인증 알고리즘)를 Authorization 헤더에

      담아 전송한다.

4. 받은 로그인 정보를 확인하고 맞다면, 요청받은 데이터를 전송한다.(응답코드 : 200 OK)

 

단계 헤더 설명
인증 요구 WWW-Authenticate 사용자 이름과 비밀번호 요구
인증 Authorization 사용자 이름, 비밀번호, 인증 알고리즘을 담아 전송
성공 Authentication-Info 인증이 성공하면 문서와 함께 응답. (200 OK)
인증 알고리즘에 따라, 'Authentication-Info' 헤더에 인증 세션에 관한 추가 정보를 담아 전송.

 

PLUS. 보안 영역

회사에서는 부서마다 접근할 수 있는 자료가 달라야 합니다. 가령 보안이 중요한 감사부서의 자료를 다른 부서가 보면 안 되고, 임원급의 자료는 또 고급 자료로 관리를 해야 합니다. 이렇게 서버에서는 보안 영역을 나누어 그 영역에 맞는 사용자만 접근할 수 있게 설계를 해야 합니다. 이는 WWW-Authenticate 헤더의 realm 지시자로 결정이 됩니다.

 

그림2 realm 지시자를 통한 권한 영역 명시

 

2. 기본 인증

가장 잘알려진 HTTP 인증 규약입니다. 앞서 설명한 로그인 인증방식과 과정은 같고, 추가된 점은 사용자 정보를 base64 인코딩 메서드를 이용해 인코딩하여 전송을 합니다. (아스키코드로 인코딩한다 생각하시면 됩니다.)

그림 3 기본인증

 

기본 인증의 암호화 (base64 인코딩)

사용자 이름과 비밀번호를 콜론으로 이어서 합친 후 아스키코드로 바꾸는 방법입니다.

그림 4 base64 코딩

 

Plus. 프록시 인증

프록시 기능 중 사용자가 가진 권한 정도에 따라 접근 정도를 제어할 수 있다 했습니다.

주로 조직내에서 리소스 전체에 대한 접근제어를 하기 위해서 사용하는 편입니다.

인증 코드는 웹서버와 다르게 '407 : 비인증 상태 코드'를 사용합니다.

웹 서버 프록시
WWW-Authenticate Proxy-Authenticate
Authorization Proxy-Authorization
Authentication-Info Proxy-Authentication-Info

 

문제점

기본 인증의 문제점은 앞서 설명한 내용 속에 들어있습니다. 바로 보안 취약점입니다. 한번 살펴봅시다.

 

1. BASE64 인코딩 자체.

기본인증은 BASE64 인코딩을 사용해서 전달한다고 했는데, 이는 단순히 ASCII코드로 변환한 것이기 때문에 암호화를 하지 않았다고 봐도 무방합니다. (오버해서 얘기하자면, 연필과 종이만 있어도 해독이 가능합니다.)

 

2. 네트워크 보안 취약점.

먼저 사용자를 확인하는 방법이 따로 없어 메시지만 그대로 복사해도 되는 재전송 공격에 대해서 매우 취약합니다.

두번째로는 서버 역시 확인하는 방법이 따로 없다는 것이다. 그래서 사용자가 위장한 가짜 서버와 통신을 해 개인 정보가 유출될 가능성이 높다.

 

3. 안정성.

프록시나 중개자가 트랜잭션 중간에 개입하는 경우 정상적인 동작을 보장하지 않는다.

 

 

 

이러한 문제점이 있어, 정말 사소한 보안인증에서만 기본 인증을 사용하는 경우가 종종 있고, 나머지에는 뒤에서 다룰 HTTPS를 사용합니다.

 

'네트워크 > HTTP 완벽 가이드' 카테고리의 다른 글

12. 보안 HTTP  (0) 2021.08.25
11. 디지털 암호학  (0) 2021.08.24
08. 쿠키  (0) 2021.08.15
07. 게이트웨이&터널&릴레이  (0) 2021.08.12
06. 캐시  (0) 2021.08.09