이미지도 결국 픽셀 데이터의 반복 덩어리인데, ECB(Electronic Codebook) 모드가 위험한 이유는 각 블록을 독립적으로 암호화 하므로:
같은 평문 블록 → 항상 같은 암호문 블록
이 되기 때문이다.
즉, 암호화는 했는데 “패턴”이 그대로 남는다. 반복영역, 경계, 구조가 노출됨
먼저 AES 자체는 안전하다
많이 헷갈리는 부분인데:
- AES 알고리즘 자체는 매우 안전
- 문제는 "어떻게 사용하느냐"
다.
AES는 블록 암호다.
즉:
128bit 단위로 끊어서 암호화
한다.
근데 여러 블록을 어떻게 연결해서 암호화할지 결정하는 게:
- ECB
- CBC
- GCM
- CTR
같은 “모드”다.
ECB의 동작 방식
ECB는 그냥 블록마다 독립적으로 암호화한다.
즉:
평문1 -> AES -> 암호문1
평문2 -> AES -> 암호문2
평문3 -> AES -> 암호문3
끝이다.
연결성이 없다.
문제의 핵심
AES는 같은 입력 + 같은 키면 항상 같은 출력이 나온다.
즉:
"A" -> XYZ123
"A" -> XYZ123
"A" -> XYZ123
항상 동일하다.
따라서 ECB에서는:
같은 데이터 패턴
=
같은 암호문 패턴
이 된다.
그래서 이미지 암호화하면 충격적인 결과가 나옴

유명한 예시가 펭귄 이미지다.
ECB로 이미지 암호화하면:
- 색상 정보는 깨지는데
- 윤곽/패턴은 남는다
즉:
"암호화했는데 그림이 보임"
현상이 생긴다.
왜냐면:
- 하얀 영역 반복
- 검정 영역 반복
- 같은 픽셀 패턴 반복
이 모두 동일 암호문 블록으로 변환되기 때문이다.
실무에서 진짜 위험한 이유
예를 들어 DB에 이런 값 저장:
| 사용자 | 역할 |
| user1 | ADMIN |
| user2 | USER |
| user3 | USER |
ECB면:
"USER" 블록
=
항상 같은 암호문
이 된다.
공격자는:
- 어떤 값이 반복되는지
- 어떤 사용자끼리 같은 값인지
- 특정 패턴 존재 여부
를 알 수 있다.
즉:
내용은 몰라도 구조는 노출
된다.
이게 엄청 위험하다.
더 위험한 점 — 블록 치환 공격
ECB는 블록이 독립적이라:
암호문 블록 순서 교체
도 가능하다.
예를 들어:
[USER]
[1000원]
블록을:
[ADMIN]
[1000000원]
같은 다른 블록으로 교체 가능성이 생긴다.
즉:
- 무결성 보장 안됨
- 블록 재조립 공격 가능
CBC/GCM은 왜 안전한가
ECB와 다르게:
- 이전 블록 영향
- IV(초기값)
- nonce
를 사용한다.
예를 들어 CBC:
현재 평문 XOR 이전 암호문
후 암호화한다.
따라서 같은 평문이어도:
매번 다른 암호문
이 나온다.
GCM이 현재 가장 많이 쓰이는 이유
요즘은 보통:
- AES-GCM
- ChaCha20-Poly1305
쓴다.
특히 Galois/Counter Mode 는:
- 빠름
- 병렬처리 가능
- 무결성 검증 포함
- 패턴 노출 방지
라서 HTTPS에서도 많이 사용된다.
ECB를 쓰면 안 되는 경우
사실상 대부분.
특히:
- 개인정보
- 로그인 토큰
- DB 암호화
- 네트워크 통신
- 파일 암호화
에서 ECB는 거의 금기 수준이다.
그런데 ECB를 아직 쓰는 곳도 있나?
의외로 있다.
주로:
- 레거시 시스템
- 옛 금융 장비
- 잘못 만든 사내 암호화
- "AES니까 안전하겠지" 착각
때문이다.
실무 보안 점검에서도:
AES/ECB/PKCS5Padding
보이면 거의 바로 지적 사항이다.
Java에서도 실수 많이 함
예:
Cipher.getInstance("AES");
이렇게 쓰면 일부 환경에서 기본값이:
AES/ECB/PKCS5Padding
될 수 있다.
그래서 실무에서는 명시적으로:
AES/GCM/NoPadding
같이 적는다.
핵심 요약
ECB가 위험한 이유는:
같은 평문 블록이 항상 같은 암호문 블록이 되어
데이터 패턴과 구조가 노출되기 때문
이다.
즉:
"암호화는 했는데 정보가 새고 있다"
상태가 된다.
'system_fundamentals > security_cryptography' 카테고리의 다른 글
| CBC/GCM 차이 (1) | 2026.05.14 |
|---|---|
| AES는 왜 빠른가 (0) | 2026.05.14 |
| 파일 checksum 원리 (0) | 2026.05.13 |
| 무결성이란 무엇인가 (0) | 2026.05.13 |
| Argon2 vs bcrypt (0) | 2026.05.13 |
댓글