|
|
Pubblicato su 15/08/2023 10:21:16
|
|
|
|

Requisiti: Durante il processo di sviluppo, spesso si possono incontrare alcuni scenari di crittografia e decrittografia, ad esempio, l'autenticazione via email può portare una stringa criptata e, quando l'utente clicca sul link per accedere all'interfaccia, il sistema può decifrare normalmente il contenuto della stringa, realizzando così la funzione di autenticazione email.
ASP.NET Core offre funzionalità di protezione dei dati:Il login del link ipertestuale è visibile.
Pacchetto principale
I principali pacchetti coinvolti nella Protezione dei Dati sono i seguenti, che vengono consultati secondo necessità:
- Microsoft.AspNetCore.DataProtection.Abstractions standard. Denominazione dei pacchetti dei componenti del livello di astrazione NET Core. Include importanti servizi di interfaccia come IDataProtectionProvider e IDataProtector.
- Microsoft.AspNetCore.DataProtection, inclusi le operazioni crittografiche principali, la gestione delle chiavi, la configurazione e l'estensibilità.
- Microsoft.AspNetCore.DataProtection.Extensions estensione. Fornisce un metodo di fabbrica per creare istanze e un metodo di estensione di memoria per le chiavi. Questo pacchetto viene utilizzato in modalità non-DI.
- Microsoft.AspNetCore.DataProtection.SystemWeb <machineKey>implementa la compatibilità con i meccanismi di crittografia e decrittografia presenti ASP.NET 4.x.
- Microsoft.AspNetCore.Cryptography.KeyDerivation fornisce un'implementazione della routine di hashing delle password PBKDF2. Usalo quando hai bisogno di crittografia hash.
IDataProtectionProvider vs IDataProtector
IDataProtectionProvider si basa sul modello Provider di Microsoft ed è utilizzato per fornire politiche per la creazione di istanze. Crea un oggetto IDataProtector chiamando il metodo IDataProtectionProvider.CreateProtector(purpose). IDataProtector è un servizio responsabile della crittografia e della decrittazione, che fornisce principalmente due tipi di metodi: protect e unprotect (ogni tipo ha molti metodi di sovraccarico ed estensione). La comprensione semplice è che protect viene usato per la crittografia e unprotect per la decrittazione. Il parametro Create method di IDataProtectionProvider è una stringa che fornisce funzionalità di isolamento. IDataProtectors creati con stringhe non passabili otterranno risultati di crittografia diversi anche se criptano lo stesso oggetto. IDataProtector stesso è anche un IDataProtectionProvider implicito, che fornisce anche il metodo CreateProtector(purpose). Questo significa che può essere facilmente implementatoModalità applicazione multi-tenant。
Ecco alcune cose da tenere a mente:
Istanze IDataProtectionProvider e IDataProtectorSicurezza della filettaturaBersaglio. Il metodo unprotect consiste nel informare il chiamante che la decrittazione è fallita lanciando un'eccezione. La classe eccezione è CryptographicException.
ASP.NET Core è semplice da usare protezione dei dati
Viene aggiunta una nuova interfaccia per criptare e decriptare i dati, e il codice è il seguente:
Il test è il seguente:
IDataProtectionProvider è un modello singleton con il seguente codice:Il login del link ipertestuale è visibile.
Gestione delle chiavi
Se il profilo utente è disponibile, la chiave viene mantenuta per%LOCALAPPDATA%\ASP.NET\DataProtection-Keyscartella. Se il sistema operativo è Windows, la chiave viene crittografata a riposo usando DPAPI. Come mostrato di seguito:
Vita chiave
Per impostazione predefinita, la chiaveIl ciclo di vita è di 90 giorni。 Quando la chiave scade, l'applicazione genera automaticamente una nuova chiave e imposta la nuova chiave come chiave attiva. Finché le chiavi disattivate rimangono nel sistema, la tua applicazione può decriptare qualsiasi dato da esse protetto. Per maggiori informazioni, vedi Gestione delle chiavi.Il login del link ipertestuale è visibile.
Algoritmo predefinito
Gli algoritmi predefiniti di protezione del carico utilizzati sono AES-256-CBC (per la riservatezza) e HMACSHA256 (per l'autenticità). La chiave principale a 512 bit, che cambia ogni 90 giorni, viene utilizzata per derivare due sottochiavi per questi algoritmi basate su ciascun payload.
ASP.NET provider di storage chiave in Core
File System: PersistKeysToFileSystem Azure Storage: PersistKeysToAzureBlobStorage, che richiede reference: Azure.Extensions.AspNetCore.DataProtection.Blobs Archiviazione Redis: PersistKeysToStackExchangeRedis, riferimento richiesto: Microsoft.AspNetCore.DataProtection.StackExchangeRedis
Riferimento:Il login del link ipertestuale è visibile.
Clusterizzato e distribuito
Se la chiave del server è inconsistente, ad esempio: crittografia del server A e decrittografia del server B, verrà lanciata un'eccezione (come mostrato nella figura sotto) e la stessa chiave deve essere distribuita.
Configura la stessa chiave come segue:
Una volta che il programma è in esecuzione, genera automaticamente un file chiave *.xml sotto la cartella publish_itsvse, mantieni questo file coerente su server diversi! Come mostrato di seguito:
ASP.NET Configurazione della protezione del nucleo
ASP.NET CORE offre un ricco supporto API, persistenza delle password, configurazione e funzioni di personalizzazione.
- PersistKeysToAzureBlobStorage、ProtectKeysWithAzureKeyVault。 Scenario di archiviazione cloud Azure.
- PersistKeysToFileSystem。 Schema di archiviazione locale del file system che registra algoritmi di cifratura, chiavi e dipendenze.
- ProtectKeysWith*。 La crittografia è fornita tramite estensioni di questo metodo di denominazione. Ad esempio, ProtectKeysWithCertificate
- SetDefaultKeyLifetime。 Imposta la vita della chiave a 90 giorni di default.
- SetApplicationName。 Imposta il nome dell'app. Di default, i meccanismi di protezione dei dati sono assolutamente isolati da ciascuna applicazione. La condivisione delle chiavi tra app può essere ottenuta impostando lo stesso nome dell'app.
- DisableAutomaticKeyGeneration。 Impedire che il tasto venga automaticamente riportato indietro. Molte volte non vogliamo che le password cambino o, in un servizio del cluster, abbiamo un servizio dedicato responsabile del rollback degli aggiornamenti chiavi, e gli altri payload devono semplicemente ottenerlo da un luogo condiviso.
- UseCryptographicAlgorithms。 Utilizzare algoritmi personalizzati di crittografia e decrittazione
Riferimento:Il login del link ipertestuale è visibile.
|
Precedente:Usa PowerShell per generare l'elemento <machineKey>Prossimo:Confronta Tailscale, ZeroTier, WireGuard, OmniEdge e Ngrok per soluzioni di geo-networking
|