

안전한 통신을 위해 양 종단 간에 비밀키를 설정하는 방법은 크게 두 가지로 나뉩니다.
필기 하단의 네트워크 다이어그램은 대칭키를 가장 단순한 방식(Naive approach)으로 분배할 때 발생하는 치명적인 한계를 보여줍니다.
기본 가정 (Assumption)
네트워크 내의 모든 사용자가 1:1 통신을 위해 각각 고유한 비밀키(Pairwise secret keys)를 나눠 가져야 한다고 가정합니다.
일 때의 상황 (첫 번째 이미지)Alice, Bob, Chris, David 4명이 통신망에 있습니다.
Frank의 등장: 새로운 사용자 'Frank'가 네트워크에 추가되어 가 되었습니다. 빨간색 글씨로 표시된 것처럼, Frank 단 한 명이 추가되었을 뿐인데 기존 4명과 연결하기 위한 4개의 새로운 키()가 즉각적으로 필요해집니다.
UH 65000+의 의미: 중앙에 적힌 'T.A.(Trusted Authority)' 아래의 "UH 65000+"는 휴스턴 대학교(University of Houston)의 학생 수 등을 예로 든 것입니다. 만약 65,000명의 사용자가 이 단순한 1:1 방식으로 대칭키를 관리한다면, 시스템 전체에 필요한 키의 개수는 공식에 의해 약 21억 개에 달하게 됩니다.


기존에 모든 사용자가 1:1로 직접 키를 교환해야 했던 복잡도 의 문제를 해결하기 위해 KDC(Key Distribution Center)라는 신뢰할 수 있는 중앙 서버를 도입합니다.
KDC의 작동 원리와 장점
효율성이 높아진 대신 보안 구조상 두 가지 심각한 리스크가 발생합니다.
SPOF (Single Point of Failure, 단일 장애점): KDC 서버가 다운되거나 해킹당하면 네트워크 전체의 암호화 통신이 완전히 마비됩니다.
완전 전방향 무결성(Perfect Forward Secrecy, PFS) 부재: 만약 해커가 특정 사용자의 KEK를 탈취하는 데 성공한다면, 현재의 통신뿐만 아니라 과거에 저장해 두었던 모든 통신 기록까지 소급하여 해독해 낼 수 있습니다. 과거의 세션 키들이 모두 이 KEK로 암호화되어 분배되었기 때문입니다.
참고: 이 KDC 구조는 오늘날 윈도우 네트워크 등에서 널리 쓰이는 인증 프로토콜인 Kerberos(커베로스)의 근간이 됩니다.

노트는 KDC를 매개로 통신할 때 발생할 수 있는 구체적인 공격 기법 두 가지를 보여줍니다. (필기의 'Reply Attack'은 'Replay Attack'의 오기로 보입니다. 학술적 표준 명칭은 Replay Attack입니다.)
전제: 능동형 공격자(Active Attacker)인 Trudy가 과거 통신에서 사용되었던 낡은 세션 키(Old session key)를 어떠한 방법으로 알아낸 상태입니다.
이 과거의 키와 암호문을 통신망에 다시 주입하여, 마치 현재 유효한 통신인 것처럼 시스템을 속이는 공격입니다.
이 공격은 KDC의 메시지 응답 구조에 '상호 인증'이 빠져 있을 때 발생하는 치명적인 논리적 결함을 파고듭니다. 릴레이 경주에서 주자가 눈을 가린 채 뛰고 있을 때, 누군가 몰래 트랙의 목적지를 바꿔버리는 상황과 같습니다.
[공격의 단계별 흐름]
가로채기와 조작: Alice는 Bob과 통신하기 위해 KDC에 RQST(ID_A, ID_B)를 보냅니다. 하지만 Trudy가 이를 중간에서 가로채어 목적지를 자신으로 바꾼 RQST(ID_A, ID_T)로 위조하여 KDC에 보냅니다.
KDC의 착각: KDC는 Alice가 Trudy와 통신하길 원한다고 생각하고, 두 사람이 쓸 일회용 세션 키 를 생성합니다. 그리고 이를 각각의 KEK로 암호화하여 와 를 만들어 Trudy에게 보냅니다.
Alice의 착각 (맹점): Trudy는 KDC가 준 를 Alice에게 넘깁니다. Alice는 자신의 키 로 를 해독하여 를 얻습니다. 이때 Alice는 자신이 처음에 Bob을 불렀으므로, 이 세션 키가 당연히 Bob과 공유하는 트랙이라고 굳게 믿습니다. (KDC의 응답에 "이 키는 Trudy용이다"라는 식별표가 없었기 때문입니다.)
해독 완료: Alice는 기밀 데이터 를 방금 얻은 세션 키로 암호화하여 를 만들고, 를 전송합니다. 기다리고 있던 Trudy는 자신의 키 로 를 열어 를 확보한 뒤, Alice의 메시지 를 완벽하게 해독해 냅니다.

KDC는 세션 키()와 유효기간(, Lifetime)을 생성한 뒤, 두 개의 암호문()을 만들어 Alice에게 보냅니다.
Alice용 암호문 ():
Bob용 티켓 ():
Alice는 자신의 키 로 를 해독하여 내부의 값들을 철저히 검증합니다. 여기서 이전의 공격들이 모두 막힙니다.
확인 (KDC Authentication): 자신이 보냈던 난수 가 응답에 그대로 들어있는지 확인합니다. 맞다면 이 응답은 누군가 가로채서 재전송(Replay)한 것이 아니라, KDC가 지금 막 응답한 것임을 확신할 수 있습니다.
확인 (Key Confirmation Attack 방어): 필기의 초록색 박스 부분입니다. KDC가 준 암호문 안에 내가 통신하고자 했던 상대방의 이름()이 명시되어 있습니다. 따라서 해커(Trudy)가 중간에서 목적지를 조작하더라도, Alice는 "어? 난 Bob이랑 통신한다고 했는데 왜 증명서엔 Trudy라고 적혀있지?" 하고 즉시 공격을 알아채고 통신을 끊을 수 있습니다.
(Lifetime) 확인: 발급받은 키의 유효기간이 지나지 않았는지 확인합니다.
검증을 마친 Alice는 Bob에게 통신을 시도합니다. 이때 KDC에게 받았던 Bob용 티켓()과 함께, 자신이 진짜 Alice임을 증명하는 Authenticator(인증자, )를 직접 만들어 보냅니다.
메시지를 받은 Bob은 두 가지를 해독합니다.
KDC가 만든 티켓()을 자신의 마스터키()로 열어 세션 키()와 통신 상대방이 Alice()임을 확인합니다.
방금 얻은 세션 키()로 Alice가 보낸 Authenticator()를 열어봅니다.
모든 검증이 끝나면 비로소 세션 키()를 이용해 안전하게 실제 데이터 를 암호화()하여 통신을 시작합니다.