안녕하세요, 서명현입니다. 🤚
저희 프로젝트에서는 properties 파일에 저장되어 있는 데이터들을 암호화하여 사용하고 있습니다.
properties 파일에 저장되어 있는 데이터들을 암호화하는 방법은 여러가지가 있지만, 저희는 Jasypt를 이용하여 암호화를 하고 있는데요.
이번 포스팅에서는 Properties 암호화의 필요성과 Jasypt를 사용하게 된 이유, 동작 원리에 대해 소개하겠습니다.
목차 소개
이번 포스팅은 다음과 같은 순서로 진행됩니다.
1. Properties 암호화가 필요한 이유
프로젝트 내에는 기본적으로 비밀번호나 민감한 정보들을 저장해서는 안되는 데이터들이 존재합니다.
그럼에도 불구하고 데이터베이스 접속 정보나 api key 등을 properties 파일에 저장하는 경우가 있는데요.
이러한 요소들을 일반 텍스트로 저장하면 악의적인 행위자가 비밀번호를 이용해 계정, 시스템 및 데이터에 대한 무단 액세스가 발생하여 보안에 취약해질 수 있습니다.
이러한 이유로 properties 파일에 저장되어 있는 데이터들을 암호화하여 사용하는 것을 권장하고 있습니다.
AWS 키 노출 사례
대표적으로 AWS에서는 키와 같은 보안 요소가 노출되었을 때 메일로 경고하고 있습니다.
이와 같이 민감한 정보가 노출된다면, 악의적인 행위자가 해당 키를 이용해 AWS 리소스에 접근하여 피해를 입힐 수 있는데요.
실제로 2000만원 과금된 경우도 있었다고 합니다. 이러한 보안적인 위험으로 인해 프로젝트 개발에 있어서 암호화는 필수여야 할 것입니다.
[AWS] 회사에서 AWS access key, AWS secret key 유출로 2000만원 과금된 썰
2. Spring properties 암호화 종류
Spring 프레임워크에서 주로 사용되는 properties 암호화 방법들을 위주로 소개하겠습니다.
Jasypt (Java Simplified Encryption)
Jasypt는 데이터를 쉽게 암호화하고 해독할 수 있는 라이브러리입니다.
Jasypt는 다음과 같은 특징을 가지고 있습니다.
- 간단한 API
- 다양한 암호화 알고리즘 지원
- Spring Framework와의 쉬운 통합
- 무료 오픈소스 라이브러리
Spring Vault
Spring Vault는 HashiCorp Vault를 사용하여 암호화된 데이터를 저장하고 검색할 수 있는 라이브러리입니다.
민감한 정보를 안전하게 보관하고 암호화하는 도구로 Spring과 통합할 수 있습니다.
Spring Vault는 다음과 같은 특징을 가지고 있습니다.
- 접근 권한 및 보안 관리에 중점을 두어 보안성이 우수
- 다양한 인프라와의 통합
Spring Cloud Config
중앙 집중식 구성 관리 시스템으로 Spring 애플리케이션의 프로퍼티를 중앙 집중식으로 관리할 수 있습니다.
Spring Cloud Config는 다음과 같은 특징을 가지고 있습니다.
- 중앙 집중식 구성 관리 시스템
- 보안 및 구성 업데이트를 중앙에서 관리하여 보안성이 높음
3. 왜 Jasypt인가?
일반적으로 강력한 보안이 필요한 기업 단위의 프로젝트에서는 주로 Spring Vault나 Spring Cloud Config을 사용한다고 합니다.
하지만 적절한 인프라 및 환경 설정이 필요하기 때문에 규모가 작은 프로젝트에서는 적절하지 않을 수 있는데요.
저희 프로젝트도 보안이 중요하지만, 규모가 크지 않고 애플리케이션 개발에 집중하기 위해 비교적 간단한 암호화 방법인 Jasypt를 사용하게 되었습니다.
또한 다른 암호화 방법들에 비해 레퍼런스가 많다는 점도 선택한 이유 중 하나입니다.
선택한 Jasypt 알고리즘
Jasypt에서 가장 많이 사용되는 알고리즘은 PBEWithMD5AndDES 알고리즘입니다.
Jasypt의 기본 암호화 알고리즘으로, 주로 비밀번호나 비밀 키를 기반으로 데이터를 암호화하는 데 사용되는 대칭키 알고리즘입니다.
4. Jasypt 동작 원리
Spring 애플리케이션에서 Jasypt가 구동될 때의 동작 원리는 다음과 같습니다.
- Spring 프로젝트에서 Jasypt를 사용하기 위해 의존성을 추가합니다.
- 암호화할 데이터를 properties 파일에 저장합니다.
- Spring 프로젝트에서 Jasypt를 사용하기 위해 Configuration 파일을 추가합니다.
- Configuration 파일에서 properties 파일에 저장된 암호화 키를 읽어와 암호화 키로 설정합니다. (환경변수를 사용하여 암호화 키를 설정합니다.)
- 암호화된 데이터를 복호화하여 사용합니다.
Tool
암호화/복호화 시 다음과 같은 툴을 활용할 수 있습니다.
마무리
이번 포스팅은 Properties 암호화의 필요성과 Jasypt를 사용하게 된 이유, 동작 원리에 대한 소개하였습니다.
이상으로 Jasypt를 이용한 Properties 암호화에 대한 포스팅을 마치겠습니다.🖐️
끝까지 읽어주셔서 감사합니다.
이 포스팅은 다음 문헌을 참고하였습니다.