본문 바로가기

JAVA

[JAVA] 자바 암호화 확장기능 JCE(Java Cryptography Extension) 구성

반응형

JCE(Java Cryptography Extension)란?

JCE(Java Cryptography Extension)는 WAS(Web Application Server)를 위한 암호 작성, 키, 해시 알고리즘을 제공합니다.

JCE는 암호화, 키 생성, 키 동의, Message Authentication Code(MAC) 알고리즘에 대한 프레임워크 및 구현을 제공합니다. 암호화 지원에는 비대칭, 

블록, 스트림 암호가 포함됩니다.

JCE(Java Cryptography Extension) 사용하는 이유

Java에서 Cipher 클래스를 이용해 AES256 암호화를 사용하면 java.security.InvalidKeyException: Illegal key size 라는 예외가 발생합니다.

Java에서 기본적으로 128bit(16byte)로 키 길이를 제한해뒀고, 기본 키 길이를 초과하는 경우 이 예외가 발생합니다.

Java는 기본적으로 제한된 JCE(Java Cryptography Extension) 정책을 제공합니다.

Java 기본 정책은 $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의 키 길이만 가능합니다. 길이에 제한을 둔 이유는 나라별로 수입 정책이 달라 사용 가능한 키 길이가 다르기 때문입니다.

 

AES256 암호화 방식을 사용하기 위해서는 Oracle 에서 제공하는 JCE(Java Cryptography Extension) Unlimited Strength Jurisdiction Policy 

파일을 다운 $JAVA_HOME/jre/lib/security 경로에 덮어씌우면 됩니다.
   1. local_policy.jar
   2. US_export_policy.jar

JCE(Java Cryptography Extension) 설치 방법

1. Java 버전에 맞는 JCE 파일 다운로드

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files Download
https://www.oracle.com/java/technologies/javase-jce-all-downloads.html

 

2. JCE 설치 

# JCE 파일 압축 해제
unzip -d JCE jce_policy-8.zip
cd JCE
ls -altr

# 기존 파일 백업
cp $JAVA_HOME/jre/lib/security/local_policy.jar $JAVA_HOME/jre/lib/security/local_policy.jar.bak
cp $JAVA_HOME/jre/lib/security/US_export_policy.jar $JAVA_HOME/jre/lib/security/US_export_policy.jar.bak

# 신규 파일 복사
cp local_policy.jar $JAVA_HOME/jre/lib/security/
cp US_export_policy.jar $JAVA_HOME/jre/lib/security/

JCE(Java Cryptography Extension) 정책

8u161, 7u171 및 6u181 이전의 Java는 AES256 암호화를 사용하기 위해서는 위의 방법처럼 Unlimited Strength Jurisdiction Policy 파일을 다운받아 $JAVA_HOME/jre/lib/security/ 내 덮어씌워야한다.

추가로,  8u151 Release Notes 에서는 JCE 파일 다운로드하여 설치할 필요없이, $JAVA_HOME/jre/lib/security/java.security 파일 내 주석을 해제하여 제한 해제된 정책을 사용할 수 있습니다.

#crypto.policy=unlimited
crypto.policy=unlimited

 

 

[참고]

https://www.ibm.com/docs/ko/i/7.3?topic=security-java-cryptography-extension
https://hongsii.github.io/2018/04/05/java-aes256-error/
https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_JCE_%EC%84%A4%EC%B9%98
https://golb.hplar.ch/2017/10/JCE-policy-changes-in-Java-SE-8u151-and-8u152.html

반응형