2010-06-30 21 views
7

duplicados posibles:
Is it possible to decrypt md5 hashes?
Is it possible to reverse a sha1?¿Se puede descifrar fácilmente una función hash determinista?

hice esta pregunta: working with HUGE spreadsheet

y obtuvieron una gran respuesta y he seguido el consejo. He utilizado este: http://splinter.com.au/blog/?p=86

y yo HASHED alrededor de 300.000 elementos diferentes en una columna en una hoja de cálculo Excel

ya que se puede hacer:

=SHA1HASH('The quick brown fox jumps over the lazy dog') 

Y que vuelva:

2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 

¿No podría ir hacia atrás también?

digo que si encripta el mismo texto de la misma manera cada vez, ¿cuál es el punto?

si conoce el algoritmo hash, ¿es posible retroceder?

¿me puede explicar muy simplemente cómo funciona el hash? ¿Cómo se puede convertir un hash de 20 a 40 caracteres? ¿toma mucho tiempo obtener un disco duro de 20 gb?

+5

Un título mejor para esta pregunta sería "¿Se puede descifrar fácilmente un hash?" –

+1

¿Quién te dijo que puedes ir hacia atrás? – kennytm

+3

¿Intentó retroceder? ¿Has encontrado una función que en realidad * sí * retroceda? –

Respuesta

8

Veo su punto basado en el hecho de que usted está tratando de ocultar los números de la Seguridad Social. Si alguien sabe que está usando SHA1HASH en el SSN para crear un identificador único, puede generar una lista rápida de todos los números del SSN, SHA1HASH, y luego comparar para tener automáticamente el SSN de la persona en el registro. Peor aún, pueden pregenerar todo esto en una tabla de búsqueda hash, y tienen una clave de 1 hash para cada SSN. Esto se denomina tabla de búsqueda hash, y las formas más complejas se llaman tablas rainbow.

Es por eso que se inventó una segunda característica de hash. Se llama salazón. Salar es básicamente esto; creas una sal, luego modificas tus datos usando la sal. Por ejemplo, supongamos que tiene el SSN 123-45-6789. Puedes salarlo con la cuerda "MOONBEAM". Su nueva cadena para hashing es "123-45-6789MOONBEAM"

Ahora, incluso si alguien sabe que está mezclando el SSN para generar su ID única, todavía no sabe la sal que va a utilizar, y así no pueden derivar el número de Seguro Social original haciendo un hash previamente de una lista de todos los SSN y comparando con su ID. Sin embargo, siempre puede tomar el SSN del usuario, usar el sal y reajustar el SSN + SALT para ver si el SSN del usuario coincide con su ID.

Por último, si se utiliza sólo 1 sal para todo, y lo mantienen en secreto, en lugar de ser capaz de ver la sal, y generar el SSN correspondiente ejecutando incrementos SSN + sal 100 millones de veces y recogiendo el partido, tienen hacer mucho más trabajo para recuperar SSN. Esto se debe a que los 100 millones de números de SSN tienen una cantidad relativamente baja de entropía. (10^9 combinaciones). Añadiendo su sal y mantenerla en secreto, en lugar de correr

SHA1HASH(111-11-1111) -> check hash match 
SHA1HASH(111-11-1112) -> check hash match 
SHA1HASH(111-11-1113) -> check hash match 

Tendrían que ejecutar

SHA1HASH(111-11-1111a) -> check hash match 
SHA1HASH(111-11-1111b) -> check hash match 
SHA1HASH(111-11-1111c) -> check hash match 
... 
SHA1HASH(111-11-1111azdfg) -> check hash match 
SHA1HASH(111-11-1111azdfh) -> check hash match 
.... 
SHA1HASH(111-11-1111zzzzzzzzzzzzzzzz) -> check hash match 
SHA1HASH(111-11-1112a) -> check hash match 
SHA1HASH(111-11-1112b) -> check hash match 

.. y así sucesivamente hasta que finalmente llegan a

SHA1HASH(123-45-6789MOONBEAM) -> check hash match 

en qué punto finalmente lograron crackear el SSN + SALT

Ni siquiera saben cuántos caracteres l ong your salt es Eso es 10^(número de caracteres de su sal) por más trabajo que deben hacer solo para obtener 1 SSN, y mucho menos obtener toda la tabla.

+0

¡¡¡este es un gran punto !! –

+7

¡Una sal no es un secreto! Las sales deben agregarse al valor hash, y sirven para evitar la precomputación de ataques de diccionario. A lo que se refiere es más como un HMAC, en cuyo caso debe usar un HMAC adecuado en lugar de este esquema ad-hoc. –

+0

Una sal * no es * un secreto, pero una sal * puede ser * secreta. En realidad estoy tratando de adaptar una solución al problema particular de este tipo. Toma el número SSN. Si sabe que es un número de SSN, y ve la sal ahí mismo en la hoja de cálculo, simplemente ejecuta los hashes de SHA1 de 100,000,000 para todos los SSN que usan esa sal y bingo, tiene ese número de SSN. Mantenga la sal en secreto y no tendrá ese problema. – Zak

