Proteção de dados do ASP.NET CoreASP.NET Core Data Protection

Aplicativos da Web geralmente precisam armazenar dados confidenciais de segurança.Web applications often need to store security-sensitive data. Windows fornece DPAPI para aplicativos da área de trabalho, mas isso é inadequado para aplicativos da web.Windows provides DPAPI for desktop applications but this is unsuitable for web applications. A pilha de proteção de dados do ASP.NET Core fornecem uma API de criptografia simple e fácil de usar um desenvolvedor pode usar para proteger dados, incluindo rotação e gerenciamento de chaves.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.

A pilha de proteção de dados do ASP.NET Core foi projetada para servir como a substituição de longo prazo para o <machineKey> elemento no 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. Ele foi projetado para resolver muitos dos problemas da pilha de criptografia antigo, fornecendo uma solução para a maioria dos casos de uso, os aplicativos modernos têm probabilidade de encontrar.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.

Declaração do problemaProblem statement

A declaração do problema geral pode ser declarada sucintamente em uma única sentença: Eu preciso manter informações confiáveis para recuperação posterior, mas eu não confio o mecanismo de persistência.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. Em termos de web, isso pode ser escrito como "Eu preciso de ida e volta estado confiável por meio de um cliente não confiável."In web terms, this might be written as "I need to round-trip trusted state via an untrusted client."

O exemplo canônico disso é um cookie de autenticação ou portador token.The canonical example of this is an authentication cookie or bearer token. O servidor gera um "Estou Groot e ter permissões de xyz" de token e entrega-o para o cliente.The server generates an "I am Groot and have xyz permissions" token and hands it to the client. Em uma data futura, o cliente apresentará esse token de volta para o servidor, mas o servidor precisa de algum tipo de garantia de que o cliente não foi forjada o 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. Portanto, o primeiro requisito: autenticidade (também conhecido comoThus the first requirement: authenticity (a.k.a. integridade e à prova de adulteração).integrity, tamper-proofing).

Uma vez que o estado persistente é confiável pelo servidor, estimamos que esse estado pode conter informações específicas para o ambiente operacional.Since the persisted state is trusted by the server, we anticipate that this state might contain information that's specific to the operating environment. Isso pode ser na forma de um caminho de arquivo, uma permissão, um identificador ou outra referência indireta, ou alguma outra parte dos dados específicos do servidor.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. Essas informações, em geral, não deveriam ser divulgadas para um cliente não confiável.Such information should generally not be disclosed to an untrusted client. Portanto, o segundo requisito: confidencialidade.Thus the second requirement: confidentiality.

Por fim, como aplicativos modernos são divididos em componentes, o que vimos é componentes individuais vai querer tirar proveito desse sistema sem levar em consideração outros componentes no 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. Por exemplo, se um componente de token de portador é usando essa pilha, ele deve operar sem interferência de um mecanismo de anti-CSRF que também pode usar a mesma pilha.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. Portanto, o requisito final: isolamento.Thus the final requirement: isolation.

Podemos fornecer ainda mais as restrições para limitar o escopo de nossos requisitos.We can provide further constraints in order to narrow the scope of our requirements. Vamos supor que todos os serviços que operam com o sistema de criptografia são igualmente confiáveis e que os dados não precisam ser gerado ou consumido fora os serviços sob nosso controle direto.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. Além disso, exigimos que as operações são tão rápidas quanto possível, pois cada solicitação ao serviço web pode percorrer o sistema criptográfico uma ou mais vezes.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. Isso torna a criptografia simétrica ideal para o nosso cenário, e podemos pode desconto criptografia assimétrica até que tal uma vez que ele é necessário.This makes symmetric cryptography ideal for our scenario, and we can discount asymmetric cryptography until such a time that it's needed.

Filosofia de designDesign philosophy

Começamos por meio da identificação de problemas com a pilha existente.We started by identifying problems with the existing stack. Depois que tivermos, nós pesquisamos o panorama das soluções existentes e concluiu que não há solução existente teve muito os recursos que são procurados.Once we had that, we surveyed the landscape of existing solutions and concluded that no existing solution quite had the capabilities we sought. Em seguida, projetamos uma solução baseada em vários princípios de orientação.We then engineered a solution based on several guiding principles.

  • O sistema deve oferecer a simplicidade da configuração.The system should offer simplicity of configuration. O ideal é que o sistema seria sem nenhuma configuração e os desenvolvedores poderiam parta para a ação.Ideally the system would be zero-configuration and developers could hit the ground running. Em situações em que os desenvolvedores precisam configurar um aspecto específico (como o repositório de chaves), consideração deve ser fornecida a fazer essas configurações específicas simples.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.

  • Oferecem uma API voltado ao consumidor simples.Offer a simple consumer-facing API. As APIs devem ser fáceis de usar corretamente e difícil de usar incorretamente.The APIs should be easy to use correctly and difficult to use incorrectly.

  • Os desenvolvedores não devem aprender os princípios de gerenciamento de chaves.Developers shouldn't learn key management principles. O sistema deve lidar com a seleção de algoritmo e a vida útil da chave em nome do desenvolvedor.The system should handle algorithm selection and key lifetime on the developer's behalf. O ideal é que o desenvolvedor nunca mesmo deve ter acesso ao material da chave bruto.Ideally the developer should never even have access to the raw key material.

  • As chaves devem ser protegidas em repouso quando possível.Keys should be protected at rest when possible. O sistema deve descobrir um mecanismo de proteção padrão apropriado e aplicá-la automaticamente.The system should figure out an appropriate default protection mechanism and apply it automatically.

Com esses princípios em mente, desenvolvemos um simples fácil de usar pilha da proteção de dados.With these principles in mind we developed a simple, easy to use data protection stack.

As APIs de proteção de dados do ASP.NET Core não destinam principalmente para persistência indefinida de cargas confidenciais.The ASP.NET Core data protection APIs are not primarily intended for indefinite persistence of confidential payloads. Outras tecnologias, como DPAPI do Windows CNG e do Azure Rights Management são mais adequados para o cenário de armazenamento indefinido, e eles têm recursos de gerenciamento de chave forte de forma correspondente.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. Dito isso, não há nada proibindo um desenvolvedor que usa as APIs de proteção de dados do ASP.NET Core para proteção de longo prazo de dados confidenciais.That said, there's nothing prohibiting a developer from using the ASP.NET Core data protection APIs for long-term protection of confidential data.

Público-alvoAudience

O sistema de proteção de dados é dividido em cinco pacotes principais.The data protection system is divided into five main packages. Vários aspectos dessas APIs três principal públicos-alvo; de destinoVarious aspects of these APIs target three main audiences;

  1. O visão geral das APIs de consumidor os desenvolvedores de aplicativo e estrutura de destino.The Consumer APIs Overview target application and framework developers.

    "Quero saber mais sobre como funciona a pilha de ou sobre como ela é configurada."I don't want to learn about how the stack operates or about how it's configured. Simplesmente quero executar alguma operação no tão simples uma maneira possível com a alta probabilidade de usar as APIs com êxito".I simply want to perform some operation in as simple a manner as possible with high probability of using the APIs successfully."

  2. O APIs de configuração os desenvolvedores de aplicativos e administradores de sistema de destino.The configuration APIs target application developers and system administrators.

    "Eu preciso informar ao sistema de proteção de dados de que meu ambiente requer configurações ou os caminhos não padrão.""I need to tell the data protection system that my environment requires non-default paths or settings."

  3. Os desenvolvedores de destino APIs de extensibilidade responsável pela implementação de política personalizada.The extensibility APIs target developers in charge of implementing custom policy. O uso dessas APIs seria limitado a situações raras e experientes, os desenvolvedores de reconhecimento de segurança.Usage of these APIs would be limited to rare situations and experienced, security aware developers.

    "Eu preciso substituir um componente inteiro dentro do sistema porque tenho requisitos comportamentais realmente exclusivos."I need to replace an entire component within the system because I have truly unique behavioral requirements. Desejo saber usados raramente partes da superfície de API a fim de criar um plug-in que atenda aos meus requisitos."I am willing to learn uncommonly-used parts of the API surface in order to build a plugin that fulfills my requirements."

Layout do pacotePackage layout

A pilha da proteção de dados consiste em cinco pacotes.The data protection stack consists of five packages.

Recursos adicionaisAdditional resources

Hospedar o ASP.NET Core em um web farm