반응형

IV(Initialization Vector)는 쉽게 말하면:
암호화를 시작할 때 넣는 랜덤한 시작값
이다.
왜 필요하냐면 핵심은 딱 하나다:
같은 데이터가 항상 같은 암호문이 되는 걸 막기 위해
서다.
IV가 없으면 생기는 문제
AES는 기본적으로:
같은 평문 + 같은 키
=
항상 같은 암호문
이 나온다.
예:
비밀번호 = HELLO
키 = KEY123
이면 결과가 매번 동일하다.
즉:
HELLO -> ABCDEF
HELLO -> ABCDEF
HELLO -> ABCDEF
이렇게 된다.
이게 왜 위험할까?
공격자는 내용을 몰라도:
"아 이 둘은 같은 데이터구나"
를 알 수 있다.
예를 들어 DB 암호화에서:
사용자암호문
| A | X1Y2Z3 |
| B | X1Y2Z3 |
라면 공격자는:
"A와 B의 값이 동일"
하다는 걸 알게 된다.
IV의 역할
IV를 추가하면:
같은 평문이어도
매번 다른 시작 상태
로 암호화가 시작된다.
즉:
HELLO + IV1 -> AAA111
HELLO + IV2 -> BBB222
HELLO + IV3 -> CCC333
가 된다.
CBC에서 IV 사용 방식
CBC 첫 블록은 이전 암호문이 없다.
그래서 첫 번째 블록은:
C1=EK(P1⊕IV)C_1 = E_K(P_1 \oplus IV)
즉:
평문 XOR IV
→ AES 암호화
한다.
왜 첫 블록이 중요할까?
만약 IV 없으면:
첫 블록 패턴
이 그대로 반복된다.
실제로 파일 포맷들은 앞부분이 비슷하다.
예:
PNG 파일 헤더
ZIP 파일 헤더
PDF 헤더
이런 건 거의 고정이다.
IV가 없으면:
파일 종류 추측 가능
해진다.
IV는 비밀이어야 할까?
중요한 포인트다.
보통:
IV는 공개돼도 된다
오히려 대부분:
- 암호문 앞에 같이 저장
- 네트워크로 같이 전송
한다.
예:
[IV][암호문]
형태.
그럼 공개되는데 왜 의미가 있나?
IV의 목적은:
비밀 유지
가 아니다.
목적은:
매번 다른 암호화 결과 생성
이다.
즉 공격자가 IV를 알아도:
- 키를 모르므로 복호화 불가
- 단지 반복 패턴만 제거됨
이다.
하지만 IV는 “예측 가능하면” 위험
CBC에서는 랜덤 IV가 중요하다.
만약:
IV = 항상 0
이면 사실상 의미가 거의 없다.
또 predictable IV도 일부 공격 가능성이 생긴다.
그래서 보통:
cryptographically secure random
으로 생성한다.
GCM에서는 IV 대신 Nonce 개념
GCM에서는 보통:
Nonce
라는 표현을 더 많이 쓴다.
역할은 비슷하다:
매 암호화마다 고유값 제공
그런데 GCM은 더 엄격함
CBC는 IV 재사용해도 패턴 노출 정도 문제인데,
GCM은:
같은 키 + 같은 nonce 재사용
=
심각한 보안 붕괴
가 발생할 수 있다.
그래서 GCM에서는 nonce 중복 금지가 매우 중요하다.
Java 실무 예시
CBC:
Cipher.getInstance("AES/CBC/PKCS5Padding")
GCM:
Cipher.getInstance("AES/GCM/NoPadding")
보통:
SecureRandom
으로 IV/nonce 생성한다.
핵심 요약
IV가 필요한 이유는:
같은 데이터라도 매번 다른 암호문이 나오게 만들어
패턴 분석 공격을 막기 위해서
다.
즉 IV는:
암호화의 "랜덤 시작점"
역할을 한다.
반응형
'system_fundamentals > security_cryptography' 카테고리의 다른 글
| 파일 암호화 구조 (0) | 2026.05.14 |
|---|---|
| 스트림 암호 vs 블록 암호 (0) | 2026.05.14 |
| CBC/GCM 차이 (1) | 2026.05.14 |
| AES는 왜 빠른가 (0) | 2026.05.14 |
| ECB 모드는 왜 위험한가 (0) | 2026.05.14 |
댓글