Szczegóły uwierzytelnionych szyfrowania w usłudze ASP.NET Core
Wywołania funkcji IDataProtector.Protect są operacjami szyfrowania uwierzytelnianych. Metoda Protect oferuje zarówno poufność, jak i autentyczność, i jest powiązana z łańcuchem przeznaczenia, który został użyty do uzyskania tego konkretnego wystąpienia IDataProtector z głównego elementu IDataProtectionProvider.
Funkcja IDataProtector.Protect przyjmuje parametr bajtowy[] w postaci zwykłego tekstu i tworzy chroniony ładunek bajtu[], którego format został opisany poniżej. (Istnieje również przeciążenie metody rozszerzenia, które przyjmuje parametr zwykłego tekstu ciągu i zwraca chroniony ładunek ciągu. Jeśli ten interfejs API jest używany, format ładunku chronionego nadal będzie miał poniższą strukturę, ale będzie on zakodowany w formacie base64url.
Format ładunku chronionego
Format ładunku chronionego składa się z trzech podstawowych składników:
32-bitowy nagłówek magic, który identyfikuje wersję systemu ochrony danych.
128-bitowy identyfikator klucza, który identyfikuje klucz używany do ochrony tego konkretnego ładunku.
Pozostała część chronionego ładunku jest specyficzna dla szyfratora hermetyzowanego przez ten klucz. W poniższym przykładzie klucz reprezentuje szyfrowanie AES-256-CBC + HMACSHA256, a ładunek jest dalej podzielony w następujący sposób:
- Modyfikator klucza 128-bitowego.
- Wektor inicjowania 128-bitowego.
- 48 bajtów danych wyjściowych AES-256-CBC.
- Tag uwierzytelniania HMACSHA256.
Poniżej przedstawiono przykładowy ładunek chroniony.
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
W formacie ładunku powyżej pierwszych 32 bitów lub 4 bajty są nagłówkiem magii identyfikującym wersję (09 F0 F9 F0)
Następne 128 bitów lub 16 bajtów jest identyfikatorem klucza (80 9C 81 0C 19 66 19 40 95 36 53 F8 AA FF EE 57)
Pozostała część zawiera ładunek i jest specyficzny dla używanego formatu.
Ostrzeżenie
Wszystkie ładunki chronione dla danego klucza zaczynają się od tego samego nagłówka 20 bajtów (wartość magiczna, identyfikator klucza). Administratorzy mogą używać tego faktu do celów diagnostycznych, aby przybliżyć czas generowania ładunku. Na przykład powyższy ładunek odpowiada kluczowi {aaaa-0b0b-1c1c-2d2d-333333333333333}. Jeśli po sprawdzeniu repozytorium kluczy okaże się, że data aktywacji tego konkretnego klucza to 2015-01-01, a jego data wygaśnięcia to 2015-03-01, uzasadnione jest założenie, że ładunek (jeśli nie został naruszony) został wygenerowany w tym oknie, podaj lub przyjmij mały współczynnik fudge po obu stronach.