Protection des données ASP.NET CoreASP.NET Core Data Protection

Les applications Web doivent souvent stocker les données de sécurité sensibles.Web applications often need to store security-sensitive data. Windows fournit DPAPI pour les applications de bureau, mais cela ne convient pas pour les applications web.Windows provides DPAPI for desktop applications but this is unsuitable for web applications. La pile de protection des données ASP.NET Core fournissent une API de chiffrement simple et facile à utiliser un développeur peut utiliser pour protéger les données, y compris la rotation et gestion de clés.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.

La pile de protection des données ASP.NET Core est conçue pour servir le remplacement à long terme pour le <machineKey> élément dans 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. Il a été conçu pour résoudre bon nombre des lacunes de l’ancienne pile de chiffrement tout en fournissant une solution complète pour la majorité des cas d’utilisation des applications modernes sont susceptibles de rencontrer.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.

Énoncé du problèmeProblem statement

L’énoncé du problème global peut se résumer brièvement dans une phrase unique : j’ai besoin de conserver des informations fiables pour une récupération ultérieure, mais je n’approuve le mécanisme de persistance.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. Cela peut être écrit en termes de web, comme « J’ai besoin pour effectuer un aller-retour état approuvé via un client non fiable. »In web terms, this might be written as "I need to round-trip trusted state via an untrusted client."

L’exemple canonique de ceci est un cookie d’authentification ou au porteur jeton.The canonical example of this is an authentication cookie or bearer token. Le serveur génère un « Je suis Groot et disposer des autorisations de xyz » du jeton et le remet au client.The server generates an "I am Groot and have xyz permissions" token and hands it to the client. À une date ultérieure, le client présentera ce jeton sur le serveur, mais le serveur a besoin d’une sorte de garantie que le client n’a pas falsifié le jeton.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. Par conséquent, la première exigence : authenticité (également appelé)Thus the first requirement: authenticity (a.k.a. l’intégrité, falsification de la vérification).integrity, tamper-proofing).

Étant donné que l’état persistant est approuvé par le serveur, nous pensons que cet état peut contenir des informations spécifiques à l’environnement d’exploitation.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 peut s’agir de la forme d’un chemin d’accès de fichier, une autorisation, un handle ou autres référence indirecte ou certains autres éléments de données de serveur spécifiques.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. Ces informations doivent généralement pas être divulguées à un client non fiable.Such information should generally not be disclosed to an untrusted client. Par conséquent, la deuxième exigence : la confidentialité.Thus the second requirement: confidentiality.

Enfin, étant donné que les applications modernes sont basées sur des composants que nous avons appris sont que les composants individuels souhaitez tirer parti de ce système sans tenir compte des autres composants dans le système.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. Par exemple, si un composant de jeton du porteur à l’aide de cette pile, il doit fonctionner sans interférence provenant d’un mécanisme d’anti-CSRF qui peut également être à l’aide de la même pile.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. Par conséquent, l’exigence finale : isolation.Thus the final requirement: isolation.

Nous pouvons fournir des contraintes supplémentaires afin de limiter la portée de la configuration requise.We can provide further constraints in order to narrow the scope of our requirements. Nous partons du principe que tous les services fonctionnant dans les systèmes de chiffrement sont fiables et que les données n’a pas besoin d’être généré ou consommé en dehors des services sous notre contrôle direct.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. En outre, nous avons besoin que les opérations sont plus vite possible étant donné que chaque demande au service web peut passer par le système de cryptage par une ou plusieurs fois.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. Cela rend le chiffrement symétrique idéale pour notre scénario, et nous pouvons discount cryptographie asymétrique jusqu'à par exemple une heure dont il a besoin.This makes symmetric cryptography ideal for our scenario, and we can discount asymmetric cryptography until such a time that it's needed.

Philosophie de conceptionDesign philosophy

