|
|
Publicado em 15/08/2023 10:21:16
|
|
|
|

Requisitos: Durante o processo de desenvolvimento, você pode frequentemente encontrar alguns cenários de criptografia e descriptografia, por exemplo, a autenticação de e-mail pode carregar uma string criptografada, e quando o usuário clica no link para pular para a interface, o sistema pode descriptografar o conteúdo da string normalmente, realizando assim a função de autenticação de e-mail.
ASP.NET Core oferece recursos de proteção de dados:O login do hiperlink está visível.
Pacote Principal
Os principais pacotes envolvidos na Proteção de Dados são os seguintes, referenciados conforme necessário:
- Padrão Microsoft.AspNetCore.DataProtection.Abstractions. Nomeação de componentes da camada de abstração NET Core. Inclui serviços de interface importantes como IDataProtectionProvider e IDataProtector.
- Microsoft.AspNetCore.DataProtection, incluindo operações criptográficas centrais, gerenciamento de chaves, configuração e extensibilidade.
- Extensão Microsoft.AspNetCore.DataProtection.Extensions. Fornece um método de fábrica para criar instâncias e um método de extensão de armazenamento para chaves. Este pacote é usado em modo não-DI.
- O Microsoft.AspNetCore.DataProtection.SystemWeb implementa <machineKey>compatibilidade com os mecanismos de criptografia e descriptografia da ASP.NET 4.x.
- Microsoft.AspNetCore.Cryptography.KeyDerivation fornece uma implementação da rotina de hashing de senhas PBKDF2. Use quando precisar usar criptografia hash.
IDataProtectionProvider vs IDataProtector
O IDataProtectionProvider é baseado no modelo Provider da Microsoft e é usado para fornecer políticas para a criação de instâncias. Crie um objeto IDataProtector chamando o método IDataProtectionProvider.CreateProtector(purpose). O IDataProtector é um serviço responsável por criptografia e descriptografia, que fornece principalmente dois tipos de métodos: protect e unprotect (cada tipo possui muitos métodos de sobrecarga e extensão). Entendendo simplesmente: protect é usado para criptografia e unprotect é usado para descriptografia. O parâmetro Create method do IDataProtectionProvider é uma string que fornece funcionalidade de isolamento. IDataProtectors criados com strings não passáveis terão resultados de criptografia diferentes mesmo que criptografem o mesmo objeto. O próprio IDataProtector também é um IDataProtectionProvider implícito, que também fornece o método CreateProtector(purpose). Isso significa que pode ser facilmente implementadoModo de aplicação multi-inquilino。
Aqui estão algumas coisas para ter em mente:
Instâncias IDataProtectionProvider e IDataProtectorSegurança da roscaAlvo. O método unprotect é informar ao chamador que a descriptografia falhou, lançando uma exceção. A classe de exceção é CryptographicException.
ASP.NET Core é uma proteção de dados simples de usar
Uma nova interface é adicionada para criptografar e descriptografar dados, e o código é o seguinte:
O teste é o seguinte:
IDataProtectionProvider é um padrão singleton com o seguinte código:O login do hiperlink está visível.
Gestão de chaves
Se o perfil de usuário estiver disponível, a chave é mantida para%LOCALAPPDATA%\ASP.NET\DataProtection-Keyspasta. Se o sistema operacional for Windows, a chave é criptografada em repouso usando DPAPI. Como mostrado abaixo:
Vida importante
Por padrão, a chaveO ciclo de vida é de 90 dias。 Quando a chave expira, o aplicativo gera automaticamente uma nova chave e define a nova chave como a chave ativa. Enquanto as chaves desativadas permanecerem no sistema, sua aplicação pode descriptografar quaisquer dados protegidos por elas. Para mais informações, veja Gestão de chaves.O login do hiperlink está visível.
Algoritmo padrão
Os algoritmos padrão de proteção de carga usados são AES-256-CBC (para confidencialidade) e HMACSHA256 (para autenticidade). A chave mestra de 512 bits, que muda a cada 90 dias, é usada para derivar duas subchaves para esses algoritmos com base em cada carga útil.
ASP.NET provedor de armazenamento chave no Core
Sistema de Arquivos: PersistKeysToFileSystem Azure Storage: PersistKeysToAzureBlobStorage, que requer referência: Azure.Extensions.AspNetCore.DataProtection.Blobs Armazenamento Redis: PersistKeysToStackExchangeRedis, referência necessária: Microsoft.AspNetCore.DataProtection.StackExchangeRedis
Referência:O login do hiperlink está visível.
Agrupado e distribuído
Se a chave do servidor for inconsistente, por exemplo: criptografia do servidor A e descriptografia do servidor B, uma exceção será lançada (como mostrado na figura abaixo) e a mesma chave precisará ser implantada.
Configure a mesma chave da seguinte forma:
Uma vez que o programa está rodando, ele gera automaticamente um arquivo de chave key-*.xml na pasta publish_itsvse, mantenha este arquivo consistente em servidores diferentes! Como mostrado abaixo:
ASP.NET Configuração de proteção do núcleo
ASP.NET CORE oferece suporte rico à API, persistência de senhas, configurações e funções de personalização.
- PersistKeysToAzureBlobStorage、ProtectKeysWithAzureKeyVault。 Cenário de armazenamento em nuvem Azure.
- PersistKeysToFileSystem。 Esquema de armazenamento de sistema de arquivos local que registra algoritmos, chaves e dependências de criptografia.
- ProtegerChavesCom*。 A criptografia é fornecida por meio de extensões desse método de nomenclatura. Por exemplo, ProtectKeysWithCertificate
- SetDefaultKeyLifetime。 Defina a vida útil da chave para 90 dias por padrão.
- SetApplicationName。 Defina o nome do app. Por padrão, os mecanismos de proteção de dados são absolutamente isolados de cada aplicação. O compartilhamento de chaves entre aplicativos pode ser feito definindo o mesmo nome do app.
- DisableAutomaticKeyGeneration。 Evite que a chave seja automaticamente revertida. Muitas vezes não queremos que as senhas mudem ou, em um serviço de cluster, temos um serviço dedicado responsável pelo rollback de atualizações de chaves, e outros payloads só precisam obter de um lugar compartilhado.
- UseCryptographicAlgorithms。 Use algoritmos personalizados de criptografia e descriptografia
Referência:O login do hiperlink está visível.
|
Anterior:Use o PowerShell para gerar o elemento <machineKey>Próximo:Compare Tailscale, ZeroTier, WireGuard, OmniEdge e Ngrok para soluções de geo-rede
|