Bagikan melalui


Format penyimpanan kunci dalam ASP.NET Core

Objek disimpan saat tidak aktif dalam representasi XML. Direktori default untuk penyimpanan kunci adalah:

  • Windows: *%LOCALAPPDATA%\ASP.NET\DataProtection-Keys*
  • macOS / Linux: $HOME/.aspnet/DataProtection-Keys

Elemen <kunci>

Kunci ada sebagai objek tingkat atas di repositori kunci. Menurut kunci konvensi memiliki nama key-{guid}.xmlfile , di mana {guid} adalah id kunci. Setiap file tersebut berisi satu kunci. Format file adalah sebagai berikut.

<?xml version="1.0" encoding="utf-8"?>
<key id="80732141-ec8f-4b80-af9c-c4d2d1ff8901" version="1">
  <creationDate>2015-03-19T23:32:02.3949887Z</creationDate>
  <activationDate>2015-03-19T23:32:02.3839429Z</activationDate>
  <expirationDate>2015-06-17T23:32:02.3839429Z</expirationDate>
  <descriptor deserializerType="{deserializerType}">
    <descriptor>
      <encryption algorithm="AES_256_CBC" />
      <validation algorithm="HMACSHA256" />
      <enc:encryptedSecret decryptorType="{decryptorType}" xmlns:enc="...">
        <encryptedKey>
          <!-- This key is encrypted with Windows DPAPI. -->
          <value>AQAAANCM...8/zeP8lcwAg==</value>
        </encryptedKey>
      </enc:encryptedSecret>
    </descriptor>
  </descriptor>
</key>

Elemen <kunci> berisi atribut dan elemen turunan berikut:

  • Id kunci. Nilai ini diperlakukan sebagai otoritatif; nama file hanya bagus untuk keterbacaan manusia.

  • Versi <elemen kunci> , saat ini diperbaiki pada 1.

  • Tanggal pembuatan, aktivasi, dan kedaluwarsa kunci.

  • Elemen <deskriptor> , yang berisi informasi tentang implementasi enkripsi terautentikasi yang terkandung dalam kunci ini.

Dalam contoh di atas, id kunci adalah {80732141-ec8f-4b80-af9c-c4d2d1ff8901}, itu dibuat dan diaktifkan pada 19 Maret 2015, dan memiliki masa pakai 90 hari. (Terkadang tanggal aktivasi mungkin sedikit sebelum tanggal pembuatan seperti dalam contoh ini. Hal ini disebabkan oleh nit dalam cara kerja API dan tidak berbahaya dalam praktiknya.)

Elemen <deskriptor>

Elemen deskriptor> luar <berisi atribut deserializerType, yang merupakan nama tipe yang memenuhi syarat rakitan yang mengimplementasikan IAuthenticatedEncryptorDescriptorDeserializer. Jenis ini bertanggung jawab untuk membaca elemen deskriptor> dalam <dan untuk mengurai informasi yang terkandung di dalamnya.

Format tertentu dari <elemen deskriptor> tergantung pada implementasi enkripsi terautentikasi yang dienkapsulasikan oleh kunci, dan setiap jenis deserializer mengharapkan format yang sedikit berbeda untuk ini. Namun, secara umum, elemen ini akan berisi informasi algoritma (nama, jenis, OID, atau sejenisnya) dan materi kunci rahasia. Dalam contoh di atas, deskriptor menentukan bahwa kunci ini membungkus enkripsi AES-256-CBC + validasi HMACSHA256.

Elemen <encryptedSecret>

Elemen <encryptedSecret> yang berisi bentuk terenkripsi dari materi kunci rahasia mungkin ada jika enkripsi rahasia tidak aktif diaktifkan. Atribut decryptorType adalah nama jenis yang memenuhi syarat rakitan yang mengimplementasikan IXmlDecryptor. Jenis ini bertanggung jawab untuk membaca elemen encryptedKey> dalam <dan mendekripsinya untuk memulihkan teks biasa asli.

<descriptor>Seperti halnya , format <encryptedSecret> elemen tertentu tergantung pada mekanisme enkripsi tidak aktif yang digunakan. Dalam contoh di atas, kunci master dienkripsi menggunakan Windows DPAPI per komentar.

Elemen <pencabutan>

Pencabutan ada sebagai objek tingkat atas di repositori kunci. Berdasarkan pencabutan konvensi memiliki nama revocation-{timestamp}.xml file (untuk mencabut semua kunci sebelum tanggal tertentu) atau revocation-{guid}.xml (untuk mencabut kunci tertentu). Setiap file berisi satu <elemen pencabutan> .

Untuk pencabutan kunci individual, konten file akan seperti di bawah ini.

<?xml version="1.0" encoding="utf-8"?>
<revocation version="1">
  <revocationDate>2015-03-20T22:45:30.2616742Z</revocationDate>
  <key id="eb4fc299-8808-409d-8a34-23fc83d026c9" />
  <reason>human-readable reason</reason>
</revocation>

Dalam hal ini, hanya kunci yang ditentukan yang dicabut. Namun, jika id kunci adalah "*", seperti dalam contoh di bawah ini, semua kunci yang tanggal pembuatannya sebelum tanggal pencabutan yang ditentukan dicabut.

<?xml version="1.0" encoding="utf-8"?>
<revocation version="1">
  <revocationDate>2015-03-20T15:45:45.7366491-07:00</revocationDate>
  <!-- All keys created before the revocation date are revoked. -->
  <key id="*" />
  <reason>human-readable reason</reason>
</revocation>

Elemen <alasan> tidak pernah dibaca oleh sistem. Ini hanyalah tempat yang nyaman untuk menyimpan alasan pencabutan yang dapat dibaca manusia.