¿Puede el aprendizaje automático decodificar los hash SHA256?

43

Tengo un hash SHA256 de 64 caracteres.

Espero entrenar un modelo que pueda predecir si el texto sin formato utilizado para generar el hash comienza con 1 o no.

Independientemente de si esto es "posible", ¿qué algoritmo sería el mejor enfoque?

Mis pensamientos iniciales:

  • Genere una gran muestra de hashes que comience con un 1 y una gran muestra de hashes que no comience con un 1
  • Establezca cada uno de los 64 caracteres de un hash como parámetro para algún tipo de modelo de regresión logística sin supervisión.
  • Entrene al modelo diciéndole cuándo está bien / mal.
  • Esperemos poder crear un modelo que pueda predecir si el texto sin formato comienza con un 1 o no con una precisión lo suficientemente alta (y con un kappa decente)
John
fuente
22
FYI: Esto probablemente esté motivado por la minería de bitcoin.
ClojureMás principalmente el
55
"¿Cómo entrenaría un modelo que me permita viajar en el tiempo, independientemente de si esto es 'posible'?"
Konrad Rudolph,
13
@Joshua OP quiere invertir SHA-256. Lo dejaré publicar incluso si toma mil veces más pasos que SHA-256. También dejaré de existir, ya que la solución casi seguramente explota un error dentro de la estructura misma de la realidad para vencer a la lógica.
Konrad Rudolph el
15
Todos los hashes SHA256 pueden ser generados por una cadena que comienza con un "1".
Reactgular
8
@cgTag Lo siento pero eso está mal. La entrada controla la salida, de lo contrario no sería una función en primer lugar. Además, solo porque tenga una lista infinita de cosas, no significa que una de ellas comience con 1. Está tratando de probar una conjetura de criptografía conocida en un comentario SE. Nota: También creo que es cierto, pero afirmar que es cierto es engañoso. Si tiene razón, seguramente habrá un documento o alguna otra referencia.
Pedro A

Respuestas:

98

Esto no es realmente una respuesta estadística, pero:

No , no puede determinar el primer carácter del texto sin formato del hash, porque no existe el "texto sin formato" para un hash dado.

SHA-256 es un algoritmo hash. No importa cuál sea su texto sin formato, obtendrá una firma de 32 bytes, a menudo expresada como una cadena hexadecimal de 64 caracteres. Hay muchos más textos claros posibles que posibles cadenas hexadecimales de 64 caracteres: se puede generar el mismo hash a partir de cualquier número de textos claros diferentes. No hay razón para creer que el primer personaje sea / no sea un '1' es uniforme en todos los textos simples que producen un hash dado.

Chris H
fuente
21
Esta es hasta ahora (en mi opinión) la única respuesta correcta. Todas las otras respuestas parecen tratar más el problema de aprender la función hash que aprender a invertir el hash (la pregunta real). Todos parecen ignorar que el hash no es una función inyectiva.
Luca Citi
77
¿No podrías predecir la probabilidad de que el primer personaje sea uno? La falta de individualidad no es un problema poco común en el aprendizaje estadístico.
Matthew Drury
16
@MatthewDrury Dado que SHA256 está diseñado para hacer que todas las entradas sean igualmente probables para un hash dado, es de esperar que haya infinitas entradas que comiencen con 1, para cualquier hash dado . Entonces, si desea estimar la probabilidad, su mejor estimación será aproximadamente . 1256±ε
Konrad Rudolph el
12
Sí, de acuerdo. Solo quería señalar que la falta de inyectividad no es realmente un problema estructural con la aplicación del aprendizaje automático.
Matthew Drury
66
@IMil La razón por la que mencioné específicamente el hecho de que es una función hash no es sugerir que ninguna función hash podría revelar esa información, sino motivar la afirmación de que no existe el "texto sin formato". Claro, una función hash (mala) podría ser parcialmente reversible y decirnos claramente algo sobre todo el conjunto de textos simples que la producirían, pero no hay razón para creer eso de SHA-256.
Chris H
51

SHA256 está diseñado para ser lo más aleatorio posible, por lo que es poco probable que pueda separar los hashes que provienen de texto sin formato con prefijo 1 de aquellos que no lo hacen; simplemente no debería haber ninguna característica de la cadena hash que revelara esa información.

