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
Describe
「🔐 암호화 설계」 문서와 현재 구현이 서로 다른 암호화 모델을 따르고 있다. 구현 작업 전에 어느 쪽으로 갈지 결정이 필요하다.
원래 #30 에 세 항목 중 하나로 묶여 있었으나, 나머지 두 항목이 #31 로 완료되면서 이 결정만 남아 별도 이슈로 분리한다.
무엇이 어긋나 있나
MUDDA_MASTER_KEY를 KEK 로 사용)tbl_key_share에 Shamir 조각 분산 (2-of-3 기본, 3-of-5 강화)EncryptedStringConverter)OpenCapsuleResponse.content)현재 구현은 저장소 유출에 대한 at-rest 암호화로는 정상 동작한다. 다만
CLAUDE.md의 다음 항목은 만족하지 못한다.즉 문서와 코드 중 한쪽은 반드시 고쳐야 하며, 지금은 둘이 어긋난 상태다.
선택지
(A) 설계 문서대로 클라이언트 사이드 E2E 로 전환
tbl_key_share테이블 추가 (capsule_id, share_index, share_data)(B) 현재 서버 사이드 모델을 확정하고 문서를 수정
CLAUDE.md의 "서버는 캡슐 내용을 절대 평문으로 볼 수 없다" 항목을 실제 위협 모델에 맞게 수정Additional
포트폴리오 관점에서 (A) 는 서술할 거리가 크지만 클라이언트 작업과 기존 데이터 마이그레이션이 함께 걸린다. (B) 는 즉시 정리되지만 프로젝트의 핵심 컨셉인 "서버도 못 여는 캡슐" 이 약해진다.
(A) 를 선택할 경우 범위가 크므로 서버/클라이언트/마이그레이션으로 이슈를 다시 쪼개는 편이 낫다.
관련: #30, #31