130. ECDH (Elliptic Curve Diffie-Hellman)
⚠️ 이 문서는 해커의 도청을 무력화하는 디피-헬만(DH)의 위대한 마법에, 타원곡선(ECC)의 극한의 가벼움과 속도를 융합하여, 뚱뚱하고 무거운 모듈로 거듭제곱을 버리고 당구공 덧셈(점 튕기기)만으로 1초 만에 스마트폰과 클라우드 서버의 비밀키를 세팅해 버리는 현대 암호 교환의 абсолютный 절대 표준, ECDH를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: ECDH(Elliptic Curve Diffie-Hellman)는 앨리스와 밥이 타원곡선 위의 공통 출발점(G)에서 각자의 비밀 횟수(개인키)만큼 당구공을 튕겨 도착한 좌표(공개키)를 서로 맞바꾼 뒤, 남이 준 좌표에서 다시 내 횟수만큼 공을 한 번 더 튕겨서 완벽하게 똑같은 최종 X좌표(마스터 비밀키)에 도달하는 키 교환 알고리즘이다.
- 가치: 기존 구형 DH가 2048비트 이상의 무식한 거대 소수를 끙끙대며 곱해서 CPU를 혹사시켰던 반면, ECDH는 고작 256비트라는 짧은 꼬리표만으로 동급의 방어력을 뽐내며 교환 속도와 모바일 네트워크 트래픽(대역폭) 낭비를 기적처럼 줄여냈다.
- 융합: 실제로 이 ECDH를 고정적으로 쓰면 해킹 시 과거 데이터가 다 털리는 약점이 있어, 실무에서는 매 접속마다 1회용 타원곡선 점을 뽑고 즉시 폐기하여 전방 비밀성(PFS)을 달성하는 궁극의 완전체, ECDHE (Ephemeral ECDH) 형태로 웹 표준(TLS 1.3)에 100% 융합되어 사용된다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
"우리 둘만 아는 비밀번호 1234를 정하자!" $\rightarrow$ 이것을 해커 몰래 정하는 것이 디피-헬만(DH)의 목표였다. [128번 문서 참고]
하지만 2010년대 모바일 혁명이 터지며 문제가 생겼다. 폰으로 은행 앱에 들어갈 때마다 구형 DH(모듈러 거듭제곱)를 쓰려니, 스마트폰의 작고 약한 CPU가 2048비트짜리 뚱뚱한 숫자를 1만 번씩 곱하느라 발열이 심해지고 화면이 1초씩 버벅거리는(Handshake Delay) 현상이 발생했다.
"안전하게 비밀번호를 섞으면서도, 스마트폰 배터리를 파먹지 않는 날쌘돌이 방식은 없을까?" 정답은 타원곡선(ECC)으로 이사 가는 것이었다. 무거운 숫자 곱셈($g^x \pmod p$)을 버리고, 넓은 2차원 평면에서 당구공을 튕겨 좌표를 옮기는 기하학적 게임으로 바꾸었더니, 256비트라는 아주 얇고 가벼운 데이터 조각만 휙휙 던져도 해커가 절대 역산할 수 없는(ECDLP 난제) 완벽한 초고속 키 교환기, ECDH가 탄생한 것이다.
📢 섹션 요약 비유: 옛날 DH 방식이 무거운 200kg짜리 납덩어리(2048비트 숫자)에 비밀 도장을 찍어 트럭으로 주고받으며 끙끙대는 것이었다면, ECDH는 25g짜리 깃털처럼 가벼운 티타늄 쪽지(256비트 좌표)에 도장을 찍어 종이비행기처럼 1초 만에 휙휙 날려 보내는 쾌속 교환 기술입니다.
Ⅱ. ECDH의 수학적 당구 게임 (작동 원리)
기본 원리는 DH와 소름 돋게 똑같다. '물감을 섞는 수학적 방식'이 곱셈에서 점의 덧셈으로 바뀌었을 뿐이다.
[ 타원곡선 당구장에서의 비밀번호 합의 ]
- 준비물: 앨리스와 밥은 인터넷 게시판에서 "우리 NIST P-256 당구대(곡선)를 쓰고, 출발점은 $G$ 좌표로 하자!"라고 공개 합의한다.
- 나만의 비밀 횟수 (개인키) 정하기:
- 👩 앨리스: 비밀로 숫자 **$a=3$**을 정한다. 당구공을 3번 튕긴다 ($3 \times G$). 멈춰선 좌표 $Q_A$ 를 밥에게 날린다.
- 👨 밥: 비밀로 숫자 **$b=5$**를 정한다. 당구공을 5번 튕긴다 ($5 \times G$). 멈춰선 좌표 $Q_B$ 를 앨리스에게 날린다.
- 크로스 합체 (최종 튕기기):
- 👩 앨리스: 밥이 던져준 좌표 $Q_B$ 위치에서 공을 놓고, 내 비밀 횟수 $a=3$ 번만큼 이어서 당구공을 더 튕긴다. $\rightarrow$ 수학적으로 $a \times (b \times G)$ 위치에 도착!
- 👨 밥: 앨리스가 던져준 좌표 $Q_A$ 위치에서 공을 놓고, 내 비밀 횟수 $b=5$ 번만큼 이어서 공을 더 튕긴다. $\rightarrow$ 수학적으로 $b \times (a \times G)$ 위치에 도착!
★ 기적의 일치: $a \times b \times G$ 와 $b \times a \times G$ 는 곱하는 순서만 달랐지, 거대한 타원곡선 그래프상에서 **완벽하게 똑같은 단 하나의 종착점(X, Y 좌표)**에 떨어지게 된다. 둘은 이 도착점의 X좌표 숫자를 싹둑 잘라내어 "우리 둘만 아는 대칭키(AES) 비밀번호"로 쓴다!
┌───────────────────────────────────────────────────────────────────────────────────┐
│ ECDH를 중간에서 훔쳐보는 해커의 완벽한 뇌정지 시각화 │
├───────────────────────────────────────────────────────────────────────────────────┤
│ │
│ [ 🕵️ 해커가 도청망에서 훔친 데이터 ] │
│ 1. 타원곡선 P-256 맵과 출발점 G 좌표 (인터넷에 널려있음) │
│ 2. 앨리스가 밥에게 던진 멈춘 점 QA 좌표 │
│ 3. 밥이 앨리스에게 던진 멈춘 점 QB 좌표 │
│ │
│ [ ☠️ 해커의 절망 (ECDLP의 벽) ] │
│ 해커가 마스터키(최종 도착점)를 알려면 앨리스나 밥이 도대체 당구를 '몇 번(a,b)' │
│ 튕겼는지 횟수를 알아내서 곱해야 한다. │
│ │
│ "G에서 튕겨서 QA에 도착한 건 알겠는데... 벽이 너무 미끄러워서(타원곡선) │
│ 어떤 각도로 몇 바퀴를 돌아서 저기 멈췄는지 도무지 역추적 선이 안 그어지네?!" │
│ -> 해커는 공이 멈춘 점만 백날 쳐다볼 뿐, 절대 개인키 횟수를 뽑아낼 수 없다! │
└───────────────────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 이 단순한 점 튕기기의 보안 강도는 압도적이다. 해커가 훔친 256비트짜리 짧은 좌표(QA)에서 원래 튕긴 횟수($a$)를 거꾸로 역산하려는 행위를 **타원곡선 이산 대수 문제(ECDLP)**라고 부르는데, 121번 문서에서 배웠듯 이는 현존하는 슈퍼컴퓨터로도 인류가 멸망할 때까지 수학적으로 풀리지 않는 악마의 미로다.
- 📢 섹션 요약 비유: 앨리스가 로봇 강아지(G)에게 "앞으로 3칸 가"라고 명령해서 멈춘 자리(QA)를 밥에게 알려줍니다. 해커는 로봇이 멈춘 자리는 보지만, 그 로봇이 뱅글뱅글 미로를 돌아서 온 건지 직진한 건지(몇 칸 움직였는지) 역추적할 리모컨이 없습니다. 오직 서로의 리모컨(비밀 횟수)을 크로스로 돌려본 앨리스와 밥만이 최종 도착지에서 환호성을 지를 수 있습니다.
Ⅲ. 전방 비밀성(PFS)의 완성: ECDHE (일회용 덧셈)
ECDH도 치명적 단점이 하나 있다. 네이버 서버가 10년 동안 똑같은 횟수($b$)만 튕겨서 멈춘 고정된 좌표($Q_B$)를 사람들에게 던져준다고 치자. 10년 뒤 해커가 네이버 서버를 통째로 해킹해서 비밀 횟수 $b$를 훔쳐내면, 과거에 저장해 두었던 10년 치 국민들의 카톡 내용이 소급해서 싹 다 털리게 된다. (Static ECDH의 약점)
이 재앙(타임머신 해킹)을 막기 위해 **ECDHE (Ephemeral ECDH)**가 등장했다. 끝에 붙은 **'E(임시의)'**가 핵심이다.
- 네이버 서버는 사용자가 접속할 때마다 고정된 횟수를 쓰지 않고, 1초마다
rand()함수를 돌려 **1회용 랜덤 비밀 횟수($y$)**로 공을 튕긴다. - 통신이 끝나서 브라우저 창을 닫는 순간? 앨리스와 네이버는 각자의 RAM 메모리에서 아까 튕겼던 비밀 횟수($x, y$)를 즉시 삭제해 영원히 불태워버린다!
- 나중에 해커가 네이버 DB를 털어도 훔쳐 갈 고정 개인키가 아예 존재하지 않으므로, 과거의 모든 암호 통신은 완벽하게 보호된다 (전방 비밀성, PFS 달성).
Ⅳ. 결론 및 TLS 1.3의 제왕 등극
"가볍고, 빠르며, 과거의 치부까지 완벽히 불태우는 궁극의 하이브리드 교환기." 과거 인터넷은 무거운 RSA로 키를 교환했다. 하지만 속도의 한계와 전방 비밀성(PFS)이 안 된다는 치명타 때문에 철퇴를 맞았다. 2018년 제정된 현대 인터넷의 헌법 TLS 1.3 규격에서는 낡은 RSA 키 교환과 Static(정적) DH 방식을 모조리 표준에서 강제 삭제해 버렸다.
오늘날 당신이 크롬으로 쇼핑몰에 접속하는 그 0.1초의 찰나 동안, 브라우저와 서버 사이에서는 오직 **ECDHE (타원곡선 1회용 키 교환)**만이 쉴 새 없이 당구공을 튕겨가며 100% 완벽하고 가벼운 비밀번호를 조립해 내고 있다. ECDH는 의심할 여지 없는 현대 클라우드와 모바일 통신의 절대 군주다.
📌 관련 개념 맵
- 전신 (무거운 과거 버전): DH (Diffie-Hellman), RSA Key Exchange
- 핵심 수학 방패: ECDLP (타원곡선 이산 로그 문제)
- 보안 극대화 버전 (실무 표준): ECDHE (Ephemeral ECDH - 임시 1회용 키 스와핑)
- 달성하는 최고 보안 철학: PFS (Perfect Forward Secrecy - 완벽한 전방 비밀성 보장)
👶 어린이를 위한 3줄 비유 설명
- 비밀번호를 정할 때, 옛날엔 무거운 돌덩이(RSA 2048비트)에 적어서 트럭으로 끙끙대며 주고받느라 스마트폰 배터리가 다 닳았어요.
- ECDH는 아주 가벼운 종이비행기(256비트 좌표)에 비밀 마법을 걸어서 1초 만에 휙휙 날려 보내 비밀번호를 정하는 초고속 타원곡선 마술이에요.
- 게다가 1회용 종이비행기(ECDHE)만 쓰고 창문을 닫으면 바로 불태워버리기 때문에, 10년 뒤에 나쁜 해커가 쳐들어와도 옛날 비밀번호를 훔쳐 갈 단서가 우주에 아예 존재하지 않게 완벽하게 지켜준답니다!