En seguridad de bases de datos, ¿es seguro almacenar sales de contraseñas en texto plano?

Fiat tiene buenos puntos y básicamente estoy de acuerdo. La lista de contraseñas “pre-hash” se llama ataque de arco iris. Las contraseñas se convierten de una manera desde la contraseña de texto sin formato en alguna cadena alternativa; el proceso se llama hashing y el resultado es un hash. Conceptualmente, ninguna otra contraseña producirá la misma cadena (hash). Pero si conozco el algoritmo, entonces puedo crear una base de datos propia donde genero todas las contraseñas posibles hasta por 16 caracteres (algún número aleatorio por el que los humanos tienen afinidad). Uso todos los caracteres superiores, inferiores, numéricos y especiales. Luego uso el algoritmo conocido para trocear cada una de esas contraseñas. Finalmente almaceno esos datos en mi propia base de datos, llamada tabla de arcoiris. La clave para un registro es la forma hash de la contraseña y el valor es el texto claro que produjo ese hash.

Ahora, dado el hash de una contraseña robada, una búsqueda en la base de datos luego devuelve el texto que es la contraseña. Si piensa que el algoritmo está siendo cambiado por algo llamado “sal”, entonces debe saber qué tabla se basa en la que usó la misma sal. Si la sal puede ser una gran cantidad de caracteres para una cadena grande, bueno, eso produce una gran cantidad de tablas y de nuevo tienes que usar la fuerza bruta dadas las posibles contraseñas para todas las sales. Algo así como tener que descifrar dos contraseñas.

Entonces, después de toda esa basura, su pregunta, ¿es seguro almacenar la sal de la contraseña en texto sin formato? Bueno, depende de qué tan seguro esté tratando de estar, pero en realidad, probablemente lo sea. Creo que la seguridad siempre es una compensación, por lo que todo el contenido de mis primeros 2 párrafos es para educarlo. Almacenar la sal para que cualquier usuario pueda verlo es muy malo. Protegerlo con acceso limitado es bueno. Es mejor que solo el administrador o la raíz puedan verlo. Almacenarlo mediante cifrado no es una gran ventaja porque la clave para descifrar todavía es necesaria. Es como decir que solo voy a agregar llaves y ocultar las llaves en la misma habitación. ¡Solo protégelo inteligentemente!

Puede almacenar sales en texto plano. Cada cuenta debe tener una sal única; eso solo hace la mayor diferencia. Un UID, clave o identificador similar se puede usar como una sal y le brinda tanta seguridad como una sal como un campo en una tabla. Mapear o permutar el identificador para producir una sal única puede proporcionarle una oscuridad que no hará que su aplicación sea más segura, pero aumentará ligeramente el esfuerzo del atacante.

También es de notar que la mayoría de los algoritmos de cifrado simétrico son débiles cuando el texto plano es menor que la longitud de la clave. Sin embargo, hay cosas que se pueden hacer para mitigar esto.

Si sus sales tienen menos de 255 caracteres, entonces seguramente no perderá nada, las sales deben tener 255 o más caracteres y, por lo tanto, si ha mezclado sus sales, las hará más cortas. A menos que se refiera a encriptar sus sales, ese es un juego de pelota diferente, encriptar localmente las sales sería una buena idea, pero el servidor no debería encriptar las sales, ya que cuesta más CPU y no lo hace más seguro. Si tienen acceso a las sales, probablemente tengan acceso a la contraseña de cifrado para desbloquear las sales.