Dettagli della crittografia autenticata in ASP.NET CoreAuthenticated encryption details in ASP.NET Core

Le chiamate a IDataProtector. Protect sono operazioni di crittografia autenticate.Calls to IDataProtector.Protect are authenticated encryption operations. Il metodo Protect offre la riservatezza e l'autenticità ed è associato alla catena di scopi usata per derivare questa particolare istanza di IDataProtector dalla relativa IDataProtectionProvider radice.The Protect method offers both confidentiality and authenticity, and it's tied to the purpose chain that was used to derive this particular IDataProtector instance from its root IDataProtectionProvider.

IDataProtector. Protect accetta un parametro di testo non crittografato byte [] e produce un payload protetto byte [], il cui formato è descritto di seguito.IDataProtector.Protect takes a byte[] plaintext parameter and produces a byte[] protected payload, whose format is described below. (Esiste anche un overload del metodo di estensione che accetta un parametro di testo non crittografato della stringa e restituisce un payload protetto da stringa.(There's also an extension method overload which takes a string plaintext parameter and returns a string protected payload. Se questa API viene usata, il formato del payload protetto avrà ancora la struttura seguente, ma verrà codificato base64url.If this API is used the protected payload format will still have the below structure, but it will be base64url-encoded.)

Formato payload protettoProtected payload format

Il formato del payload protetto è costituito da tre componenti principali:The protected payload format consists of three primary components:

  • Intestazione magica a 32 bit che identifica la versione del sistema di protezione dei dati.A 32-bit magic header that identifies the version of the data protection system.

  • ID chiave a 128 bit che identifica la chiave utilizzata per proteggere questo payload specifico.A 128-bit key id that identifies the key used to protect this particular payload.

  • Il resto del payload protetto è specifico del codificatore incapsulato da questa chiave.The remainder of the protected payload is specific to the encryptor encapsulated by this key. Nell'esempio seguente la chiave rappresenta un HMACSHA256 di crittografia AES-256-CBC + e il payload viene suddiviso ulteriormente come segue:In the example below, the key represents an AES-256-CBC + HMACSHA256 encryptor, and the payload is further subdivided as follows:

    • Modificatore di chiave a 128 bit.A 128-bit key modifier.
    • Vettore di inizializzazione a 128 bit.A 128-bit initialization vector.
    • 48 byte di output AES-256-CBC.48 bytes of AES-256-CBC output.
    • Tag di autenticazione HMACSHA256.An HMACSHA256 authentication tag.

Di seguito è illustrato un payload protetto di esempio.A sample protected payload is illustrated below.

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

Dal formato del payload sopra i primi 32 bit oppure 4 byte sono l'intestazione magica che identifica la versione (09 F0 C9 F0)From the payload format above the first 32 bits, or 4 bytes are the magic header identifying the version (09 F0 C9 F0)

I successivi 128 bit o 16 byte è l'identificatore di chiave (80 9C 81 0C 19 66 19 40 95 36 53 F8 AA FF EE 57)The next 128 bits, or 16 bytes is the key identifier (80 9C 81 0C 19 66 19 40 95 36 53 F8 AA FF EE 57)

Il resto contiene il payload ed è specifico del formato utilizzato.The remainder contains the payload and is specific to the format used.

Avviso

Tutti i payload protetti a una determinata chiave inizieranno con la stessa intestazione di 20 byte (valore magico, ID chiave).All payloads protected to a given key will begin with the same 20-byte (magic value, key id) header. Gli amministratori possono utilizzare questo fatto a scopo di diagnostica per approssimarsi quando è stato generato un payload.Administrators can use this fact for diagnostic purposes to approximate when a payload was generated. Il payload precedente, ad esempio, corrisponde alla chiave {0c819c80-6619-4019-9536-53f8aaffee57}.For example, the payload above corresponds to key {0c819c80-6619-4019-9536-53f8aaffee57}. Se dopo aver verificato il repository della chiave si è verificato che la data di attivazione della chiave specifica è 2015-01-01 e che la data di scadenza è 2015-03-01, è ragionevole presupporre che il payload (se non alterato) sia stato generato all'interno di tale finestra, assegnare o assumere un piccolo fattore di Fudge su entrambi i lati.If after checking the key repository you find that this specific key's activation date was 2015-01-01 and its expiration date was 2015-03-01, then it's reasonable to assume that the payload (if not tampered with) was generated within that window, give or take a small fudge factor on either side.