|
|
Postat pe 15.08.2023 10:21:16
|
|
|
|

Cerințe: În timpul procesului de dezvoltare, puteți întâlni adesea unele scenarii de criptare și decriptare, de exemplu, autentificarea prin email poate transporta un șir criptat, iar când utilizatorul dă click pe link pentru a sări la interfață, sistemul poate decripta conținutul șirului în mod normal, realizând astfel funcția de autentificare a emailului.
ASP.NET Core oferă funcții de protecție a datelor:Autentificarea cu hyperlink este vizibilă.
Pachetul principal
Principalele pachete implicate în Protecția Datelor sunt următoarele, care sunt referențiate după necesitate:
- Microsoft.AspNetCore.DataProtection.Abstractions standard. Denumirea componentelor stratului de abstracție NET Core. Include servicii majore de interfață precum IDataProtectionProvider și IDataProtector.
- Microsoft.AspNetCore.DataProtection, incluzând operațiunile criptografice de bază, gestionarea cheilor, configurarea și extensibilitatea.
- Extensia Microsoft.AspNetCore.DataProtection.Extensions. Oferă o metodă de fabrică pentru crearea instanțelor și o metodă de extensie a stocării pentru chei. Acest pachet este folosit în modul non-DI.
- Microsoft.AspNetCore.DataProtection.SystemWeb implementează <machineKey>compatibilitatea cu mecanismele de criptare și decriptare din ASP.NET 4.x.
- Microsoft.AspNetCore.Cryptography.KeyDerivation oferă o implementare a rutinei de hashing a parolelor PBKDF2. Folosește-l când ai nevoie să folosești criptare hash.
IDataProtectionProvider vs IDataProtector
IDataProtectionProvider se bazează pe modelul Provider al Microsoft și este folosit pentru a oferi politici pentru crearea instanțelor. Creează un obiect IDataProtector apelând metoda IDataProtectionProvider.CreateProtector(purpose). IDataProtector este un serviciu responsabil pentru criptare și decriptare, care oferă în principal două tipuri de metode: protect și unprotect (fiecare tip are multe metode de supraîncărcare și extensie). Înțelegerea simplă este că protect este folosit pentru criptare, iar unprotect este folosit pentru decriptare. Parametrul Create method al IDataProtectionProvider este un șir care oferă funcționalitate de izolare. IDataProtectors create cu șiruri netrecibile vor obține rezultate diferite de criptare chiar dacă criptează același obiect. IDataProtector este și un IDataProtectionProvider implicit, care oferă și metoda CreateProtector(purpose). Aceasta înseamnă că poate fi implementat ușorModul aplicație multi-chiriaș。
Iată câteva lucruri de reținut:
Instanțe IDataProtectionProvider și IDataProtectorSiguranța filetuluiScop. Metoda unprotect este de a informa apelantul că decriptarea a eșuat prin aruncarea unei excepții. Clasa de excepție este CryptographicException.
ASP.NET Core este simplu de folosit pentru protecția datelor
Se adaugă o nouă interfață pentru criptarea și decriptarea datelor, iar codul este următorul:
Testul este următorul:
IDataProtectionProvider este un model singleton cu următorul cod:Autentificarea cu hyperlink este vizibilă.
Managementul cheilor
Dacă profilul utilizatorului este disponibil, cheia este păstrată pentru%LOCALAPPDATA%\ASP.NET\DataProtection-Keysdosar. Dacă sistemul de operare este Windows, cheia este criptată în repaus folosind DPAPI. Așa cum se arată mai jos:
Viață cheie
În mod implicit, cheiaCiclul de viață este de 90 de zile。 Când cheia expiră, aplicația generează automat o cheie nouă și setează cheia nouă ca cheie activă. Atâta timp cât cheile dezactivate rămân în sistem, aplicația ta poate decripta orice date protejate de ele. Pentru mai multe informații, vezi Managementul cheilor.Autentificarea cu hyperlink este vizibilă.
Algoritmul implicit
Algoritmii impliciti de protecție a încărcării utilizați sunt AES-256-CBC (pentru confidențialitate) și HMACSHA256 (pentru autenticitate). Cheia principală de 512 biți, care se schimbă la fiecare 90 de zile, este folosită pentru a deriva două subchei pentru acești algoritmi pe baza fiecărei sarcini utile.
ASP.NET furnizor cheie de stocare în Core
Sistem de fișiere: PersistKeysToFileSystem Azure Storage: PersistKeysToAzureBlobStorage, care necesită reference: Azure.Extensions.AspNetCore.DataProtection.Blobs Stocare Redis: PersistKeysToStackExchangeRedis, referință necesară: Microsoft.AspNetCore.DataProtection.StackExchangeRedis
Referință:Autentificarea cu hyperlink este vizibilă.
Clusterizate și distribuite
Dacă cheia serverului este inconsistentă, de exemplu: criptarea serverului A și decriptarea serverului B, va fi aruncată o excepție (așa cum se arată în figura de mai jos), iar aceeași cheie trebuie implementată.
Configurați aceeași cheie după cum urmează:
Odată ce programul rulează, generează automat un fișier key-*.xml sub folderul publish_itsvse, păstrează acest fișier consistent pe servere diferite! Așa cum se arată mai jos:
ASP.NET Configurația protecției nucleului
ASP.NET CORE oferă suport bogat pentru API-uri, persistență a parolelor, configurare și funcții de personalizare.
- PersistKeysToAzureBlobStorage、ProtectKeysWithAzureKeyVault。 Scenariu de stocare în cloud Azure.
- PersistKeysToFileSystem。 Schemă locală de stocare a sistemului de fișiere care înregistrează algoritmi, chei și dependențe de criptare.
- ProtectKeysWith*。 Criptarea este asigurată prin extensii ale acestei metode de denumire. De exemplu, ProtectKeysWithCertificate
- SetDefaultKeyLifetime。 Setează durata de viață a cheii la 90 de zile implicit.
- SetApplicationName。 Setează numele aplicației. În mod implicit, mecanismele de protecție a datelor sunt absolut izolate de fiecare aplicație. Partajarea cheilor între aplicații poate fi realizată prin setarea aceluiași nume de aplicație.
- DisableAutomaticKeyGeneration。 Împiedică ca cheia să fie reluată automat. De multe ori nu vrem ca parolele să se schimbe sau, într-un serviciu de cluster, avem un serviciu dedicat responsabil pentru anularea actualizărilor cheilor, iar alte sarcini utile trebuie doar să le obțină dintr-un loc partajat.
- UseCryptographicAlgorithms。 Folosiți algoritmi personalizati de criptare și decriptare
Referință:Autentificarea cu hyperlink este vizibilă.
|
Precedent:Folosește PowerShell pentru a genera elementul <machineKey>Următor:Comparați Tailscale, ZeroTier, WireGuard, OmniEdge și Ngrok pentru soluții de geo-rețea
|