Pavel Komarov
fuente
55
"improbable" y "debería": eso es lo que el algoritmo me dirá. A primera vista parece imposible, pero me gustaría saber qué algoritmo y enfoque tomar para probar esta hipótesis.
John
24
+1 Se garantiza que cualquier tipo de "modelo de regresión logística no supervisada" no podrá hacerlo mejor que adivinar a menos que se le pueda proporcionar un número verdaderamente astronómico de casos. Este problema se está inclinando en los molinos de viento.
whuber
44
Puede intentarlo, pero el alumno tratará de encontrar una relación estadística diseñada intencionalmente para no existir.
Pavel Komarov
32
"Diseñado para ser lo más aleatorio posible" es un eufemismo. Específicamente, el diseño apunta a tener una dependencia máxima no lineal, donde cada bit de entrada influye en aproximadamente el 50% de los bits de salida, y cada bit de salida depende de aproximadamente el 50% de los bits de entrada. Esto se conoce como confusión y difusión . Aquí la tarea (recuperar solo el primer bit) es tan difícil como recuperar todo el mensaje.
MSalters
12
Creo que puede fortalecer "poco probable" en esta respuesta. El OP tiene cero posibilidades de aplicar técnicas basadas en estadísticas para predecir cualquier parte de un hash SHA256 a partir del contenido, o viceversa, incluso con una mejora detectable sobre las conjeturas aleatorias. La solución práctica es básicamente calcular previamente toda la población objetivo del contenido original.
Neil Slater
43

Independientemente de si esto es "posible", ¿qué algoritmo sería el mejor enfoque?

Lo siento, pero esa es una pregunta sin sentido. Si algo es imposible, entonces no puede buscar el mejor enfoque para el problema.

En este caso, esto definitivamente debería ser imposible porque el hashing es una función unidireccional: varias entradas (infinitas, de hecho) pueden producir la misma salida. Si el primer bit de entrada por sí solo influye de alguna manera en la probabilidad de un valor hash específico, esto significaría que el algoritmo hash es completamente defectuoso.

Ciertamente puede entrenar una red neuronal, un clasificador lineal, SVM y otras cosas para intentar la predicción. Y si podrá predecir de manera confiable la entrada de la salida para un cierto algoritmo de hash, esto demostraría que este algoritmo no tiene valor. Yo diría que para un algoritmo ampliamente utilizado como SHA256, esa posibilidad es muy baja. Sin embargo, es un enfoque razonable descartar rápidamente algoritmos de hashing nuevos, no probados y no probados.

IMil
fuente
66
Es (casi) irrelevante que un hash sea una función unidireccional: desde la parte superior de mi cabeza puedo pensar en muchas funciones unidireccionales que, sin embargo, me permiten inferir características de la entrada original ( , un famoso función unidireccional no lineal, me dice mucho sobre la entrada). sign(x)
Konrad Rudolph el
11
@KonradRudolph: "Función unidireccional" tiene un significado específico en este contexto que no es el significado en el que está pensando. sign(x)no es una función unidireccional en este sentido, porque encontrar preimágenes es trivial.
user2357112 es compatible con Monica el
44
Dicho esto, tampoco creo que la respuesta esté usando correctamente la "función unidireccional".
user2357112 es compatible con Monica el
1
@ user2357112 Gracias, no lo sabía. Solo conocía el significado como una función que es surjective pero no bijective. Esa es también la definición dada en la respuesta, que es a lo que me opuse.
Konrad Rudolph el
1
Sí, lo siento, soy un poco flojo con las definiciones. Sin embargo, creo que 'unidireccional' es más comprensible para los novatos que los términos más estrictos.
IMil
26

Si bien uno no puede probar un negativo con un ejemplo. Todavía siento que un ejemplo sería sugestivo; y quizás útil. Y muestra cómo uno (intentaría) resolver problemas similares.

En el caso de que quiera hacer predicciones binarias, utilizando características que son vectores binarios , un bosque aleatorio es una opción sólida. Supongo que este tipo de respuestas responde a la segunda parte de su pregunta: ¿qué es un buen algoritmo?

Queremos preprocesar las cadenas SHA256 en vectores binarios (booleanos), ya que cada bit es estadísticamente independiente, por lo que cada bit es una buena característica. Entonces eso hará que nuestras entradas sean 256 elementos booleanos.

Manifestación

Aquí hay una demostración de cómo se puede hacer todo usando la biblioteca Julia DecisionTree.jl .

Puede copiar pegar el siguiente en el indicador de julia.

using SHA
using DecisionTree
using Statistics: mean
using Random: randstring

