본문 바로가기
개발/JAVA

[JAVA] 대칭키 암호화 알고리즘 키 제한 오류 해결 : Illegal key size

by zuzuu 2022. 1. 26.
반응형

 

개발 중 대칭키로 암호화해야할 상황이 생겼는데(DESede/CBC, DES/CBC, AES/CBC 등의 알고리즘 이용), 192 혹은 256 bit의 대칭키를 이용하여 암호화를 할 경우 에러가 발생했다.

java.security.InvalidKeyException: Illegal key size

원인을 찾아보니 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 정책 파일을 제공한다.
따라서 사용중인 JAVA 버전에 맞춰 정책 파일을 다운받아 교체 해주면 된다!

다운받은 local_policy.jar, US_export_policy.jar 파일을 <JAVA_HOME>/jre/lib/security/ 디렉토리로 옮긴다. 

기존 정책 파일은 삭제해도 되고, 덮어쓰기해도 된다. 여기까지 하면 JCE로 사용 가능한 모든 암호화의 키 길이 제한이 해제되어 128 bit를 초과하는 대칭키 알고리즘을 사용할 수 있다.


JDK 8u151 이상 버전에서는 아래와 같이 두개의 디렉토리로 나뉘어져 있고,  JCE 다운로드 없이 /jre/lib/security/java.security 파일에 crypto.policy=unlimited 옵션 지정 시 바로 사용가능하다.

  • <JAVA_HOME>/jre/lib/security/policy/limited
  • <JAVA_HOME>/jre/lib/security/policy/unlimited

 

 

728x90
반응형

댓글