~/network/concepts/kerberos
보안

Kerberos

Kerberos

신뢰할 수 있는 제3자(KDC)가 발급하는 암호화된 '티켓'을 이용해, 비밀번호를 네트워크에 반복해서 흘리지 않고도 사용자·서비스가 서로를 인증하는 네트워크 인증 프로토콜이다.

MIT에서 만들어졌고, 이름은 그리스 신화의 지옥문을 지키는 머리 셋 달린 개 케르베로스에서 왔다. 머리 셋은 인증에 관여하는 세 주체 — 클라이언트, 서버, KDC — 를 상징한다. 오늘날 Active Directory의 기본 인증 방식이며, 리눅스/유닉스 환경에서도 널리 쓰인다.

핵심 아이디어는 단순하다. 매번 각 서버에 비밀번호를 보내 로그인하는 대신, 신뢰받는 중앙 기관(KDC)에서 딱 한 번 신원을 증명하고 티켓을 받아, 이후에는 그 티켓을 제시해 여러 서비스에 접근한다.

왜 필요한가

초창기 네트워크 인증은 서버마다 비밀번호를 그대로 주고받는 방식이 많았다. 이는 여러 문제를 낳는다.

  • 도청: 평문 비밀번호가 네트워크를 오가면 스니핑으로 탈취된다
  • 반복 노출: 서비스마다 로그인하면 비밀번호가 계속 네트워크에 노출된다
  • 서버 신뢰 문제: 사용자만 인증하고 서버는 검증하지 않으면 가짜 서버에 속을 수 있다

Kerberos는 이를 다음으로 해결한다.

  • 비밀번호 자체를 네트워크로 전송하지 않는다 (비밀번호에서 파생한 키로 암호화만 함)
  • 한 번 인증하면 티켓을 재사용해 SSO(Single Sign-On) 를 구현한다
  • 상호 인증(mutual authentication) 을 지원해 클라이언트뿐 아니라 서버의 진위도 확인한다

구성 요소

구성 요소역할
KDC (Key Distribution Center)인증의 중심. 아래 AS와 TGS를 포함한다. AD에서는 도메인 컨트롤러가 KDC 역할을 한다
AS (Authentication Server)최초 로그인 시 사용자 신원을 확인하고 TGT를 발급
TGS (Ticket Granting Server)TGT를 제시받아 각 서비스용 서비스 티켓을 발급
Principal인증 대상의 고유 이름 (사용자나 서비스, 예: alice@EXAMPLE.COM)
RealmKerberos의 관리 영역. 관례상 대문자 도메인명 (예: EXAMPLE.COM). AD의 도메인에 대응
TGT (Ticket Granting Ticket)"이 사용자는 인증됨"을 증명하는 초기 티켓. 이후 서비스 티켓을 받을 때 사용
Service Ticket특정 서비스(파일서버 등)에 접근할 때 제시하는 티켓

동작 원리

Kerberos 인증은 크게 세 단계로 나뉜다. 각 단계는 AS 교환 → TGS 교환 → 클라이언트/서버 교환이다.

[클라이언트]                         [KDC]                       [서비스 서버]
                           ┌── AS ──┬── TGS ──┐
     │                     │        │         │                    │
 ① AS-REQ (사용자 식별)      │        │         │                    │
     │ ─────────────────▶  │ AS     │         │                    │
     │                     │ 신원확인, TGT 생성  │                    │
 ② AS-REP (TGT + 세션키)    │        │         │                    │
     │ ◀─────────────────  │        │         │                    │
     │                                                             │
 ③ TGS-REQ (TGT + "파일서버 티켓 줘")                                 │
     │ ───────────────────────────▶ │ TGS     │                    │
     │                              │ TGT 검증, 서비스 티켓 생성        │
 ④ TGS-REP (서비스 티켓 + 세션키)       │         │                    │
     │ ◀─────────────────────────── │         │                    │
     │                                                             │
 ⑤ AP-REQ (서비스 티켓 + Authenticator)                              │
     │ ─────────────────────────────────────────────────────────▶  │
     │                                               티켓 검증, (선택) 서버 인증
 ⑥ AP-REP (상호 인증 시)                                             │
     │ ◀─────────────────────────────────────────────────────────  │
                                                                접근 허용
  1. AS 교환 (로그인): 클라이언트가 사용자 principal을 담아 AS에 요청하면, AS는 비밀번호에서 파생한 키로 암호화한 세션 키와 TGT를 응답한다. 비밀번호를 아는 사용자만 세션 키를 복호화할 수 있으므로, 비밀번호를 네트워크로 보내지 않고도 인증된다.
  2. TGS 교환: 클라이언트가 TGT를 제시하며 "파일서버에 접근할 티켓을 달라"고 요청하면, TGS는 TGT를 검증하고 해당 서비스용 서비스 티켓을 발급한다.
  3. 클라이언트/서버 교환: 클라이언트가 서비스 티켓과 Authenticator(타임스탬프 포함)를 서버에 제시한다. 서버는 자신의 키로 티켓을 열어 검증하고 접근을 허용한다. 필요하면 서버도 응답을 보내 자신을 증명한다(상호 인증).

핵심 포인트

  • 비밀번호는 절대 전송되지 않는다. 비밀번호로 만든 키로 복호화 가능 여부만 확인한다
  • 타임스탬프를 써서 재전송 공격(replay)을 막는다. 그래서 클라이언트·서버·KDC의 시간 동기화(NTP) 가 필수다 (기본 허용 오차 5분)
  • TGT 덕분에 세션 동안 비밀번호를 다시 입력하지 않아도 여러 서비스에 접근할 수 있다 (SSO)

Active Directory와의 관계

Windows 도메인 환경에서 Kerberos는 Active Directory의 기본 인증 프로토콜이다.

  • 도메인 컨트롤러(DC) 가 KDC 역할을 수행한다
  • AD 도메인 이 Kerberos Realm 에 대응한다
  • 사용자가 도메인에 로그인하면 DC에서 TGT를 받고, 파일 공유·Exchange·SQL 등에 접근할 때 서비스 티켓을 받아 쓴다
  • 구형 호환을 위해 NTLM도 남아 있지만 취약점이 많아 신규 사용은 지양된다