|
|
Diposting pada 15/08/2023 10.21.16
|
|
|
|

Persyaratan: Selama proses pengembangan, Anda mungkin sering menemukan beberapa skenario enkripsi dan dekripsi, misalnya, otentikasi email dapat membawa string terenkripsi, dan ketika pengguna mengklik tautan untuk melompat ke antarmuka, sistem dapat mendekripsi konten string secara normal, sehingga mewujudkan fungsi otentikasi email.
ASP.NET Core menawarkan fitur perlindungan data:Login hyperlink terlihat.
Paket utama
Paket utama yang terlibat dalam Perlindungan Data adalah sebagai berikut, yang direferensikan sesuai kebutuhan:
- Standar Microsoft.AspNetCore.DataProtection.Abstractions. Penamaan paket komponen lapisan abstraksi NET CORE. Ini mencakup layanan antarmuka utama seperti IDataProtectionProvider dan IDataProtector.
- Microsoft.AspNetCore.DataProtection, termasuk operasi kriptografi inti, manajemen kunci, konfigurasi, dan ekstensibilitas.
- Ekstensi Microsoft.AspNetCore.DataProtection.Extensions. Menyediakan metode pabrik untuk membuat instans dan metode ekstensi penyimpanan untuk kunci. Paket ini digunakan dalam mode non-DI.
- Microsoft.AspNetCore.DataProtection.SystemWeb mengimplementasikan <machineKey>kompatibilitas dengan mekanisme enkripsi dan dekripsi di ASP.NET 4.x.
- Microsoft.AspNetCore.Cryptography.KeyDerivation menyediakan implementasi rutinitas hashing kata sandi PBKDF2. Gunakan saat Anda perlu menggunakan enkripsi hash.
IDataProtectionProvider vs IDataProtector
IDataProtectionProvider didasarkan pada model Penyedia Microsoft dan digunakan untuk menyediakan kebijakan untuk membuat instans. Buat objek IDataProtector dengan memanggil metode IDataProtectionProvider.CreateProtector(purpose). IDataProtector adalah layanan yang bertanggung jawab atas enkripsi dan dekripsi, yang terutama menyediakan dua jenis metode: lindungi dan unprotect (setiap jenis memiliki banyak metode kelebihan beban dan ekstensi). Pemahaman sederhana adalah bahwa protect digunakan untuk enkripsi dan unprotect digunakan untuk dekripsi. Parameter metode Create IDataProtectionProvider adalah string yang menyediakan fungsionalitas isolasi. IDataProtector yang dibuat dengan string yang tidak dapat dilewati akan mendapatkan hasil enkripsi yang berbeda meskipun mereka mengenkripsi objek yang sama. IDataProtector sendiri juga merupakan IDataProtectionProvider implisit, yang juga menyediakan metode CreateProtector(purpose). Artinya, dapat dengan mudah diterapkanMode aplikasi multi-penyewa。
Berikut adalah beberapa hal yang perlu diingat:
Instans IDataProtectionProvider dan IDataProtectorKeamanan benangTarget. Metode unprotect adalah memberi tahu pemanggil bahwa dekripsi gagal dengan melemparkan pengecualian. Kelas pengecualian adalah CryptographicException.
ASP.NET Core mudah digunakan perlindungan data
Antarmuka baru ditambahkan untuk mengenkripsi dan mendekripsi data, dan kodenya adalah sebagai berikut:
Tesnya adalah sebagai berikut:
IDataProtectionProvider adalah pola singleton dengan kode berikut:Login hyperlink terlihat.
Manajemen kunci
Jika profil pengguna tersedia, kunci dipertahankan untuk%LOCALAPPDATA%\ASP.NET\DataProtection-Keysmap. Jika sistem operasinya adalah Windows, kunci dienkripsi saat tidak aktif menggunakan DPAPI. Seperti yang ditunjukkan di bawah ini:
Kehidupan kunci
Secara default, kunciSiklus hidup adalah 90 hari。 Saat kunci kedaluwarsa, aplikasi secara otomatis menghasilkan kunci baru dan menetapkan kunci baru sebagai kunci aktif. Selama kunci yang dinonaktifkan tetap ada di sistem, aplikasi Anda dapat mendekripsi data apa pun yang dilindungi olehnya. Untuk informasi selengkapnya, lihat Manajemen kunci.Login hyperlink terlihat.
Algoritma default
Algoritme perlindungan beban default yang digunakan adalah AES-256-CBC (untuk kerahasiaan) dan HMACSHA256 (untuk keaslian). Kunci master 512-bit, yang berubah setiap 90 hari, digunakan untuk menurunkan dua subkunci untuk algoritme ini berdasarkan setiap muatan.
ASP.NET penyedia penyimpanan kunci di Core
Sistem File: PersistKeysToFileSystem Azure Storage: PersistKeysToAzureBlobStorage, yang memerlukan referensi: Azure.Extensions.AspNetCore.DataProtection.Blobs Penyimpanan Redis: PersistKeysToStackExchangeRedis, referensi diperlukan: Microsoft.AspNetCore.DataProtection.StackExchangeRedis
Referensi:Login hyperlink terlihat.
Berkluster dan didistribusikan
Jika kunci server tidak konsisten, misalnya: enkripsi server A dan dekripsi server B, pengecualian akan dilemparkan (seperti yang ditunjukkan pada gambar di bawah), dan kunci yang sama perlu disebarkan.
Konfigurasikan kunci yang sama sebagai berikut:
Setelah program berjalan, secara otomatis menghasilkan file kunci key-*.xml di bawah folder publish_itsvse, jaga agar file ini tetap konsisten di bawah server yang berbeda! Seperti yang ditunjukkan di bawah ini:
ASP.NET Konfigurasi perlindungan inti
ASP.NET CORE menyediakan dukungan API yang kaya, persistensi kata sandi, konfigurasi, dan fungsi penyesuaian.
- PersistKeysToAzureBlobStorage、ProtectKeysWithAzureKeyVault。 Skenario penyimpanan cloud Azure.
- PersistKeysToFileSystem。 Skema penyimpanan sistem file lokal yang merekam algoritme enkripsi, kunci, dan dependensi.
- LindungiKunciDengan*。 Enkripsi disediakan melalui ekstensi metode penamaan ini. Misalnya, ProtectKeysWithCertificate
- SetDefaultKeyLifetime。 Atur masa pakai kunci menjadi 90 hari secara default.
- SetApplicationName。 Atur nama aplikasi. Secara default, mekanisme perlindungan data benar-benar terisolasi dari setiap aplikasi. Berbagi kunci antar aplikasi dapat dicapai dengan mengatur nama aplikasi yang sama.
- Nonaktifkan Generasi Kunci Otomatis。 Cegah kunci diputar kembali secara otomatis. Sering kali kami tidak benar-benar ingin kata sandi diubah atau dalam layanan kluster, kami memiliki layanan khusus yang bertanggung jawab atas pengembalian pembaruan kunci, dan muatan lain hanya perlu mendapatkannya dari tempat bersama.
- GunakanAlgoritmaKriptografis。 Gunakan algoritme enkripsi dan dekripsi kustom
Referensi:Login hyperlink terlihat.
|
Mantan:Gunakan PowerShell untuk menghasilkan elemen <machineKey>Depan:Bandingkan Tailscale, ZeroTier, WireGuard, OmniEdge, dan Ngrok untuk solusi geo-networking
|