탕구리's 블로그

커버로스(Kerberos) 프로토콜 본문

Conception/Computer Network

커버로스(Kerberos) 프로토콜

탕구리당 2019. 11. 19. 01:44
반응형

커버로스란?

커버로스(Kerberos)는 "티켓"(ticket)을 기반으로 동작하는 컴퓨터 네트워크 인증 암호화 프로토콜로서 비보안 네트워크에서 통신하는 노드가 보안 방식으로 다른 노드에 대해 식별할 수 있게 허용한다.

 

클라이언트 서버 모델을 목적으로 개발되었으며 사용자와 서버가 서로 식별할 수 있는 상호 인증(양방향 인증)을 제공한다. 커버로스 프로토콜의 메시지는 도청과 재전송 공격으로부터 보호된다.

 

커버로스는 대칭 키 암호로 빌드되며 TTP(신뢰된 서드 파티)를 요구한다. 또, 특정 인증 구간에서 비대칭 키 암호 방식을 이용함으로써 선택적으로 공개 키 암호 방식을 사용할 수 있다. 커버로스는 기본으로 포트 88을 사용한다.

 

출처 : 위키백과

 

간단하게 이야기 정리하면?

 

  • 클라이언트 - 서버 구조에서
  • 서버 접근권한에 대한 관리를 위해
  • 대칭키 방식을 이용하여 인증하는
  • 네트워크 인증 암호화 프로토콜입니다.

 

어떤 경우에 사용할까?

 

  • 서버의 수가 점점 많아지고, 유저의 수도 많아져서 사용자와 권한에 대한 관리 비용이 높아지는 경우
  • 서버별로 접근 가능한 사용자를 관리해야 할 때
  • 서버가 추가될 때마다 혹은 유저가 추가/삭제돼 때마다 유저를 등록 관리해야 하는 경우

 

커버로스 동작 과정과 주요 개념

  • Client, AS, TGS, SS
  • 대칭키(공통 키) 암호화

 

커버로스는 크게 4가지 대상이 맞물려 작동합니다.

 

  • 서비스를 제공받을 Client
  • 인증을 제공할 AS(Authentication Server)
  • 티켓을 발행해주는 TGS(Ticket Granting Server)
  • 서비스를 제공해주는 SS(Service Server)

커버로스(kerberos) 동작 과정

 

커버로스(kerberos) 동작과정

 

사용자 클라이언트 기반 로그인

 

(1) 클라이언트는 사용자로부터 아이디와 비밀번호를 입력받습니다.

(2) 비밀번호를 대칭키로 변환하여 암호키를 생성합니다.

 

클라이언트 인증

 

(3) 클라이언트는 AS에게 사용자 아이디를 전송합니다.

(4) AS는 사용자 아이디로 데이터베이스를 조회하고 두 개의 메시지를 생성합니다.

 

  • 메시지 A → 클라이언트 비밀번호를 기반으로 Client / TGS 세션 키 생성
  • 메시지 B → TGS의 비밀키로 TGT를 암호화
  • TGT = (Client ID + network ip + expired time + TGS session key)

 

(5) (2)에서 만든 암호키를 기반으로 메시지 A를 해독(DB의 비밀번호와 사용자가 입력한 비밀번호가 동일하면 성공)하고 TGS 세션 키를 획득합니다. 클라이언트는 TGS 비밀키를 가지고 있지 않으므로 해독하지 않고 가지고 있습니다.

 

고객 서비스 인증

 

(6) 클라이언트는 메시지 A, B를 통해 메시지 C와 D를 생성합니다

 

  • 메시지 C → TGT + Service ID
  • 메시지 D → (클라이언트 ID + Timestamp)를 TGS 세션 키로 암호화 생성된 메시지는 AS의 TGS로 전송됩니다.

 

(7) TGS는 메시지 C, D를 기반으로 메시지 E, F를 생성합니다.

 

  • 메시지 E → Client to Server Ticket ⇒ Server Secret key로 암호화 (TGS와 SS는 Server Secret Key를 알고 있으므로 해독 가능합니다.)
  • 메시지 F → Client / Server Session Key ⇒ Client / TGS 세션 키로 암호화

여기서 생성된 메시지는 클라이언트에게로 전송됩니다.

 

고객 서비스 요청

 

(8) 메시지 E와 F를 받은 사용자는 서비스를 이용할 자격을 갖추게 되었습니다. 클라이언트를 서비스를 제공받기 위해 메시지 E, G를 SS에게 전송합니다.

 

  • 메시지 E → (7)에서 받은 Client to Server Ticket
  • 메시지 G → (클라이언트 ID + Timestamp) ⇒ Client / Server 세션 키로 암호화

(9) SS는 E와 G를 통해 클라이언트의 신원을 확인하고 정보가 일치하는 경우 메시지 H를 통해 Client에게 신원을 확인시켜 줍니다.

 

  • 메시지 H → (메시지 D의 Timestamp + 메시지 G의 Timestamp) ⇒ Client/Server 세션 키를 통해 암호화

(10) 메시지 H를 받은 Client는 해독 후 Timestamp를 확인하고 SS에 서비스를 요청하기 시작합니다.

 

 

커버로스 프로토콜의 단점

 

  • 사용자 몰림으로 인해 과도한 티켓 생성 시 서버 부하가 발생할 수 있다.
  • AS 다운 시 인증과정이 중단된다.
  • 각 서버의 시간 설정이 잘못되어있는 경우 인증 과정에서 문제가 발생한다.
  • 프로토콜의 표준화가 진행되지 않아 서버마다 구현이 상이합니다.

 

참고 : https://www.letmecompile.com/kerberos-protocol/

반응형
Comments