JVM

java.security.invalidKeyException: Illegal Key Size

kyoulho 2024. 5. 4. 17:32

 

암호화와 Illega key size 에러


AES-256 암호화 등과 같이 128bit를 초과하는 암호화를 사용하려 할 때, 이러한 문제를 마주칠 수 있다.
이 문제는 미국의 수출 규제에 따른 것으로 과거에는 미국의 수출 규제로 인해 강력한 암호화 키를 포함하는 암호화 소프트웨어를 수출하는 것에 제한이 있었다.
Java는 기본적으로 JCE 정책을 제공하는데 이 정책은 128 bit로 키 길이가 제한되어 있어서 이를 초과하는 경우에 에러가 발생하는 것이다.
 
이 정책은 ${JAVA_HOME}/jre/lib/security/local_policy.jar의 default_local.policy 파일에서 확인할 수 있다.

// Some countries have import limits on crypto strength. This policy file
// is worldwide importable.

grant {
    permission javax.crypto.CryptoPermission "DES", 64;
    permission javax.crypto.CryptoPermission "DESede", *;
    permission javax.crypto.CryptoPermission "RC2", 128, 
          "javax.crypto.spec.RC2ParameterSpec", 128;
    permission javax.crypto.CryptoPermission "RC4", 128;
    permission javax.crypto.CryptoPermission "RC5", 128, 
          "javax.crypto.spec.RC5ParameterSpec", *, 12, *;
    permission javax.crypto.CryptoPermission "RSA", *;
    permission javax.crypto.CryptoPermission *, 128;
};

 

해결 방법


Oracle에서는 128 bit를 초과하는 키를 사용하고자 하는 사용자를 위해 JCE Unlimited Strength 정책 파일을 제공한다.
 

JDK 8u151 이전

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE Download

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files Download The Java Cryptography Extension enables applications to use stronger versions of standard algorithms. Current versions of the JDK do not require these policy files. The

www.oracle.com

다운받은 local_policy.jar, US_export_policy.jar 파일을 ${JAVA_HOME}/jre/lib/security 디렉터리로 옮긴다. 
기존 정책 파일은 삭제해도 되고, 덮어쓰기해도 된다. 여기까지 하면 JCE로 사용 가능한 모든 암호화의 키 길이 제한이 해제되어 128 bit를 초과하는 대칭키 알고리즘을 사용할 수 있다.
 

JDK 8u151 이후

JDK 8u151 이상 버전에서는 JCE 정책이 unlimited policy로 변경되었다. 이로 인해 Java 설치 시 JCE Unlimited Strength 정책 파일이 기본적으로 포함된다.${JAVA_HOME}/jre/lib/security/policy 디렉터리에 limited와 unlimited 두 개의 디렉터리가 있다.
따라서 JCE 다운로드 없이 /jre/lib/security/java.security 파일에 crypto.policy=unlimited 옵션 지정 시 바로 사용가능하다.
 
 
 
 

'JVM' 카테고리의 다른 글

테스트 커버리지와 JaCoCo  (0) 2024.07.27
StringBuffer vs StringBuilder  (0) 2024.07.22
자바 내부 클래스(Inner Classes)  (0) 2024.03.01
쓰레드 동기화  (0) 2024.03.01
Google JIB  (0) 2024.01.30