Protezione dei dati ASP.NET CoreASP.NET Core Data Protection

Le applicazioni Web spesso devono archiviare dati sensibili alla sicurezza.Web applications often need to store security-sensitive data. Windows fornisce DPAPI per le applicazioni desktop, ma questo non è adatto per le applicazioni Web.Windows provides DPAPI for desktop applications but this is unsuitable for web applications. Lo stack di protezione dei dati ASP.NET Core fornisce un'API di crittografia semplice e facile da usare che uno sviluppatore può usare per proteggere i dati, tra cui la gestione e la rotazione delle chiavi.The ASP.NET Core data protection stack provide a simple, easy to use cryptographic API a developer can use to protect data, including key management and rotation.

Lo stack di protezione dei dati ASP.NET Core è progettato per fungere da sostituzione a lungo termine per l'elemento> <machineKey in ASP.NET 1. x-4. x.The ASP.NET Core data protection stack is designed to serve as the long-term replacement for the <machineKey> element in ASP.NET 1.x - 4.x. È stato progettato per risolvere molti dei difetti del vecchio stack di crittografia, offrendo al tempo stesso una soluzione predefinita per la maggior parte dei casi d'uso che è probabile che si verifichino le applicazioni moderne.It was designed to address many of the shortcomings of the old cryptographic stack while providing an out-of-the-box solution for the majority of use cases modern applications are likely to encounter.

Presentazione del problemaProblem statement

L'informativa sul problema generale può essere concisa in una singola frase: è necessario rendere persistenti le informazioni attendibili per il recupero successivo, ma non si considera attendibile il meccanismo di persistenza.The overall problem statement can be succinctly stated in a single sentence: I need to persist trusted information for later retrieval, but I don't trust the persistence mechanism. In termini Web, questo potrebbe essere scritto come "è necessario eseguire il round trip di stato attendibile tramite un client non attendibile".In web terms, this might be written as "I need to round-trip trusted state via an untrusted client."