const maxlen=10_000 # longest string (document) to be hashed.

gen_plaintext(x) = gen_plaintext(Val{x}())
gen_plaintext(::Val{true}) = "1" * randstring(rand(0:maxlen-1))
gen_plaintext(::Val{false}) = randstring(rand(1:maxlen))


bitvector(x) = BitVector(digits(x, base=2, pad=8sizeof(x)))
bitvector(x::AbstractVector) = reduce(vcat, bitvector.(x))

function gen_observation(class)
    plaintext = gen_plaintext(class)
    obs = bitvector(sha256(plaintext))
    obs
end

function feature_mat(obs)
    convert(Array, reduce(hcat, obs)')
end

########################################

const train_labels = rand(Bool, 100_000)
const train_obs = gen_observation.(train_labels)
const train_feature_mat = feature_mat(train_obs)

const test_labels = rand(Bool, 100_000)
const test_obs = gen_observation.(test_labels)
const test_feature_mat = feature_mat(test_obs)


# Train the model
const model = build_forest(train_labels, train_feature_mat)
@show model


#Training Set accuracy:
@show mean(apply_forest(model, train_feature_mat) .== train_labels)

#Test Set accuracy:
@show mean(apply_forest(model, test_feature_mat) .== test_labels)

Resultados

Cuando hice esto, me entrené en 100,000 cadenas ASCII aleatorias de hasta 10,000. Aquí están los resultados que vi:

Entrenar a la modelo

julia> const model = build_forest(train_labels, train_feature_mat)
Ensemble of Decision Trees
Trees:      10
Avg Leaves: 16124.7
Avg Depth:  17.9

Precisión del conjunto de entrenamiento:

julia> mean(apply_forest(model, train_feature_mat) .== train_labels)
0.95162

Exactitud del conjunto de prueba:

julia> mean(apply_forest(model, test_feature_mat) .== test_labels)
0.5016

Discusión

Entonces eso es básicamente nada. Pasamos del 95% en el conjunto de entrenamiento, a apenas más del 50% en el conjunto de prueba. Alguien podría aplicar pruebas de hipótesis adecuadas, para ver si podemos rechazar la
hipótesis nula , pero estoy bastante seguro de que no podemos. Es una pequeña mejora sobre la tasa de conjetura.

Eso sugiere que no se puede aprender. Si se trata de un bosque aleatorio, puede pasar de estar bien ajustado a golpear solo la tasa de conjetura. Los bosques aleatorios son bastante capaces de aprender entradas difíciles. Si hubiera algo que aprender, esperaría al menos un pequeño porcentaje.

Puedes jugar con diferentes funciones hash cambiando el código. Lo que podría ser interesante, obtuve básicamente los mismos resultados cuando utilicé el julia en la hashfunción incorporada (que no es una hsah criptográficamente segura, pero aún así es un buen hash, por lo que debería enviar cadenas similares). También obtuve básicamente los mismos resultados para CRC32c.

Lyndon White
fuente
15

Las funciones de hash son (por diseño) extremadamente adecuadas para hacer cualquier cosa de aprendizaje automático con ellas.

ML es esencialmente una familia de métodos para modelar / estimar funciones localmente continuas . Es decir, está tratando de describir algún sistema físico que, si bien puede tener ciertas discontinuidades, en cierto sentido, es en la mayoría del espacio de parámetros lo suficientemente suave como para que solo se pueda usar una muestra dispersa de datos de prueba para predecir el resultado para otros entrada. Para hacer eso, los algoritmos de IA necesitan descomponer de alguna manera los datos en una representación de base inteligente, para lo cual el entrenamiento ha sugerido que, por ejemplo, si ves tal y tal forma (que parece correlacionarse con el resultado de tal y tal convolución), entonces hay una buena posibilidad de que la salida debería tener en la región correspondiente tal o cual estructura (que puede ser nuevamente descrita por una convolución o algo así).

(Lo sé, muchos enfoques de ML no son para nada una convolución, pero la idea general es siempre la misma: tiene un espacio de entrada que es tan alto que es imposible muestrear exhaustivamente, por lo que encuentra una descomposición inteligente que le permite extrapolar resultados de una muestra comparativamente escasa).

Sin embargo, la idea detrás de una función de cifrado hash es que cualquier cambio en el texto sin formato debería dar como resultado un resumen completamente diferente. Entonces, no importa cómo descomponga la función, los estimadores locales no le permitirán extrapolar cómo las pequeñas fluctuaciones alrededor de esa parte influyen en el resultado. A menos, por supuesto, que procese toda la información de un conjunto limitado, pero esto no se llamaría aprendizaje automático: solo estaría construyendo una tabla de arcoíris .

a la izquierda
fuente
44
Al leer esto, se me ocurrió que a) para construir una tabla de arcoiris, necesita saber qué función hash usar, y b) podría ser posible que un algoritmo de aprendizaje automático identifique qué algoritmo está en uso, dado un tamaño suficientemente grande muestra de entradas y salidas (al menos si el algoritmo tiene fallas identificables). Entonces, si el problema original se reformulara para que se tratara de una función hash desconocida que necesita ser identificada, podría ser más interesante.
senderle
7

