armazenamento persistente de dados criptografados usando Net
-
03-07-2019 - |
Pergunta
Eu preciso armazenar dados criptografados (algumas pequenas cordas) entre as execuções de aplicativos. Eu não quero que o usuário forneça uma senha toda vez (s) ele inicia o aplicativo. Ou seja, afinal de contas ele vai para baixo para armazenar com segurança a chave (s) de criptografia.
Eu estava olhando para RSACryptoServiceProvider e usando PersistentKeyInCsp, mas eu não tenho certeza de como ele funciona. É o contêiner de chave persistente entre as execuções de aplicativos ou máquina reinicia? Se sim, é específico do usuário, ou específico da máquina. Ou seja, se eu armazenar meus dados criptografados no perfil móvel do usuário, posso descriptografar os dados se o usuário fizer logon em uma máquina diferente?
Se o acima não funcionar, quais são as minhas opções (eu preciso para lidar com perfis de roaming).
Solução
A Proteção API de Dados (DPAPI) faz exatamente o que você quer. Ele fornece criptografia simétrica de dados arbitrários, utilizando as credenciais da máquina ou (melhor) do utilizador, como a chave de encriptação. Você não tem que se preocupar com a gestão das chaves; O Windows cuida disso para você. Se o usuário alterar sua senha, o Windows irá re-criptografar os dados usando a nova senha do usuário.
DPAPI é exposto em .NET com a classe System.Security.Cryptography.ProtectedData:
byte[] plaintextBytes = GetDataToProtect();
byte[] encodedBytes = ProtectedData.Protect(plaintextBytes, null, DataProtectionScope.CurrentUser);
O segundo parâmetro do método de proteger é uma matriz entropia bytes opcional, que pode ser usado como uma aplicação específica adicional "secreta".
Para descriptografar, utilizar a chamada ProtectedData.Unprotect:
byte[] encodedBytes = GetDataToUnprotect();
byte[] plaintextBytes = ProtectedData.Unprotect(encodedBytes, null, DataProtectionScope.CurrentUser);
DPAPI funciona corretamente com perfis móveis (como descrito aqui ), embora você precisa armazenar os dados criptografados em um lugar (compartilhamento de rede, IsolatedStorage com IsolatedStorageScope .Roaming , etc.) que suas várias máquinas podem acessar.
Veja a classe ProtectedData no MSDN para obter mais informações. Há uma DPAPI papel branco aqui , com mais informações do que você jamais quiser.
Outras dicas
Eu gostaria de adicionar à abordagem DPAPI.
Embora eu não tenha implementado a abordagem user-store-me, há documentação da Microsoft para uma abordagem user-loja que criptografa dados e decifra para um usuário específico.
Eu usei o DPAPI usando armazenamento do computador. Vou descrevê-lo no caso de ele se encaixa com o que você está procurando fazer. Eu usei um serviço do Windows para carregar um perfil de usuário do Windows e senha do usuário é usada para criptografar dados.
Como uma nota lateral, DPAPI usa Triple-DES que pode ser ligeiramente mais fraca (de AES), mas então eu não tenho certeza que tipo de proteção que você está procurando.
Protecção de Dados do Windows http://msdn.microsoft.com/en-us/library/ms995355. aspx