BandaAncha.eu

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 👇 este 📰 artículo ⏎
  • 🔍 en 💬 foros ⏎
Regístrate Regístrate Identifícate Identifícate
  • 📰 Artículos

¿SHA-1 roto?

MaX

SHA-1 es una función hash (dispersión) de las más usadas en criptografía y firmas digitales.
Simplificando, una función hash te genera un número a partir de unos datos de entrada. Idealmente, dos datos diferentes no pueden tener el mismo hash.
En la práctica lo que se intenta es que estos casos (llamados colisiones) sean lo menos posibles.
Además, encontrar el dato original a partir del hash es complicado.
Estas ideas son las que se usan en firmas digitales, Tenéis un ejemplo al final.

Un código se considera seguro mientras no haya una forma "rápida" de invertirlo/descifrarlo/averiguarlo. Cuando no existen esos métodos, la única forma es a base de probar (fuerza bruta). Hasta ahora, se necesitaban 2^80 (2 elevado a 80) operaciones para poder encontrar la colisión.

Según Bruce Schneier, una universidad china ha logrado hacerlo con 2^69. Siguen siendo muchas, pero son muchas menos que antes.

El principal problema podría estar en la falsificación de firmas digitales.
En cualquier caso, sigue siendo muy costoso (en tiempo) realizar acciones de estas. ¿Alguien se atreve a calcular cuando nos llevaría? ;)

Leído en Kriptópolis.

Como anexo para los que tengan un poco más de curiosidad:
Las funciones hash también se pueden usar para ordenar elementos de forma que sean fácilmente localizable (tipo de dato diccionario si no recuerdo mal) y para comprobar errores en un fichero.

MD5 es otra función hash muy conocida y se usa bastante en detección de errores. Muchas veces cuando bajas ficheros grandes, te muestran el md5sum, que es el hash generado a partir del fichero y MD5.

Por ejemplo, si ejecutamos: md5sum free_software.pdf
b799f0f3c60cd4456e6ed0288118c781 free_software.pdf

Dos datos diferentes dan dos hash diferentes:
echo "1234" | md5sum
e7df7cd2ca07f4f1ab415d457a6e1c13 -
echo "4567" | md5sum
f1d1d471045542b64f3fff665b42035a -

Otro ejemplo, con el problema de SHA-1 (o similares) alguien podría colgar ficheros en los P2P con el mismo nombre que otros y hacerlos pasar por verdaderos, pues podría conseguir una firma idéntica.

Espero no haberme enrollado demasiado.

💬 Comentarios

BocaDePez
BocaDePez

Con el problema de SHA-1 (o similares) alguien podría colgar ficheros en los P2P con el mismo nombre que otros y hacerlos pasar por verdaderos, pues podría conseguir una firma idéntica.
<br>
Es decir, conseguir un archivo DEL MISMO tamaño (porque si no es del mismo tamaño, nanai) con el mismo hash. Y como muchos p2p generan hashes de los trozos (normalmente 10 megas), también el fake tendría que tener todos sus trozos con el mismo hash.<br>
Y como han dicho, no significa que sea fácil falsificarlo... solo es "menos complicado". O sea, encontrar un fichero fake con el mismo hash... no va a ser inmediato, y menos para archivos de muchos megas. Y conseguir que? Frenar la piratería? JA. Se cambia el archivo (por ejemplo la fecha) y listos, nuevo archivo con otro hash, y se comparte ese. <br>Vamos, que habeis puesto un ejemplo bastante ridículo ;)

🗨️ 1
BocaDePez
BocaDePez

A ver si aprendremos a leer: "Para mostrar código HTML sin que sea interpretado, debes sustituir los carácteres especiales por su código"

BDPR

Yo no mentero de na :P jejejejeje.

Pero se a lo k os referis. Eso creo k tambien se usa par el cifrado de datos del Wireless.

Las claves pueden se de 64Bits y de 128Bits

Yo tengo wireless con candado, pero tengo puesto la seguridad de WPA k creo k por ahora es la mas nueva k hay. Para acceder necesitas tener el programa k detecte WPA y por 2º la contraseña k tiene uno metida.

Yo se k por wireless una cosa es porde accder y otra muy distinta descifrar los datos k pasan desde el PC asta el punto de acceso. Pero supongo k el metodo de cifrado es el mismo.

Un Saludo ;)

mced

Me resulta curioso que la redacción de la noticia ponga casi más el énfasis en la posible proliferación de "fakes" en redes P2P que en las importantísimas repercursiones contra la privacidad y la seguridad que implicaría un método para falsificar hashes. Afortunadamente, parece que aún es relativamente seguro.

