

CBC(Cipher Block Chaining)와 GCM(Galois/Counter Mode)의 가장 큰 차이는:
CBC = 암호화만 잘함
GCM = 암호화 + 위변조 검증까지 함
이다.
현재 실무에서는 거의 GCM이 표준처럼 쓰인다.
먼저 공통점
둘 다:
- AES 사용
- ECB 문제 해결
- 패턴 노출 방지
- 같은 평문도 매번 다른 암호문 생성
을 한다.
즉 둘 다 ECB보다 훨씬 안전하다.
CBC 동작 원리
CBC는:
현재 평문
XOR 이전 암호문
→ AES 암호화
구조다.
첫 블록은 이전 암호문이 없으므로 IV(초기값)를 사용한다.
CBC 흐름
Ci=EK(Pi⊕Ci−1)C_i = E_K(P_i \oplus C_{i-1})
그림으로 보면:
P1 XOR IV -> AES -> C1
P2 XOR C1 -> AES -> C2
P3 XOR C2 -> AES -> C3
이런 느낌이다.
CBC 장점
- ECB 패턴 노출 해결
- 구현 단순
- 오래 검증됨
과거 HTTPS에서도 엄청 많이 사용했다.
CBC 치명적 단점
1. 위변조 검증이 없음
CBC는:
암호화만 함
즉 공격자가 암호문 일부를 조작해도:
- 복호화 자체는 될 수 있음
- 데이터 변조 탐지 못할 수 있음
그래서 별도로:
- HMAC
- SHA 인증
등을 추가해야 했다.
2. Padding Oracle Attack 문제
CBC는 블록 맞추려고 padding 사용한다.
예:
HELLO
→ 뒤에 패딩 추가
이 패딩 오류 메시지를 잘못 처리하면:
Padding Oracle Attack
이라는 매우 위험한 공격이 가능하다.
실제 HTTPS에서도 큰 문제였다.
3. 병렬 처리 비효율
CBC는:
이전 블록 결과 필요
하다.
즉:
C1 계산 끝나야 C2 가능
이라 CPU 병렬처리에 불리하다.
GCM은 뭐가 다를까?
GCM은 내부적으로:
- CTR 모드 기반 암호화
- Galois 인증
을 결합했다.
즉:
암호화 + 인증(Authentication)
을 동시에 수행한다.
GCM 핵심 특징
1. AEAD 지원
GCM은:
Authenticated Encryption with Associated Data
즉:
- 기밀성(confidentiality)
- 무결성(integrity)
- 인증(authentication)
을 함께 제공한다.
2. Authentication Tag 생성
GCM은 암호화 결과와 함께:
TAG
를 만든다.
예:
암호문 + 인증태그
복호화 시:
- TAG 검증 실패
→ 즉시 오류
즉 데이터 조작을 바로 탐지한다.
3. 병렬 처리 매우 강함
GCM은 CTR 기반이라:
Ci=Pi⊕EK(Nonce∣∣Counteri)C_i = P_i \oplus E_K(Nonce || Counter_i)
각 블록이 독립적이다.
즉:
C1
C2
C3
동시에 계산 가능하다.
그래서 현대 CPU에서 엄청 빠르다.
특히 AES-NI와 궁합이 매우 좋다.
4. Padding 필요 없음
CTR 기반이라:
padding 자체가 필요 없음
따라서 CBC의 padding oracle 공격도 없다.
실제 현대 인터넷은 거의 GCM
현재:
- HTTPS TLS 1.2+
- TLS 1.3
- VPN
- 클라우드
- 모바일 앱
거의 AES-GCM 사용한다.
Java 실무 기준
예전:
AES/CBC/PKCS5Padding
현재 권장:
AES/GCM/NoPadding
이다.
그런데 GCM도 주의점이 있다
핵심:
Nonce 재사용 절대 금지
다.
같은 키 + 같은 nonce 재사용하면 매우 위험하다.
실무에서는:
- 랜덤 nonce 생성
- 절대 중복 금지
가 핵심이다.
정리 비교
| 패턴 숨김 | O | O |
| 무결성 검증 | X | O |
| 인증 태그 | X | O |
| 병렬 처리 | 불리 | 매우 유리 |
| Padding 필요 | O | X |
| 현대 권장 | 거의 안씀 | 표준급 |
| 주요 위험 | Padding Oracle | Nonce 재사용 |
핵심 한 줄
CBC는:
"암호화만 하는 과거 방식"
이고,
GCM은:
"암호화 + 위변조 검증까지 포함한 현대 표준 방식"
이라고 보면 된다.
'system_fundamentals > security_cryptography' 카테고리의 다른 글
| 스트림 암호 vs 블록 암호 (0) | 2026.05.14 |
|---|---|
| IV는 왜 필요한가 (0) | 2026.05.14 |
| AES는 왜 빠른가 (0) | 2026.05.14 |
| ECB 모드는 왜 위험한가 (0) | 2026.05.14 |
| 파일 checksum 원리 (0) | 2026.05.13 |
댓글