L'esempio canonico è un cookie di autenticazione o bearer token.The canonical example of this is an authentication cookie or bearer token. Il server genera un token "I am Groot and have XYZ Permissions" e lo passa al client.The server generates an "I am Groot and have xyz permissions" token and hands it to the client. In una data futura il client presenta il token al server, ma il server richiede un certo tipo di garanzia che il client non abbia falsificato il token.At some future date the client will present that token back to the server, but the server needs some kind of assurance that the client hasn't forged the token. Quindi, il primo requisito: autenticità (noto anche comeThus the first requirement: authenticity (a.k.a. integrità, correzione delle manomissioni.integrity, tamper-proofing).

Poiché lo stato permanente è considerato attendibile dal server, si prevede che questo stato possa contenere informazioni specifiche per l'ambiente operativo.Since the persisted state is trusted by the server, we anticipate that this state might contain information that's specific to the operating environment. Il formato potrebbe essere un percorso di file, un'autorizzazione, un handle o un altro riferimento indiretto o altri dati specifici del server.This could be in the form of a file path, a permission, a handle or other indirect reference, or some other piece of server-specific data. Tali informazioni in genere non devono essere divulgate a un client non attendibile.Such information should generally not be disclosed to an untrusted client. Quindi, il secondo requisito: riservatezza.Thus the second requirement: confidentiality.

Infine, poiché le applicazioni moderne sono componenti, ciò che abbiamo visto è che i singoli componenti vorranno sfruttare questo sistema senza considerare gli altri componenti del sistema.Finally, since modern applications are componentized, what we've seen is that individual components will want to take advantage of this system without regard to other components in the system. Ad esempio, se un componente bearer token usa questo stack, dovrebbe funzionare senza interferenze da un meccanismo anti-CSRF che potrebbe anche usare lo stesso stack.For instance, if a bearer token component is using this stack, it should operate without interference from an anti-CSRF mechanism that might also be using the same stack. Quindi, il requisito finale: Isolation.Thus the final requirement: isolation.

Microsoft può fornire ulteriori vincoli per limitare l'ambito dei requisiti.We can provide further constraints in order to narrow the scope of our requirements. Si presuppone che tutti i servizi che operano all'interno di cryptosystem siano ugualmente attendibili e che i dati non debbano essere generati o utilizzati al di fuori dei servizi sotto il controllo diretto.We assume that all services operating within the cryptosystem are equally trusted and that the data doesn't need to be generated or consumed outside of the services under our direct control. Inoltre, è necessario che le operazioni siano il più veloci possibile poiché ogni richiesta al servizio Web potrebbe passare attraverso il cryptosystem una o più volte.Furthermore, we require that operations are as fast as possible since each request to the web service might go through the cryptosystem one or more times. Questo rende la crittografia simmetrica ideale per questo scenario ed è possibile scontare la crittografia asimmetrica fino a un momento specifico.This makes symmetric cryptography ideal for our scenario, and we can discount asymmetric cryptography until such a time that it's needed.

Filosofia di progettazioneDesign philosophy

È stata avviata l'identificazione dei problemi con lo stack esistente.We started by identifying problems with the existing stack. Una volta completata questa situazione, abbiamo esaminato il panorama delle soluzioni esistenti ed è stato concluso che nessuna soluzione esistente aveva le funzionalità richieste.Once we had that, we surveyed the landscape of existing solutions and concluded that no existing solution quite had the capabilities we sought. È stata quindi progettata una soluzione basata su diversi principi di guida.We then engineered a solution based on several guiding principles.

  • Il sistema deve offrire semplicità di configurazione.The system should offer simplicity of configuration. Idealmente, la configurazione del sistema è zero e gli sviluppatori potrebbero raggiungere il terreno.Ideally the system would be zero-configuration and developers could hit the ground running. Nelle situazioni in cui gli sviluppatori devono configurare un aspetto specifico, ad esempio il repository delle chiavi, è necessario considerare la necessità di rendere semplici le configurazioni specifiche.In situations where developers need to configure a specific aspect (such as the key repository), consideration should be given to making those specific configurations simple.

  • Offrire un'API semplice per gli utenti.Offer a simple consumer-facing API. Le API dovrebbero essere facili da usare correttamente e difficili da usare in modo non corretto.The APIs should be easy to use correctly and difficult to use incorrectly.

  • Gli sviluppatori non devono apprendere principi di gestione delle chiavi.Developers shouldn't learn key management principles. Il sistema deve gestire la selezione dell'algoritmo e la durata della chiave per conto dello sviluppatore.The system should handle algorithm selection and key lifetime on the developer's behalf. Idealmente, lo sviluppatore non deve mai neanche avere accesso al materiale della chiave non elaborata.Ideally the developer should never even have access to the raw key material.

  • Le chiavi devono essere protette quando possibile.Keys should be protected at rest when possible. Il sistema deve individuare un meccanismo di protezione predefinito appropriato e applicarlo automaticamente.The system should figure out an appropriate default protection mechanism and apply it automatically.

Con questi principi, abbiamo sviluppato uno stack di protezione dei dati semplice e semplice da usare .With these principles in mind we developed a simple, easy to use data protection stack.

Le API di protezione dei dati ASP.NET Core non sono destinate principalmente alla persistenza illimitata dei payload riservati.The ASP.NET Core data protection APIs are not primarily intended for indefinite persistence of confidential payloads. Altre tecnologie come DPAPI di Windows e Rights Management di Azure sono più adatte allo scenario di archiviazione indefinita e hanno funzionalità di gestione delle chiavi corrispondenti.Other technologies like Windows CNG DPAPI and Azure Rights Management are more suited to the scenario of indefinite storage, and they have correspondingly strong key management capabilities. Detto questo, non c'è nulla che impedisce agli sviluppatori di usare le API di protezione dei dati ASP.NET Core per la protezione a lungo termine dei dati riservati.That said, there's nothing prohibiting a developer from using the ASP.NET Core data protection APIs for long-term protection of confidential data.

DestinatariAudience

Il sistema di protezione dei dati è suddiviso in cinque pacchetti principali.The data protection system is divided into five main packages. I vari aspetti di queste API sono destinati a tre destinatari principali;Various aspects of these APIs target three main audiences;

  1. La Panoramica delle API consumer è destinata agli sviluppatori di applicazioni e Framework.The Consumer APIs Overview target application and framework developers.

    "Non voglio conoscere il funzionamento dello stack o la relativa configurazione."I don't want to learn about how the stack operates or about how it's configured. Desidero semplicemente eseguire alcune operazioni nel modo più semplice possibile con la probabilità elevata di usare le API con successo. "I simply want to perform some operation in as simple a manner as possible with high probability of using the APIs successfully."

  2. Le API di configurazione sono destinate agli sviluppatori di applicazioni e agli amministratori di sistema.The configuration APIs target application developers and system administrators.

    "Devo indicare al sistema di protezione dei dati che l'ambiente richiede percorsi o impostazioni non predefinite"."I need to tell the data protection system that my environment requires non-default paths or settings."

  3. Le API di estendibilità sono destinate agli sviluppatori responsabili dell'implementazione dei criteri personalizzati.The extensibility APIs target developers in charge of implementing custom policy. L'utilizzo di queste API potrebbe essere limitato a situazioni rare e a sviluppatori esperti di sicurezza.Usage of these APIs would be limited to rare situations and experienced, security aware developers.

    "È necessario sostituire un intero componente all'interno del sistema perché sono presenti requisiti di comportamento realmente univoci."I need to replace an entire component within the system because I have truly unique behavioral requirements. Sono intenzionato a imparare le parti non comuni della superficie dell'API per creare un plug-in che soddisfi i requisiti ".I am willing to learn uncommonly-used parts of the API surface in order to build a plugin that fulfills my requirements."

Layout del pacchettoPackage layout

Lo stack di protezione dei dati è costituito da cinque pacchetti.The data protection stack consists of five packages.

Risorse aggiuntiveAdditional resources

Ospitare ASP.NET Core in una Web farm