ASP.NET Core 中已驗證的加密詳細資料
對 IDataProtector.Protect 的呼叫是已驗證的加密作業。 Protect 方法同時提供機密性和真實性,而且會系結至用途鏈結,後者用於從其根 IDataProtectionProvider 衍生此特定 IDataProtector 執行個體。
IDataProtector.Protect 會採用 byte[] 純文字參數,並產生 byte[] 受保護的承載,其格式如下所述。 (另外還有一個擴充方法多載會採用字串純文字參數,並傳回受字串保護的承載。如果使用此 API,受保護的承載格式仍會具有下列結構,但它將會採用 base64url 編碼。)
受保護的承載格式
受保護的承載格式包含三個主要元件:
32 位元 magic 標頭,用於識別資料保護系統的版本。
128 位元金鑰識別碼,識別用於保護這個特定承載的金鑰。
受保護承載的其餘部分則是特定於此金鑰所封裝的加密程式。 在下列範例中,金鑰代表 AES-256-CBC + HMACSHA256 加密程式,而且承載進一步細分如下:
- 128 位元金鑰修飾元。
- 128 位元初始化向量。
- AES-256-CBC 輸出的 48 個位元組。
- 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 個位元組是 magic 標頭,用於識別版本 (09 F0 C9 F0)
接下來的 128 位元或 16 個位元組是金鑰識別碼 (80 9C 81 0C 19 66 19 40 95 36 53 F8 AA FF EE 57)
其餘部分包含承載,且專屬於所使用的格式。
警告
所有受保護至指定金鑰的承載都會以相同的 20 位元組 (magic 值、金鑰識別碼) 標頭開頭。 系統管理員可以將此事實用於診斷用途,以在產生承載時進行估算。 例如,上述承載會對應至索引鍵 {aaaaaaaaaa-0b0b-1c1c-2d2d-33333333333}。 如果在檢查金鑰存放庫之後,您發現此特定金鑰的啟用日期為 2015-01-01,到期日為 2015-03-01,則可以合理假設該視窗內產生的承載 (如果未遭到竄改),請提供或採取任何一端的微小經驗係數。