Logo

보안 및 개인 정보 보호 백서(개요)제5장

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 + chunkIndex encoding.
  • 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