ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클라우드 DB 암호화 설계 및 개발 (1)
    개발 프로젝트/클라우드 봉투 암호화 2021. 1. 30. 02:12
    728x90

    When

    고객님의 데이터는 안전하게 암호화 되어 관리 됩니다.

    서비스 가입시 종종 보게되는 문구이다.

    그런데 정말 기업에서는 나의 데이터를 안전하게 암호화 하여 보관하고 있을까?

     

    수천만건의 개인정보가 유출됐다는 소식이 그리 놀랍지 않은 요즘이다.

    침해 분석 보고서를 읽어보면 패스워드를 제외한 대부분의 데이터는 평문 형태로 남아 있는 경우가 많다.

    얼마전 특정 업체가 해킹되어 고객이 방문했던 여러 장소를 빌미로 해커가 협박한 일이 언론에 보도된적이 있다.

     

    이렇듯 암호화 대상은 단순히 패스워드나 주민등록번호 등의 몇몇 데이터가 아니다.

    서비스 대상의 대부분의 데이터가 사실 암호화 대상이라고 볼 수 있는것이다.

     

    원론적으로, "암호화"란 평문을 암호키로 암호화 하여 암호키를 소유하지 않은 사람이 알 수 없게 하는 기술이다.

    그런데 암호키는 어떠한 방법으로 어디에 저장해야 할까?

    서비스를 제공하는 회사는 고객 정보에 마음대로 접근해도 되는걸까?

     

    본 글에서는 목표하는 바는 아래와 같다.

    • 평문 획득은 고객에 의해서만 진행되도록 구현
    • 암호화 되어 있지만 검색 가능 하도록 구현
    • 종단간 암호화(E2EE) 의 PrivateKey 보관을 서버에서 하지만 고객 대칭키로 Encryption
    • 그 외 모든 데이터는 봉투 암호화

    각 알고리즘의 자세한 수학적 설명, 설계 사항은 해당 글에서 다루지 않는다.

    실제 구현을 어떤식으로 진행했는지 기술하는데 초점을 둔다.

    Given

    개발 환경

    • JAVA 1.8
    • Spring boot
    • JPA(ORM)

     

    Encryption algorithm

    • Symmetric-key algorithm : AES256 CBC
    • Asymmetric-key algorithm : RSA 4096 or 2048

     

    Hash algorithm

    • Bcrypt (with salt)
    • SHA256 (no salt)

     

    인프라

    • AWS KSM의 HSM 이용

     

    설계 사항

    • Envelope encryption
    • Blind index search
    • 서버 보관 E2EE (단 키 보관은 모두 서버에, 개인키는 고객 Seed로 암호화)
    • E2EE (개인키를 고객이 보관)
    • 서버 내부 고객끼리 PGP 통신
    728x90
Designed by Tistory.