¿La mejor manera de cifrar un nombre de usuario en una base de datos?

1

En mi base de datos, me gustaría cifrar toda la información identificable, incluido el nombre de usuario, de modo que las personas con acceso a la base de datos no puedan deducir el nombre de usuario real (ya que podría indicar la identidad real del usuario). / p>

Y, también, los usuarios deben tener la capacidad de iniciar sesión.

¿Cuál sería la mejor estrategia para lograr esto?

Actualmente, estoy mezclando el nombre de usuario y la contraseña (está bien que nunca se pueda descifrar). Sin embargo, esto introduce la capacidad de realizar un ataque de tabla arco iris (o?).

Mi siguiente idea sería descartar una gran parte del hash, lo suficientemente grande como para que cualquier resultado de un ataque de mesa en el arco iris no sea concluyente. Por supuesto, esto introduciría una tasa de colisión más alta, lo que no es deseable.

Una vez más, un ataque en la mesa del arco iris sería capaz de producir un conjunto de candidatos, lo que no sería bueno.

¿Existen otras estrategias conocidas para este tipo de problema?

    
pregunta HelloWorld 13.12.2018 - 17:34
fuente

2 respuestas

2

Hay una solución estándar para derrotar a las tablas de arco iris: agregue un salt a lo que está haciendo hashing. Una sal es un valor aleatorio que se genera por separado para cada hash de contraseña y se almacena junto con ese hash.

Esto, sin embargo, requiere que usted sepa con qué hash está verificando (a menos que quiera probar cada entrada en su base de datos hasta que encuentre una que coincida, por supuesto). Cuando su solución no necesita escalar para una gran cantidad de cuentas, esto podría ser una opción viable). Por lo tanto, deberá saber en qué cuenta desea iniciar sesión el usuario para poder verificar si su contraseña es correcta. Lo que podría hacer es tener tres columnas en su base de datos:

hash(username)
salt
hash(password + salt)

Cuando alguien intenta iniciar sesión con las credenciales admin : hunter2 , se genera el hash de admin . utilícelo para recuperar la sal, calcular el hash de hunter2salt y ver si coincide.

Por supuesto, ahora es posible usar los nombres de usuario de fuerza bruta y hacerlo incluso más rápido con una tabla de arco iris. Pero los nombres de usuario generalmente no deben ser tan sensibles como las contraseñas. Puede hacer que sea menos conveniente usando una función de lenta tiene y usando una pimienta (una sal que es la misma para cada entrada - funciona contra las tablas de arco iris precalculadas).

    
respondido por el Philipp 13.12.2018 - 17:50
fuente
0

Debes considerar que generar tablas de arco iris (RT) es un trabajo realmente difícil. Si alguien roba toda tu base a la vez, será mucho más rápido forzar brutalmente a todos los pares de nombre de usuario + contraseña que desea verificar, luego generar RT y buscar en contra de ella.

Entonces, si usas pimienta, no debes preocuparte por que alguien use RT en caso de que robe todos los hashes de usuario. En caso de que obtenga los hashes pieza por pieza (por ejemplo, descargue los hashes de los nuevos usuarios todos los días), luego, a largo plazo, el atacante puede beneficiarse de la generación y el uso de RT.

El par de nombre de usuario + contraseña tiene una entropía mayor que la contraseña sola, lo que hace que la generación de RT y la fuerza bruta sean muy difíciles (si no almacena hash (nombre de usuario) o cualquier otra forma de comprometer los nombres de usuario!). Creo que aplicaría una política de contraseña (no demasiado estricta) y no me preocuparía por el ataque de RT.

    
respondido por el Strigo 13.12.2018 - 21:57
fuente

Lea otras preguntas en las etiquetas