암호학: Kerberos KDC 기반 키 분배 방식

Kerberos KDC 기반 키 분배 방식입니다. KDC, master key, session key, ticket, authenticator, AS/TGS 흐름과 kinit/klist 검증을 정리했습니다.

암호학: Kerberos KDC 기반 키 분배 방식

Kerberos는 비밀번호를 네트워크에 직접 보내지 않고, 중앙의 KDC(Key Distribution Center)가 ticket과 session key를 발급해 client와 service가 서로 인증하도록 만드는 프로토콜이다. 설명의 A, B, KDC, master key, session key 흐름은 Kerberos의 기본 키 분배 구조를 이해하는 데 좋은 출발점이다.

구성 요소

요소역할
Client A서비스 B에 접근하려는 사용자 또는 프로그램
Service B접근 대상 서비스
KDCAuthentication Server와 Ticket Granting Server 역할
Master keyKDC가 각 principal과 공유하는 장기 key
Session key특정 통신 세션에 사용하는 임시 key

표기 정리

표기의미
Eka[...]A와 KDC가 공유하는 key로 보호된 데이터
Ekb[...]B와 KDC가 공유하는 key로 보호된 데이터
Esk[...]session key SK로 보호된 데이터
Tnonce 또는 timestamp 성격의 신선도 확인 값

1. A가 KDC에 service key 요청

A -> KDC:
Request || ID(A) || A || B

A는 B와 통신하기 위한 session key를 KDC에 요청한다. 여기서 KDC는 A와 B가 등록된 principal인지 확인한다.

2. KDC가 A와 B를 위한 값 생성

KDC -> A:
Eka[ SK || ID(B) || T ]

KDC -> B 또는 A가 B에게 전달할 ticket:
Ekb[ SK || ID(A) || T ]

A는 자기 master key로 보호된 부분을 풀어 session key와 대상 B 정보를 얻는다. B를 위한 ticket은 B의 key로 보호되어 있으므로 A가 내용을 임의로 바꿀 수 없어야 한다.

3. A가 B에게 authenticator 전달

A -> B:
Ekb[ SK || ID(A) || T ] || Esk[ ID(A) || T ]

B는 자신의 master key로 ticket을 풀어 session key를 얻고, 그 session key로 authenticator를 확인한다. 이때 A의 신원과 timestamp 또는 nonce가 맞아야 한다.

4. B가 A에게 응답

B -> A:
Esk[ ID(B) || f(T) ]

실습에서 T+1은 실제 숫자 1을 더한다는 뜻보다, 미리 약속된 변환을 적용해 상대가 같은 session key를 알고 있음을 증명한다는 의미로 이해하는 편이 좋다.

실제 Kerberos 흐름과 연결

실제 Kerberos V5는 보통 두 단계로 본다.

  1. AS exchange: client가 KDC에서 TGT(Ticket Granting Ticket)를 받는다.
  2. TGS exchange: client가 TGT를 사용해 특정 service ticket을 받는다.

Linux client에서 확인하는 명령

이미 Kerberos realm과 client 설정이 되어 있는 환경에서는 다음 명령으로 ticket 흐름을 볼 수 있다.

kinit user01@LAB.LOCAL
klist

kvno host/server01.lab.local
klist -e

kdestroy
klist
BGM EVER