Udostępnij za pośrednictwem


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). Administracja istratory mogą użyć tego faktu do celów diagnostycznych, aby przybliżyć czas wygenerowania ładunku. Na przykład powyższy ładunek odpowiada kluczowi {0c819c80-6619-4019-9536-53f8aaffee57}. 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.