¿Debo decodificar una contraseña de base64 antes de realizar el hash para el almacenamiento?

1

Mi servidor obtiene contraseñas codificadas en base64 del cliente, y las voy a codificar para almacenarlas en una tabla de credenciales.

¿Debería decodificar la contraseña y hacer un hash en la contraseña de texto sin cifrar, o simplemente en la cadena codificada?

    
pregunta Lynn Owens 11.01.2014 - 20:14
fuente

2 respuestas

2

Teóricamente, descodificar o no descodificar no importa, porque la codificación Base64 es una permutación pública (todo el mundo puede descodificar y recodificar cada secuencia de caracteres Base64, y esto es determinista). Si la codificación Base64 fortalece o debilita la función de hash de la contraseña, y la función de hashing de la contraseña es deficiente y débil, y debe reemplazarse con algo más fuerte.

En la práctica , algunas funciones de hash de contraseñas tienen limitaciones; en particular, la mayoría de las implementaciones de bcrypt aceptan contraseñas de tamaño de hasta 51 o 55 bytes, no más. Dado que la codificación Base64 aumenta el tamaño de los datos (cada 3 bytes produce 4 caracteres, recodificados como 4 bytes), la codificación Base64 implica un tamaño de contraseña máximo más bajo. Por ese motivo, es aconsejable descodificar la Base64 y procesar la contraseña sin procesar.

Sin embargo también hay una buena razón no para decodificar la Base64, dependiendo de tu biblioteca de soporte. Si su implementación de hashing de contraseñas usa cadenas como entrada, entonces ese código necesariamente hace algo de codificación de caracteres a bytes. Esto puede implicar algunos problemas de codificación muy inconvenientes, especialmente con caracteres que no son ASCII (un simple carácter latino-1 como "é" tiene varias representaciones en Unicode, lo que produce diferentes secuencias de bytes). Es importante que esta codificación sea determinista (cuando se verifica la contraseña, debe usar la misma codificación que cuando se eligió inicialmente). Cuando recibe Base64, la persona que llama ya hizo el trabajo y presumiblemente está de acuerdo con él. Por lo tanto, es aconsejable no descodificar la Base64, y en lugar de hacerla directamente.

O tal vez no. Una vista alternativa es que los problemas de codificación requieren un procesamiento sistemático, y puede ser una buena idea descodificar sistemáticamente todo lo que recibes, para asegurar la recodificación con las mismas reglas (la codificación reglas en el servidor). Esto realmente podría ayudar si el usuario emplea diferentes tipos de software cliente, con diferentes reglas de codificación.

Entonces, realmente, depende de ti. Personalmente, descodificaría la Base64, porque confío en mí más que otras personas para procesar las cadenas Unicode correctamente, y evita bajar artificialmente la contraseña máxima tamaño en caso de que la función de hashing sea bcrypt (otras funciones como PBKDF2 no tienen tales limitaciones).

    
respondido por el Tom Leek 23.01.2014 - 17:31
fuente
0

Depende de usted, no hay más ni menos seguridad cuando se trata de almacenar esas contraseñas. El principio de Kirkhoffs dicta que la seguridad de un sistema de encriptación no debería verse comprometida si el algoritmo cae en manos del enemigo.

Esto significa que si el atacante conoce tu esquema, no tendría ningún paso adicional para cuidarlo, excepto la base64 que codifica la contraseña antes de intentar la fuerza bruta. Si bien esto podría significar que tomaría un poco más de tiempo para aplicar la fuerza bruta a las contraseñas, es insignificante en comparación con la sobrecarga del algoritmo de hashing de contraseñas. (siempre que hayas tomado una buena como PBKDF2, scrypt o bcrypt)

    
respondido por el Lucas Kauffman 11.01.2014 - 20:17
fuente

Lea otras preguntas en las etiquetas