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(チャンクインデックス)(4B). AAD binds transferId, fileId、そして chunkIndex コンテキストの交換と再生を防止します。
  • サーバー トークンは暗号文へのアクセスのみを制御し、有効期限が切れます。復号化機能は付与されません。

5.1 トランスポート暗号化 (TLS)

5.1.1 セキュリティ目標

  • アップロード/ダウンロード/API リンクの盗聴や改ざんを防止します。
  • 転送中のトークンと暗号文を保護します。

5.1.2 セキュリティポリシー

  • システム MUST すべてのページと API を HTTPS のみで提供します。
  • システム SHOULD TLS 1.3 を優先し、必要に応じて TLS 1.2 をサポートします。弱いプロトコル/暗号は無効にしなければなりません。
  • システム MUST 合理的な条件で HSTS を有効にします max-age.

5.2 チャンク暗号化 (AES-128-GCM)

5.2.1 設計上の注意事項

  • ファイルは固定サイズのチャンクに分割されます。並列転送と再開可能性をサポートするために、各チャンクは個別に暗号化されます。
  • AEAD 認証は整合性を保護します。認証に失敗した場合は、フェイルクローズしなければなりません (MUST)。

5.2.2 セキュリティポリシー

  • 各ファイルは個別の CEK (16 バイト) を使用しなければなりません (MUST)。
  • IV は (ファイル、chunkIndex) ごとに一意でなければなりません。 v1 は使用します noncePrefix + chunkIndex encoding.
  • AAD には、暗号テキストをコンテキストにバインドするために (transferId、fileId、chunkIndex) を含める必要があります。

5.3 ゼロ知識リンクモデル

5.3.1 主要な制約

  • CEK (または派生マテリアル) は URL フラグメント内でのみ伝送されなければならず、クエリ パラメータやヘッダーに含めてはなりません。
  • サーバーはフラグメントをログに記録してはなりません。偶発的なキャプチャを避けるために、ログをサニタイズする必要があります。
  • リファラーポリシーは、アウトバウンドナビゲーションを介したフラグメント漏洩を防止すべきです (第 9 章を参照)。

5.4 鍵の生成と処理

  • 鍵は、暗号的に安全な RNG (WebCrypto) を使用して生成されなければなりません (MUST)。
  • キーはメモリ内にのみ保持され、不要になった場合はクリアされるべきです。
  • クライアントは、サーバーから見える場所 (Cookie、クエリ パラメータなど) に CEK を永続化してはなりません (MUST NOT)。

5.5 エンコーディングとパラメータ

  • cryptoVersion=v1 アルゴリズム スイートと IV/AAD ルールを識別します。
  • マニフェストには必須のパブリックパラメータ (チャンクサイズ/カウント、noncePrefix、fileId マッピング) を含めなければなりません (MUST) が、CEK を含めてはなりません (MUST NOT)。

5.6 障害モード (フェールクローズ)

  • 復号化が失敗した場合、または AEAD 認証が失敗した場合、クライアントは中止しなければならず (MUST)、部分的な平文を出力してはなりません (MUST NOT)。
  • パラメータの不一致(transferId/fileId/chunkIndex)の場合、クライアントはフェイルクローズしなければならず(MUST)、対処可能なエラーを報告すべきです(SHOULD)。

5.7 関連するクレーム ID