용어집

초기화 벡터이란 무엇인가요?

초기화 벡터(IV)는 연산 전반에 걸쳐 동일한 평문이 동일한 키로 암호화되어도 서로 다른 암호문이 생성되도록 키와 함께 암호화 알고리즘에 추가 입력으로 사용되는 무작위 또는 유사 무작위 값이다.

다른 이름: IV, initialisation vector

초기화 벡터는 nonce와 동일한 근본적인 목적을 수행한다. 각 암호화 연산에 고유성을 도입한다. 두 용어는 종종 혼용되지만 "IV"는 블록 암호 모드(CBC, GCM, CTR) 맥락에서 더 일반적이고 "nonce"는 더 광범위하게 사용된다. AES-GCM에서 IV는 Galois/Counter Mode에서 사용되는 카운터를 초기화하는 12바이트 값이다.

IV는 비밀일 필요가 없다. 일반적으로 암호문과 함께 평문으로 저장되거나 전송된다. 보안 기여는 비밀성이 아닌 고유성에서 온다. 그러나 암호 모드에 따라 IV는 예측 불가능해야(CBC 모드처럼) 하거나 단순히 고유해야(GCM 모드처럼) 할 수 있다. CBC 모드에서 예측 가능한 IV를 사용하면 특정 공격이 가능해지는 반면 GCM은 단지 동일한 키로 IV를 재사용하지 않을 것만 요구한다.

AES-GCM에서 IV 재사용은 재앙적이다. 공격자가 인증 키를 복구하고 유효한 암호문을 위조할 수 있게 하며, 두 암호문 스트림의 XOR을 통해 평문에 대한 정보를 유출한다. 이 때문에 구현은 IV 생성에 암호학적으로 안전한 난수 생성기를 사용해야 하며 IV를 수동으로 구성하거나 재사용해서는 안 된다.

Vaulted가 초기화 벡터을 사용하는 방법

Vaulted는 모든 비밀에 대해 Web Crypto API의 crypto.getRandomValues()를 사용하여 새로운 12바이트 IV를 생성한다. IV는 암호문과 함께 서버로 전송되어 암호화된 레코드의 일부로 Redis에 저장된다. 수신자가 비밀을 가져오면 브라우저가 AES-256-GCM 복호화 매개변수를 재구성할 수 있도록 IV가 암호문과 함께 반환된다. Vaulted는 비밀마다 고유한 키도 생성하므로 키-IV 쌍은 항상 고유하다.