암호화와 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 이전
다운받은 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 |