ASP.net Core DatenschutzASP.NET Core Data Protection

Webanwendungen müssen häufig sicherheitsrelevante Daten speichern.Web applications often need to store security-sensitive data. Windows stellt DPAPI für Desktop Anwendungen bereit, ist aber für Webanwendungen ungeeignet.Windows provides DPAPI for desktop applications but this is unsuitable for web applications. Der ASP.net Core Datenschutz Stapel bietet eine einfache, leicht zu verwendende kryptografieapi, mit der ein Entwickler Daten schützen kann, einschließlich Schlüsselverwaltung und Rotation.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.

Der ASP.net Core Datenschutz Stapel ist so konzipiert, dass er als langfristiger Ersatz für das < machineKey- > Element in ASP.NET 1. x-4. x fungiert.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. Es wurde so konzipiert, dass viele der Unzulänglichkeiten des alten kryptografiestapels behandelt werden, während gleichzeitig eine sofort Einsatz orientierte Lösung für die Mehrzahl der Anwendungsfälle bereitgestellt wird, auf denen moderne Anwendungen wahrscheinlich stoßen.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.

ProblembeschreibungProblem statement

Die allgemeine Problem Erklärung kann in einem einzelnen Satz kurz gesagt werden: Ich muss vertrauenswürdige Informationen für den späteren Abruf beibehalten, aber ich vertraue dem Persistenzmechanismus nicht.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 webbegriffen könnte dies wie folgt lauten: "Ich muss den vertrauenswürdigen Zustand über einen nicht vertrauenswürdigen Client Roundtrip".In web terms, this might be written as "I need to round-trip trusted state via an untrusted client."

Das kanonische Beispiel hierfür ist ein Authentifizierungs- cookie oder bearertoken.The canonical example of this is an authentication cookie or bearer token. Der Server generiert das Token "I am Groot und hat XYZ-Berechtigungen" und übergibt es an den Client.The server generates an "I am Groot and have xyz permissions" token and hands it to the client. Zu einem späteren Zeitpunkt zeigt der Client das Token wieder dem Server an, der Server muss jedoch sicher sein, dass der Client das Token nicht gefälscht hat.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. Daher die erste Anforderung: Authentizität (auch bekannt alsThus the first requirement: authenticity (a.k.a. Integrität, Manipulationsschutz).integrity, tamper-proofing).

Da der beibehaltene Zustand vom Server als vertrauenswürdig eingestuft wird, erwarten wir, dass dieser Zustand Informationen enthält, die spezifisch für die Betriebsumgebung sind.Since the persisted state is trusted by the server, we anticipate that this state might contain information that's specific to the operating environment. Dies kann ein Dateipfad, eine Berechtigung, ein Handle oder ein anderer indirekter Verweis oder ein anderer Teil der serverspezifischen Daten sein.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. Diese Informationen sollten in der Regel nicht einem nicht vertrauenswürdigen Client offengelegt werden.Such information should generally not be disclosed to an untrusted client. Daher ist dies die zweite Anforderung: Vertraulichkeit.Thus the second requirement: confidentiality.

Da moderne Anwendungen in Komponenten gegliedert werden, sehen wir, dass einzelne Komponenten dieses System ohne Rücksicht auf andere Komponenten des Systems nutzen möchten.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. Wenn beispielsweise eine bearertokenkomponente diesen Stapel verwendet, sollte Sie ohne Störungen von einem Anti-CSRF-Mechanismus betrieben werden, der möglicherweise auch denselben Stapel verwendet.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. Daher ist dies die letzte Anforderung: Isolation.Thus the final requirement: isolation.

Wir können weitere Einschränkungen bereitstellen, um den Umfang unserer Anforderungen einzuschränken.We can provide further constraints in order to narrow the scope of our requirements. Wir gehen davon aus, dass alle Dienste, die innerhalb des Kryptosystems ausgeführt werden, gleichermaßen vertrauenswürdig sind und dass die Daten nicht außerhalb der Dienste in unserer direkten Kontrolle generiert oder genutzt werden müssen.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. Außerdem ist es erforderlich, dass die Vorgänge so schnell wie möglich sind, da jede Anforderung an den Webdienst ein-oder mehrmals durch das Kryptosystem durchlaufen kann.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. Dadurch eignet sich die symmetrische Kryptografie ideal für unser Szenario, und wir können die asymmetrische Kryptografie bis zu einem solchen Zeitpunkt für die benötigte Zeit Rabatt.This makes symmetric cryptography ideal for our scenario, and we can discount asymmetric cryptography until such a time that it's needed.

Entwurfs PhilosophieDesign philosophy

