0Pricing
Security+ Academy · 강의

키 교환과 하이브리드 암호화

Diffie-Hellman 키 교환과 TLS가 대칭 방식과 비대칭 방식을 결합하여 성능과 보안을 모두 달성하는 방식을 살펴봅니다.

키 교환과 하이브리드 암호화은(는) CoddyKit의 무료 Security+ Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Security+ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Security+ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

키 교환 문제

대칭 암호화를 사용하려면 양쪽 당사자가 안전하게 통신하기 전에 동일한 비밀 key를 공유해야 합니다. 하지만 아직 안전한 채널이 없다면 그 key를 어떻게 안전하게 공유할 수 있을까요? 이 키 분배 문제는 1976년 Whitfield Diffie와 Martin Hellman이 혁신적인 논문을 발표하기 전까지 해결할 수 없는 문제로 여겨졌습니다. 이들이 제시한 해법인 Diffie-Hellman 키 교환을 사용하면 도청자가 지켜보는 안전하지 않은 채널에서도 key 자체를 전송하지 않고 두 당사자가 Shared 비밀 key를 설정할 수 있습니다.

Diffie-Hellman 키 교환 개념

Diffie-Hellman (DH)은 이산 로그 문제에 기반한 영리한 수학적 기법을 사용합니다. 양쪽 당사자는 두 개의 Public 값(큰 소수 p와 생성자 g)에 Agree합니다. 각 당사자는 Private 무작위 수를 Generate하고, 그 값으로 Public 값을 Compute한 다음 서로 Public 값을 교환합니다. 이후 각 당사자는 자신의 Private 수와 상대방의 Public 값을 사용해 동일한 Shared 비밀을 Compute할 수 있습니다. 그러나 Public 값만 본 도청자는 이산 로그 문제를 풀지 않고는 Shared 비밀을 Compute할 수 없습니다. 큰 수에서 이 문제를 푸는 것은 계산상 사실상 불가능하기 때문입니다.

# Diffie-Hellman conceptual flow:
# 1. Agree on public parameters: prime p=23, generator g=5
# 2. Alice picks private a=6:  computes A = g^a mod p = 5^6 mod 23 = 8
# 3. Bob picks private b=15:   computes B = g^b mod p = 5^15 mod 23 = 19
# 4. Alice sends A=8 to Bob;   Bob sends B=19 to Alice
# 5. Alice: s = B^a mod p = 19^6 mod 23 = 2
# 6. Bob:   s = A^b mod p = 8^15 mod 23 = 2
# Shared secret = 2 (without either party transmitting it!)

ECDH: 타원 곡선 Diffie-Hellman

Elliptic Curve Diffie-Hellman (ECDH)은 Diffie-Hellman 키 교환을 현대적으로 개선한 더 효율적인 변형입니다. 모듈러 지수 연산 대신 타원 곡선 수학을 사용하여 훨씬 작은 매개변수로 동일한 수준의 보안을 제공합니다. 256-bit ECDH key는 3072-bit DH key와 동등한 보안을 제공합니다. ECDHE(‘E’는 Ephemeral을 의미함)는 각 세션마다 새로운 키 쌍을 Generate하여 Perfect forward secrecy를 제공합니다. TLS 1.3은 키 교환에 ECDHE를 의무화하므로, ECDHE는 최신 웹 보안에서 가장 널리 사용되는 키 교환 메커니즘입니다.

Perfect Forward Secrecy(PFS)

Perfect Forward Secrecy (PFS)는 서버의 장기 Private key가 나중에 탈취되더라도 세션 key가 노출되지 않도록 합니다. PFS는 각 세션의 키 교환에 Ephemeral 키 쌍을 사용하여 구현합니다. 세션 key는 세션이 끝난 후 폐기되는 임시 키 쌍에서 파생됩니다. PFS가 없고(RSA 키 교환을 사용하는 경우), 공격자가 오늘 암호화된 트래픽을 기록한 뒤 나중에 Private key를 탈취하면 과거의 모든 트래픽을 소급하여 복호화할 수 있습니다. PFS를 사용하면 key가 침해된 후에도 과거 세션은 안전하게 유지됩니다.

