ASP.NET Core での認証された暗号化の詳細
IDataProtector.Protect の呼び出しは、認証された暗号化の操作です。 Protect メソッドでは、機密性と信頼性の両方が提供されます。これは、ルートの IDataProtectionProvider から、この特定の IDataProtector インスタンスを派生するために使用される目的チェーンに関連付けされています。
IDataProtector.Protect は、byte[] 型のプレーンテキスト パラメーターを受け取り、byte[] 型の保護されたペイロードを生成します。その形式については後述しています。 (文字列のプレーンテキスト パラメーターを受け取り、文字列で保護されたペイロードを返す拡張メソッドのオーバーロードもあります。この API を使用する場合、保護されたペイロード形式は引き続き以下の構造になりますが、base64url でエンコードされます。)
保護されたペイロードの形式
保護されたペイロードの形式は、3 つの主要コンポーネントで構成されます。
データ保護システムのバージョンを識別する 32 ビットのマジック ヘッダー。
この特定のペイロードの保護に使用されるキーを識別する 128 ビットのキー ID。
保護されたペイロードの残りの部分は、このキー によってカプセル化された暗号化機能に固有のものです。 下記の例では、キーは AES-256-CBC と HMACSHA256 による暗号化機能を表していて、ペイロードは次のようにさらに細分化されています。
- 128 ビットのキー修飾子。
- 128 ビットの初期化ベクター。
- 48 バイトの AES-256-CBC 出力。
- HMACSHA256 認証タグ。
以下に、保護されたペイロードの例を示します。
09 F0 C9 F0 80 9C 81 0C 19 66 19 40 95 36 53 F8
AA FF EE 57 57 2F 40 4C 3F 7F CC 9D CC D9 32 3E
84 17 99 16 EC BA 1F 4A A1 18 45 1F 2D 13 7A 28
79 6B 86 9C F8 B7 84 F9 26 31 FC B1 86 0A F1 56
61 CF 14 58 D3 51 6F CF 36 50 85 82 08 2D 3F 73
5F B0 AD 9E 1A B2 AE 13 57 90 C8 F5 7C 95 4E 6A
8A AA 06 EF 43 CA 19 62 84 7C 11 B2 C8 71 9D AA
52 19 2E 5B 4C 1E 54 F0 55 BE 88 92 12 C1 4B 5E
52 C9 74 A0
上のペイロード形式のうち、最初の 32 ビット (4 バイト) は、バージョンを識別するマジック ヘッダーです (09 F0 C9 F0)
次の 128 ビット (16 バイト) はキー識別子です (80 9C 81 0C 19 66 19 40 95 36 53 F8 AA FF EE 57)
残りの部分にはペイロードが格納されていて、これは使用されている形式に固有のものです。
警告
特定のキーに対して保護されるペイロードはすべて、同じ 20 バイト (マジック値、キー ID) のヘッダーで始まります。 管理者は、ペイロードがいつ生成されたかを概算するために、この事実を診断目的で利用することができます。 たとえば、上記のペイロードはキー {aaaaaaaa-0b0b-1c1c-2d2d-333333333333} に対応しています。 キー リポジトリの確認後、この特定のキーのアクティブ化の日付が 2015-01-01 で、有効期限日が 2015-03-01 であることが判明した場合は、ペイロードは (改ざんされていなければ)、どちらの側にも小さな誤差があるとしてもその期間内に生成されたと想定するのが妥当です。
ASP.NET Core