2025-08-14
1일 1아티클
카카오페이 테크
암호화
역사
- 고전 암호화
- 치환 규칙, 전치 규칙 알고리즘 기반 암호 (공격자가 알고리즘을 모른다고 가정하여 설계)
- 암호문만 있어도 브루트포스, 빈도 분석으로 쉽게 해독 가능
- 현대 암호화
- 케르크호프 원리를 바탕으로 인식 전환
적은 시스템을 알고 있다.
암호체계의 안전성은 키의 비밀성에만 의존해야 한다.
비밀이 의도치않게 공개되었을 때, 이를 변경하는 비용이 최소화되어야 한다.- 키 기반 암호
- 대칭키 암호 : 암호화와 복호화에 동일한 키 사용 (ex. AES, etc.)
- 비대칭키 암호 : 암호화와 복호화에 다른 키 사용 (ex. RSA, etc.)
- 암호화에는 공개키 사용, 복호화에는 개인키 사용 (개인키 가진 당사자만 복호화 가능!)
- 키 관리 편의성 우수
- 암호화 가능한 평문 길이의 한계 (수학적 연산으로 키를 만들기에 비트 길이에 따른 제한 존재)
- RSA의 암호화, 복호화 시 수학적 연산 필요 → AES보다 느림
- 하이브리드 암호화 : 원문은 대칭키 방식으로 암호화, 대칭키를 비대칭키로 암호화하여 배포 (ex. JWT, etc.)
- 일반적으로 대칭키 자체는 원문보다 가볍기에 이 키를 비대칭키로 암호화하면 속도도 챙길 수 있음
봉투 암호화 : 하이브리드 개념을 실무에 적용하기 위한 암호화 방법론
데이터를 암호화하기 위한 키(DEK), DEK를 암호화하기 위한 키(KEK)로 구성
데이터(암호문)와 데이터를 암호화할 때 사용한 키(암호문)를 하나의 봉투처럼 묶어서 관리
ex. AWS KMS, Google Cloud KMS, Azure Key Vault, etc.AWS KMS 플로우
- 사용자는 암호화된 데이터, 데이터 키만 가짐
- 데이터 키 복호화 요청 시, 서버에서 마스터키로 데이터 키를 복호화한 뒤 제공
- 응답받은 복호화된 데이터 키를 활용해 데이터 복호화
비즈니스 로직에 암호화 모듈 적용 방법
- Entity LifeCycle(PrePersist등) 콜백을 활용한 구현
- Spring AOP 활용
@PrePersist, @PreUpdate, @PostLoad
- 문제 : 데이터 조회 시 암호화된 데이터를 계속 암호화 (Entity Life Cycle은 ‘PreLoad’ 라는 주기가 없어 해결 불가)
- AttributeConverter를 활용한 구현
- Entity가 Table의 데이터와 매핑할 때, 실제 데이터를 변경할 수 있는 인터페이스
- Enum 클래스의 값을 실제 DB에서 다른 값으로 매핑 시 주로 사용
- 장점 : 1차 캐시를 신경쓰지 않아도 되어 구현이 간단
- 단점 : 해당 인터페이스 자체가 추가적인 파라미터를 넘길 수 없고, 타입이 제한적 → 유연성 부족
- UserType과 ParameterizedType를 활용한 구현
- Hibernate에서 제공하는 인터페이스
- 장점 : 2번 방식과 달리, 파라미터 제공 가능
오늘 배운 것
- SWEA 1861
- dfs 완전탐색 방식 → 시간복잡도 문제 (조건이 작아서 통과는 함)
- 최선의 방식 → dp
내일 할 일
- 이력서, 포트폴리오 정리