¿Hay alguna ventaja al dividir una contraseña?

41

He estado leyendo sobre el hash de LANMAN (LM) y tengo curiosidad acerca de una parte particular del algoritmo.

El hash LM se calcula de la siguiente manera:

  1. La contraseña ASCII del usuario se convierte en mayúsculas.
  2. Esta contraseña está rellena con nulos a 14 bytes.
  3. La contraseña de 14 bytes se divide en dos mitades de 7 bytes.
  4. Estos valores se utilizan para crear dos claves DES, una de cada mitad de 7 bytes.
  5. Cada una de las dos claves se usa para cifrar en DES la cadena ASCII constante "KGS! @ # $%", lo que da como resultado dos valores de texto cifrado de 8 bytes.
  6. Estos dos valores de texto cifrado se concatenan para formar un valor de 16 bytes, que es el hash LM.

Hay muchas debilidades de seguridad que se describen en el artículo de Wikipedia vinculado y que se mencionan en otra parte, pero estoy particularmente interesado en los pasos del 3 al 6. Tengo curiosidad por lo que llevó a este diseño. ¿Existe alguna ventaja real de seguridad al dividir una contraseña, cifrar las dos mitades por separado y luego combinar las dos mitades para formar un hash nuevamente? ¿O es solo un ejemplo de "seguridad en la oscuridad"?

    
pregunta Bill the Lizard 04.04.2011 - 20:06
fuente

3 respuestas

35

Dividir la contraseña en hashes es no una ventaja. Se hizo por razones oscuras que ya no son relevantes hoy.

La razón por la que el hash de LanMan funciona de esta manera es porque el hash de LanMan se basa en DES. DES acepta una clave de 56 bits. Por lo tanto, es natural tratar una porción de 7 bytes como formando una clave DES. No hay una buena forma de usar DES para hacer hash de más de 7 bytes a la vez, y necesitamos alguna forma de crear un hash para contraseñas más largas a partir de DES, por lo que los diseñadores del hash de LanMan decidieron dividir la contraseña en dos partes.

Hoy, nunca construiríamos un hash de contraseña de esta manera. Simplemente usaríamos Bcrypt, Scrypt, PBKDF2 o algún equivalente, o construiríamos algo similar basado en primitivas existentes, como SHA256. Pero en ese momento, Bcrypt, Scrypt, SHA256, etc., no existían, lo que abre la oportunidad para que los diseñadores de LanMan cometan este tipo de error devastador.

Según los estándares modernos, el hash de LanMan es un diseño desagradable. Hay muchos many ataques en ello. Es muy debil Nadie debería usar el hash de LanMan hoy si puede evitarlo. (Como otros lo han señalado, su seguridad es desastrosa incluso para los estándares de la época. Un punto justo).

    
respondido por el D.W. 05.04.2011 - 07:37
fuente
48

La división de la contraseña es una debilidad , no una ventaja . Permite romper cada contraseña de forma independiente. Comenzando con caracteres ASCII (códigos de 32 a 126, inclusive), luego eliminando las letras minúsculas, terminará con 127-32-26 = 69 caracteres posibles en el alfabeto de la contraseña. Esto conduce a 697 posibles mitades, que están algo por debajo de 243 . En otras palabras, esto es altamente manejable a través de la fuerza bruta. Ni siquiera necesitas un diccionario.

Esto no es seguridad a través de la oscuridad. Esto es inseguridad por incompetencia.

Editar: "altamente manejable con fuerza bruta" también abre el camino para varias optimizaciones. Tenga en cuenta que LanMan no tiene sal, por lo que las tablas precomputadas pueden ser eficientes (usted paga el costo de la creación de tablas una vez , luego ataca a varias medias contraseñas; realmente vale la pena incluso para una sola contraseña, ya que una contraseña es dos medias contraseñas). En 2003, Philippe Oechslin publicó una intercambio de tiempo-memoria (es el artículo en el que acuñó el término "tabla arco iris") y computó tablas para descifrar contraseñas de LanMan. Se limitó a las contraseñas alfanuméricas (letras y dígitos, pero no a signos especiales), por lo tanto, un espacio de 237 . El tamaño acumulado de las tablas sería entonces de 1.4 GB, con una eficiencia de craqueo del 99.9% y un tiempo de ataque de menos de un minuto.

Con un espacio 2 43 , es decir, 64 veces más grande, el tamaño de la tabla y el tiempo de ataque aumentan en un factor 16 (eso es 64 2 / 3 ), por lo que estamos hablando de unos 23 GB (eso no es mucho para los discos de hoy) y un ataque de 15 minutos. En realidad, el ataque sería más rápido que eso, porque el cuello de botella son las búsquedas en el disco duro, y el atacante inteligente usará un SSD que puede hacer búsquedas 50 veces más rápido que un disco duro mecánico (un SSD de 32 GB cuesta menos que 70 $ ...). El esfuerzo de creación de tablas (un gasto único) puede llevar algunas semanas en una sola PC, o algunos días en cualquier nube decente, por lo que es bastante barato.

Aparentemente , tales tablas ya existen ...

    
respondido por el Thomas Pornin 04.04.2011 - 21:04
fuente
3

El hecho de que algo sea más complejo no necesariamente lo hace más seguro. Corrí un cracker de contraseñas en mi caja de Windows y pareció dividir las contraseñas en cadenas de 8 caracteres, y rompió cada cadena independientemente de la otra, lo que hace que el proceso sea extremadamente rápido.

Desde un punto de vista práctico, dividir una contraseña no es beneficioso, y @Thomas ya ha explicado por qué no es beneficioso matemáticamente.

    
respondido por el MasterZ 05.04.2011 - 01:22
fuente

Lea otras preguntas en las etiquetas