Nous avons commencé en identifiant les problèmes liés à la pile existante.We started by identifying problems with the existing stack. Une fois que nous avions qui, nous interrogées le paysage des solutions existantes et conclu qu’aucune solution existante n’était tout à fait les fonctionnalités que nous avons recherché.Once we had that, we surveyed the landscape of existing solutions and concluded that no existing solution quite had the capabilities we sought. Ensuite, nous avons conçu une solution basée sur plusieurs principes généraux.We then engineered a solution based on several guiding principles.

  • Le système doit offrir simplicité de configuration.The system should offer simplicity of configuration. Dans l’idéal, le système serait sans aucune configuration et les développeurs Impossible d’avance.Ideally the system would be zero-configuration and developers could hit the ground running. Les situations où les développeurs ont besoin pour configurer un aspect spécifique (par exemple, le dépôt de clé), doit être envisagé pour rendre ces configurations spécifiques simple.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.

  • Offrent une simple API destinées aux consommateurs.Offer a simple consumer-facing API. L’API doivent être facile à utiliser correctement et difficile à utiliser de manière incorrecte.The APIs should be easy to use correctly and difficult to use incorrectly.

  • Les développeurs ne doivent pas Découvrez les principes de gestion de clés.Developers shouldn't learn key management principles. Le système doit gérer la sélection de l’algorithme et la durée de vie des clés sur la place du développeur.The system should handle algorithm selection and key lifetime on the developer's behalf. Dans l’idéal, le développeur ne doit jamais même avoir accès pour le matériel de clé brutes.Ideally the developer should never even have access to the raw key material.

  • Les clés doivent être protégées au repos lorsque cela est possible.Keys should be protected at rest when possible. Le système doit déterminer un mécanisme de protection par défaut approprié et appliquer automatiquement.The system should figure out an appropriate default protection mechanism and apply it automatically.

Avec ces principes à l’esprit, nous avons développé une simple, facile à utiliser pile de protection des données.With these principles in mind we developed a simple, easy to use data protection stack.

L’API de protection des données ASP.NET Core s’appliquent pas principalement pour la persistance indéfini de charges utiles confidentielles.The ASP.NET Core data protection APIs are not primarily intended for indefinite persistence of confidential payloads. Autres technologies telles que Windows CNG DPAPI et Azure Rights Management sont plus adaptés pour le scénario de stockage indéterminée, et ils ont des fonctionnalités de gestion de clé forte en conséquence.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. Ceci dit, il n’y a rien interdire à un développeur à l’aide de l’API de protection des données ASP.NET Core pour la protection à long terme des données confidentielles.That said, there's nothing prohibiting a developer from using the ASP.NET Core data protection APIs for long-term protection of confidential data.

PublicAudience

Le système de protection des données est divisé en cinq packages principaux.The data protection system is divided into five main packages. Différents aspects de ces API ciblent les trois principaux types de publics ;Various aspects of these APIs target three main audiences;

  1. Le vue d’ensemble des API de consommateur cibler les développeurs d’application et d’infrastructure.The Consumer APIs Overview target application and framework developers.

    « Je ne souhaite en savoir plus sur le fonctionnement de la pile ou sur la façon dont elle est configurée."I don't want to learn about how the stack operates or about how it's configured. J’ai simplement souhaitez effectuer une opération aussi simple d’une manière que possible avec une probabilité élevée de l’aide des API avec succès. »I simply want to perform some operation in as simple a manner as possible with high probability of using the APIs successfully."

  2. Le configuration API cibler les développeurs d’applications et les administrateurs système.The configuration APIs target application developers and system administrators.

    « J’ai besoin indiquer le système de protection des données que mon environnement requiert des paramètres ou des chemins d’accès par défaut »."I need to tell the data protection system that my environment requires non-default paths or settings."

  3. Les développeurs d’extensibilité API cible, responsable de l’implémentation d’une stratégie personnalisée.The extensibility APIs target developers in charge of implementing custom policy. L’utilisation de ces API est limitée à rares situations et expérimentée, les développeurs prenant en charge de sécurité.Usage of these APIs would be limited to rare situations and experienced, security aware developers.

    « Je dois remplacer un composant au sein du système dans son intégralité, car j’ai réellement uniques liées au comportement."I need to replace an entire component within the system because I have truly unique behavioral requirements. Je souhaite en savoir plus rarement utilisé des parties de la surface d’API pour créer un plug-in qui répond à mes exigences. »I am willing to learn uncommonly-used parts of the API surface in order to build a plugin that fulfills my requirements."

Disposition du packagePackage layout

La pile de protection des données se compose de cinq packages.The data protection stack consists of five packages.

Ressources supplémentairesAdditional resources

Héberger ASP.NET Core dans une batterie de serveurs web