5장 암호화 및 키 관리
이 장에서는 FileBolt의 E2EE(종단 간 암호화) 및 영지식 경계에 대해 설명하고 cryptoVersion=v1 매개 변수, 인코딩 규칙, 실패 모드 및 클라이언트 제약 조건. 키는 클라이언트에서 생성되어 사용됩니다. 서버와 객체 스토리지는 암호문 청크와 필수 메타데이터만 처리합니다.
5.0 요약
- 시스템은 복호화 키(CEK)를 수신, 저장 또는 기록해서는 안 됩니다. CEK 자료는 URL 조각(
#부분), 이는 HTTP 요청에서 서버로 전송되지 않습니다. - 암호화 용도 AES-128-GCM(AEAD). 각 파일은 독립적인 CEK(16바이트)를 사용합니다. 청크 크기는 고정되어 있습니다(예: 16MB).
- v1 IV 구성: IV = noncePrefix(8B) || uint32_be(chunkIndex)(4B). AAD binds
transferId,fileId, 그리고chunkIndex컨텍스트 교환 및 재생을 방지합니다. - 서버 토큰은 암호문 액세스 및 만료만 제어합니다. 암호 해독 기능을 부여하지 않습니다.
5.1 전송 암호화(TLS)
5.1.1 보안목적
- 업로드/다운로드/API 링크에 대한 도청 및 변조를 방지합니다.
- 전송 중인 토큰과 암호문을 보호합니다.
5.1.2 보안 정책
- 시스템 MUST HTTPS를 통해서만 모든 페이지와 API를 제공합니다.
- 시스템 SHOULD TLS 1.3을 선호하고 필요에 따라 TLS 1.2를 지원합니다. 약한 프로토콜/암호는 반드시 비활성화되어야 합니다.
- 시스템 MUST 합리적으로 HSTS를 활성화하십시오
max-age.
5.2 청크 암호화(AES-128-GCM)
5.2.1 설계 노트
- 파일은 고정된 크기의 청크로 분할됩니다. 각 청크는 병렬 전송 및 재개성을 지원하기 위해 독립적으로 암호화됩니다.
- AEAD 인증은 무결성을 보호합니다. 모든 인증 실패는 반드시 실패 처리되어야 합니다.
5.2.2 보안 정책
- 각 파일은 고유한 CEK(16바이트)를 사용해야 합니다.
- IV는 (파일, ChunkIndex)별로 고유해야 합니다. v1 사용
noncePrefix+chunkIndexencoding. - AAD는 암호문을 해당 컨텍스트에 바인딩하기 위해 (transferId, fileId, ChunkIndex)를 포함해야 합니다.
5.3 영지식 연결 모델
5.3.1 주요 제약사항
- CEK(또는 파생 자료)는 URL 조각으로만 전달되어야 하며 쿼리 매개변수 또는 헤더에 포함되어서는 안 됩니다.
- 서버는 조각을 기록해서는 안 됩니다. 우발적인 캡처를 방지하려면 로그를 반드시 삭제해야 합니다.
- 리퍼러 정책은 아웃바운드 탐색을 통한 조각 누출을 방지해야 합니다(9장 참조).
5.4 키 생성 및 처리
- 키는 암호화된 보안 RNG(WebCrypto)를 사용하여 생성되어야 합니다.
- 키는 메모리에만 보관하고 더 이상 필요하지 않을 때는 삭제해야 합니다.
- 클라이언트는 서버가 볼 수 있는 위치(예: 쿠키, 쿼리 매개변수)에 CEK를 유지해서는 안 됩니다.
5.5 인코딩 및 매개변수
- cryptoVersion=v1 알고리즘 제품군과 IV/AAD 규칙을 식별합니다.
- 매니페스트에는 필수 공개 매개변수(청크 크기/개수, noncePrefix, fileId 매핑)가 포함되어야 하지만 CEK는 포함되어서는 안 됩니다.
5.6 실패 모드(페일클로즈)
- 암호 해독 실패 또는 AEAD 인증 실패 시 클라이언트는 반드시 중단해야 하며 부분 일반 텍스트를 출력해서는 안 됩니다.
- 매개변수 불일치(transferId/fileId/chunkIndex)에서 클라이언트는 반드시 실패 처리되어야 하며 조치 가능한 오류를 보고해야 합니다.
5.7 관련 청구 ID
- See 부록: 청구 ID 신뢰할 수 있는 매핑을 위해.