Esquema de verificación de contraseña (utilizado en, por ejemplo, MS Office): ¿es más seguro que solo un hash?

2

Los esquemas habituales de verificación de contraseña almacenan un hash de contraseña con sal y el salt. Si el hash es bueno y costoso computacional, se considera seguro.

Sin embargo, una versión alternativa (utilizada en Microsoft Office y probablemente en otros lugares) genera N bytes aleatorios (por ejemplo, 16 bytes) y un hash de M bytes de los N bytes (por ejemplo, 16 bytes adicionales), los concatena y cifra el N concatenado + M bytes usando un algoritmo de cifrado y una clave derivada de la contraseña.

Para verificar la contraseña, los bytes N + M se descifran, los primeros N bytes se procesan y se comparan con los M bytes descifrados. Si coinciden, la contraseña se considera verificada.

Para mis ojos no entrenados, la introducción de datos aleatorios (de longitud suficiente) hace que este sistema sea seguro contra cualquier esquema de búsqueda de tablas, incluso si el hash es débil. Parece que solo depende de la fuerza del cifrado y la longitud de la clave.

¿Estoy equivocado? Donde?

    
pregunta Moose 23.09.2014 - 17:33
fuente

2 respuestas

3

Este esquema es ok , pero básicamente es solo una variante de un hash salado. Estos son generalmente considerados como práctica antigua. Además, este esquema es más complicado (más área de superficie para posibles errores) y se basa en múltiples algoritmos criptográficos ininterrumpidos.

Una buena práctica moderna es que las contraseñas deben almacenarse utilizando un algoritmo de derivación de clave lenta, como PBKDF2 o bcrypt. Esto garantiza que las tablas de búsqueda no sean factibles, y que el descifrado de todas las contraseñas, excepto las más débiles y comunes, es extremadamente costoso.

I escribí una respuesta hace un tiempo explicando un poco del historial de contraseñas hash y por qué ahora usamos KDF lentos.

    
respondido por el Polynomial 23.09.2014 - 17:55
fuente
0

El atacante no fuerza bruscamente todo el espacio de búsqueda para romper las contraseñas. El atacante comienza probando el diccionario, que es la recopilación de las contraseñas más probables.

Consideremos 3 ataques, según la estrategia utilizada para proteger la base de datos de contraseñas.

caso 1: contraseñas protegidas con Hash .
Para cada palabra 'w' en el diccionario
yo. Calcula el hash de 'w'.
ii. Compare el hash con las entradas en la base de datos de contraseñas.
En este caso, se puede usar el mismo diccionario para romper la base de datos de contraseñas completa.

caso 2: contraseñas protegidas con Hash salado .
Para cada palabra 'w' en el diccionario
yo. Agregue la sal 's' a 'w'.
ii. Calcula el hash de 'w' + 's'.
iii. Compara el hash con la contraseña que se va a romper.
En este caso, el atacante tiene que modificar su diccionario de acuerdo con la sal que se usa para introducir la contraseña. Por lo tanto, el mismo diccionario no se puede utilizar para romper las contraseñas. La sal no se conoce de antemano y si el tamaño de la sal es, por ejemplo, de 32 bits, también se puede evitar el cálculo previo del diccionario.

caso 3: contraseñas protegidas con el esquema de Microsoft .
Para cada palabra 'w' en el diccionario
yo. Descifre los bytes 'N + M' usando 'w'.
ii. Hash los n bytes.
iii. Compara el hash con los bytes 'M'.
En este caso, el valor de N no se conoce en el avance y el atacante puede calcular la versión encriptada de 'N' + 'M' usando cada palabra del diccionario y para todas las posibilidades de 'N'. Sin embargo, si el tamaño de 'N' es grande, se puede evitar el cálculo previo del diccionario.

Análogamente, la 'N' aleatoria en el Esquema de Microsoft cumple el mismo propósito que la de la sal aleatoria 'en el hash salado. Sin embargo, si se usa el mismo valor de' N ' para proteger cada contraseña en la base de datos, entonces su seguridad es equivalente a las contraseñas protegidas con hash (caso 1).

    
respondido por el Curious 24.09.2014 - 06:17
fuente

Lea otras preguntas en las etiquetas