● Java 암호화 키 길이 정책
Java에서 AES 256 암호화 복호화 방식을 구현하다 보면 java.security.InvalidKeyException: Illegal key size
예외가 발생하는 경우가 있다.
Java에서는 기본적으로 128bit (16byte)로 키 길이를 제한해뒀고, 기본 키 길이를 초과하는 경우 예외가 발생한다.
컴퓨터 세팅을 하면서 Java JDK 설치 후 환경설정을 하는데 JDK안에 해당 버전의 Java 정책이 포함되어있다.
Java는 기본적으로 JCE (Java Cryptography Extension) 암호화 정책을 제공한다.
<JAVA_HOME>/jre/lib/security/local_policy.jar
안에 default_local.policy
파일 안에서 확인할 수 있다.
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;
};
위에 언급된 암호화 방식을 제외한 모든 암호화 방식은 128bit 만 허용한다는 정책을 마지막 줄에서 확인 할 수 있다. 이러한 제한은 나라별로 수입 정책이 달라 사용 가능한 키 길이를 제한 두었다고 한다.
● 암호화 키 길이 정책 해제
Oracle에서는 암호화 키 길이 정책이 해제된 JCE (Java Cryptography Extension) 파일을 제공하고 있다.
**Java 8u161 버전 이상부터는 기본적으로 키 길이 정책이 해제되어있다.
다운로드한 파일 안에 local_policy.jar
& US_export_policy.jar
파일을 <JAVA_HOME>/jre/lib/security
폴더 안에 기존 정책 파일을 덮어쓰기 하여 변경해주면 키 길이 제한이 해제된다.
추가로 8u151 Release버전부터는 <JAVA_HOME>/jre/lib/security/policy
에 limited
, unlimited
폴더로 정책 파일이 구성되고 <JAVA_HOME>/jre/lib/security/java.security
파일에 crypto.policy=unlimited
설정 값으로 쉽게 변경할 수 있다.
● Java 기본 정책 변경
2018년 Java8u161 Release Notes 업데이트 릴리즈 노트를 참고하면 아래와 같은 설명이 있다.
Unlimited cryptography enabled by default
The JDK uses the Java Cryptography Extension (JCE) Jurisdiction Policy files to configure cryptographic algorithm restrictions. Previously, the Policy files in the JDK placed limits on various algorithms. This release ships with both the limited and unlimited jurisdiction policy files, with unlimited being the default. The behavior can be controlled via the new 'crypto.policy' Security property found in the /lib/java.security file. Please refer to that file for more information on this property.
Java8u161 버전부터는 JCE 기본 정책이 Unlimited이며, 길이 제한을 두고 싶다면, java.security
설정 파일에서 crypto.policy
설정 값을 변경해주면 된다.
'Java > Java' 카테고리의 다른 글
JUL (java.util.logging) vs Log4j2 vs SLfj2 비교하기. (1) | 2023.12.07 |
---|---|
[Java] Log4j 원격코드실행 이슈 JNDI injection (0) | 2021.12.30 |
[Java] CheckedException과 UncheckedException이야기 (0) | 2021.12.30 |