MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Criptografar campos de senha no mongodb


De acordo com a conversa nos comentários, o que você quer dizer é hashing senhas, não criptografia senhas. Você normalmente faria isso com um sal para evitar um ataque de mesa de arco-íris. Armazenar senhas como hashes salgados é o padrão de melhor prática quando se trata de armazenar senhas em bancos de dados.

A partir da versão 3.2, o MongoDB não tem suporte nativo para hash de senha como alguns bancos de dados SQL fornecem, então você terá que implementá-lo em Java.

Para gerar uma nova conta ou alterar a senha de uma conta existente:
  1. gerar um valor salt aleatório criptograficamente seguro com java.security.SecureRandom . Essa classe funciona exatamente como o gerador de números aleatórios padrão java.util.Random (é uma subclasse), mas troca o desempenho por um nível muito mais alto de imprevisibilidade que é necessário para um contexto relevante para a segurança.
  2. Crie uma string concatenando salt e senha
  3. Gere um hash dessa string com uma função de hash criptograficamente segura. Existem muitas funções de hash fornecidas pelo Java pronto para uso, mas você deseja usar uma que seja intencionalmente difícil de computar para desacelerar um invasor com acesso ao banco de dados tentando forçar seus hashes em seu cluster de supercomputador local. Um bom candidato é o algoritmo "PBKDF2WithHmacSHA1", que é suportado pelo javax.crypto.SecretKeyFactory aula.
  4. Salve o documento no MongoDB com os campos username , password_hash e password_salt (mais seus dados reais do aplicativo, é claro). Não salve a senha original.

Para recuperar uma conta:
  1. Leia o username_input e password_input o suposto usuário entrou em seu formulário de login.
  2. Recupere o documento onde o username corresponde ao username_input o usuário forneceu.
  3. Obtenha o password_salt campo desse documento
  4. Crie uma string concatenando password_salt e password_input assim como você fez antes.
  5. Gere um hash dessa string com a mesma função de hash criptograficamente segura.
  6. Compare o hash com o password_hash campo do documento. Quando corresponde, o usuário digitou a senha correta.

Você poderia, alternativamente, recuperar apenas os campos password_hash e password_salt do documento e não carregar o restante antes que o usuário seja autenticado, mas eu diria que no mundo real isso causará mais carga do que salvaria. Os logins bem-sucedidos geralmente superam em muito os malsucedidos, a menos que você tenha um invasor que tente forçar uma conta à força bruta. E, nesse caso, você bloquearia o invasor com fail2ban ou outro mecanismo de limitação de login.