Ochrona danych ASP.NET CoreASP.NET Core Data Protection

Aplikacje sieci Web często muszą przechowywać dane z uwzględnieniem zabezpieczeń.Web applications often need to store security-sensitive data. System Windows udostępnia aplikacje pulpitu DPAPI, ale jest to nieodpowiednie dla aplikacji sieci Web.Windows provides DPAPI for desktop applications but this is unsuitable for web applications. Stos ochrony danych ASP.NET Core zapewnia prosty, łatwy w użyciu interfejs API kryptografii, który programista może używać do ochrony danych, w tym zarządzania kluczami i rotacji.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.

Stos ochrony danych ASP.NET Core został zaprojektowany tak, aby służyć jako długoterminowe zastąpienie < > elementu machineKey w 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. Została zaprojektowana tak, aby dotyczyła wielu wad starego stosu kryptograficznego, zapewniając gotowe rozwiązanie do większości przypadków użycia nowoczesnych aplikacji, które prawdopodobnie wystąpią.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.

Opis problemuProblem statement

Ogólna Instrukcja problemu może być zwięzłie określona w jednym zdaniu: Chcę utrzymać zaufane informacje do późniejszego pobrania, ale nie mam zaufania mechanizmu trwałości.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. W przypadku terminów sieci Web może to być napisano jako "muszę przeprowadzić dwukierunkową relację zaufania za pośrednictwem niezaufanego klienta".In web terms, this might be written as "I need to round-trip trusted state via an untrusted client."

Przykładem kanonicznym jest cookie token uwierzytelniania lub okaziciela.The canonical example of this is an authentication cookie or bearer token. Serwer generuje "jestem Groot i ma uprawnienia XYZ" i udostępnia go klientowi.The server generates an "I am Groot and have xyz permissions" token and hands it to the client. W przyszłości klient będzie zaprezentować ten token z powrotem do serwera, ale serwer wymaga pewnego rodzaju pewności, że klient nie wykonał sfałszowanego tokenu.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. W rezultacie pierwsze wymaganie: autentyczność (velThus the first requirement: authenticity (a.k.a. integralność, nieautoryzowane sprawdzanie poprawności).integrity, tamper-proofing).

Ponieważ trwały stan jest traktowany jako zaufany przez serwer, przewidujemy, że ten stan może zawierać informacje specyficzne dla środowiska operacyjnego.Since the persisted state is trusted by the server, we anticipate that this state might contain information that's specific to the operating environment. Może to być w postaci ścieżki pliku, uprawnienia, uchwytu lub innego odwołania pośredniego lub innego elementu danych specyficznych dla serwera.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. Takie informacje nie powinny być zwykle ujawniane niezaufanym klientom.Such information should generally not be disclosed to an untrusted client. W tym przypadku drugie wymaganie: poufność.Thus the second requirement: confidentiality.

Na koniec, ponieważ nowoczesne aplikacje są składnikiem, to to, co widzimy, jest to, że poszczególne składniki chcą korzystać z tego systemu bez względu na inne składniki systemu.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. Na przykład, jeśli składnik tokenu okaziciela używa tego stosu, powinien działać bez ingerencji z mechanizmu CSRF, który może również korzystać z tego samego stosu.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. W ten sposób końcowe wymaganie: izolacja.Thus the final requirement: isolation.

Możemy zapewnić dalsze ograniczenia, aby zawęzić zakres naszych wymagań.We can provide further constraints in order to narrow the scope of our requirements. Przyjęto założenie, że wszystkie usługi działające w ramach cryptosystem są równie zaufane i że dane nie muszą być generowane ani używane poza usługami w ramach naszej kontroli bezpośredniej.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. Ponadto wymagamy, aby operacje były tak szybko, jak to możliwe, ponieważ każde żądanie do usługi sieci Web może przekroczyć cryptosystem jeden lub więcej razy.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. Dzięki temu symetryczne Kryptografia jest idealnym rozwiązaniem w naszym scenariuszu, a firma Microsoft może rabatać asymetryczne kryptografie do momentu, gdy jest to konieczne.This makes symmetric cryptography ideal for our scenario, and we can discount asymmetric cryptography until such a time that it's needed.

Zagadnienie projektoweDesign philosophy

