백엔드
우리는 암호화화는데 왜 키를 사용할까?
두줄요약
암호화 설계를 위해 고전 암호부터 현대 암호, 하이브리드와 봉투 암호화까지의 흐름을 정리했습니다. JPA와 Hibernate 확장 포인트를 활용해 실무에서 암복호화를 자동화한 경험도 소개했습니다.
문제 상황
- 암호화 모듈의 의존 라이브러리 구버전 고착으로 최신 애플리케이션과 호환성 문제 발생
- 유틸리티 클래스와 정적 메서드 중심 구조로 보안 규정 변화와 확장 대응에 한계
- 암호화를 제대로 이해하지 못하면 설계와 리팩토링 자체가 어려운 상황
원인 분석
- 고전 암호는 알고리즘 비밀에 의존해 브루트포스와 빈도 분석에 취약
- 현대 암호학은 알고리즘이 노출되어도 키 비밀성으로 안전성을 확보하는 방향으로 전환
- 대칭키와 비대칭키는 각각 속도와 키 관리 측면에서 장단점이 뚜렷
해결 방법
- 원문은 대칭키로 빠르게 암호화하고 대칭키는 비대칭키로 감싸는 하이브리드 암호화 채택
- 데이터 키와 키 암호화 키를 분리하는 봉투 암호화로 운영 단순화와 키 관리 강화
- JPA AttributeConverter, Hibernate UserType/ParameterizedType으로 암복호화 자동화 모듈 구성
주의할 점
- Entity LifeCycle에서 엔티티 값을 직접 수정하면 1차 캐시와의 불일치로 예기치 않은 update 발생 가능
- AttributeConverter는 단순하지만 추가 파라미터 전달과 타입 확장에 제약 존재
- UserType/ParameterizedType은 유연하지만 구현 복잡도와 타입 안전성 한계 존재
