Kerberos Ticket의 기본 구조
Kerberos Ticket은 클라이언트가 서버에 인증되기 위해 제시하는 기본 요소로, 클라이언트의 신원과 세션 키를 포함합니다. RFC 4120에 따르면 Ticket은 크게 두 부분으로 구성됩니다. 첫째, Ticket 외부(평문) 영역은 버전 정보(tkt-vno)·발급 realm·서버 principal name·그리고 암호화된 부분(enc-part)을 포함합니다. 둘째, EncTicketPart라 불리는 암호화된 내부 구조는 서버의 비밀 키로 암호화되며 플래그·세션 키·클라이언트 realm 및 principal name·transited realm 정보·인증 시간(authtime)·시작 시간(starttime)·종료 시간(endtime)·갱신 기한(renew-till)·주소 제약(caddr)·권한 데이터(authorization-data)를 포함합니다.
Ticket의 작동 원리와 암호화 메커니즘
Ticket 생성 과정에서 KDC는 서버의 secret key를 이용하여 EncTicketPart를 key usage value 2로 암호화합니다. 클라이언트가 서버에 요청할 때, Ticket과 함께 Authenticator(세션 키로 암호화된 타임스탬프 포함)를 전송합니다. 서버는 자신의 비밀 키로 Ticket을 복호화하여 세션 키를 추출하고, 동일한 세션 키로 Authenticator를 검증합니다. 이를 통해 클라이언트가 실제로 세션 키를 소유하고 있으며 최근에 생성된 인증 정보임을 확인합니다.
실무에서의 주요 고려사항
Ticket의 전송 과정에서 일부는 평문으로 전송되므로 ticket replay 공격에 노출될 수 있습니다. 따라서 Authenticator의 타임스탬프는 ticket이 최근에 생성되었음을 증명하는 중요한 역할을 하며, 서버는 반드시 허용 시간 범위(clock skew) 내에서만 Authenticator를 수용해야 합니다. Ticket의 주소 제약(caddr) 필드는 특정 네트워크 주소에서만 사용 가능하도록 하여 도용된 Ticket의 악용을 제한하지만, NAT 환경에서는 주소 제약이 없는 Ticket(addressless ticket) 사용이 권장됩니다.