Si crea una aplicación basada en la web, ¿dónde y cómo es la forma más segura de almacenar la información de inicio de sesión de sus bases de datos?

Tienes pocas opciones. En primer lugar, puede utilizar un tercero para realizar la autenticación por usted, como OpenID, Twitter, Facebook, etc. Probablemente sea mejor admitir la mayor cantidad posible, ya que no puede saber quién tiene una cuenta en qué servicio. Usar un tercero significa que no necesita manejar credenciales en absoluto. Eso es una victoria para ti.

Sin embargo, no todos tienen cuentas de redes sociales, por lo que para almacenar las credenciales de los usuarios, debe almacenarlas utilizando una función de Hash salada. Una función de hash segura guarda la contraseña en un formato que no es reversible: IOW, no es encriptación. Una función hash segura toma entradas arbitrarias de longitud y genera una salida única de longitud fija (el valor hash). Secure tiene funciones que tienen tres propiedades:

  1. Dado un valor hash, no puede recuperar la entrada.
  2. La misma entrada en una función hash segura siempre dará como resultado la misma salida.
  3. Dado que tiene un valor y un algoritmo de hash seguro, no puede descifrar la entrada (es por eso que los hashes seguros NO son cifrados).

Los hashes seguros se pueden revertir (supuestamente), pero los programas de adivinación de contraseña pueden probar varias entradas para encontrar la entrada que coincida con una salida (también conocido como un ataque de diccionario).

Utiliza sales, un par de caracteres generados aleatoriamente que se agregan al valor hash, lo que hace que los diccionarios precalculados sean difíciles de crear y usar.

Los buenos hashes de hoy son SHA-1, SHA-2 y otros.

Almacene su hash salado en su base de datos junto con el nombre de usuario y otras cosas. Si un atacante obtiene su base de datos de contraseñas, tendrá que ejecutar algún tipo de ataque para adivinar las contraseñas.

También puede fortalecer sus contraseñas forzando el uso de caracteres, símbolos y números mixtos, manteniendo un historial de contraseñas para detener la reutilización de contraseñas en los cambios, etc.

Encuentre una biblioteca o algo en su idioma de elección que maneje la autenticación por usted. Escribir buenas rutinas criptográficas (y el código que las usa) es muy difícil. Escribir malas rutinas es muy fácil.

Tendrá que hacer que sus credenciales de inicio de sesión sean legibles por el usuario que ejecuta la aplicación, y debido a eso, el mejor movimiento objetivo que puede hacer es colocar las credenciales en un lugar donde solo ese usuario pueda leerlas. Más allá de eso, desea mantener las credenciales en un lugar donde solo las personas que absolutamente necesitan tener acceso a ellas tengan acceso a ellas, lo que apunta a colocar esas credenciales en un archivo separado que otras configuraciones para la mejor seguridad.

Pasando del objetivo a lo pragmático, la oscuridad ayuda. Las contraseñas más largas, generadas por scripts de generación de contraseñas seguras también mejorarán su seguridad. Muchos servidores de bases de datos ahora permiten inicios de sesión basados ​​en claves, y tener un archivo de clave privada que solo pueda leer el usuario de la aplicación es probablemente un lugar tan seguro como cualquier otro.