1. 개요
고급 암호화 표준 (AES)는 널리 사용되는 대칭 블록 암호 알고리즘이다. IV ( Initialization Vector )는 AES 알고리즘에서 중요한 역할을합니다.
이 예제에서는 Java에서 IV를 생성하는 방법을 설명합니다. 또한 IV를 생성하고이를 암호 알고리즘에서 사용할 때 InvalidAlgorithmParameterException 을 피하는 방법을 설명 합니다 .
2. 초기화 벡터
AES 알고리즘에는 일반적으로 일반 텍스트, 비밀 키 및 IV의 세 가지 입력이 있습니다. 128 비트 블록의 데이터를 암호화 및 해독하기 위해 128, 192 및 256 비트의 비밀 키를 지원합니다. 아래 그림은 AES 입력을 보여줍니다.
IV의 목표는 암호화 프로세스를 강화하는 것입니다. IV는 일부 AES 작동 모드 에서 비밀 키와 함께 사용됩니다 . 예를 들어 CBC (Cipher Block Chaining) 모드는 알고리즘에서 IV를 사용합니다.
일반적으로 IV는 보낸 사람이 선택한 의사 난수 값입니다. 암호화를위한 IV는 정보를 복호화 할 때 동일해야합니다.
암호화 된 블록과 크기가 같습니다. 따라서 IV의 크기는 16 바이트 또는 128 비트입니다.
3. IV 생성
랜덤의 IV를 생성하려면 java.util.Random 대신 java.security.SecureRandom 클래스 를 사용하는 것이 좋습니다 . 또한 IV를 예측할 수없는 것이 가장 좋습니다. 또한 소스 코드에서 IV를 하드 코딩해서는 안됩니다.
암호에서 IV를 사용하기 위해 IvParameterSpec 클래스를 사용합니다 . IV를 생성하는 방법을 만들어 보겠습니다.
public static IvParameterSpec generateIv() {
byte[] iv = new byte[16];
new SecureRandom().nextBytes(iv);
return new IvParameterSpec(iv);
}
4. 예외
AES 알고리즘에서는 IV 크기가 16 바이트 (128 비트) 여야합니다. 따라서 크기가 16 바이트가 아닌 IV를 제공하면 InvalidAlgorithmParameterException 이 발생 합니다.
이 문제를 해결하기 위해 16 바이트 크기의 IV를 사용해야합니다. AES CBC 모드에서 IV 사용에 관한 샘플 스 니펫 코드는 이 문서 에서 찾을 수 있습니다 .
5. 결론
요약하면 Java에서 IV (Initialization Vector)를 생성하는 방법을 배웠습니다. 또한 IV 세대와 관련된 예외를 설명했습니다. 이 사용방법(예제)에서 사용 된 소스 코드는 GitHub에서 사용할 수 있습니다 .