23

respuesta general

Un cryptographic hash function no se puede revertir fácilmente. Esta es la razón por la cual a veces también se la denomina función de una sola dirección. No hay vuelta atrás.

También debe tener cuidado al llamar a esto 'descifrado'. Hashing no es lo mismo que el cifrado. El conjunto de posibles valores hash es típicamente más pequeño que el conjunto de posibles entradas, por lo que múltiples entradas se asignan a la misma salida.

Para cualquier función hash dada la salida, no se puede saber cuál de las muchas entradas se utilizó para generar esta salida en particular.

Para hash criptográficos como SHA1 es muy difícil incluso encontrar una entrada que produce esa salida.

La forma más sencilla de invertir un hash criptográfico es adivinar la entrada y hash para ver si da el resultado correcto. Si estás equivocado, adivina de nuevo. Otro enfoque es usar rainbow tables.

respecto al uso de hashing para cifrar los SSN

Con su caso de uso de los SSN un ataque es factible debido a la relativamente pequeño número de posibles valores de entrada. Si le preocupa que las personas accedan a SSN, sería mejor que no almacene o use el SSN en su aplicación y, en particular, no los use como identificador. En su lugar, puede encontrar o crear otro identificador, por ejemplo, una dirección de correo electrónico, un nombre de usuario, un GUID o simplemente un número creciente.Puede ser tentador utilizar el SSN, ya que está allí y, a primera vista, parece ser un único identificador inalterable, pero en la práctica, su uso solo causa problemas. Si necesita almacenarlo por algún motivo, utilice una encriptación fuerte no determinista con una clave secreta y asegúrese de mantenerla segura.

+0

si conoces el algoritmo hash, ¿es posible retroceder? –

+4

No, no es posible con un algoritmo hash. – blockhead

+2

+1, una vez que se pone negro no hay vuelta atrás – VoodooChild

2

Un buen hash es una forma, lo que significa que no deberías poder retroceder. El punto es proporcionar una clave de una cadena sin revelar la cadena. Por ejemplo, esta es una buena forma de hacer coincidir contraseñas sin almacenar una contraseña. En cambio, almacena un hash y compara el hash de entradas resultante.

+0

si conoce el algoritmo hash, ¿es posible retroceder? –

+0

Posiblemente, pero muchos están diseñados para hacer esto muy difícil. Algunos algoritmos generan el mismo hash para diferentes entradas, y muchos, sino todos, dependen de la longitud de la entrada. Debes saber mucho sobre los datos que has hasd para volver a ellos. –

+1

Esta es la diferencia entre una función hash "normal", como la que usarías en un mapa python o java.util.HashMap y la función hash criptográfica como SHA1. Las funciones hash normales están optimizadas principalmente para distribuir bits en la entrada (cobertura en todo el rango de salida hash) y la eficiencia. Un hash criptográfico también agrega la restricción no reversible, con la eficiencia como una restricción de segundo orden. –

5

El cifrado y el hashing son dos cosas diferentes.

Hashing simplemente digiere la cadena en un número. La encriptación conserva el contenido de la cadena para que luego pueda descifrarse. No hay método de obtener la cadena original de un hash. Los contenidos simplemente no están allí.

+0

'xept si tienes todas las cadenas que coinciden con el hash, luego navega por ellas. –

+1

No soy un matemático pero ¿no serían cadenas de infinito? –

3

No. El punto de un hash es que es una forma de cifrado (como otros han señalado, no es realmente "encriptación", pero quédate conmigo aquí). La desventaja es que, en teoría, hay pequeñas posibilidades de "colisiones", cuando dos o más cuerdas devuelven el mismo hash. Pero por lo general vale la pena este inconveniente.

17

El punto entero de un hash criptográfico es que no puede descifrarlo y que hace cifrar la misma manera cada vez.

Un caso de uso muy común que los hashes criptográficos es la validación de contraseña. Imagine que tengo la contraseña "mypass123", y el hash es "aef8976ea17371bbcd". Entonces, un programa o sitio web que desee validar mi contraseña puede almacenar el hash "aef8976ea17371bbcd" en su base de datos, en lugar de la contraseña, y cada vez que deseo iniciar sesión, el sitio o programa actualiza mi contraseña y se asegura de que los hashes partido. Esto permite que el sitio o programa evite almacenar mi contraseña actual, y así protege mi contraseña (en caso de que sea una contraseña que uso en otro lugar) en el caso de que los datos sean robados o comprometidos: un hacker no podría retroceder. del hash a la contraseña

Otro uso común de los algoritmos hash criptográficos es la comprobación de la integridad. Supongamos que un archivo dado (por ejemplo, una imagen de un CD de distribución de Linux) tiene un hash criptográfico conocido y disponible públicamente. Si tiene un archivo que pretende ser lo mismo, puede hacer hash usted mismo y ver si los valores hash coinciden. Aquí, el hecho de que haste el mismo método cada vez le permite validarlo de manera independiente, y el hecho de que sea criptográficamente seguro significa que nadie puede crear un archivo falso (por ejemplo, con un troyano) que tenga el mismo hash

Tenga en cuenta la distinción muy importante entre hash y cifrado, aunque: hashing pierde información. Es por eso que no puedes retroceder (descifrar) el hash. Puede hash un archivo de 20 GiB y terminar con un hash de 40 caracteres. Obviamente, esto ha perdido mucha información en el proceso. ¿Cómo podría "descifrar" 40 caracteres en 20GiB? ¡No existe la compresión que funciona tan bien! Pero esto también es una ventaja, porque para verificar la integridad de un archivo de 20 GiB, solo tiene que distribuir un hash de 40 caracteres.

Debido a que la información se pierde, muchos archivos tendrán el mismo hash, pero la característica clave de un criptográfica de hash(que es lo que está hablando) es que a pesar del hecho de que la información se pierde, es computacionalmente No es factible comenzar con un archivo y construir un segundo archivo ligeramente diferente que tenga el mismo hash. Cualquier otro archivo con el mismo hash sería radicalmente diferente y no se puede confundir fácilmente con el archivo original.

+0

¡esta es una gran respuesta! gracias. si conoces el algoritmo hash, ¿es posible retroceder? –

+0

No, no puedes retroceder, ese es el punto. La razón es porque el hashing pierde información. Lo edité en mi respuesta. –

+1

+1 por "hashing pierde información", ¡por eso no puedes volver atrás! – FrustratedWithFormsDesigner

2

No.Al menos no es fácil.

SHA1 todavía se considera criptográficamente seguro. Un algoritmo hash es seguro si es fácil de calcular de una manera, pero muy difícil (búsqueda exhaustiva) para calcular de otra manera. Es verdad que cada vez que encriptas una frase específica, dará como resultado el mismo hash, pero hay infinitas frases que también harán hash con ese mismo valor. La seguridad proviene de no saber cuáles son esas otras frases hasta que las ejecuta a través de la función SHA1.

7

No, no puede retroceder porque la función hash no conserva suficiente información.

Puede considerarlo como la función hash que asigna el texto original a un único y enorme número. Este mismo número también puede ser asignada a otros textos, así, a pesar de una buena función hash tendrá pocas colisiones:

alt text

Si el mensaje original se encripta entonces sí, podría volver.

1

Que encripta el mismo texto de la misma manera cada vez es el objetivo de un hash. Es una característica.

Si tengo una base de datos de códigos hash de contraseñas, entonces puedo verificar que haya ingresado la contraseña correcta al mezclarla y ver si el hash coincide con lo que tengo en la base de datos por usted. Pero si alguien robó mi base de datos de hash, no podrá averiguar cuál es su contraseña a menos que tropiece accidentalmente con algún texto simple que tenga ese valor.

1

En la criptografía se denomina resumen. Un resumen criptográficamente fuerte no permite obtener texto fuente basado en el valor de resumen sin algún conocimiento adicional. Un valor de resumen es el mismo para el mismo texto, por lo que puede calcular el resumen del texto y compararlo con un resumen publicado. Una aplicación popular es la verificación de contraseña, por lo que puede guardar el resumen en lugar de la contraseña. Esto es, por supuesto, propenso a un ataque de diccionario que ya exploró, y es por eso que se recomienda encarecidamente no utilizar palabras de diccionario para las contraseñas.

2

No, no puede regresar. Cuente cuántos hashes diferentes puede tener. Ahora cuente cuántas cuerdas diferentes puede tener. El primero es finito, el segundo es infinito. Hay muchas (infinitamente muchas, para ser precisas) cadenas que tienen la misma suma SHA1. El punto es, sin embargo, que es muy difícil encontrar dos textos que tengan el mismo hash.

Puede pensar en hashing como algo que acorta. Por ejemplo, tome una función de hash que sume todos los códigos ASCII de las letras en una cadena. No se puede decir lo que estaba antes de hash, simplemente conociendo la suma de los códigos ASCII de las letras. Es similar con SHA1, pero más complicado.

El objetivo de hash no es encriptar algo. El objetivo de hash es acortar algo, por lo que comprobar si dos cosas son iguales lleva menos tiempo. Ahora, ¿cómo puedes decir que dos cosas son iguales si sabes que muchas cosas tienen el mismo hash? Bueno, no puedes. Simplemente asumes que es tan raro que no ocurra.

Pero el hash no solo se trata de comprobar, ya que la comprobación de la igualdad usando hash generalmente se usa solo para confirmación/validación y no es determinista. Si ve que los hash son los mismos, entonces, basándose en los parámetros de una función de hashing en particular, puede estimar la probabilidad de que los objetos hash sean de hecho los mismos.

Y es por eso que el hecho de que una función de hash siempre arroje los mismos resultados para los mismos objetos es la característica más importante de una función de hash. Le permite validar y comparar objetos.