JoJun's
Jun's Devlog
JoJun's
전체 방문자
오늘
어제
  • 분류 전체보기 (51)
    • Java (16)
      • SpringBoot (12)
      • Java (4)
    • Linux (11)
      • CentOS (4)
      • 명령어(CentOS) (5)
      • Docker (2)
    • DataBase (15)
      • 튜닝 기법 (1)
      • MSSQL (7)
      • SQLD,SQLP (6)
    • 알고리즘 (4)
      • 정렬 (1)
      • 해시 (1)
      • 완전탐색 (1)
      • 탐욕법 (1)
    • 인프라 (3)
    • Web (2)
    • 개인공간 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • docker
  • MSSQL
  • springboot
  • log4j2
  • Java
  • Dockerfile
  • @Component
  • 알고리즘
  • cors
  • 파일그룹

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JoJun's

Jun's Devlog

[Java] InvalidKeyException AES 256 암호화 에러
Java/Java

[Java] InvalidKeyException AES 256 암호화 에러

2022. 2. 10. 10:42
728x90
반응형

● 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 1.2 Ver
  • Java 1.4 Ver
  • Java 5 Ver
  • Java 6,7,8 Ver

**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설정 값을 변경해주면 된다.

728x90
반응형
저작자표시 비영리 변경금지

'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
    'Java/Java' 카테고리의 다른 글
    • JUL (java.util.logging) vs Log4j2 vs SLfj2 비교하기.
    • [Java] Log4j 원격코드실행 이슈 JNDI injection
    • [Java] CheckedException과 UncheckedException이야기
    JoJun's
    JoJun's
    JoJun's의 기술블로그

    티스토리툴바