Skip to content

결정 필요: 캡슐 암호화 모델 — 설계 문서(E2E)와 현재 구현(서버 봉투 암호화) 불일치 #32

Description

@cfcromn

Describe

「🔐 암호화 설계」 문서와 현재 구현이 서로 다른 암호화 모델을 따르고 있다. 구현 작업 전에 어느 쪽으로 갈지 결정이 필요하다.

원래 #30 에 세 항목 중 하나로 묶여 있었으나, 나머지 두 항목이 #31 로 완료되면서 이 결정만 남아 별도 이슈로 분리한다.

무엇이 어긋나 있나

설계 문서 현재 구현 (#23)
CEK 생성 위치 클라이언트 서버 (MUDDA_MASTER_KEY 를 KEK 로 사용)
키 보관 tbl_key_share 에 Shamir 조각 분산 (2-of-3 기본, 3-of-5 강화) 서버가 KEK 를 보유
복호화 위치 클라이언트 서버 (EncryptedStringConverter)
열람 시 서버가 반환하는 것 키 조각 복호화된 평문 (OpenCapsuleResponse.content)
서버가 캡슐 내용을 볼 수 있나 볼 수 없음 볼 수 있음

현재 구현은 저장소 유출에 대한 at-rest 암호화로는 정상 동작한다. 다만 CLAUDE.md 의 다음 항목은 만족하지 못한다.

서버는 캡슐 내용을 절대 평문으로 볼 수 없다. 암호화/복호화 경계는 전용 보안 모듈에서 명시적으로 관리한다.

문서와 코드 중 한쪽은 반드시 고쳐야 하며, 지금은 둘이 어긋난 상태다.

선택지

(A) 설계 문서대로 클라이언트 사이드 E2E 로 전환

  • tbl_key_share 테이블 추가 (capsule_id, share_index, share_data)
  • Shamir's Secret Sharing GF(256) 직접 구현
  • 캡슐 생성 API: 평문 content 대신 클라이언트가 암호화한 blob + 키 조각을 받도록 요청 계약 변경
  • 캡슐 열람 API: 평문 대신 키 조각을 반환하도록 응답 계약 변경
  • 위치·비밀번호 검증 통과 시에만 키 조각을 반환하도록 접근 제어
  • 만료 캡슐의 키 조각 삭제 스케줄러 (설계 문서에 명시된 항목)
  • 클라이언트 작업이 반드시 동반된다. 서버만으로는 완결되지 않는다.
  • 기존에 저장된 캡슐의 마이그레이션 방안도 필요하다. 서버가 KEK 로 복호화해 재암호화하려면 클라이언트가 개입해야 하므로 단순 배치로는 해결되지 않는다.

(B) 현재 서버 사이드 모델을 확정하고 문서를 수정

  • CLAUDE.md 의 "서버는 캡슐 내용을 절대 평문으로 볼 수 없다" 항목을 실제 위협 모델에 맞게 수정
  • 「🔐 암호화 설계」 문서를 봉투 암호화 방식으로 개정
  • 기술 스택에서 Shamir's Secret Sharing 제외
  • 코드 변경 없음, 문서 작업만 발생

Additional

포트폴리오 관점에서 (A) 는 서술할 거리가 크지만 클라이언트 작업과 기존 데이터 마이그레이션이 함께 걸린다. (B) 는 즉시 정리되지만 프로젝트의 핵심 컨셉인 "서버도 못 여는 캡슐" 이 약해진다.

(A) 를 선택할 경우 범위가 크므로 서버/클라이언트/마이그레이션으로 이슈를 다시 쪼개는 편이 낫다.

관련: #30, #31

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions