본문 바로가기
Java/암호화

Jasypt (application.properties 암호화)

by Mecodata 2024. 2. 28.

정의

- .properties 파일을 간단히 암호화 및 복호화하여 관리할 수 있도록 하는 Java 라이브러리

- .properties 파일에 DB 정보와 같은 보안 정보를 암호화하기 위해 주로 사용

- 기본 라이브러리가 아니기 때문에 별도로 import 필요

Gradle

implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3'

 

기본 세팅

application.properties

jasypt.encryptor.bean=jasyptEncryptor
spring.datasource.password=ENC(jal14ljlkjdaslko2j3c)

- application.properties에 ecnryptor bean을 정의

- encryptor를 통해 암호화한 데이터에 ENC()를 씌워 줘야함 -> 클래스에서 @Value를 통해 ENC()로 씌워진 데이터를 불러오면 자동으로 복호화가 된 데이터가 반환

JasyptConfig

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.salt.RandomSaltGenerator;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JasyptConfig {

	String password = "d123123uoiujksdjlakjlueluklsjdln";
	
	@Bean(name = "jasyptEncryptor")
	public StringEncryptor stringEncryptor() {
		
            // 문자열 암호화 수행 객체
            PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();

            encryptor.setProvider(new BouncyCastleProvider()); // 제공자
            encryptor.setPoolSize(2); // 인스턴스 pool 사이즈
            encryptor.setPassword(password); // 패스워드
            encryptor.setAlgorithm("PBEWithSHA256And256BitAES-CBC-BC"); // 알고리즘
            encryptor.setKeyObtentionIterations(1000); // 해싱 반복 횟수
            encryptor.setSaltGenerator(new RandomSaltGenerator()); // salt 생성 클래스 (Random)
            encryptor.setStringOutputType("base64"); // 인코딩 방식

            return encryptor;
	}
	
}

- @Bean에 파라미터로 application.properties에서 정의한 Bean명을 입력하여 Spring IOC 컨테이너가 encryptor Bean을 등록할 수 있도록 설정

- PooledPBEStringEncryptor = Jasypt에서 지원하는 문자열 데이터 암/복호화 객체

- PooledPBEStringEncryptor 객체에 여러가지 set 메소드들을 통해 설정들을 등록

※ 결국 Jasypt 설정도 password가 보안에 민감하므로 Jasypt 사용 시 password는 AWS Secrets Manager 같은 클라우드 제공 서비스를 이용하거나 OS의 환경 변수로 추가하여 관리하는 것이 좋음

 

알고리즘

- Jasypt는 일반적으로 MD5 해시 함수와 DES 대칭 암호화 알고리즘을 사용하는 PBEWithMD5AndDES를 사용

- 보안성을 높이기 위해 SHA256AES 대칭 암호화 알고리즘을 사용하는 PBEWithSHA256And256BitAES-CBC-BC 같은 알고리즘도 사용이 가능함

- PBEWithSHA256And256BitAES-CBC-BC는 AES256이기 때문에 128비트 키(32개 문자열)를 사용

- PBEWithSHA256And256BitAES-CBC-BC에서 BC는 Bouncy Castle Provider를 의미하는데 이는 별도로 import가 필요

implementation 'org.bouncycastle:bcprov-jdk15on:1.61'

Bouncy Castle 

- Java와 C#에서 사용할 수 있는 암호화 라이브러리 및 보안 프레임워크

- 지원 암호화 알고리즘 = AES, DES, RSA, DSA, ECC 등

- 지원 해시 함수 = MD5, SHA-1, SHA-256, SHA-512 등

- SSL/TLS 프로토콜의 구현을 제공

'Java > 암호화' 카테고리의 다른 글

암호화 패딩 종류  (0) 2024.03.18
블록 암호화 기법 종류  (0) 2024.03.18
암호화 알고리즘 종류  (0) 2024.03.18
javax.crypto.Cipher  (0) 2024.03.18

댓글