1. 공개키 분배 방식
공개키 방식은 대칭키 방식의 문제였던 키 분배 문제를 해결하기 위해 등장했지만, "어떻게 상대방의 진짜 공개키를 안전하게 획득할 것인가?"라는 새로운 문제가 생기게 되었다. 왜 문제가 되냐하면 예를 들어 어떤 특정 개인인척 사칭을 해서 공개키를 유포해버리면 사람들이 그 공개키로 암호화해서 보내면 공격자가 복호화가 가능해지기 때문이다. 따라서 공개키를 전달하는 인증해주는 체계가 여전히 필요하다. 공개키를 안전하게 전달하는 방법은 보안 수준과 관리 방식에 따라 4개 정도로 분류한다.
Public Announcement (공개 발표)

각자 자신의 공개키를 이메일 서명에 첨부하거나, 뉴스 그룹, 메일링 리스트 등 커뮤니티에 직접 게시하는 가장 원시적인 방법이다. 앞서 살펴봤듯이 이 방법은 위조에 매우 취약하다. 공격자가 특정 사용자 A를 사칭해서 가짜 공개키를 배포하면, 다른 사용자들이 이를 A의 키로 믿고 암호화 통신을 하게되면 공격자가 모든 메시지를 복호화 할 수 있게 되버린다.
Publicly Available Directory (공개 디렉토리)

공인인증서의 공인인증기관같이 신뢰할 수 있는 중앙 기관이 {이름, 공개키} 쌍의 엔트리를 관리하는 디렉토리를 운영하는 방식이다. 사용자는 자신의 키를 디렉토리에 보안상 안전하게 등록하고 언제든 교체할 수 있으며, 디렉토리는 정기적으로 발행되거나 전자적으로 접근 가능해야한다. 디렉토리 자체가 해킹되어 엔트리가 위조되거나, 통신 과정에서 결과값이 변조될 위험이 여전히 존재하기는 한다.
Public Key Authority (공개키 관리 기관)

중앙 관리 기관이 동적인 디렉토리를 유지하며, 사용자가 요청할 때마다 실시간으로 공개키를 제공하여 통제를 강화한 방식이다. 동작 방식은 아래와 같다.
- 사용자 A는 기관에 B의 공개키를 요청하며 타임스탬프($T_1$)를 보낸다.
- 기관은 기관의 개인키($PR_{auth}$)로 $E(PR_{auth}, [PU_b || Request || T_1])$를 암호화하여 A로 보낸다. A는 기관의 공개키($PU_{auth}$)로 이를 복호화하여 B의 진짜 공개키($PU_b$)임을 확인한다.
- A는 얻은 $PU_b$로 B에게 보내는 정보인 자신의 ID와 난수($N_1$)를 암호화하여 B에게 보낸다.
- B도 같은 방식으로 기관에서 A의 공개키($PU_a$)를 획득한 후, 상호 난수($N_1, N_2$) 교환을 통해 상대방의 신원을 최종 확인다.
하지만 이 방식도 약점이 있다. 기관이 모든 요청을 실시간으로 처리해야 하므로 병목 현상(Bottleneck)이 발생할 수 있으며, 디렉토리 서버의 무결성 문제도 여전히 존재한다.
Public Key Certificates (공개키 인증서)

실시간 접근의 한계를 극복하기 위해 등장한 현대적인 방식이다. 인증 기관(CA)이 사용자의 신원과 공개키를 결합한 데이터에 디지털 서명을 하여 인증서(Certificate)를 발행한다. 인증서는 유효 기간, 사용 권한 등의 정보를 포함하며, CA의 공개키($PU_{auth}$)를 아는 사람이라면 누구나 오프라인에서도 인증서의 유효성을 즉시 검증할 수 있다.
사용자 A와 B는 각자 기관에 공개키를 제출하고 인증서($C_A, C_B$)를 발급받는다. 인증서 $C_A$는 $E(PR_{auth}, [T_1 || ID_A || PU_a])$ 형태로 구성되어 인증기관의 비밀키로 암호화되서 전송된다. A는 B에게 인증서 $C_A$를 제공한다. B가 기관의 공개키로 복호화하면 A의 정보임을 확신할 수 있게 되는 것이다.
2. 공개키를 이용한 대칭키 분배 (하이브리드 방식)
실제 데이터 통신에는 공개키 암호를 직접 사용하지 않는다. 공개키 알고리즘은 대칭키 알고리즘에 비해 계산 속도가 매우 느리기 때문이다. 그래서 메시지 본문은 빠른 대칭키(Secret Key)로 암호화하고, 이 대칭키를 상대방에게 전달할 때만 공개키 암호를 사용하여 안전하게 보호하는 방식을 사용한다.
Merkle의 단순 분배 프로토콜

- 사용자 A가 임시 공개키 쌍($PU_a, PR_a$)을 생성하여 자신의 ID와 함께 B에게 보낸다.
- B는 세션 키($K_s$)를 생성한 후, A로부터 받은 $PU_a$로 이를 암호화하여 A에게 보낸다.
- A는 자신의 개인키($PR_a$)로 이를 복호화하여 $K_s$를 얻는다.
Merkle이 제안한 초기 방식은 직관적이지만 중간자 공격(Man in the middle Attack)에 취약한 약점이 있다.

