## 定義
ブロック(またはファイル)の暗号化キーをそのブロックのコンテンツから決定論的に導出する暗号化スキーム。同一コンテンツは常に同一暗号文を生成するため、暗号化されたデータの重複排除が可能になる。Farsite プロジェクト(Douceur et al., 2002)で導入された技法である。(Source: [[@2023__ATC__On-demand Container Loading in AWS Lambda]])
**基本手順**:
1. ブロックのプレーンテキストを暗号学的ハッシュ(SHA256 など)でダイジェスト化
2. このダイジェストを対称暗号(AES-CTR など)のキーとして使用
3. 同一プレーンテキスト → 同一キー → 同一暗号文 → 重複排除可能
**通常の暗号化との違い**: 通常は同一プレーンテキストでもセッションごとに異なる暗号文を生成してセキュリティを確保する。収束暗号化は意図的に決定論的暗号文を生成することで重複排除を可能にし、その代わりにキー管理で機密性を確保する。
## AWS Lambda 実装の拡張(Section 3 の内容)
Lambda は基本的な収束暗号化に以下の拡張を加えた([[@2023__ATC__On-demand Container Loading in AWS Lambda]])。
**マニフェスト構造の工夫**:
- チャンクのオフセット・キー・SHA256 ハッシュを列記したマニフェストを生成
- マニフェストの「キーテーブル」のみを顧客固有の AWS KMS キーで AES-GCM 暗号化
- ハッシュリストは平文で保持 → ガーベジコレクタがキーなしでチャンクリストにアクセス可能
- マニフェストのサイズ: 16GiB コンテナで 3MiB 未満(0.02% オーバーヘッド)
**塩(Salt)による爆発半径制御**:
人気の高いチャンクが広く共有されると、そのチャンクの障害が広範な顧客に影響する(爆発半径問題)。キー導出に可変の塩値を混入することで、同一コンテンツでも意図的に異なる暗号文を生成し、重複排除の範囲を時間・チャンク人気・AZ 単位で制御する。重複排除効率と爆発半径のトレードオフを連続的に調整できる。
**セキュリティ上の考慮**:
- AES-GCM ではなく AES-CTR + SHA256 を選択した理由: AES-GCM はデータキーを知る攻撃者に対する衝突耐性を一般に提供しないため
- 決定論的 IV(全ゼロ)は SHA256 の衝突耐性により安全(同一 key-IV ペアが複数のプレーンテキストに使われない)
- 圧縮しない理由: 暗号化前の圧縮は圧縮サイドチャネル攻撃(サイズからプレーンテキストの内容を推測)を許すため
## 横断的知見
- 収束暗号化はキー共有なしの重複排除を可能にする唯一の実用的スキームだが、「知識証明による攻撃」(攻撃者がプレーンテキストを推測してハッシュを計算しキーを導出できる)という固有の脆弱性がある。Lambda は塩と KMS によるアクセス制御でこれを緩和している。(Source: [[@2023__ATC__On-demand Container Loading in AWS Lambda]])
## 未解決の問い
- 塩のローテーション頻度と重複排除率・ストレージコストの定量的トレードオフはどう最適化するか?
- 収束暗号化と従来型の共有キー方式を比較したセキュリティ分析は存在するか?
## 関連
- [[@2023__ATC__On-demand Container Loading in AWS Lambda]] — Lambda での実装詳細
- [[コンテナ起動高速化]] — 収束暗号化が解決する重複排除問題の文脈
## 出典
- Douceur et al. "Reclaiming Space from Duplicate Files in a Serverless Distributed File System." ICDCS 2002. (Farsite)
- Storer et al. "Secure Data Deduplication." StorageSS 2008.
- Brooker et al. "On-demand Container Loading in AWS Lambda." USENIX ATC 2023.