En cuanto a los "fakes", mira qué problema. Si es falso, te lo bajas de nuevo (jejeje, me imagino a la $$$$ alquilando el superordenador Mare Nostrum y poniéndolo a trabajar día y noche para meter CDs falsos de Bisbal en las redes P2P, y me descojono...)

🗨️ 3
BocaDePez
BocaDePez

1 linea habla de p2p, el resto habla mas o menos de que va el tema. Mucho enfasis en p2p. Y fijate tu si ese fake resulta que no es un mp3 sino un virus, que gracia.

🗨️ 2
mced

Dos líneas para hablar de la falsificación de firmas digitales y cuatro para el tema P2P. El resto de artículo es la explicación del fallo y un tutorial. Pero en fin, no le demos más vueltas al tema porque no tiene mayor importancia. Era pura impresión personal, y la tuya es perfectamente respetable.

En cuanto a virus, creo que los antivirus están para algo.

joseangel

puesto que al abrir un mp3 el sistema mira la extension y ejecuta el programa asociado ¿como pretendes que el wmp o cualquier reproductor ejecute el codigo del virus? la unica manera seria especializar al mp3 en un reproductor mal programado y con vulnerabilidades conocidas ante mp3 mal construidos, porque en caso contrario tendrías un error de codec o sonarian chirridos sin sentido (en el mejor de los casos)

señores, seamos serios, un virus es un programa que infecta (se ejecuta) un sistema cuando por alguna razon el sistema lo trata como un programa o parte de otro. Si abres el virus que quieras con el paint o el word no tendras peligro (a no ser que se explote alguna vulnerabilidad o el word decida ejecutar el virus, claro)

hoover

Doy gracias al cielo que las rot13 y rot26 o ya tirando para arriba la rot 65536 especialemnte para unicode, no hay ser humano que pueda descifrar nada.

BocaDePez
BocaDePez

¿Cuál sería la posibilidad de que se pudiera sustituir un PDF por otro, con el mismo tamaño, el mismo hash, y que además el PDF fuera leible para Acrobat y además tuviera sentido para el humano que lo lee?

Me pregunto...

🗨️ 1
BocaDePez
BocaDePez

Altísimos son los exponentes negativos de la probabilidad de conseguir eso.

jmoraf

segun entiendo de la web "An Illustrated guide to cryptographic hashes", estas operaciones matematicas se usan para generar un numero que resuma, sin confusion (y con un tamaño prefijado de bits), los datos entrados.

Por ejemplo (lo mas comun): guardar contraseñas de acceso. El usuario entra "username" y "password" y el ordenador aplica una funcion matematica (la funcionde hash) al "password", y compara el resultado del hash con el hash que tiene almacenado. El tamaño del hash es fijo. Pueden ser 128 bits, 512 bits.. depende de la funcion. Lo importante es que no se guardan los "password" directamente (porque alguien los podria coger/ver..), sino que se guarda un numero (de n bits) que es el resultado de la operacion matematica.

Y el articulo pone enfasis en que se puede haber acortado el tiempo para conseguir el mismo hash (un numero de 160 bits, para SHA-1) por el metodo de "fuerza bruta".

Por ejemplo, si mi "password" es "pepitogrillo" y alguien mira el fichero de passwords y ve algo asi como "6fbe37f1eea0f802bd792ea885cd03e2" (esto seria para un md5, 128 bits.. y me lo invento), podria conseguir, a base de fuerza bruta, y en un tiempo inferior al "teorico", una combinacion de caracteres que produjera el mismo resultado de la operacion matematica hash. Tal combinacion puede no parecerse en nada, y ser de distinta longitud, pero lo que cumpliria es que genera, al aplicarsele la misma operacion (el hash que sea) el mismo codigo, con lo que el sistema "pensaria" que se trata del mismo "password"... y a partir de aqui tendria todo el acceso del que disfrutara el usuario suplantado: bien de "usuario", bien de "root".. lo que sea...

Hoy toda la seguridad va con hash, desde Linux a Oracle, y recortar, aunque sea poco el tiempo de calculo, es mucho.

🗨️ 2
anthrax

los sistemas GNU/Linux usan md5 para guardar los hash de las contraseñas de los usuarios locales en /etc/shadow

Saludos 8)

🗨️ 1
Axelko

