7장. 블록 암호 운용
이 장에서는 DES의 보안 강화를 위한 다중 암호화(Triple DES)와, 블록 암호를 다양한 응용에 적용하기 위한 **운용 모드(Modes of Operation)**를 다룬다. NIST SP 800-38A에서 정의한 5가지 모드와 저장 장치용 XTS-AES, 형식 보존 암호화(FPE)를 학습한다.
학습 목표
- 다중 암호화 방식의 보안성을 분석한다.
- 중간 일치 공격(Meet-in-the-middle Attack)을 설명한다.
- ECB, CBC, CFB, OFB, CTR 모드를 비교한다.
- XTS-AES 모드의 구조를 개관한다.
7.1 다중 암호화와 Triple DES
Double DES
두 개의 키 , 로 순차 암호화한다.
키 길이가 112비트로 보이지만, 중간 일치 공격에 의해 실질 보안 강도는 에 불과하다.
중간 일치 공격 (Meet-in-the-Middle Attack)
기지 평문 에 대해:
- 를 개 가능한 으로 암호화하여 테이블 저장
- 를 개 가능한 로 복호화하여 테이블과 대조
- 일치하는 후보를 다른 평문-암호문 쌍으로 검증
총 연산량: 약 (112비트 탐색이 아닌 56비트 수준)
Triple DES (3DES)
2키 3DES (EDE 구조)
- 중간에 (복호화)를 사용하는 이유: 단일 DES와의 하위 호환성 (이면 단일 DES와 동일)
- 무차별 대입 공격 연산량:
3키 3DES
- 또는 으로 하위 호환 가능
- 이론적 키 길이 168비트이나 유효 보안 강도는 약 112비트
- PGP, S/MIME 등 인터넷 응용에서 채택
7.2 블록 암호 운용 모드 요약
| 모드 | 설명 | 주요 용도 |
|---|---|---|
| ECB | 각 블록을 독립적으로 동일 키로 암호화 | 단일 값(키 등)의 암호화 |
| CBC | 이전 암호문 블록과 XOR 후 암호화 | 범용 블록 단위 전송, 인증 |
| CFB | 이전 암호문을 암호화한 출력과 평문을 XOR | 스트림 지향 전송, 인증 |
| OFB | 이전 암호화 출력 자체를 다시 암호화 | 잡음 채널에서의 스트림 전송 |
| CTR | 카운터를 암호화하여 평문과 XOR | 범용, 고속 처리 |
7.3 ECB (Electronic Codebook)
- 가장 단순한 모드
- 동일 평문 블록 → 동일 암호문 블록 (패턴 노출 위험)
- 단일 블록 이하의 짧은 메시지에만 적합
7.4 CBC (Cipher Block Chaining)
복호화:
- IV(Initialization Vector): 송수신자 공유, 예측 불가능해야 함
- 동일 평문 블록이 반복되어도 암호문은 다름
- 블록 이상의 메시지 암호화에 적합
- 인증(MAC)에도 사용 가능
7.5 CFB (Cipher Feedback)
블록 암호를 스트림 암호처럼 사용하는 모드이다. 비트 단위로 처리한다.
- 시프트 레지스터에 IV로 초기화
- 각 단계에서 시프트 레지스터를 갱신하여 다음 암호화에 사용
- 복호화 시에도 암호화 함수만 사용 (복호화 함수 불필요)
- 암호화는 직렬, 복호화는 병렬 가능
7.6 OFB (Output Feedback)
- CFB와 유사하나 암호화 출력 자체를 피드백 (평문/암호문과 무관)
- 키스트림이 평문과 독립적 → 전형적인 스트림 암호 구조
- 비트 오류가 전파되지 않음 (해당 블록만 영향)
- 메시지 스트림 변조 공격에 취약 (비트 반전 가능)
- IV는 반드시 nonce(비반복 값)이어야 함
7.7 CTR (Counter)
카운터 를 암호화하여 키스트림을 생성하고 평문과 XOR한다.
CTR 모드의 장점
| 장점 | 설명 |
|---|---|
| 하드웨어 효율 | 블록 간 체이닝 없어 완전 병렬 처리 가능 |
| 소프트웨어 효율 | 파이프라이닝, SIMD 등 병렬 기능 활용 |
| 전처리 | 카운터 암호화를 미리 수행 가능 |
| 랜덤 접근 | 번째 블록을 독립적으로 처리 가능 |
| 증명 가능 보안 | 다른 모드 이상의 보안성 증명 가능 |
| 단순성 | 암호화 알고리즘만 구현 (복호화 불필요) |
7.8 운용 모드 비교
| 특성 | ECB | CBC | CFB | OFB | CTR |
|---|---|---|---|---|---|
| 패턴 은닉 | ✗ | ✓ | ✓ | ✓ | ✓ |
| IV 필요 | ✗ | ✓ | ✓ | ✓ | 카운터 |
| 병렬 암호화 | ✓ | ✗ | ✗ | ✗ | ✓ |
| 병렬 복호화 | ✓ | ✓ | ✓ | ✗ | ✓ |
| 오류 전파 | 해당 블록 | 2블록 | 다수 블록 | 해당 블록 | 해당 블록 |
| 스트림 암호 | ✗ | ✗ | ✓ | ✓ | ✓ |
7.9 XTS-AES 모드
블록 지향 저장 장치 암호화를 위한 모드이다 (IEEE Std 1619-2007).
Tweakable Block Cipher
일반 블록 암호에 tweak 를 추가하여 동일 평문이라도 위치에 따라 다른 암호문을 생성한다.
XTS-AES 단일 블록 연산
두 개의 AES 인스턴스와 두 개의 키(Key1, Key2)를 사용한다.
| 파라미터 | 설명 |
|---|---|
| Key1 | 데이터 암호화용 |
| Key2 | tweak 암호화용 |
| 데이터 유닛(섹터) 번호 (tweak) | |
| 블록 번호 (카운터 역할) | |
| 의 원시원소 (에 대응) |
암호화:
복호화:
섹터 단위 연산
- 각 128비트 블록을 독립적으로 처리 → 병렬 가능
- 마지막 블록이 128비트 미만이면 ciphertext stealing 기법 사용
7.10 형식 보존 암호화 (FPE)
정의
평문과 동일한 형식의 암호문을 생성하는 암호화 기법이다.
| 항목 | 평문 | FPE 암호문 | AES 암호문 (16진수) |
|---|---|---|---|
| 신용카드 | 8123 4512 3456 6780 | 8123 4521 7292 6780 | af411326466add24... |
| 세금 ID | 219-09-9999 | 078-05-1120 | 7b9af4f3f218ab25... |
설계 과제
- 가역적이면서 형식 보존
- 다양한 문자 유형과 가변 길이 지원
- 짧은 평문에서도 강한 보안
Feistel 기반 FPE
대부분의 FPE 알고리즘은 Feistel 구조를 사용하며, 라운드 함수 의 출력과 모듈러 덧셈으로 치환을 수행한다. 는 가역일 필요가 없다.
NIST 표준 알고리즘 (SP 800-38G)
| 알고리즘 | 라운드 수 | radix 범위 | 라운드 함수 | 특징 |
|---|---|---|---|---|
| FF1 | 10 | CBC 기반 PRF | 최대 길이/tweak 범위 지원 | |
| FF2 | 10 | ECB 기반 (서브키 사용) | 부채널 공격 방어에 유리 | |
| FF3 | 8 | ECB 기반 | 최소 라운드, 64비트 고정 tweak |
주요 용어
| 한국어 | 영어 | 설명 |
|---|---|---|
| 3중 DES | Triple DES (3DES) | DES를 3회 적용하는 다중 암호화 |
| 중간 일치 공격 | Meet-in-the-Middle Attack | 이중 암호화를 수준으로 공격 |
| ECB 모드 | Electronic Codebook | 블록 독립 암호화 |
| CBC 모드 | Cipher Block Chaining | 이전 암호문과 체이닝 |
| CFB 모드 | Cipher Feedback | 스트림 암호화 (s비트 단위) |
| OFB 모드 | Output Feedback | 암호화 출력 피드백 |
| CTR 모드 | Counter | 카운터 암호화 기반 |
| 초기화 벡터 | Initialization Vector (IV) | CBC/CFB/OFB에서 첫 블록 입력 |
| 논스 | Nonce | 비반복 고유값 |
| XTS-AES | XTS-AES | 저장 장치용 tweakable 블록 암호 모드 |
| 형식 보존 암호화 | Format-Preserving Encryption | 입력과 동일 형식의 출력 생성 |
| Tweakable 블록 암호 | Tweakable Block Cipher | tweak 파라미터를 추가한 블록 암호 |
| 암호문 훔치기 | Ciphertext Stealing | 부분 블록 처리 기법 |