Bagikan melalui


Enkripsi kunci tidak aktif di Windows dan Azure menggunakan ASP.NET Core

Sistem perlindungan data menggunakan mekanisme penemuan secara default untuk menentukan bagaimana kunci kriptografi harus dienkripsi saat tidak aktif. Pengembang dapat mengambil alih mekanisme penemuan dan menentukan secara manual bagaimana kunci harus dienkripsi saat tidak aktif.

Peringatan

Jika Anda menentukan lokasi persistensi kunci eksplisit, sistem perlindungan data membatalkan pendaftaran enkripsi kunci default saat mekanisme tidak aktif. Akibatnya, kunci tidak lagi dienkripsi saat tidak aktif. Kami menyarankan agar Anda menentukan mekanisme enkripsi kunci eksplisit untuk penyebaran produksi. Opsi mekanisme enkripsi saat istirahat dijelaskan dalam topik ini.

Azure Key Vault

Untuk informasi selengkapnya, lihat Mengonfigurasi ASP.NET Core Data Protection.

Windows DPAPI

Hanya berlaku untuk penyebaran Windows.

Ketika Windows DPAPI digunakan, materi kunci dienkripsi dengan CryptProtectData sebelum disimpan ke penyimpanan. DPAPI adalah mekanisme enkripsi yang sesuai untuk data yang tidak pernah dibaca di luar komputer saat ini (meskipun dimungkinkan untuk mencadangkan kunci ini hingga Direktori Aktif). Untuk mengonfigurasi enkripsi kunci DPAPI saat disimpan, panggil salah satu metode ekstensi ProtectKeysWithDpapi:

// Only the local user account can decrypt the keys
services.AddDataProtection()
    .ProtectKeysWithDpapi();

Jika ProtectKeysWithDpapi dipanggil tanpa parameter, hanya akun pengguna Windows saat ini yang dapat menguraikan cincin kunci yang bertahan. Anda dapat secara opsional menentukan bahwa setiap akun pengguna di komputer (bukan hanya akun pengguna saat ini) yang dapat menguraikan cincin kunci:

// All user accounts on the machine can decrypt the keys
services.AddDataProtection()
    .ProtectKeysWithDpapi(protectToLocalMachine: true);

Sertifikat X.509

Jika aplikasi tersebar di beberapa komputer, mungkin lebih mudah untuk mendistribusikan sertifikat X.509 bersama (.pfx format) di seluruh mesin dan mengonfigurasi aplikasi yang dihosting untuk menggunakan sertifikat untuk enkripsi kunci saat tidak aktif.

Dalam contoh berikut, thumbprint sertifikat diteruskan ke ProtectKeysWithCertificate:

services.AddDataProtection()
    .ProtectKeysWithCertificate("{CERTIFICATE THUMBPRINT}");

Dalam contoh berikut, sebuah X509Certificate2 diteruskan ke ProtectKeysWithCertificate:

var cert = new X509Certificate2(...);

services.AddDataProtection()
    .ProtectKeysWithCertificate(cert);

Untuk membuat sertifikat, gunakan salah satu pendekatan berikut atau alat atau layanan online lain yang sesuai:

Untuk informasi selengkapnya, lihat Membuat sertifikat yang ditandatangani sendiri dengan .NET CLI.

Karena keterbatasan .NET Framework, hanya sertifikat dengan kunci privat CAPI yang didukung. Lihat konten di bawah ini untuk kemungkinan solusi untuk batasan ini.

Windows DPAPI-NG

Mekanisme ini hanya tersedia pada Windows 8/Windows Server 2012 atau yang lebih baru.

Dimulai dengan Windows 8, OS Windows mendukung DPAPI-NG (juga disebut CNG DPAPI). Untuk informasi selengkapnya, lihat Tentang CNG DPAPI.

Prinsipal dikodekan sebagai aturan deskriptor perlindungan. Dalam contoh berikut yang memanggil ProtectKeysWithDpapiNG, hanya pengguna yang bergabung dengan domain dengan SID yang ditentukan yang dapat mendekripsi cincin kunci:

public void ConfigureServices(IServiceCollection services)
{
    // Uses the descriptor rule "SID=S-1-5-21-..."
    services.AddDataProtection()
        .ProtectKeysWithDpapiNG("SID=S-1-5-21-...",
        flags: DpapiNGProtectionDescriptorFlags.None);
}

Ada juga kelebihan ProtectKeysWithDpapiNGparameter dari . Gunakan metode kenyamanan ini untuk menentukan aturan "SID={CURRENT_ACCOUNT_SID}", di mana CURRENT_ACCOUNT_SID adalah SID dari akun pengguna Windows saat ini:

public void ConfigureServices(IServiceCollection services)
{
    // Use the descriptor rule "SID={current account SID}"
    services.AddDataProtection()
        .ProtectKeysWithDpapiNG();
}

Dalam skenario ini, pengendali domain AD bertanggung jawab untuk mendistribusikan kunci enkripsi yang digunakan oleh operasi DPAPI-NG. Pengguna target dapat menguraikan payload terenkripsi dari komputer yang bergabung dengan domain apa pun (asalkan proses berjalan di bawah identitas mereka).

Enkripsi berbasis sertifikat dengan Windows DPAPI-NG

Jika aplikasi berjalan pada Windows 8.1/Windows Server 2012 R2 atau yang lebih baru, Anda dapat menggunakan Windows DPAPI-NG untuk melakukan enkripsi berbasis sertifikat. Gunakan string deskriptor aturan "CERTIFICATE=HashId:{CERTIFICATE THUMBPRINT}", di mana {CERTIFICATE THUMBPRINT} adalah placeholder untuk thumbprint SHA1 dari sertifikat yang telah dikodekan dalam format heksadesimal:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .ProtectKeysWithDpapiNG("CERTIFICATE=HashId:{CERTIFICATE THUMBPRINT}",
            flags: DpapiNGProtectionDescriptorFlags.None);
}

Aplikasi apa pun yang ditunjukkan pada repositori ini harus berjalan pada Windows 8.1/Windows Server 2012 R2 atau yang lebih baru untuk menguraikan kunci.

Enkripsi kunci kustom

Jika mekanisme dalam kotak tidak sesuai, pengembang dapat menentukan mekanisme enkripsi kunci mereka sendiri dengan menyediakan kustom IXmlEncryptor.