3장 시스템 아키텍처 및 데이터 흐름
이 장에서는 상위 수준의 시스템 구성 요소와, 업로드, 다운로드, 보내는 사람의 관리에 이르는 종단 간 데이터 흐름을 설명합니다. 무엇이 암호화되는지, 어떤 메타데이터가 필요한지, 접근 제어와 폐기가 어떻게 적용되는지에 초점을 맞춥니다.
문서 메타데이터
- 백서 버전
- v1.0
- 최종 업데이트
- 2026-01-14
3.1 구성 요소
- 클라이언트: 파일을 청크로 나누고, 암호화/복호화하며, URL 프래그먼트에 담긴 CEK를 관리합니다.
- API/엣지: 범위가 제한된 토큰을 발급하고 검증하며, 매니페스트와 암호문 청크를 제공합니다.
- 오브젝트 스토리지: 암호화된 청크와 매니페스트를 저장합니다. 평문의 기밀성 측면에서는 신뢰할 수 없는 것으로 간주합니다.
- 상태 저장소: 최소한의 메타데이터로 전송 상태(업로드 진행 상황, 만료, 폐기)를 추적합니다.
3.2 데이터 객체
- 매니페스트: 청크를 가져와 조립하는 데 필요한 공개 매개변수(cryptoVersion, 청크 크기/개수, 매핑)이며, CEK를 포함해서는 안 됩니다(MUST NOT).
- 청크: 암호화된 파일 조각(암호문)과 최소한의 메타데이터(길이/etag)이며, (transferId, fileId, chunkIndex)로 식별합니다.
- 상태: 인가, TTL, 폐기, 이어받기를 위한 서버 측 기록입니다.
3.3 업로드 흐름
- 클라이언트가 전송을 생성하면
transferId에 묶인, 수명이 짧고 범위가 제한된 업로드 토큰을 받습니다. - 클라이언트는 파일별 CEK를 로컬에서 생성하고, 파일을 고정 크기 청크로 나눈 뒤 각 청크를 AEAD로 암호화합니다.
- 클라이언트는 암호문 청크를 병렬로 업로드하며, 재시도는 청크 단위로 멱등적입니다.
- 클라이언트는 매니페스트(공개 매개변수만 포함)를 업로드합니다. 필요한 부분이 모두 갖춰지면 서버가 전송을 READY로 표시합니다.
3.4 다운로드 흐름
- 수신자가 공유 링크를 엽니다. URL 프래그먼트(CEK 정보)는 브라우저에만 남고 서버로 전송되지 않습니다.
- 클라이언트는 범위가 제한된 다운로드 토큰으로 매니페스트를 가져와 청크 계획을 정합니다.
- 클라이언트는 암호문 청크를 다운로드(필요에 따라 병렬)하고 AEAD 인증을 검증한 뒤 평문 파일을 조립합니다.
- 실패하면 클라이언트는 누락된 청크만 다시 요청하여 이어받습니다. 무결성 검증에 실패하면 반드시 실패 시 차단 방식으로 처리해야 합니다(MUST).
3.5 보내는 사람 관리 및 감사 흐름
- 보내는 사람은 관리 작업을 위해 클라이언트에 저장된 장기 로그인 토큰으로 인증합니다.
- 관리 API로 전송 목록 조회, 전달 증거 확인, 전송 폐기/삭제를 할 수 있습니다.
- 감사 데이터는 보내는 사람만 볼 수 있도록 설계되었으며, 기본적으로 수신자에게는 노출되지 않습니다.
3.6 가시성 및 최소화
- 서버와 스토리지는 암호문과 필요한 공개 매개변수만 다루며, CEK 없이는 콘텐츠를 복호화할 수 없습니다.
- 로그와 분석 데이터는 최소화하는 것이 좋으며(SHOULD), URL 프래그먼트나 CEK 정보를 포함해서는 안 됩니다(MUST NOT).
- 메타데이터 수집은 목적에 맞게 제한하는 것이 좋습니다(SHOULD). 전달 증거, 오남용 방지, 운영 안정성이 그 목적입니다.