# Check if a website uses Perfect Forward Secrecy
openssl s_client -connect google.com:443 2>/dev/null | grep 'Cipher'
# Cipher    : TLS_AES_256_GCM_SHA384 (TLS 1.3 - always has PFS)
# Or look for ECDHE in cipher name:
# Cipher : ECDHE-RSA-AES256-GCM-SHA384 (TLS 1.2 with PFS)
# DHE-RSA-AES256-GCM-SHA384 (DHE = also PFS)
# RSA-AES256-SHA (NO PFS - static RSA key exchange)

하이브리드 암호화: 두 방식의 장점 결합

하이브리드 암호화는 비대칭 암호화의 key 관리 이점과 대칭 암호화의 성능을 모두 얻기 위해 비대칭 암호화와 대칭 암호화를 결합합니다. 과정은 다음과 같습니다. (1) 무작위 대칭 세션 key를 생성합니다. (2) 이 대칭 key로 대량의 데이터를 암호화합니다(빠름). (3) 수신자의 공개 key로 대칭 key를 암호화합니다(안전한 key 전송). (4) 암호화된 데이터와 암호화된 key를 함께 전송합니다. 수신자는 자신의 개인 key로 대칭 key를 복호화한 다음, 복구한 대칭 key로 데이터를 복호화합니다.

# Hybrid encryption example with OpenSSL
# 1. Generate a random AES-256 session key
openssl rand -out session.key 32

# 2. Encrypt the large file with the symmetric session key
openssl enc -aes-256-cbc -pbkdf2 -in largefile.tar -out largefile.enc -pass file:session.key

# 3. Encrypt the session key with recipient's RSA public key
openssl rsautl -encrypt -inkey recipient_public.pem -pubin -in session.key -out session.key.enc

# Send: largefile.enc + session.key.enc

TLS 핸드셰이크: 실제 환경의 하이브리드 암호화

