094. CPA (Chosen Plaintext Attack)
⚠️ 이 문서는 해커가 임의의 평문을 선택하여 암호화 기계에 집어넣고 그에 대응하는 암호문을 얻어내는 행위를 무한정 반복함으로써 암호의 규칙(키)을 뚫어내는 현대 암호학의 두 번째로 강력한 공격 모델인 '선택 평문 공격(CPA)'을 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: CPA(Chosen Plaintext Attack)는 해커가 자신이 원하는 평문(문자열)을 암호화 오라클(기계/서버)에 마음대로 던져 넣고, 튀어나오는 결과물(암호문)을 수집하여 평문-암호문 쌍의 데이터베이스를 구축한 뒤 패턴을 역추적하는 공격 모델이다.
- 가치: 현실 세계에서 해커가 메일 서버에 악성 메일(원하는 평문)을 보내 서버가 이를 암호화해 보관하게 만들거나, 2차 대전 중 연합군이 독일군 특정 해역에 지뢰를 깔고 독일군이 "지뢰 발견"이라는 암호문을 쏘게 유도하는 등 실전에서 빈번히 발생하는 해킹 시나리오다.
- 융합: 이 CPA 공격 모델에 뚫리지 않고 버텨내는 자물쇠의 능력치를 **IND-CPA (구별 불가능성)**라고 부르며, 이를 달성하기 위해 현대 암호 시스템은 반드시 **무작위성(난수, IV, 솔트)**을 도입하여 똑같은 평문을 넣어도 매번 다른 암호문이 나오도록 설계된다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
암호학의 공격 모델 중 Lv 1과 Lv 2(COA, KPA)는 해커가 운 좋게 암호문과 평문을 주운 수동적 상황을 가정한다. 하지만 현대의 똑똑한 해커는 감나무 밑에서 입을 벌리고 있지 않는다.
**CPA (선택 평문 공격)**는 해커가 매우 적극적(Active)으로 시스템을 희롱하는 모델이다. 해커는 공격 대상 서버(예: 군 통신 장비나 데이터베이스)의 암호화 칩에 일시적으로 접근할 권한을 얻어, 자기가 궁금한 평문을 마구 입력해 본다. "여기에 'AAAA'를 넣으면 어떤 쓰레기 문자가 나올까?", "'BBBB'를 넣으면?" 이렇게 수천만 개의 **평문-암호문 쌍(Pairs)**을 차곡차곡 모아 패턴을 돌려보면, 그 안에 숨어 있는 수학적 규칙(비밀 키)의 약점이 벌거벗겨진다.
📢 섹션 요약 비유: 해커가 자물쇠를 구경만 하는 게 아니라, 자판기에 500원, 1,000원, 불량 동전 등 자기가 원하는 동전(선택 평문)을 수백 번 마음대로 밀어 넣고, 튀어나오는 커피캔이나 에러 메시지(암호문)를 기록하여 자판기의 내부 작동 규칙(비밀키)을 알아채는 얄미운 짓입니다.
Ⅱ. CPA 공격의 현실적 작동 메커니즘 (실전 사례)
"해커가 맘대로 평문을 집어넣는 상황이 현실에 존재하나요?" 많은 초보자들이 묻지만, 제2차 세계대전의 미드웨이 해전부터 오늘날 웹 서버까지 숱하게 발생한다.
-
역사적 사례 (2차 세계대전, AF의 비밀)
- 미군은 일본군 통신에서
AF라는 단어가 자주 나오는데 이게 어느 섬인지 몰랐다. - 미군은 일본군이 엿듣는 걸 알면서도 일부러 **"미드웨이 섬에 식수(물)가 고장 났다"라는 평문(Chosen Plaintext)**을 무전으로 흘렸다.
- 다음 날 일본군은 암호 통신으로
AF에 식수 부족 사태 발생이라는 암호문을 송출했다. - 미군은 자신이 던진 '식수 고장(평문)'이 'AF(암호문)'로 변환되어 나온 것을 보고, "아! AF는 미드웨이 섬이구나!"라고 암호 키의 비밀을 뚫어냈다. 전형적인 CPA의 승리다.
- 미군은 일본군 통신에서
-
현대적 사례 (웹 서버 해킹)
- 해커가 쇼핑몰 문의 게시판에
MySecretHackingCode라는 평문(글)을 작성해 전송한다. - 쇼핑몰 웹 서버는 고객의 소중한 글이므로 자신의 데이터베이스에 AES 암호화를 해서 저장(암호문)해 둔다.
- 나중에 해커가 DB 암호문 테이블을 탈취했을 때, 수백만 개의 알 수 없는 암호문 속에서 자기가 던졌던
MySecretHackingCode가 어떻게 암호문으로 변했는지 찾아서 암호화 규칙을 유추해 낸다.
- 해커가 쇼핑몰 문의 게시판에
┌───────────────────────────────────────────────────────────────────────┐
│ CPA (선택 평문 공격) 모델의 작동 방식과 패턴 노출 시각화 │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ [ 해커의 실험실 ] [ 타겟 암호화 오라클 (기계) ] │
│ (비밀키 K 내장) │
│ 평문 1: "APPLE" ────(암호화 요청)────▶ "X9#2K" 출력 반환 │
│ 평문 2: "BANAN" ────(암호화 요청)────▶ "L1@0P" 출력 반환 │
│ 평문 3: "APPLE" ────(다시 요청)──────▶ "X9#2K" 출력 반환 │
│ │
│ ★ 해커의 미소: │
│ "음? 1번과 3번에 똑같은 'APPLE'을 넣었더니 똑같은 'X9#2K'가 나오네? │
│ 이 암호 기계(ECB 모드 등)는 무작위 난수(IV)를 섞지 않는 싸구려구나! │
│ 이제 인터넷에서 'X9#2K'라는 암호문이 지나가면, 키를 몰라도 저게 │
│ 'APPLE'이라는 걸 100% 확신할 수 있지!" │
└───────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] CPA 공격에 가장 취약한 암호는 '결정론적(Deterministic) 암호'다. 즉 똑같은 평문을 넣으면 언제나 똑같은 암호문이 튀어나오는 구조다. 해커는 자신이 짠 평문 사전을 서버에 다 밀어 넣어서 거대한 [평문=암호문] 매핑 사전을 만들어버린다. 이렇게 되면 나중에 해커가 진짜 남의 암호문을 가로챘을 때, 비밀키 수학 공식을 풀 것도 없이 자기가 만든 사전(Rainbow Table)에서 Ctrl+F로 찾아서 해독해 버린다.
- 📢 섹션 요약 비유: 번역기(암호기계)가 어떻게 돌아가는지 원리를 모르더라도, 제가 번역기에 '사과', '바나나', '포도'를 천 번씩 집어넣고(선택 평문) 튀어나온 외계어를 공책에 다 적어두면, 나중에 남이 외계어로 대화하는 걸 훔쳐 들었을 때 그 공책을 보고 전부 다 번역해 버릴 수 있는 거랑 똑같습니다.
Ⅲ. CPA 방어 대책 (확률적 암호화와 IV의 도입)
"해커가 100번 똑같은 평문을 던져도, 100번 다 다른 암호문이 튀어나와서 해커를 미치게 만들어라."
CPA 공격을 견뎌내기 위해 현대 암호학이 선택한 길은 **무작위성(Randomness)**의 주입이다. 즉, 시스템을 결정론적 모델에서 '확률론적(Probabilistic) 모델'로 개조하는 것이다.
- 대칭키 암호 (블록 암호 모드)
- 앞서 살펴본 ECB 모드는 똑같은 걸 넣으면 똑같은 게 나오므로 CPA 공격에 영혼까지 털린다.
- 이를 막기 위해 CBC 모드나 CTR 모드는 처음에 항상 랜덤한 **IV(초기화 벡터)**나 Nonce를 비벼서 시작한다.
- 해커가
APPLE을 두 번 던져도, 첫 번째는IV=1과 섞여서X9#2K가 나오고, 두 번째는IV=99와 섞여서Q@!88이 튀어나온다. 해커가 사전을 구축하는 작전(CPA)은 휴지조각이 된다.
- 비대칭키 암호 (RSA)
- 단순한 순정 RSA 공식 $C = M^e \bmod n$ 도 똑같은 $M$(평문)에 대해 똑같은 $C$가 나오므로 CPA에 털린다.
- 이를 방어하기 위해 진짜 평문을 굽기 전에 쓸데없는 쓰레기 난수(패딩)를 마구 덧붙여서 암호화하는 OAEP (Optimal Asymmetric Encryption Padding) 기술을 무조건 적용해야 한다.
Ⅳ. 결론
"모든 현대 암호 자물쇠는 최소한 CPA 공격을 막아낼 수 있어야만 시장에 출시될 자격이 있다." 해커가 공격 대상을 관찰만 하는 시대는 끝났다. 시스템과 적극적으로 상호작용하며 데이터를 밀어 넣고 반응을 분석하는 CPA 모델은 암호학의 방어 패러다임을 '난수의 활용(IV, 패딩)'으로 완전히 바꾸어 놓았다. 똑같은 말을 두 번 해도 매번 다르게 들리게 하는 위장술이야말로 현대 암호가 실전(CPA)에서 살아남기 위한 첫 번째 생존 기술이다.
📌 관련 개념 맵
- 공격 모델 스펙트럼: KPA (알려진 평문) $\rightarrow$ CPA (선택 평문) $\rightarrow$ CCA (선택 암호문 - 오라클 찌르기)
- 보안 목표 능력치: IND-CPA (CPA 상황에서 해커가 암호문을 구별할 수 없는 상태)
- 취약한 운영 모드: ECB (Electronic Codebook)
- 방어 필수 기술: IV (초기화 벡터), Nonce, Salt, RSA-OAEP 패딩
👶 어린이를 위한 3줄 비유 설명
- 제가 마법의 번역 상자에 '안녕'이라는 쪽지를 넣으면 상자가 '꾸룰루'라는 외계어 표를 뱉어내요. 이게 바로 제가 평문을 골라서(선택 평문) 상자를 시험해 보는 거예요.
- 제가 여러 단어를 계속 넣어서 [안녕=꾸룰루, 바보=삐리리]라는 외계어 사전(패턴)을 몰래 완성하면, 나중에 남들이 외계어로 비밀 얘기할 때 다 알아들을 수 있죠! (CPA 공격 성공)
- 이걸 막으려면 똑같은 '안녕'을 상자에 10번 넣어도 '꾸룰루', '샤라뽀', '쿠쿠루' 하고 매번 다르게 뱉어내는 엉뚱한 마법(난수)을 상자에 걸어야 해요.