- A가 $PU_a$를 보낼 때 E가 이를 가로채고, 대신 자신의 공개키 $PU_e$를 B에게 보낸다.
- B는 $PU_e$가 A의 것인 줄 알고 $K_s$를 $PU_e$로 암호화하여 보낸다.
- E는 자신의 개인키 $PR_e$로 $K_s$를 탈취한 뒤, 다시 A의 진짜 공개키 $PU_a$로 암호화하여 A에게 보낸다.
- A와 B는 서로만 $K_s$를 안다고 믿지만, 사실 E가 모든 통신 내용을 도청할 수 있는 상태가 된다.
이중 암호화 비밀키 분배 방식

단순 분배의 취약점을 보완하기 위해 난수(Nonce)와 이중 암호화를 사용하는 4단계 프로토콜이 등장했다.
- A가 B의 공개키($PU_b$)로 난수 $N_1$과 자신의 ID를 암호화하여 전송한다.
- B는 $N_1$을 확인하고, $N_1$과 새로운 난수 $N_2$를 A의 공개키($PU_a$)로 암호화하여 보낸다. 이를 통해 A는 상대가 진짜 B임을 확인한다.
- A가 $N_2$를 B의 공개키로 암호화하여 돌려줌으로써, B에게 자신이 진짜 A임을 인증한다.
- A가 세션 키 $K_s$를 선택하고, 이를 자신의 개인키($PR_a$)로 먼저 암호화(인증)한 뒤, 다시 B의 공개키($PU_b$)로 암호화(기밀성)하여 보낸다.
이러한 방식을 통해 $K_s$를 보낼 때 발신자 인증과 수신자 전용 기밀성을 동시에 확보한다.
하이브리드 키 분배 방식
성능 최적화와 기존 시스템과의 호환성을 위해 KDC(Key Distribution Center)와 PKC를 혼합하여 사용하기도 한다. 사용자와 KDC 사이에는 대칭키 기반의 마스터 키가 존재하고, PKC는 이 마스터 키를 업데이트(분배)할 때만 사용한다. 이를 통해 매 세션마다 느린 PKC를 수행할 필요가 없어 시스템 부하를 줄이고, 기존의 KDC 기반 대칭키 환경에 PKC 레이어를 쉽게 얹을 수 있어 하위 호환성이 뛰어나다는 장점이 있다.
3. Diffie-Hellman 키 교환 방식
Diffie Hellman 키 교환은 임의의 메시지를 암호화하여 전달하는 용도가 아니라, 오직 두 사용자 간에 공통의 비밀키(세션키)를 설정하기 위해 사용되는 알고리즘이다. Diffie Hellman도 RSA처럼 이산대수문제(DLP)에 기반하는 방식이다.
Diffie Hellman 키교환은 아래 과정으로 동작한다.

모든 사용자는 전역 파라미터인 큰 소수 $q$와 그 원시근 $\alpha$에 동의한 상태에서 시작한다.
* 원시근: 소수 $p$에 대하여, 어떤 수 $a$의 거듭제곱($a \pmod p, a^2 \pmod p, \dots, a^{p-1} \pmod p$)이 $1$부터 $p-1$까지의 모든 정수를 단 한 번씩 포함할 때, $a$를 $p$의 원시근이라고 한다.
[동작 과정]
- 비밀키 선택: 사용자 A는 $X_A < q$인 비밀키 값(Secret Key)을 선택한다.
- 공개키 계산: A는 자신의 공개키 $Y_A = \alpha^{X_A} \pmod q$를 계산하여 공개한다.
- 키 교환 및 공유키 생성:
- A는 B의 공개키($Y_B$)를 받아 $K = (Y_B)^{X_A} \pmod q$를 계산한다.
- B는 A의 공개키($Y_A$)를 받아 $K = (Y_A)^{X_B} \pmod q$를 계산한다.
- 결과: 수학적으로 $(a^{X_B})^{X_A} \equiv (a^{X_A})^{X_B} \pmod q$이므로 두 사람은 동일한 값 $K$를 공유하게 된다.
[예제]
- 설정: $q = 353$, $\alpha = 3$
- Alice: 비밀키 $X_A = 97$ 선택 $\rightarrow$ 공개키 $Y_A = 3^{97} \pmod{353} = 40$
- Bob: 비밀키 $X_B = 233$ 선택 $\rightarrow$ 공개키 $Y_B = 3^{233} \pmod{353} = 248$
- 공유키($K$) 계산:
- Alice: $248^{97} \pmod{353} = 160$
- Bob: $40^{233} \pmod{353} = 160$
결과적으로 두 사람은 공격자에게 비밀키를 노출하지 않고도 160이라는 동일한 세션 키를 얻게 된다.
Diffie Hellman 역시 키를 생성하는 과정에서 상대방이 누구인지 확인하는 절차가 없어 중간자 공격(Man in the middle Attack)에 취약하다. 따라서 실제 시스템에서는 디지털 서명이나 인증서 등을 통한 키 인증(Authentication) 과정이 반드시 동반되어야한다.
'컴퓨터공학 > 정보보안' 카테고리의 다른 글
| [정보보안] 비대칭키 암호 - RSA (0) | 2026.04.26 |
|---|---|
| [정보보안] 비대칭키 암복호화, 전자서명 (1) | 2026.04.26 |
| [정보보안] 보안 수학 (소수, 페르마 소정리, 오일러 함수, DLP) (0) | 2026.04.26 |
| [정보보안] 보안 수학 (Group, Ring, Field, GF, 유클리드 알고리즘) (0) | 2026.04.26 |
| [정보보안] 난수 생성기 (Random Number Generator) (1) | 2026.04.22 |