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 플로우

      1. 사용자는 암호화된 데이터, 데이터 키만 가짐
      2. 데이터 키 복호화 요청 시, 서버에서 마스터키로 데이터 키를 복호화한 뒤 제공
      3. 응답받은 복호화된 데이터 키를 활용해 데이터 복호화

비즈니스 로직에 암호화 모듈 적용 방법

  1. Entity LifeCycle(PrePersist등) 콜백을 활용한 구현
    • Spring AOP 활용
    • @PrePersist, @PreUpdate, @PostLoad
    • 문제 : 데이터 조회 시 암호화된 데이터를 계속 암호화 (Entity Life Cycle은 ‘PreLoad’ 라는 주기가 없어 해결 불가)
  2. AttributeConverter를 활용한 구현
    • Entity가 Table의 데이터와 매핑할 때, 실제 데이터를 변경할 수 있는 인터페이스
    • Enum 클래스의 값을 실제 DB에서 다른 값으로 매핑 시 주로 사용
    • 장점 : 1차 캐시를 신경쓰지 않아도 되어 구현이 간단
    • 단점 : 해당 인터페이스 자체가 추가적인 파라미터를 넘길 수 없고, 타입이 제한적 → 유연성 부족
  3. UserType과 ParameterizedType를 활용한 구현
    • Hibernate에서 제공하는 인터페이스
    • 장점 : 2번 방식과 달리, 파라미터 제공 가능

오늘 배운 것

  1. SWEA 1861
    • dfs 완전탐색 방식 → 시간복잡도 문제 (조건이 작아서 통과는 함)
    • 최선의 방식 → dp

내일 할 일

  1. 이력서, 포트폴리오 정리

참고자료

results matching ""

    No results matching ""