Tech/Java

java.security.InvalidKeyException: Illegal key size or default parameters  : Model has no value for key 에러 해결

봄의 개발자 2024. 12. 9.
728x90
반응형

들어가며

AES 256 암복호화 코드를 구현하고 이를 사용하는 도중에 에러가 발생했다. 처음에는 구현한 코드의 문제라고 생각을 했는데, 구글리을 해보니 자바의 문제였다. 이는 보통 자바에서 대칭키로 암호화할 때 128bit를 초과하는 대칭키를 사용할 때 발생한다고 한다.

 

원인

자바는 기본적으로 JCE 정책을 제공한다. 이 정책은 미국의 정책에 따라 128bit로 키 길이가 제한되어 있어서 이를 초과하는 경우에 에러가 발생할 수 있다.

 

해결방법

Unlimited Strength 정책을 적용해 해결할 수 있다.

오라클에서는 128bit 초과하는 키를 사용하고자 하는 사용자를 위해 공식 홈페이지에서 Unlimited Strength 정책 파일을 제공하고 있다.

 

1) JAVA 6 : https://www.oracle.com/kr/java/technologies/javase-jce6-downloads.html
2) JAVA 7 : https://www.oracle.com/java/technologies/javase-jce7-downloads.html
3) JAVA 8u151버전 미만 :  https://www.oracle.com/kr/java/technologies/javase-jce8-downloads.html

 

적용방법

[jdk 1.7의 경우]

해당 링크로 들어가서 UnlimitedJCEPolicyJDK7.zip 파일을 다운로드 받는다.

 

파일 압축을 풀어서 확인하면 두가지 jar 파일 (local_policy.jar, US_export_policy.jar)이 있다.

 

jdk 1.7 폴더로 이동해서 두가지 파일을 교체해주면 된다.

 


[jdk 8u151 이상의 경우]

이 버전의 경우에는 default 정책이 Unlimited이다.

그래서 만약 키 길이에 제한을 두고 싶다면 java.security 파일에서 직접 주석 처리를 해줘야한다. 

해당 jdk 폴더로 이동하여 java.secutiry 파일을 연다.

 

crypto.policy 를 찾아서 보면 unlimited 라고 기본적으로 설정되어 있다. 이를 주석처리 해주면 기본 정책이 해제된다.


현재 나는 이클립스 프로젝트 jdk 버전은 1.7이고 톰캣 서버에서 사용하는 jdk 버전은1.8 이다.

처음에는 프로젝트에서 사용하는 jdk 폴더의 policy.jar 파일만 변경하여 에러가 계속 발생했다.

그래서 톰캣 서버에서 사용하는 jdk 에서도 동일하게 정책 해제 시켜 에러를 해결할 수 있었다!

 

마치며

이번 기회에 자바의 JCE 정책에 대해 새롭게 알게 되었다. 자세한 개념에 대해서는 추후에 다시 정리해볼 예정이다!

새로운 에러를 만나 나름 짜릿했던걸로 ... 하하!

728x90
반응형

댓글