TLS 핸드셰이크는 실제 환경에서 가장 널리 사용되는 하이브리드 암호화 구현입니다. TLS 1.3에서는 다음과 같이 동작합니다. (1) 클라이언트가 지원하는 암호 스위트와 key 공유 값(ECDHE 공개 값을 전송합니다. (2) 서버가 자신의 key 공유 값, certificate(공개 key 포함), 서명을 응답으로 보냅니다. (3) 양쪽이 ECDH를 통해 동일한 공유 비밀을 계산합니다. (4) 이후의 모든 트래픽은 공유 비밀에서 파생된 대칭 key(AES-256-GCM)로 암호화됩니다. 전체 과정은 대칭 key를 직접 전송하지 않고 한 번의 왕복만으로 암호화된 채널을 설정합니다.

# Observe the TLS 1.3 handshake
openssl s_client -connect example.com:443 -tls1_3
# You'll see:
# TLSv1.3, Handshake [length 0002], ServerHello
# Cipher    : TLS_AES_256_GCM_SHA384
# Session-ID: (no session ID in TLS 1.3, uses PSK)
# Verify return code: 0 (ok)

key 캡슐화 메커니즘(KEM)

현대 암호학에서는 세션 key를 직접 비대칭 암호화하는 방식보다 더 형식적이고 안전한 key 교환 방법으로 Key Encapsulation Mechanisms (KEM)을 사용합니다. KEM을 사용하면 한쪽 당사자가 대칭 key를 생성한 뒤 수신자의 공개 key를 이용해 이를 '캡슐화'할 수 있으며, 수신자만 이를 역캡슐화하여 복구할 수 있습니다. NIST의 양자 내성 표준인 CRYSTALS-Kyber는 정수 인수분해나 타원 곡선이 아닌 격자 문제를 기반으로 하는 KEM이므로 양자 컴퓨터 공격에 내성을 가집니다.

RSA key 교환과 ECDHE 비교

TLS 1.3 이전에는 RSA key 교환이 널리 사용되었습니다. 클라이언트가 사전 마스터 비밀을 생성하고, 서버의 RSA 공개 key로 암호화한 다음 서버에 전송하는 방식이었습니다. 문제는 이 방식이 순방향 비밀성을 전혀 제공하지 않는다는 점입니다. 나중에 서버의 개인 key가 탈취되면, 이 방식으로 암호화된 과거의 모든 세션을 복호화할 수 있습니다. TLS 1.3은 모든 연결에서 순방향 비밀성을 보장하기 위해 RSA key 교환을 완전히 제거하고 ECDHE만 허용합니다. 따라서 정적 RSA를 여전히 허용하는 TLS 1.0과 1.2를 비활성화하고 TLS 1.3을 의무화하는 것이 보안 향상으로 이어집니다.

세션 key 파생

Diffie-Hellman 교환으로 생성된 공유 비밀은 암호화 key로 직접 사용하지 않습니다. 대신 Key Derivation Function (KDF)에 입력하여 실제 암호화 key와 초기화 벡터를 생성합니다. TLS 1.3은 HKDF (HMAC 기반 Key Derivation Function)를 사용해 각 방향의 암호화를 위한 별도의 key를 파생합니다. KDF는 계산 비용을 추가하여 무차별 대입 공격을 어렵게 하고, 짧은 비밀을 필요한 수의 key 바이트로 확장하며, 파생된 key가 대칭 key로 사용하기에 적합한 통계적 특성을 갖도록 합니다.

PGP 이메일 암호화: 이메일에서의 하이브리드 암호화

Pretty Good Privacy (PGP)와 그 오픈 소스 구현인 OpenPGP는 이메일에 하이브리드 암호화를 사용합니다. Alice가 Bob에게 암호화된 이메일을 보낼 때 PGP는 무작위 대칭 세션 key를 생성하고, 이를 사용해 이메일 본문을 암호화하며(AES), Bob의 RSA 또는 ECC 공개 key로 세션 key를 암호화한 다음 두 가지를 함께 전송합니다. 서명된 이메일의 경우 PGP는 메시지를 해시하고 Alice의 개인 key로 해시에 서명하여 부인 방지를 제공합니다. PGP의 신뢰 웹 모델(사용자들이 서로의 key에 서명하는 방식)은 인증 기관 기반 PKI의 대안입니다.

# Encrypt and sign an email file with GPG (OpenPGP)
# Encrypt to Bob using his public key, sign with Alice's private key
gpg --encrypt --sign --recipient bob@example.com --armor message.txt

# Decrypt (Bob uses his private key)
gpg --decrypt message.txt.asc

# List available keys
gpg --list-keys
gpg --list-secret-keys

key 교환에서의 중간자 위험

Diffie-Hellman key 교환은 수동적인 도청자에게는 안전하지만, 당사자들이 서로를 인증하지 않으면 능동적 중간자(MITM) 공격에 취약합니다. 공격자는 Alice의 공개 값을 가로채 자신의 값으로 바꾼 뒤 Alice와 Bob 각각과 별도의 DH 세션을 설정할 수 있습니다. 이때 Alice와 Bob은 서로 통신하고 있다고 생각하게 됩니다. 따라서 TLS는 DH key 교환을 certificate 인증과 결합합니다. 신뢰할 수 있는 CA가 서명한 서버의 certificate가 서버의 신원을 증명하므로, 핸드셰이크 중 공개 key를 중간에서 바꾸는 MITM 공격을 막을 수 있습니다.

빠른 확인

이 lesson에서 다룬 CompTIA Security+ (SY0-701) 개념을 얼마나 이해했는지 확인해 보십시오.

lesson 복습

이 lesson에서는 다음을 배웠습니다. Diffie-Hellman은 안전하지 않은 채널에서도 당사자들이 공유 비밀을 파생할 수 있게 하여 key 교환 문제를 해결합니다. ECDHE(임시 방식)는 완전 순방향 비밀성을 제공합니다. 하이브리드 암호화는 효율성을 위해 비대칭 key 교환과 대칭 대량 데이터 암호화를 결합합니다. 또한 TLS 1.3은 모든 연결에 ECDHE를 의무화합니다. 다음 lesson에서는 Certificate Authorities and Trust Chains를 살펴봅니다.

자주 묻는 질문

“키 교환과 하이브리드 암호화” 강의는 무료인가요?

네 — “키 교환과 하이브리드 암호화” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Security+ Academy 강의 전체를 잠금 해제할 수 있습니다. Security+ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“키 교환과 하이브리드 암호화”에서 뭘 배우나요?

Diffie-Hellman 키 교환과 TLS가 대칭 방식과 비대칭 방식을 결합하여 성능과 보안을 모두 달성하는 방식을 살펴봅니다. 브라우저에서 직접 실행하는 실습 코드로 Security+ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Security+ Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Security+ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“키 교환과 하이브리드 암호화” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Security+ Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Security+ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 대칭 암호화 알고리즘
  2. 비대칭 암호화와 키 쌍
  3. 해싱과 데이터 무결성
  4. 키 교환과 하이브리드 암호화
← Security+ Academy(으)로 돌아가기