정의 비교
문제
독일어 원문
Was unterscheidet den IND-CCA (Chosen Ciphertext Attack) vom IND-CPA (Chosen Plaintext Attack)?
한국어 해석
IND-CCA(Chosen Ciphertext Attack)와 IND-CPA(Chosen Plaintext Attack)의 차이를 설명하라.
IND-CPA / IND-CCA 게임 시뮬레이터
모델을 고르고 query의 합법성을 시험하세요.
단계별 힌트
막혔을 때만 한 단계씩 여세요. 정답을 바로 읽는 것보다 기억을 꺼내는 시간이 중요합니다.
- 첫 힌트: 두 약어에서 Plaintext와 Ciphertext가 각각 어떤 oracle을 뜻하는지 연결하라.
- 계산형 문항이 아니다.
- 비교표: IND-CPA = Enc oracle, IND-CCA = Enc oracle + Dec oracle except challenge.
- 함정: IND-CCA와 IND-CPA를 단순히 공격 대상 메시지 종류 차이로만 설명하기
- 함정: CCA가 challenge ciphertext 직접 복호화를 허용한다고 쓰기
- 후속 점검: IND-CPA secure이면 항상 IND-CCA secure인가?
채점 기준으로 내 답안 점검하기
- IND-CPA의 chosen plaintext/encryption oracle capability를 설명한다.
- IND-CCA의 추가 decryption oracle capability를 설명한다.
- challenge ciphertext restriction을 적는다.
- CCA가 CPA보다 stronger security notion임을 말한다.
답안 슬롯 자가 점검 — 실제로 말하거나 쓴 항목만 체크하세요.
0/4 slots
정답과 핵심 해설 확인하기
CPA는 encryption oracle 중심, CCA는 decryption oracle까지 허용하는 더 강한 모델이다.
개념부터 다시 보는 상세 풀이
BEGINNER LESSON
2-(b) IND-CCA와 IND-CPA의 차이를 완전히 이해하기
ZERO-BASE START
정말 아무것도 모른다고 가정하고 시작합니다
전문 용어를 알고 있다고 가정하지 않습니다. 먼저 일상적인 장면을 보고, 그 장면의 사람과 행동에 실제 보안 용어를 하나씩 붙인 뒤, 시스템에서 일어나는 순서를 따라갑니다.
기초 개념 01
공격자 모델과 oracle을 게임처럼 읽는 법
1타 강사식 시작: 이름은 잠시 가리고 장면부터 봅시다
시험장에서 계산기는 허용하지만 인터넷은 금지하는 것처럼, 공격자에게 허용되는 도구를 정확히 적어야 난이도와 성공 조건을 말할 수 있다.
지금은 이 비유를 완벽히 외울 필요가 없습니다. 누가 무엇을 가지고 있고, 무엇을 하려 하며, 어느 지점에서 문제가 생기는지만 찾으면 됩니다.
이제 실제 용어를 하나씩 붙여 봅시다
공격자 모델(Angreifermodell)은 공격자가 어떤 정보를 보고 어떤 기능을 사용할 수 있는지 정한 규칙이다. Oracle은 공격자가 질문을 보내면 정해진 계산 결과를 돌려주는 가상의 상자다. Encryption oracle은 공격자가 고른 평문을 암호화해 주고, decryption oracle은 고른 암호문을 복호화해 준다. 보안 정의는 강한 공격자에게 이런 기능을 허용해도 목표를 달성하지 못하는지 시험한다.
TERMS FROM ZERO
전문 용어를 한 단어씩 풀기
아래 단어는 이미 안다고 가정하지 않습니다. 먼저 쉬운 뜻을 읽고, 본문에서 같은 단어가 나오면 이 정의로 다시 바꾸어 읽으세요.
Attacker model
공격자가 무엇을 보고, 선택하고, 질문하고, 바꿀 수 있는지를 정확히 정한 가정입니다.
Oracle
보안 게임에서 공격자가 정해진 형식으로 질의하고 답을 받을 수 있는 가상 인터페이스입니다.
Challenge
공격자가 구별하거나 위조해야 하는 중심 시험값입니다.
Advantage
공격자의 성공 확률이 무작위 추측보다 얼마나 높은지를 나타내는 값입니다.
프로그램이나 프로토콜 안에서는 다음 순서로 움직입니다.
- 공격자가 처음에 알고 있는 정보를 적는다.
- 어떤 oracle에 언제 질의할 수 있는지 적는다.
- Challenger가 숨긴 값을 포함한 challenge를 만든다.
- 금지된 질의와 공격자의 최종 성공 조건을 적는다.
왜 여기서 많이 틀릴까요?
공격자가 ‘강하다’라고만 쓰면 정의가 되지 않는다. 질의 가능 대상, 시점, 금지 조건을 구체적으로 써야 한다.
조건을 생략하거나 서로 다른 기능을 같은 것으로 취급했는지 확인하세요. 정답 문장을 외우는 것보다 틀린 이유를 말할 수 있어야 변형 문제를 풀 수 있습니다.
기초 개념 02
IND-CPA와 IND-CCA를 0부터 구분하기
1타 강사식 시작: 이름은 잠시 가리고 장면부터 봅시다
두 상자 중 하나를 잠가 보여 주고 어느 상자인지 맞히는 게임이다. CCA에서는 다른 잠긴 상자를 열어 달라고 물을 수 있지만 바로 시험에 나온 상자 c*를 열어 달라고 할 수는 없다.
지금은 이 비유를 완벽히 외울 필요가 없습니다. 누가 무엇을 가지고 있고, 무엇을 하려 하며, 어느 지점에서 문제가 생기는지만 찾으면 됩니다.
이제 실제 용어를 하나씩 붙여 봅시다
IND는 indistinguishability, 즉 두 메시지 중 어느 것이 암호화됐는지 구별하기 어렵다는 뜻이다. 공격자는 같은 길이의 메시지 m0와 m1을 제출하고 Challenger는 무작위 bit b를 골라 mb의 암호문 c*를 준다. 공격자가 b를 1/2보다 의미 있게 높은 확률로 맞히지 못하면 안전하다고 본다. CPA에서는 encryption oracle을, CCA에서는 decryption oracle까지 허용한다.
TERMS FROM ZERO
전문 용어를 한 단어씩 풀기
아래 단어는 이미 안다고 가정하지 않습니다. 먼저 쉬운 뜻을 읽고, 본문에서 같은 단어가 나오면 이 정의로 다시 바꾸어 읽으세요.
CPA
Chosen-Plaintext Attack입니다. 공격자가 고른 plaintext의 암호문을 받아볼 수 있습니다.
CCA
Chosen-Ciphertext Attack입니다. 제한 아래 공격자가 고른 ciphertext의 복호 결과까지 질의할 수 있습니다.
IND
Indistinguishability입니다. 두 후보 plaintext 중 어느 것이 암호화됐는지 구별하기 어려워야 한다는 목표입니다.
Challenge ciphertext
보안 게임에서 숨겨진 bit에 따라 두 후보 중 하나를 암호화한 시험 암호문입니다.
프로그램이나 프로토콜 안에서는 다음 순서로 움직입니다.
- m0와 m1의 길이를 같게 해 길이만으로 답을 맞히지 못하게 한다.
- Challenger가 b를 무작위로 선택하고 c*=Enc(mb)를 만든다.
- IND-CCA2에서는 challenge 이후에도 다른 암호문의 복호화를 질의할 수 있다.
- c* 자체의 복호화는 금지하고 마지막에 b'를 추측한다.
왜 여기서 많이 틀릴까요?
CPA와 CCA의 차이는 평문 종류가 아니라 공격자가 사용할 수 있는 oracle의 차이다.
조건을 생략하거나 서로 다른 기능을 같은 것으로 취급했는지 확인하세요. 정답 문장을 외우는 것보다 틀린 이유를 말할 수 있어야 변형 문제를 풀 수 있습니다.
핵심부터 말하면 둘 다 두 후보 메시지의 challenge ciphertext를 구별하는 IND 게임이지만, CPA 공격자는 선택한 plaintext의 암호화 결과를 얻고, CCA 공격자는 여기에 더해 선택한 ciphertext의 복호화 결과까지 얻는다. 따라서 IND-CCA가 더 강한 보안 요구다.
이 글에서 익힐 것
CPA의 P가 Plaintext, CCA의 C가 Ciphertext임을 권한과 연결한다.
encryption oracle과 decryption oracle의 입·출력을 정확히 적는다.
두 게임의 공통 challenge 구조와 차이점을 구분한다.
왜 CCA 공격자가 더 강하고 IND-CCA 보안이 더 어려운 목표인지 설명한다.
IND-CPA 안전하지만 IND-CCA에는 취약할 수 있는 malleability 직관을 이해한다.
먼저 되짚을 기초
-
Encryption oracle
공격자가 평문 m을 선택해 넣으면 c=Enc(k,m)를 돌려준다.
내가 원하는 입력이 어떻게 암호화되는지 관찰할 수 있는가?
-
Decryption oracle
공격자가 암호문 c를 선택해 넣으면 m=Dec(k,c)를 돌려준다.
내가 만든 또는 변형한 암호문을 시스템이 어떻게 해석하는지 관찰할 수 있는가?
-
Challenge
공격자가 같은 길이 m₀,m₁을 내면 challenger가 무작위 b를 골라 c*=Enc(m_b)를 준다.
암호문이 어느 후보 메시지인지 구별할 수 있는가?
개념부터 차근차근
CPA는 Chosen-Plaintext Attack이다. 공격자가 평문을 선택하고 그 암호문을 받아볼 수 있다.
공격자는 encryption oracle에 m을 넣어 Enc(k,m)를 관찰한다. 공개키 암호에서는 public key로 누구나 암호화할 수 있으므로 이 권한은 자연스럽다.
공격자는 학습 결과를 바탕으로 같은 길이의 m₀,m₁을 고르고 challenge c*=Enc(m_b)를 받는다.
b를 동전 던지기보다 유의미하게 잘 맞히지 못하면 IND-CPA secure다.
확률적 암호화 또는 매번 새로운 nonce/randomness가 중요한 이유도 같은 평문을 암호화할 때 결과가 항상 같으면 encryption oracle로 비교해 challenge를 쉽게 알아낼 수 있기 때문이다.
개념부터 차근차근
CCA는 Chosen-Ciphertext Attack이다. 공격자가 암호문을 선택하고 복호화 결과를 받아볼 수 있다.
CCA 공격자는 일반적으로 CPA에서 가능한 정보에 더해 decryption oracle까지 이용한다.
challenge c*=Enc(m_b)를 받은 후에도 IND-CCA2에서는 c*와 정확히 같지 않은 다른 암호문을 복호화해 볼 수 있다.
c* 자체를 요청하는 것은 금지된다. 그러나 c*를 변형한 암호문을 물어볼 수 있으므로 변조 가능성(malleability)과 오류 반응을 악용하는 공격까지 견뎌야 한다.
이 강한 권한에도 b를 구별하지 못해야 IND-CCA secure다.
헷갈리는 개념 비교하기
Criterion
공격자가 선택하는 것
IND-CPA
Plaintext m
IND-CCA
Ciphertext c
Criterion
핵심 oracle
IND-CPA
Encryption oracle Enc(·)
IND-CCA
Decryption oracle Dec(·), 보통 encryption 능력도 포함
Criterion
oracle 응답
IND-CPA
선택한 평문의 ciphertext
IND-CCA
선택한 암호문의 plaintext
Criterion
challenge 공통점
IND-CPA
c*=Enc(m_b)를 보고 b 추측
IND-CCA
같은 challenge에서 b 추측
Criterion
핵심 금지
IND-CPA
게임 규칙에 따른 challenge의 자명한 재현을 막는 조건
IND-CCA
challenge c* 자체를 decryption oracle에 제출 금지
Criterion
공격자 강도
IND-CPA
상대적으로 약함
IND-CCA
복호화 반응까지 이용하므로 더 강함
Criterion
보안 요구
IND-CPA
선택 평문 관찰에도 기밀성
IND-CCA
능동적 암호문 변형·복호화 질의에도 기밀성
Easy analogy
Setting
자판기 안에 비밀 변환 규칙이 있다고 생각한다.
Cpa
CPA 자판기는 내가 원하는 원문 카드를 넣으면 봉인된 암호 카드를 내준다. 여러 원문이 어떤 봉투로 바뀌는지 실험할 수 있다.
Cca
CCA 판독기는 내가 원하는 암호 봉투를 넣으면 안의 원문을 읽어 준다. 단, 시험용 challenge 봉투 자체는 넣을 수 없다.
Conclusion
봉투를 열어 주는 판독기까지 가진 CCA 공격자가 더 많은 정보를 얻으므로 더 강하다.
왜 그런지 이해하기
능력 집합 관점에서 CCA 공격자는 CPA 공격자가 할 수 있는 관찰에 복호화 질의라는 추가 능력을 가진다.
따라서 어떤 암호가 더 강한 CCA 공격자에게도 안전하다면, 더 약한 CPA 공격자에게도 안전해야 한다: IND-CCA ⇒ IND-CPA.
반대는 일반적으로 성립하지 않는다. 선택 평문 공격에는 안전하지만 조작한 암호문에 대한 복호화 반응에서 정보가 새는 방식이 있을 수 있다.
즉, '공격 모델이 강하다'와 '암호가 강하다'를 혼동하면 안 된다. CCA가 강한 공격 모델이고, IND-CCA secure는 더 높은 보안 등급이다.
시험 답안으로 정리하기
Intuition
어떤 암호문 c*의 일부를 규칙적으로 바꾸면 복호화 평문도 예측 가능한 방식으로 바뀌는 암호를 생각한다. 공격자는 변형 c'를 decryption oracle에 넣어 결과를 보고 원래 c*에 대한 정보를 역추론할 수 있다.
Cbc bridge
CBC Padding Oracle에서는 c* 주변 블록의 바이트를 바꾸고 padding valid/invalid 반응을 반복 관찰해 평문을 복원한다. 이는 CPA의 encryption oracle만으로는 얻지 못하는 복호화 측 반응을 이용한다.
Lesson
IND-CPA는 수동적·선택평문 관찰에 대한 기밀성의 중요한 최소선이지만, 공격자가 암호문을 능동적으로 서버에 제출할 현실에서는 authenticated encryption/CCA 수준 설계가 필요하다.
Same and different
Same
둘 다 계산적으로 제한된 공격자를 상정한다.
둘 다 같은 길이의 두 후보 m₀,m₁과 challenge c*를 사용해 indistinguishability를 시험한다.
둘 다 성공률이 무작위 1/2보다 유의미하게 높아지는지를 본다.
Different
CPA는 선택 plaintext → encryption 결과.
CCA는 선택 ciphertext → decryption 결과.
CCA에는 challenge 자체 복호화 금지가 명시적으로 중요하다.
CCA 보안이 더 강한 요구다.
문제를 푸는 순서
1단계: 약어를 풀어 P=Plaintext, C=Ciphertext를 표시한다.
2단계: CPA의 encryption oracle 입·출력을 한 문장으로 쓴다.
3단계: CCA의 decryption oracle 입·출력을 한 문장으로 쓴다.
4단계: CCA에서는 challenge ciphertext 자체 질의가 금지된다고 덧붙인다.
5단계: CCA가 더 강한 공격자 모델이며 IND-CCA가 더 강한 보안 목표라고 결론 낸다.
시험장에서는 이렇게 쓰기
Two point german
Beim IND-CPA darf der Angreifer selbst gewählte Klartexte durch ein Verschlüsselungsorakel verschlüsseln lassen. Beim IND-CCA hat er zusätzlich Zugriff auf ein Entschlüsselungsorakel für selbst gewählte Ciphertexte, wobei der Challenge-Ciphertext selbst nicht entschlüsselt werden darf; deshalb ist IND-CCA das stärkere Sicherheitsmodell.
Compact german
CPA: gewählte Plaintexte → Verschlüsselungsorakel. CCA: gewählte Ciphertexte → Entschlüsselungsorakel, außer dem Challenge-Ciphertext. CCA ist daher stärker.
Implication
IND-CCA-Sicherheit impliziert IND-CPA-Sicherheit, aber nicht notwendigerweise umgekehrt.
채점 포인트
CPA에서 chosen plaintext와 encryption oracle을 적었는가?
CCA에서 chosen ciphertext와 decryption oracle을 적었는가?
challenge ciphertext 예외를 적었는가?
CCA가 더 강한 모델임을 올바른 방향으로 썼는가?
두 모델의 공통 IND 목표를 필요 이상으로 다른 것으로 설명하지 않았는가?
자주 틀리는 지점
CPA를 ciphertext를 선택하는 모델, CCA를 plaintext를 선택하는 모델로 뒤집는 것.
CCA 공격자가 secret key를 받는다고 쓰는 것. 키 대신 oracle 접근권을 받는다.
IND-CPA와 IND-CCA의 목표가 서로 다르다고 쓰는 것. 둘 다 challenge 메시지 구별이 핵심이며 권한이 다르다.
IND-CPA가 더 강하다고 쓰는 것. decryption oracle까지 가진 CCA 공격자가 더 강하다.
IND-CCA ⇒ IND-CPA의 방향을 거꾸로 쓰는 것.
CCA가 무조건 암호문 전체를 복호화하는 데 성공한 상태라고 설명하는 것. 이는 공격 환경이며 보안 게임에서 성공 여부를 시험한다.
한 줄로 기억하기
P는 Plaintext를 넣어 Encrypt, C는 Ciphertext를 넣어 Decrypt. CCA 쪽 판독기가 봉투를 열어 주므로 공격자가 더 강하다.
스스로 확인하기
-
공격자가 'AAAA'를 암호화해 달라고 요청한다면 CPA와 CCA 중 어느 권한인가?
chosen plaintext를 encryption oracle에 넣는 CPA 권한이다.
-
공격자가 조작한 암호문 0xABCD를 복호화해 달라고 한다면?
chosen ciphertext를 decryption oracle에 넣는 CCA 권한이다.
-
IND-CCA secure이면 IND-CPA secure인가?
그렇다. 더 강한 공격 모델을 견디면 더 약한 모델도 견딘다.
-
IND-CPA secure이면 반드시 IND-CCA secure인가?
아니다. 복호화 oracle이나 암호문 변형을 이용한 공격에는 취약할 수 있다.
설명의 근거
Gedächtnisprotokoll Computersystemsicherheit WS2025_26.md, Krypto / Angreifermodelle, 2-(b), 2 Punkte.
Übung 1 Lösung, p.11-12 — CPA encryption oracle, CCA decryption oracle 및 challenge 예외.
Übung 2 Lösung, p.1-2 — CBC Padding Oracle을 CCA의 직관적 사례로 연결.
예제로 확인하기
-
공격자 모델과 oracle을 게임처럼 읽는 법을 구체적인 순서로 보기
시험장에서 계산기는 허용하지만 인터넷은 금지하는 것처럼, 공격자에게 허용되는 도구를 정확히 적어야 난이도와 성공 조건을 말할 수 있다.
공격자가 처음에 알고 있는 정보를 적는다.
어떤 oracle에 언제 질의할 수 있는지 적는다.
Challenger가 숨긴 값을 포함한 challenge를 만든다.
금지된 질의와 공격자의 최종 성공 조건을 적는다.
각 단계에서 입력이나 message가 어떻게 달라지는지 확인한 뒤 현재 문제의 조건과 결론에 연결합니다.
-
IND-CPA와 IND-CCA를 0부터 구분하기을 구체적인 순서로 보기
두 상자 중 하나를 잠가 보여 주고 어느 상자인지 맞히는 게임이다. CCA에서는 다른 잠긴 상자를 열어 달라고 물을 수 있지만 바로 시험에 나온 상자 c*를 열어 달라고 할 수는 없다.
m0와 m1의 길이를 같게 해 길이만으로 답을 맞히지 못하게 한다.
Challenger가 b를 무작위로 선택하고 c*=Enc(mb)를 만든다.
IND-CCA2에서는 challenge 이후에도 다른 암호문의 복호화를 질의할 수 있다.
c* 자체의 복호화는 금지하고 마지막에 b'를 추측한다.
각 단계에서 입력이나 message가 어떻게 달라지는지 확인한 뒤 현재 문제의 조건과 결론에 연결합니다.
이 문제가 어려운 이유
짧은 문제 문장 ‘IND-CCA(Chosen Ciphertext Attack)와 IND-CPA(Chosen Plaintext Attack)의 차이를 설명하라.’ 안에 정의, 조건, 처리 순서가 압축되어 있습니다. 아래 예시에서는 이를 한 단계씩 펼쳐 확인합니다.
AI 구두시험용 프롬프트
한 문항만 풀어라. 먼저 정답을 열지 말고 90초 안에 답안을 말한 뒤, css-ws2025-26-crypto-ang-002의 채점 프레임으로 스스로 채점하라. 문제: IND-CCA(Chosen Ciphertext Attack)와 IND-CPA(Chosen Plaintext Attack)의 차이를 설명하라.
학습 기록