Armazenamento de dados confidenciais - práticas recomendadas

8

Recentemente, comecei a trabalhar em um projeto pessoal em que estava me conectando a um banco de dados usando Java. Isso me fez pensar. Eu tenho que fornecer as informações de logon para uma conta de banco de dados no servidor DB para acessar o banco de dados. Mas se eu codificá-lo, seria possível que alguém decompile o programa e extraia essas informações de login. Se eu o armazenar em um arquivo de instalação externo, o mesmo problema existe, mas seria ainda mais fácil para eles obtê-lo. Eu poderia criptografar os dados antes de armazená-los em qualquer lugar, mas parece que isso também não é à prova de falhas e eu não sou especialista em criptografia. Então, quais são algumas práticas recomendadas para armazenar dados confidenciais de configuração de um programa?

Kenneth
fonte

Respostas:

10

Várias opções aqui:

  • Execute o programa Java em um usuário de domínio que tenha acesso concedido ao banco de dados (ou, alternativamente, armazene as informações de senha em um arquivo que é acessível apenas pelo usuário que está executando seu programa).

  • use um armazenamento de chaves, com restrições para o usuário e o software que usará a chave (como o que o Mac OS X fornece)

  • use uma solução de criptografia padrão, com uma interface que exigirá a entrada da senha de criptografia na inicialização do programa (para que o administrador que inicia o programa conheça apenas a senha)

  • requer que o uid / senha do banco de dados seja inserido na inicialização do programa

blueberryfields
fonte
3

A primeira regra do armazenamento de dados confidenciais é não. Nesse caso, você provavelmente deve fazer o que quase todo sistema de autenticação faz - emitir a cada usuário suas próprias credenciais para que você não tenha esse problema. Ou problemas como "ah, sim, a conta do banco de dados ficou comprometida. Agora eu tenho que descobrir como reemitir essa senha para todos os usuários. Incluindo os que eu não conheço".

Wyatt Barnett
fonte
2

Não há como impedir que alguém que receba seu aplicativo aprenda o nome de usuário e a senha. Se isso for inaceitável, você precisará colocar algum software entre o aplicativo e o banco de dados, como um serviço da web.

Kevin Cline
fonte
1

Normalmente, você deseja tentar criptografar esse tipo de informação. Por exemplo, a prática geral com desenvolvimento da Web no .NET é criptografar a seção do web.config que contém as cadeias de conexão. O outro que você pode fazer é usar contas de domínio / windows / os em vez de conexões diretas. Isso evita que você codifique a senha no aplicativo ou nos arquivos de configuração. Em vez disso, você gerencia suas conexões autorizando o usuário do aplicativo (ou a conta em que ele é executado).

Ken Henderson
fonte
-2

Você precisa criptografar seu aplicativo para que ele não possa ser descompilado. Não conheço as ferramentas Java, mas elas existem com certeza.

A propósito, você sempre deve criptografar seus aplicativos por segurança! Então você pode codificá-lo se quiser.

EDIT: Após o comentário, precisarei que você PODE criptografar seu aplicativo, você só precisa ter uma ferramenta (tipo de decodificador 'on the fly') na máquina do usuário para executar o aplicativo criptografado. Isso é o que eu usei com o Foxpro e provavelmente existe também para outros idiomas. Talvez, esse tipo de ferramenta não seja usado em tecnologia mais recente, mas definitivamente torne meus aplicativos impossíveis de descompilar enquanto estiver executando bem.

EDIT 2: Algum produto que encontrei para criptografia .NET: http://www.hallogram.com/ezcryptonet/index.html

Mathieu
fonte
4
ofuscação! = criptografia. O que você recomendou não é tecnicamente viável nem existe para nenhum software. Os programas criptografados para que não possam ser descompilados também não podem ser executados. Programas que podem ser executados, sempre pode ser compilado
blueberryfields
2
o que impede o usuário de coletar a saída do decodificador ou modificar o decodificador?
Kevin cline #
Minha redação aqui estava errada, não descriptografou, mas interpretou. Sobre a modificação do decodificador, bem, acho que talvez seja uma possibilidade. Meu conhecimento do assunto não está suficientemente extenso para responder a isso.
Mathieu