[인증] 커버로스(Kerberos)
by Choi HyeSun
커버로스(Kerberos)
-
어원 : 그리스 신화에 나오는 머리 셋 달린 개(케르베로스)
-
미국 MIT대의 Athena Project에 의해 개발
-
네트워크 인증 프로토콜
-
강력한 인증을 위해 설계
-
클라이언트/서버 애플리케이션 대상
-
비밀 키 암호화(대칭 키 암호화) 사용
-
-
암호화 알고리즘
-
ver4 : DES 사용 (fade-out 진행중, 5로 update 권고)
-
ver5 : DES 외의 다른 알고리즘도 사용 가능
-
-
UDP 88 port를 사용
Kerberos 구성 요소
-
Client
-
Kerberos 영역에 속한 서비스를 사용하는 사용자/호스트/애플리케이션을 의미
-
KDC(AS와 TGS)로부터 티켓을 받음
-
-
KDC (Key Distribution Center)
- Kerberos에서 인증을 위해 사용하는 티켓(Ticket)을 발행하는 서비스이며, 보통 AG, TGS가 있음. Kerberos DB도 포함
-
AS (Authentication Server)
-
클라이언트의 요청을 받아 그 클라이언트를 인증
-
인증 후 TGT(Ticket Granting Ticket)를 발행
-
TGS의 비밀 키를 알고 있음
-
-
TGS (Ticket Granting Server)
-
AS로부터 인증받은 클라이언트에게 서비스 사용이 가능한 SGT(Session Granting Ticket)를 발행
-
SS의 비밀 키를 알고 있음
-
-
Kerberos DB (Database)
- Kerberos Client 정보를
-
Service
-
Client가 사용하기 원하는 특정 네트워크 서비스
-
Client가 TGS로부터 받은 SGT를 인증하기 위해 사전에 Kerberos 서버에 등록되어 있어야 함(SSH, Web)
-
-
Kerberos 영역
- 티켓을 발행하는 하나 이상의 KDC와 Service, 그리고 여러 Client들로 구성된 네트워크 전체를 의미
인증 절차
-
Client
- ID/PWD 또는 공개 키 등으로 Client 머신에 로그인
-
Client → KDC AS (Authentication Server)
-
서비스 사용 요청
-
User ID (암호화 되지않은 일반 텍스트) 전달
-
-
KDC AS (Authentication Server) → Client
-
Client 정보를 Kerberos 데이터베이스에서 조회한 후 클라이언트를 발견하면 두 가지 메시지를 Client에게 전달
-
전달 (1) TGT(Ticket Granting Ticket) : encrypt(TGS 비밀키, Client ID, 주소, 유효기간, TGS 세션 키)
-
전달 (2) encrypt(key: 클라이언트 PWD기반 비밀키, data: “TGS 세션키”)
-
-
Client → KDC TGS (Ticket Granting Server)
-
TGS 세션키는 수신한 메시지를 복호화해서 획득
-
두 가지 항목을 전송
-
Authenticator = encrypt(key: TGS 세션키, data: “Client ID, timestamp”)
-
TGT (클라이언트는 TGS 비밀키를 모르기때문에 복호화 또는 데이터 조작 불가)
-
-
KDC TGS (Ticket Granting Server) → Client
-
전달받은 TGT(TGS 비밀키로 복호화 가능), 암호화된 Authenticator (TGS 세션키로 복호화 가능)를 모두 복호화
-
안에 담긴 Client ID가 일치하는지 확인하여 일치할 경우 두 가지 항목 전달
-
전달 (1) SGT(Session Granting Ticket) = encrypt(key: SS 비밀키, data: “Client ID, 주소, 유효기간, SS 세션키”)
-
전달 (2) encrypt(key: TGS 세션키, data: SS 세션키)
-
-
Client → Service(Application Server)
-
아래 두 가지 항목 전달
-
전달 (1) SGT(Session Granting Ticket)
-
전달 (2) Authenticator = encrypt(key: SS 세션키, data: “Client ID, timestamp”)
-
-
Service(Application Server) → Client
-
전달받은 SGT, Authenticator를 복호화 해서 안에 담긴 Client ID 일치 확인 후 일치할 경우 아래 항목을 전달
-
encrypt(key: SS 세션키, data: Authenticator안에 담겨있던 timestamp)
-
-
클라이언트
-
전달받은 timestamp와 자신이 Authenticator에 담아보냈던 timestamp의 값이 일치하는 확인
-
일치할경우 실제 작업 시작
-
단점
-
패스워드 유출시 무의미(패스워드 추측 공격에 취약)
-
인증값, 티켓 등이 임시로 사용자에게 저장되므로 탈취당할수 있음
-
인증서버 또는 티켓발급 서버(KDC)에 문제발생시 전체 인증에 문제가 발생할 수 있음(단일오류지점(SPOF))
-
사용자 패스워드 변경시 비밀키도 변경해야됨
출처
Subscribe via RSS