Esta es una pregunta interesante porque plantea problemas sobre lo que se considera "aprendizaje automático". Ciertamente hay un algoritmo que eventualmente resolverá este problema si se puede resolver. Dice así:

  1. Elija su lenguaje de programación favorito y decida una codificación que asigne cada cadena a un entero (potencialmente muy grande).

  2. Elija un número aleatorio y conviértalo en una cadena. Verifique si es un programa válido en su idioma. Si no es así, elija otro número e intente nuevamente. Si es así, inícielo, pause inmediatamente y agréguelo a una lista de programas pausados.

  3. Ejecute todos los programas pausados ​​por un tiempo. Si alguno de ellos se detiene sin producir una solución adecuada, elimínelos de la lista. Si uno produce una solución adecuada, ¡ya está! De lo contrario, regrese a 2 después de dejar que todos corran un poco.

No hay duda de que si tiene almacenamiento infinito y tiempo infinito, el algoritmo anterior eventualmente encontrará una buena solución. Pero eso probablemente no sea lo que quiere decir con "aprendizaje automático".

Aquí está el problema: si considera todos los problemas posibles, ¡ningún algoritmo de aprendizaje automático puede mejorar en promedio! Esto se conoce como el teorema de no almuerzo gratis . Demuestra que, entre todos los posibles problemas que podría arrojar a cualquier algoritmo de aprendizaje automático, el número que puede resolver rápidamente es muy pequeño.

Puede resolver esos problemas rápidamente solo porque se rigen por patrones que el algoritmo puede anticipar. Por ejemplo, muchos algoritmos exitosos asumen lo siguiente:

  1. Las soluciones pueden describirse mediante algunas series complejas de multiplicaciones matriciales y distorsiones no lineales, regidas por un conjunto de parámetros.

  2. Las buenas soluciones se agruparán en el espacio de parámetros, de modo que todo lo que tiene que hacer es elegir un vecindario de búsqueda, encontrar la mejor solución allí, cambiar su vecindario de búsqueda para que la mejor solución esté en el centro y repetir.

Obviamente, ninguno de estos supuestos es válido en general. El segundo es particularmente sospechoso. Y el almuerzo sin almuerzo nos dice que estas suposiciones ni siquiera son válidas la mayor parte del tiempo. De hecho, ¡casi nunca aguantan! Es solo nuestra buena suerte que se mantengan para ciertos problemas que realmente importan.

El problema que ha elegido está diseñado desde el principio para violar el supuesto 2. Las funciones hash están específicamente diseñadas para que entradas similares den salidas completamente diferentes.

Entonces, su pregunta, ¿cuál es el mejor algoritmo de aprendizaje automático para resolver este problema? Probablemente tenga una respuesta muy directa: búsqueda aleatoria.

senderle
fuente
Me pregunto cómo la computación cuántica afectará el teorema de no almuerzo gratis. Presumiblemente, la computación cuántica también está limitada por ella.
Max Vernon
1
@MaxVernon oh, interesante. Esperaría que todos los algoritmos cuánticos tengan la misma propiedad en comparación con otros algoritmos cuánticos . No sé si todos los algoritmos de optimización cuántica tienen una aceleración de caso promedio sobre los clásicos. ¡Podrían! Tengo una pregunta y respuesta que habla sobre un teorema de "almuerzo gratis" que podría ser relevante. (tldr; el almuerzo solo es gratis si ignoras parte del trabajo realizado ... pero me pregunto si eso cambia en el caso cuántico.)
remitente
5

Es casi imposible. Sin embargo, las personas observaron algunos patrones en SHA256 que podrían sugerir su distinción no aleatoria A para SHA256 usando Bitcoin (minería más rápida en el camino) . Su tldr:

