Saltar al contenido

Cifrar campos de contraseña en mongodb

Posterior a de una larga selección de datos dimos con la solución este rompecabezas que suelen tener muchos lectores. Te compartimos la solución y nuestro deseo es que te resulte de gran apoyo.

Solución:

Según la conversación en los comentarios, lo que quieres decir es hash contraseñas, no cifrar contraseñas Por lo general, haría esto con una sal para evitar un ataque de mesa de arco iris. El almacenamiento de contraseñas como hashes salados es el estándar de mejores prácticas cuando se trata de almacenar contraseñas en bases de datos.

A partir de la versión 3.2, MongoDB no tiene soporte nativo para el hash de contraseñas como lo brindan algunas bases de datos SQL, por lo que deberá implementarlo en Java.

Para generar una nueva cuenta o cambiar la contraseña de una cuenta existente:

  1. generar un valor salt aleatorio criptográficamente seguro con java.security.SecureRandom. Esta clase funciona como el generador de números aleatorios estándar java.util.Random (es una subclase) pero cambia el rendimiento por un nivel mucho más alto de imprevisibilidad que se requiere para un contexto relevante para la seguridad.
  2. Crear un string concatenando sal y contraseña
  3. Genera un hash de eso string con una función hash criptográficamente segura. Hay muchas funciones hash provistas por Java listas para usar, pero desea usar una que sea intencionalmente difícil de calcular para ralentizar a un atacante con acceso a la base de datos que intenta forzar sus hash en su clúster de supercomputadora local. Un buen candidato es el algoritmo “PBKDF2WithHmacSHA1” que es compatible con el javax.crypto.SecretKeyFactory clase.
  4. Guarde el documento en MongoDB con los campos username, password_hash y password_salt (además de los datos reales de su aplicación, por supuesto). No guarde la contraseña original.

Para recuperar una cuenta:

  1. Leer el username_input y password_input el presunto usuario ingresó en su formulario de inicio de sesión.
  2. Recuperar el documento donde se encuentra el username coincide con el username_input proporcionado por el usuario.
  3. Consigue el password_salt campo de ese documento
  4. Crear un string concatenando password_salt y password_input como lo hiciste antes.
  5. Genera un hash de eso string con la misma función hash criptográficamente segura.
  6. Compara el hash con el password_hash campo del documento. Cuando coincide, el usuario ingresó la contraseña correcta.

Alternativamente, solo podría recuperar los campos password_hash y password_salt del documento y no cargar el resto antes de que el usuario esté autenticado, pero supongo que en el mundo real causará más carga de la que ahorraría. Los inicios de sesión exitosos generalmente superan en gran medida a los fallidos, a menos que tenga un atacante que intente forzar una cuenta por fuerza bruta. Y en ese caso, bloquearía al atacante con fail2ban u otro mecanismo de limitación de inicio de sesión.

Agradecemos que desees amparar nuestro estudio añadiendo un comentario y dejando una puntuación te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *