用語集

Key Wrapping とは?

Key Wrappingは、あるキー(ペイロードキー)を別のキー(Wrappingキー、またはキー暗号化キー)で暗号化する暗号操作であり、保存や転送の際にキーマテリアルの機密性と完全性を保護します。

別名: key wrap, AES-KW, key encryption key

Key Wrappingは、暗号システムにおける実際の問題を解決します。暗号化キー自体をどのように保護するか、という問題です。データ暗号化キーを平文で保存すると、ストレージにアクセスできる人は誰でもそれを使用できます。Key Wrappingは、データキーを別のWrappingキーで暗号化することでこれを解決し、暗号化されたデータへのアクセスにラップされたキーとアンラップ手段の両方が必要となるキー階層を作ります。

AES-KW(AES Key Wrap、RFC 3394で定義)は最も広く使われているKey Wrappingアルゴリズムです。汎用的な暗号化モードとは異なり、AES-KWはキーマテリアルのラップに特化して設計されています。機密性と完全性の両方を提供します。Wrappingキーが間違っていたり、ラップされたデータが改ざんされていたりすると、不正なキーマテリアルを生成する代わりにアンラップ操作が失敗します。この完全性チェックは重要です。なぜなら、エラーなしに誤ったキーが生成されると、データがゴミとして復号されてしまうからです。

Key Wrappingは、鍵管理システム、HSM(ハードウェアセキュリティモジュール)、クラウドプロバイダーが使用するエンベロープ暗号化スキームの基盤となっています。エンベロープ暗号化では、データはデータキーで暗号化され、そのデータキーはマスターキーでラップされます。このパターンにより効率的なキーローテーションが可能です。マスターキーが変わっても、再暗号化が必要なのは小さなラップされたキーのみで、データセット全体ではありません。

Wrap a data key with a passphrase

A random AES-256 data key gets encrypted by a wrapping key derived from your passphrase via PBKDF2. Change the unwrap passphrase to see AES-KW reject the wrong key cleanly.

Data key (AES-256, what actually encrypts your secret)
 
Wrapped key (what gets stored / shared)
 
Salt (random per wrap, fed to PBKDF2)
 
Try matching and mismatching the unwrap passphrase to compare outcomes.

This is exactly the flow Vaulted runs when you set a passphrase. The wrapping key never leaves your browser; only the wrapped key and salt travel — in the URL fragment, so the server sees neither.

Vaulted における Key Wrapping の使われ方

Vaultedは、シークレットにパスフレーズが設定されている場合にAES-KW Key Wrappingを使用します。フローは以下の通りです。ブラウザがシークレット暗号化用のランダムなAES-256-GCMキーを生成し、次にPBKDF2を使ってパスフレーズからWrappingキーを導出します。AES-256-GCMキーは、導出されたWrappingキーを使ってAES-KWでラップ(暗号化)されます。ラップされたキー、ソルト、IVはURLフラグメントに埋め込まれます。受信者はパスフレーズを入力し、PBKDF2でWrappingキーを再導出してAES-256-GCMキーをアンラップし、シークレットを復号します。