"Para distinguir entre un hash de permutación aleatorio ideal y SHA256, haga un hash con una gran cantidad (~ 2 ^ 80) de bloques de 1024 bits candidatos dos veces, como se hace en Bitcoin. Asegúrese de que los bits de los bloques candidatos estén escasamente configurados (mucho menos que el 512 promedio esperado), de acuerdo con el protocolo de Bitcoin, descartar bloques candidatos que no cumplan con el estándar de "dificultad" de Bitcoin (donde los hashes resultantes comienzan con un gran número de 0) .Con el conjunto restante de candidatos de entrada válidos (467369 cuando este análisis se realizó), observe un conjunto particular de 32 bits en el bloque de entrada (ubicado donde Bitcoin tiene el nonce, bits de entrada 607-639). Observe que el número medio de bits establecido en el campo nonce está sesgado a la izquierda, es decir, menos del valor esperado de 16 bits establecido (media estimada 15.428) ".

Ver una discusión en lobste.rs . Una posible explicación es un sesgo introducido por los mineros.

IndieSolver
fuente
2
Esto es interesante. Pero la respuesta en lobste.rs probablemente sea correcta. Ese es un gran sesgo, fácilmente reconocible. La idea de que ha pasado desapercibida durante tanto tiempo es muy descabellada.
senderle
1
@senderle Para explotar el sesgo (si lo hay), uno debe idear un algoritmo (esencialmente un algoritmo de ML / optimización) que sea computacionalmente barato para que su propia sobrecarga cuando se implemente / mida en hardware de última generación. se compensa con la aceleración que proporciona. Mi suposición aproximada sería que el factor en términos de #hashtrials debería ser mayor que 10x para vencer a la fuerza bruta y sus implementaciones superoptimizadas. Las implicaciones pueden ser muy graves, especialmente para las personas que apuestan por los protocolos criptográficos y de seguridad.
IndieSolver
4

Contestaré con un programa. Para reducir los requisitos computacionales, usaré una variante de sha256 que llamo sha16, que son solo los primeros 16 bits de sha256.

#!/usr/bin/python3

import hashlib
from itertools import count

def sha16(plaintext):
    h = hashlib.sha256()
    h.update(plaintext)
    return h.hexdigest()[:4]

def has_plaintext_start_with_1(digest):
    """Return True if and only if the given digest can be generated from a
    plaintext starting with "1" first bit."""
    return True

def plaintext_starting_with_1(digest):
    """Return a plaintext starting with '1' matching the given digest."""
    for c in count():
        plaintext = (b'\x80' + str(c).encode('ascii'))
        d = sha16(plaintext)
        if d == digest:
            return plaintext

for digest in range(0x10000):
    digest = "%04x" % (digest,)
    plain = plaintext_starting_with_1(digest)
    print("%s hashes to %s" % (plain, digest))

Esto produce la salida:

b'\x8094207' hashes to 0000
b'\x8047770' hashes to 0001
b'\x8078597' hashes to 0002
b'\x8025129' hashes to 0003
b'\x8055307' hashes to 0004
b'\x80120019' hashes to 0005
b'\x8062700' hashes to 0006
b'\x8036411' hashes to 0007
b'\x80135953' hashes to 0008
b'\x8044091' hashes to 0009
b'\x808968' hashes to 000a
b'\x8039318' hashes to 000b
[...]

Dejaré la prueba completa como un ejercicio para el lector, pero confíe en mi palabra: hay una entrada que comienza con un "1" para cada posible resumen de 0000 a ffff.

También hay una entrada que no comienza con "1". Y hay uno que comienza con las obras completas de Shakespeare, también.

Esto es válido para cualquier función hash razonablemente buena, aunque mi prueba de fuerza bruta puede volverse computacionalmente inviable.

Phil Frost
fuente
En matemáticas, no me gusta tomar tu palabra . Su programa demuestra que su función sha16 es sobreyectiva, pero nada más. No proporcionó una prueba formal de que este programa pudiera probar la función SHA-256 real. Según su estilo de conclusión, la conjetura de Collatz se resolvería porque ya está resuelta por 32 bits y el programa puede ejecutarse fácilmente por más tiempo.
Roland Illig
4

Lo que describe es básicamente un ataque previo a la imagen. Está tratando de encontrar una entrada tal que, cuando está en hash, la salida tenga alguna propiedad como "un 1 inicial". *