Rozpoczęto od zidentyfikowania problemów z istniejącym stosem.We started by identifying problems with the existing stack. Po przeprowadzeniu tej czynności zbadamy poziom istniejących rozwiązań i zauważasz, że żadne dotychczasowe rozwiązania nie były już dostępne.Once we had that, we surveyed the landscape of existing solutions and concluded that no existing solution quite had the capabilities we sought. Następnie tworzymy rozwiązanie na podstawie kilku zasad dotyczących identyfikatorów GUID.We then engineered a solution based on several guiding principles.

  • System powinien oferować prostotę konfiguracji.The system should offer simplicity of configuration. Idealnym rozwiązaniem może być konfiguracja zerowa i deweloperzy.Ideally the system would be zero-configuration and developers could hit the ground running. W sytuacjach, gdy deweloperzy muszą skonfigurować określony aspekt (na przykład repozytorium kluczy), należy rozważyć, że te konkretne konfiguracje są proste.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.

  • Oferuje prosty interfejs API dla klientów.Offer a simple consumer-facing API. Interfejsy API powinny być łatwe w użyciu i być trudne do poprawnego użycia.The APIs should be easy to use correctly and difficult to use incorrectly.

  • Deweloperzy nie powinni uczyć się zasad zarządzania kluczami.Developers shouldn't learn key management principles. System powinien obsługiwać wybór algorytmu i okres istnienia klucza w imieniu dewelopera.The system should handle algorithm selection and key lifetime on the developer's behalf. W idealnym przypadku Deweloper nie powinien nawet mieć dostępu do surowca klucza.Ideally the developer should never even have access to the raw key material.

  • Klucze powinny być chronione w stanie spoczynku, gdy jest to możliwe.Keys should be protected at rest when possible. System powinien ustalić odpowiedni domyślny mechanizm ochrony i zastosować go automatycznie.The system should figure out an appropriate default protection mechanism and apply it automatically.

Korzystając z tych zasad, opracowano prosty, łatwy w obsłudze stos ochrony danych.With these principles in mind we developed a simple, easy to use data protection stack.

Interfejsy API ochrony danych ASP.NET Core nie są przede wszystkim przeznaczone do nieograniczonego trwałości poufnych ładunków.The ASP.NET Core data protection APIs are not primarily intended for indefinite persistence of confidential payloads. Inne technologie, takie jak Windows CNG DPAPI i Azure Rights Management , są bardziej odpowiednie dla scenariusza nieograniczonego magazynu i mają odpowiadające im silne możliwości zarządzania kluczami.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. Oznacza to, że nie ma żadnych zakazów używania ASP.NET Core interfejsów API ochrony danych do długoterminowej ochrony poufnych danych.That said, there's nothing prohibiting a developer from using the ASP.NET Core data protection APIs for long-term protection of confidential data.

Grupy odbiorcówAudience

System ochrony danych jest podzielony na pięć głównych pakietów.The data protection system is divided into five main packages. Różne aspekty tych interfejsów API są przeznaczone dla trzech głównych odbiorców;Various aspects of these APIs target three main audiences;

  1. Interfejsy API odbiorców — Omówienie aplikacji docelowych i deweloperów platformy.The Consumer APIs Overview target application and framework developers.

    "Nie chcę dowiedzieć się, jak działa stos lub jak jest on skonfigurowany."I don't want to learn about how the stack operates or about how it's configured. Po prostu chcę wykonać pewne operacje w sposób możliwie prosty z dużym prawdopodobieństwem, aby pomyślnie korzystać z interfejsów API ".I simply want to perform some operation in as simple a manner as possible with high probability of using the APIs successfully."

  2. Interfejsy API konfiguracji są przeznaczone dla deweloperów aplikacji i administratorów systemu.The configuration APIs target application developers and system administrators.

    "Muszę poinformować system ochrony danych, że moje środowisko wymaga niedomyślnych ścieżek lub ustawień"."I need to tell the data protection system that my environment requires non-default paths or settings."

  3. Interfejsy API rozszerzalności są przeznaczone dla deweloperów odpowiedzialnych za implementowanie zasad niestandardowych.The extensibility APIs target developers in charge of implementing custom policy. Użycie tych interfejsów API byłoby ograniczone do rzadkich sytuacji i doświadczonych deweloperów, których dotyczą zabezpieczenia.Usage of these APIs would be limited to rare situations and experienced, security aware developers.

    "Muszę zastąpić cały składnik w systemie, ponieważ mam prawdziwie wyjątkowe wymagania dotyczące zachowania."I need to replace an entire component within the system because I have truly unique behavioral requirements. Chcę poznać nietypowe części powierzchni interfejsu API, aby utworzyć wtyczkę, która spełnia wymagania ".I am willing to learn uncommonly-used parts of the API surface in order to build a plugin that fulfills my requirements."

Układ pakietuPackage layout

Stos ochrony danych składa się z pięciu pakietów.The data protection stack consists of five packages.

Dodatkowe zasobyAdditional resources

ASP.NET Core hosta w kolektywie serwerów sieci Web