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

Le applicazioni Web è spesso necessario archiviare i dati sensibili alla sicurezza.Web applications often need to store security-sensitive data. Windows fornisce DPAPI per le applicazioni desktop, ma ciò non è adatta per le applicazioni web.Windows provides DPAPI for desktop applications but this is unsuitable for web applications. Lo stack di protezione dei dati di ASP.NET Core forniscono un'API di crittografia semplice e facile da usare uno sviluppatore può utilizzare per proteggere i dati, tra cui la rotazione e la gestione 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 di ASP.NET Core è progettato per essere utilizzato come valore di sostituzione a lungo termine per il <machineKey> elemento 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 soddisfare molte delle carenze del vecchio stack di crittografia, offrendo una soluzione di out-of-the-box per la maggior parte dei casi d'uso di applicazioni moderne possono incontrare.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'istruzione di problema generale può essere dichiarato sinteticamente in una singola frase: È necessario rendere persistenti le informazioni attendibili per un successivo recupero, ma il meccanismo di persistenza non attendibili.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 di web, questo potrebbe essere scritto come "Ho bisogno di andata e ritorno dello 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 "Sono Groot e disporre delle autorizzazioni xyz" del token e lo passa al client.The server generates an "I am Groot and have xyz permissions" token and hands it to the client. Successivamente il client presenta tale token al server, ma il server deve avere un tipo di garanzia che il client non è ancora contraffatto 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. In questo modo il primo requisito: autenticità (noto anche comeThus the first requirement: authenticity (a.k.a. l'integrità, a prova di manomissione).integrity, tamper-proofing).

Poiché lo stato persistente è considerato attendibile dal server, si prevede che questo stato può 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. Ciò potrebbe essere in forma di un percorso di file, un'autorizzazione, un handle o altri riferimento indiretto o altre parti di 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 a livello generale non devono essere rivelate a un client non attendibile.Such information should generally not be disclosed to an untrusted client. In questo modo il secondo requisito: riservatezza.Thus the second requirement: confidentiality.

Infine, poiché vengano suddivisa in componenti di applicazioni moderne, ciò che abbiamo visto è che i singoli componenti desidera sfruttare i vantaggi di questo sistema indipendentemente da altri componenti nel 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 di bearer token Usa lo stack, dovrebbe funzionare senza interferenze da un meccanismo di 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. In questo modo l'ultimo requisito: isolamento.Thus the final requirement: isolation.

Possiamo fornire ulteriormente i 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 sistema di crittografia sono altrettanto attendibili e che i dati non devono essere generato o utilizzato di fuori di 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 sono nel minor tempo poiché ogni richiesta al servizio web può passare attraverso il sistema di crittografia 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. Ciò rende ideale per questo scenario la crittografia simmetrica e crittografia asimmetrica viene possibile discount fino ad una volta che è necessario.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

Iniziammo identificando i problemi con lo stack di esistente.We started by identifying problems with the existing stack. Una volta che avevamo, abbiamo intervistati ha dichiarato il panorama delle soluzioni esistenti e conclude che nessuna soluzione era piuttosto le funzionalità di cui che viene ricercati.Once we had that, we surveyed the landscape of existing solutions and concluded that no existing solution quite had the capabilities we sought. Quindi, abbiamo progettato una soluzione basata su alcuni principi 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, il sistema sarebbe senza operazioni di configurazione e gli sviluppatori è stato possibile inizia subito.Ideally the system would be zero-configuration and developers could hit the ground running. Situazioni in cui gli sviluppatori devono configurare un aspetto specifico (ad esempio l'archivio chiave), debba essere presi in considerazione rendendo semplice tali 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.

  • Offrono una semplice API per consumatori.Offer a simple consumer-facing API. Le API devono essere facile da utilizzare in modo corretto e difficile da usare in modo non corretto.The APIs should be easy to use correctly and difficult to use incorrectly.

  • Gli sviluppatori non devono illustrato i principi di gestione delle chiavi.Developers shouldn't learn key management principles. Il sistema deve gestire la durata di chiave per conto dello sviluppatore e selezione dell'algoritmo.The system should handle algorithm selection and key lifetime on the developer's behalf. In teoria lo sviluppatore non è nemmeno avrà accesso al materiale della chiave non elaborato.Ideally the developer should never even have access to the raw key material.

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

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

Le API di protezione dati ASP.NET Core non sono principalmente destinati indefinita persistenza del payload riservati.The ASP.NET Core data protection APIs are not primarily intended for indefinite persistence of confidential payloads. Come altre tecnologie Windows CNG DPAPI e Azure Rights Management sono più adatte allo scenario di archiviazione illimitata, e hanno le funzionalità di gestione delle chiavi sicuro o ridotta di conseguenza.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. Ciò premesso, non c'è niente divieto di uno sviluppatore di usare le API di protezione 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 dati è suddivisa in cinque pacchetti principali.The data protection system is divided into five main packages. Tre gruppi di destinatari principali; di destinazione di vari aspetti di queste APIVarious aspects of these APIs target three main audiences;

  1. Il panoramica delle API Consumer agli sviluppatori di applicazioni e framework di destinazione.The Consumer APIs Overview target application and framework developers.

    "Non desidero informazioni sulle modalità di funzionamento dello stack o sulla relativa configurazione."I don't want to learn about how the stack operates or about how it's configured. Desidera semplicemente eseguire alcune operazioni in più semplice modo possibili con probabilità elevata usando le API è stata."I simply want to perform some operation in as simple a manner as possible with high probability of using the APIs successfully."

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

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

  3. Gli sviluppatori di destinazione le API estendibilità responsabile dell'implementazione di criteri personalizzato.The extensibility APIs target developers in charge of implementing custom policy. Utilizzo di queste API limitata a situazioni rare ed esperti, gli sviluppatori con riconoscimento della protezione.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é ho requisiti comportamentali davvero unico."I need to replace an entire component within the system because I have truly unique behavioral requirements. Accetto di altre parti usato insolito della superficie dell'API per creare un plug-in che soddisfa 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 pacchettoPackage layout

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

Risorse aggiuntiveAdditional resources

Ospitare ASP.NET Core in una Web farm