Wir haben damit begonnen, Probleme mit dem vorhandenen Stapel zu identifizieren.We started by identifying problems with the existing stack. Nachdem wir dies hatten, haben wir die Landschaft vorhandener Lösungen befragt und davon abschlossen, dass keine vorhandene Lösung über die von uns gesuchten Funktionen verfügt.Once we had that, we surveyed the landscape of existing solutions and concluded that no existing solution quite had the capabilities we sought. Anschließend haben wir eine Lösung auf Grundlage verschiedener Leitfäden entwickelt.We then engineered a solution based on several guiding principles.

  • Das System sollte die Einfachheit der Konfiguration ermöglichen.The system should offer simplicity of configuration. Im Idealfall wäre das System eine Null-Konfiguration, und Entwickler könnten die Ausführung erreichen.Ideally the system would be zero-configuration and developers could hit the ground running. In Situationen, in denen Entwickler einen bestimmten Aspekt konfigurieren müssen (z. b. das schlüsselrepository), sollte berücksichtigt werden, dass diese spezifischen Konfigurationen einfach sind.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.

  • Bietet eine einfache API für den Kunden Zugriff.Offer a simple consumer-facing API. Die APIs sollten auf einfache Weise ordnungsgemäß und schwer zu verwenden sein.The APIs should be easy to use correctly and difficult to use incorrectly.

  • Entwickler sollten keine Schlüssel Verwaltungs Prinzipien erlernen.Developers shouldn't learn key management principles. Das System sollte die Algorithmusauswahl und die Schlüssel Lebensdauer im Auftrag des Entwicklers verarbeiten.The system should handle algorithm selection and key lifetime on the developer's behalf. Im Idealfall sollte der Entwickler nie einmal auf das rohschlüssel Material zugreifen können.Ideally the developer should never even have access to the raw key material.

  • Schlüssel sollten nach Möglichkeit im Ruhezustand geschützt werden.Keys should be protected at rest when possible. Das System sollte einen geeigneten Standardschutz Mechanismus ermitteln und ihn automatisch anwenden.The system should figure out an appropriate default protection mechanism and apply it automatically.

Mit diesen Prinzipien haben wir einen einfachen, leicht zu verwendenden Datenschutz Stapel entwickelt.With these principles in mind we developed a simple, easy to use data protection stack.

Die ASP.net Core-Datenschutz-APIs sind nicht in erster Linie für die unbegrenzte Persistenz von vertraulichen Nutzlasten vorgesehen.The ASP.NET Core data protection APIs are not primarily intended for indefinite persistence of confidential payloads. Andere Technologien wie Windows CNG DPAPI und Azure Rights Management sind besser für das Szenario der unbegrenzten Speicherung geeignet und verfügen über die entsprechenden leistungsstarken Schlüssel Verwaltungsfunktionen.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. Dies bedeutet, dass ein Entwickler nicht daran hindert, die ASP.net Core Datenschutz-APIs für den langfristigen Schutz vertraulicher Daten zu verwenden.That said, there's nothing prohibiting a developer from using the ASP.NET Core data protection APIs for long-term protection of confidential data.

ZielgruppeAudience

Das Datenschutzsystem ist in fünf Haupt Pakete unterteilt.The data protection system is divided into five main packages. Verschiedene Aspekte dieser APIs sind drei Haupt Zielgruppen.Various aspects of these APIs target three main audiences;

  1. Die Consumer-APIs (Übersicht ) Ziel Anwendungs-und Frameworkentwickler.The Consumer APIs Overview target application and framework developers.

    "Ich möchte nicht erfahren, wie der Stapel funktioniert oder wie er konfiguriert ist."I don't want to learn about how the stack operates or about how it's configured. Ich möchte einen Vorgang so einfach wie möglich mit hoher Wahrscheinlichkeit für die erfolgreiche Verwendung der APIs ausführen. "I simply want to perform some operation in as simple a manner as possible with high probability of using the APIs successfully."

  2. Die Konfigurations-APIs sind für Anwendungsentwickler und Systemadministratoren konzipiert.The configuration APIs target application developers and system administrators.

    "Ich muss dem Datenschutzsystem mitteilen, dass meine Umgebung nicht standardmäßige Pfade oder Einstellungen erfordert.""I need to tell the data protection system that my environment requires non-default paths or settings."

  3. Die Erweiterbarkeits-APIs richten sich an Entwickler, die für die Implementierung benutzerdefinierter Richtlinien verantwortlich sindThe extensibility APIs target developers in charge of implementing custom policy. Die Verwendung dieser APIs ist auf seltene Situationen und erfahrene, sicherheitsbewusste Entwickler beschränkt.Usage of these APIs would be limited to rare situations and experienced, security aware developers.

    "Ich muss eine gesamte Komponente im System ersetzen, da ich wirklich eindeutige Verhaltens Anforderungen habe."I need to replace an entire component within the system because I have truly unique behavioral requirements. Ich bin bereit, nicht häufig verwendete Teile der API-Oberfläche zu erlernen, um ein Plug-in zu erstellen, das meine Anforderungen erfüllt. "I am willing to learn uncommonly-used parts of the API surface in order to build a plugin that fulfills my requirements."

PaketlayoutPackage layout

Der Stapel für den Datenschutz besteht aus fünf Paketen.The data protection stack consists of five packages.

Zusätzliche RessourcenAdditional resources

Hosten von ASP.NET Core in einer Webfarm