초기화 벡터 (Initialization Vector)

정보보안학
한 줄 정의: 블록암호 운영모드 등에서 첫 블록 처리에 섞어 넣는 값으로, 같은 평문이 같은 암호문이 되지 않게 합니다.

쉽게 풀면

같은 키로 같은 문장을 두 번 암호화하면 결과도 똑같아져서, 공격자가 "같은 내용이 또 전송됐다"는 사실을 알 수 있습니다. 초기화 벡터는 암호화를 시작할 때 함께 넣는 값으로, 매번 달라지게 해 이런 노출을 막습니다. 초기화 벡터 자체는 비밀이 아니어서 보통 암호문 앞에 붙여 보냅니다.

왜 중요한가

실제 보안 사고 중에는 알고리즘이 아니라 초기화 벡터를 잘못 쓴 구현 실수에서 비롯된 경우가 많습니다. 그래서 암호 라이브러리 오용 분석이나 프로토콜 취약점 연구에서 자주 점검 대상이 됩니다.

논문에서는 이렇게 쓰입니다

"분석 대상 앱 상당수가 고정된 [[initialization-vector|초기화 벡터]]를 사용하여 CBC 모드 암호화의 안전성을 약화시키고 있었다."

암호 API 오용을 실증한 연구의 결과 서술 예입니다.

조금 더 깊게 보면

모드마다 초기화 벡터에 요구되는 조건이 다릅니다. CBC 모드는 예측할 수 없는 무작위 값이 필요하고, CTR이나 GCM 모드는 예측 가능해도 되지만 같은 키에서 절대 반복되면 안 되는 논스(nonce)로 씁니다. 특히 GCM에서 논스가 한 번이라도 재사용되면 기밀성과 인증이 함께 무너질 수 있습니다. 과거 무선랜 WEP은 짧은 초기화 벡터가 금방 반복되는 설계 문제로 깨졌습니다.

주의할 점

금융의 내재변동성(IV)과는 약어만 같습니다. 블록 암호 운영 모드가 블록암호를 긴 데이터에 적용하는 방식 전체라면, 초기화 벡터는 그 방식에 넣는 입력값 하나이며 비밀 키와 달리 숨길 필요가 없다는 점도 헷갈리지 마세요.

관련 용어