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).

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top