Es un objetivo explícito de los hashes criptográficos para prevenir tales ataques previos a la imagen. Si puede realizar un ataque de este tipo, tendemos a considerar que ese algoritmo es inseguro y dejamos de usarlo.

Entonces, si bien eso significa que no es imposible, significa que su algoritmo de aprendizaje automático tendría que burlar simultáneamente a una gran fracción de los matemáticos del mundo y sus súper computadoras. Es poco probable que lo hagas.

Sin embargo, si lo hiciera, sería conocido como alguien que rompió un algoritmo criptográfico hash importante. ¡Esa fama vale algo!

* Técnicamente, un "primer ataque de preimagen" intenta encontrar una coincidencia para un hash específico. Sin embargo, para mostrar que un algoritmo hash tiene primero la resistencia al ataque de preimagen, generalmente muestran que no se puede encontrar ninguna información significativa sobre la entrada del hash.

Cort Ammon
fuente
2

La mayoría de las respuestas aquí le dicen por qué no puede hacer esto, pero aquí está la respuesta directa a:

Independientemente de si esto es "posible", ¿qué algoritmo sería el mejor enfoque?

Asumiendo que la entrada es suficientemente grande:

  1. Tome el recuento del conjunto de caracteres válidos.
  2. Tome el recíproco del número del paso 1.

Esa es la probabilidad de que la cadena de entrada comience con '1'. Ni siquiera necesita mirar la entrada. Si puede hacerlo mejor que eso, significaría que el hash está muy roto. Puede ahorrar muchos ciclos de CPU al intentar entrenar un algoritmo para elegir números aleatorios.

Podría entrenar un algoritmo y podría tener una respuesta diferente debido al sobreajuste. Eso es a menos que haya algo realmente mal con el algoritmo hash. El uso de este algoritmo va mal más a menudo que si simplemente selecciona un valor aleatorio.

JimmyJames
fuente
1

Las funciones de hash están diseñadas a propósito para que sean difíciles de modelar, por lo que (como ya se señaló) es probable que esto sea muy difícil. Sin embargo, cualquier debilidad en la función de hashing reducirá su entropía, haciéndola más predecible.

Independientemente de si esto es "posible", ¿qué algoritmo sería el mejor enfoque?

Un ejemplo útil es la función físicamente inaceptable , o PUF, que es análoga a una función de hashing de hardware. Por lo general, las variaciones de fabricación se utilizan a propósito para dar a cada PUF una respuesta ligeramente diferente para que su salida 'hash' sea diferente para una entrada dada. Sin embargo, las debilidades de diseño limitan la entropía, y dados suficientes pares de desafío-respuesta, a menudo es posible construir un modelo de caja negra de la PUF para que se pueda predecir la respuesta a un nuevo desafío nunca antes visto.

La regresión logística es el enfoque más utilizado para estos ataques de modelado, como en este artículo de Rührmair .

Los algoritmos genéticos (o estrategias más generalmente evolutivas) pueden ser un enfoque alternativo, ya que son aplicables a problemas que no son diferenciables y / o linealmente separables. También se discuten en el documento anterior.

4Oh4
fuente
1

251222562256

26402641

2256264(2256264)!

S=(2256264)
C=90100S
CSC

(1S1S11S2...1S(C1))(SC1SCSC2SC1SC3SC2...12)=(SC1)!S!

=(110(2256264)1)!(2256264)!
2(2263.99184665662260.6509677217)
210.13222373912260.6509677217

22562512

usuario96549
fuente
1

El problema es que el "aprendizaje automático" no es inteligente. Solo trata de encontrar patrones. En SHA-256, no hay patrones. No hay nada que encontrar. El aprendizaje automático no tiene ninguna posibilidad mejor que la fuerza bruta.

Si desea descifrar SHA-256 por computadora, la única posibilidad es crear inteligencia real , y dado que muchos humanos inteligentes no han encontrado una manera de crear SHA-256, necesita crear inteligencia artificial que sea mucho más alta que la de muchos humanos inteligentes. En ese momento, no sabemos si una inteligencia tan sobrehumana rompería SHA-256, probaría que no se puede descifrar o decidiría que tampoco es lo suficientemente inteligente (como los humanos). La cuarta posibilidad es, por supuesto, que tal inteligencia artificial sobrehumana ni siquiera se moleste, sino que piense en problemas que son más importantes (para él).

gnasher729
fuente