Las funciones de dispersión no están pensadas para que una única entrada produzca una única salida. Esto no tiene sentido, ya que entonces tendríamos un sistema de compresión impresionantemente eficaz. El hash garantiza que ante una entrada la salida siempre va a ser la misma, pero nada más.

Según lo que veo, simplemente han encontrado un algoritmo más rápido para trabajar con SHA-1. No hay que ser alarmistas... no hay ninguna forma para romper un algoritmo hash que no sea la fuerza bruta, y para eso sólo hace falta tiempo, ya que no son reversibles. Lo único que han hecho es reducir el tiempo de computo... que aun así sigue siendo extremadamente alto como para que un individuo o grupo reducido de individuos no pueda descifrar nada en un tiempo razonable.

Respecto al falseo en p2p, es un disparate. La probabilidad de conseguir un archivo de igual tamaño que el verdadero, que produzca el mismo hash, y que contenga código malicioso es tan sumamente baja que es totalmente impensable. Dudo que existiera solución a algo así, y si se pudiera conseguir en algún caso, requeriría de un proceso de cálculo sin precedentes. Hay formas mucho más fáciles de atacar a los usuarios del p2p...

Salu2.

🗨️ 5
BocaDePez
BocaDePez

2^69 alto? Sony dijo que esperaba conseguir que la ps3 pudiera hacer entorno a 2^40 operaciones por segundo (de coma flotante en precision simple) el CELL que presentaron hace poco hace una cuarta parte, con clusters de CELL eso esta completamente roto, si con 100 procesadores se pudiera romper en tiempo razonable ya se puede considerar inutil el algoritmo.

Cualquier cosa que sea reducir la complejidad significativamente (y 2^69 lo es) ya no es fuerza bruta.

🗨️ 3
BocaDePez
BocaDePez

Si, y solo si, el algoritmo para descifrar el SHA-1 es paralelizable (cosa que dudo), ya que el Cell basa su rendimiento en hacer muchas operaciones en paralelo. Aún así, son unos 12 días de cálculo con el cell en marcha las 24h para generar un hash.

Saludos

🗨️ 2
BocaDePez
BocaDePez

Pues a mi me salen ~6213 dias 2^69/2^40 = tiempo en segundos 2^29 /3600 horas /24 = 6213 dias

🗨️ 1
BocaDePez
BocaDePez

17 años, podemos decir categóricamente que 2^69 operaciones es un número alto.

MaX

Precisamente porque no son reversibles, no tiene sentido que usaran para compresión =)

Me temo que no lo expliqué, pero evidentemente si el conjunto de origen es mayor que el de destino, la función hash no puede dar siempre dos salidas diferentes para dos entradas diferentes: es imposible.
La explicación que di posiblemente esté más orientada a tablas hash, que es con lo que más he trabajado, que a firmas digitales en sí.

Lo del ejemplo P2P era por poner algo más cercano a la mayoría, evidentemente no es sencillo conseguirlo.
De formas formas, es bueno que haya discusión =)

kanuac

El punto más grave que veo de todo esto es que alguien filtrando datos en una red podría lograr colar una contraseña que no es la auténtica dado un sistema que las verifica por el hash.

jaimito

En un futuro próximo el SHA-1 y demás se romperan en unso minutos/horas pero para habrá algún otro algoritmo más fuerte virtualmente imposible de romper.
Esto también pasó con los primeros algoritmos de encriptación.

El caso es que de momento se puede seguir considerando seguro, ya que no todo el mundo tiene la infraestructura de esa universidad, ni la dedicación ni el tiempo.

🗨️ 1
jmoraf

La encriptacion es un camino reversible: tienes datos, le aplicas una funcion y una clave, y te salen los datos encriptados. Si a los datos encriptados le aplicas la "clave", te vuelven a salir los datos originales.

En el hash, aplicas una funcion matematica a una entrada, y te devuelve un numero de "n bits" fijo, donde "n" es un numero que depende de lo que quieres conseguir: pueden ser 128, 160, 512 bits.. lo que quieras. No es reversible.

Asi pues, no se trata de "conseguir desencriptar" la clave de root. Se trata de encontrar una colision: una entrada que produzca para la misma operacion hash la misma salida.

Lo que se pretende como "imposible de romper" se consigue elevando el tiempo de calculo necesario para conseguir una colision: por ejemplo: pasar de un hash de 1 bit a un hash de 160 o 512 bits, por ejemplo. Ampliando el espacio de salida. En un hash de 1 bit te puede salir "0" o "1", pero en un hash de 512 bits te salen muchisimos mas valores.