Bagikan melalui


Detail enkripsi terautentikasi di ASP.NET Core

Panggilan ke IDataProtector.Protect adalah operasi enkripsi terautentikasi. Metode Lindungi menawarkan kerahasiaan dan keaslian, dan terkait dengan rantai tujuan yang digunakan untuk memperoleh instans IDataProtector khusus ini dari IDataProtectionProvider akarnya.

IDataProtector.Protect mengambil parameter teks biasa byte[] dan menghasilkan payload yang dilindungi byte[], yang formatnya dijelaskan di bawah ini. (Ada juga kelebihan metode ekstensi yang mengambil parameter teks biasa string dan mengembalikan payload yang dilindungi string. Jika API ini digunakan, format payload yang dilindungi masih akan memiliki struktur di bawah ini, tetapi akan dikodekan base64url.)

Format payload yang dilindungi

Format payload yang dilindungi terdiri dari tiga komponen utama:

  • Header ajaib 32-bit yang mengidentifikasi versi sistem perlindungan data.

  • Id kunci 128-bit yang mengidentifikasi kunci yang digunakan untuk melindungi payload khusus ini.

  • Sisa payload yang dilindungi khusus untuk enkripsi yang dienkapsulasi oleh kunci ini. Dalam contoh di bawah ini, kunci mewakili enkripsi AES-256-CBC + HMACSHA256, dan payload dibagi lebih lanjut sebagai berikut:

    • Pengubah kunci 128-bit.
    • Vektor inisialisasi 128-bit.
    • 48 byte output AES-256-CBC.
    • Tag autentikasi HMACSHA256.

Sampel payload yang dilindungi diilustrasikan di bawah ini.

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

Dari format payload di atas 32 bit pertama, atau 4 byte adalah header ajaib yang mengidentifikasi versi (09 F0 C9 F0)

128 bit berikutnya, atau 16 byte adalah pengidentifikasi kunci (80 9C 81 0C 19 66 19 40 95 36 53 F8 AA FF EE 57)

Sisanya berisi payload dan khusus untuk format yang digunakan.

Peringatan

Semua payload yang dilindungi ke kunci tertentu akan dimulai dengan header 20-byte (nilai ajaib, id kunci) yang sama. Administrator dapat menggunakan fakta ini untuk tujuan diagnostik untuk memperkirakan kapan payload dihasilkan. Misalnya, payload di atas sesuai dengan kunci {0c819c80-6619-4019-9536-53f8aaffee57}. Jika setelah memeriksa repositori kunci, Anda menemukan bahwa tanggal aktivasi kunci khusus ini adalah 2015-01-01 dan tanggal kedaluwarsanya adalah 2015-03-01, maka wajar untuk mengasumsikan bahwa payload (jika tidak dirusak) dihasilkan dalam jendela itu, memberikan atau mengambil faktor fudge kecil di kedua sisi.