Freigeben über


Details zur authentifizierten Verschlüsselung in ASP.NET Core

Bei Aufrufen von IDataProtector.Protect handelt es sich um authentifizierte Verschlüsselungsvorgänge. Die Protect-Methode bietet sowohl Vertraulichkeit als auch Authentizität und ist an die Zweckkette gebunden, die verwendet wurde, um diese bestimmte IDataProtector-Instanz von ihrem Stamm-IDataProtectionProvider abzuleiten.

IDataProtector.Protect verarbeitet einen byte[] plaintext-Parameter und erzeugt ein byte[] protected payload, dessen Format im Folgenden beschrieben wird. (Es gibt auch eine Überladung der Erweiterungsmethode, die einen String-Klartext-Parameter akzeptiert und einen durch eine Zeichenfolge geschützten Payload zurückgibt. Wenn diese API verwendet wird, hat das geschützte Nutzdatenformat immer noch die unten angegebene Struktur, ist aber base64url-kodiert).

Geschütztes Nutzdatenformat

Das geschützte Nutzdatenformat besteht aus drei primären Komponenten:

  • Ein 32-Bit Magic Header, der die Version des Datenschutzsystems identifiziert.

  • Eine 128-Bit Schlüssel-ID, die den Schlüssel identifiziert, der zum Schutz dieser bestimmten Nutzdaten verwendet wird.

  • Der Rest der geschützten Nutzdaten ist spezifisch für den Verschlüsselungsprozessor, der von diesem Schlüssel gekapselt wird. Im folgenden Beispiel stellt der Schlüssel einen AES-256-CBC + HMACSHA256-Verschlüssler dar, und die Nutzdaten werden wie folgt weiter unterteilt:

    • Ein 128-Bit-Schlüsselmodifizierer.
    • Ein 128-Bit-Initialisierungsvektor.
    • 48 Byte der AES-256-CBC-Ausgabe.
    • Ein HMACSHA256-Authentifizierungstag.

Ein Beispiel für geschützte Nutzdaten ist unten abgebildet.

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

Vom obigen Nutzdatenformat sind die ersten 32 Bits bzw. 4 Bytes der Magic Header zur Identifizierung der Version (09 F0 C9 F0)

Die nächsten 128 Bits bzw. 16 Bytes sind die Schlüsselbezeichner (80 9C 81 0C 19 66 19 40 95 36 53 F8 AA FF EE 57)

Der Rest enthält die Nutzdaten und ist spezifisch für das verwendete Format.

Warnung

Alle Nutzdaten, die für einen bestimmten Schlüssel geschützt sind, beginnen mit demselben 20-Byte-Header („Magic-Wert“, „Schlüssel-ID“). Administratoren können diese Tatsache zu Diagnosezwecken nutzen, um zu ermitteln, wann eine Nutzlast erzeugt wurde. Die obige Nutzlast entspricht z. B. dem Schlüssel "{aaaaaa-0b0b-1c1c-2d2d-333333333333}". Wenn Sie nach der Überprüfung des Schlüssel-Repositorys feststellen, dass das Aktivierungsdatum dieses Schlüssels der 01.01.2015 und das Ablaufdatum der 01.03.2015 war, dann können Sie davon ausgehen, dass die Nutzdaten (sofern sie nicht manipuliert wurden) innerhalb dieses Zeitfensters generiert wurden, abgesehen von einem kleinen Fudge-Faktor auf beiden Seiten.