icono telefono  320 447 37 16                       icono skype   electronicaplugandplay

Resolver este problema puede hacerte Billonario!! SHA-256

banner hash

Si usas Whatsapp, Facebook, Tik Tok, cualquier red social o servicio de mensajería instantánea o productos digitales (de seguro que todos los hacemos en 2024), haces transacciones bancarias electrónicamente, tienes alguna contraseña, compartes archivos o estas en el mundo cripto, esta información no la puedes pasar por alto porque además hay una multimillonaria recompensa en dólares si es que puedes resolver el reto, si leíste bien “Recompensa Multimillonaria en dólares”.

 

La Criptografía: Tu Escudo en el Ciberespacio

Cuando enviamos información en la web ya sea porque estamos en contacto con nuestros amigos, familiares, seguidores en cualquier red social, compramos algo online, abrimos nuestro correo electrónico, enviamos dinero o archivos/ficheros a un familiar o amigo desde nuestro móvil o simplemente ingresamos con usuario y contraseña a cualquier portal o plataforma, estamos usando criptografía en los mensajes.

 

imagen 1

La criptografía no es algo nuevo, desde la antigüedad esta existe pues en aquellos tiempos se querían resguardar el intercambio de mensajes en el comercio, la guerra o secretos técnicos o científicos. En la actualidad usamos la criptografía, entre otras cosas, para evitar que descifren la información que intercambiamos en internet o la nube. En términos simples, la criptografía es como un escudo que coloca una capa de encriptación alrededor de nuestra información, manteniéndola a salvo de miradas indiscretas.

Imaginemos esto: A quiere enviar el mensaje "5" a B, pero C, con propósitos desconocidos, desea interceptar ese mensaje para conocer su información. Entonces, A toma una decisión ingeniosa: suma "3" al mensaje antes de enviarlo, pero solo B, gracias a un acuerdo previo, sabe cuál es el valor de ese aumento. Como resultado, B recibe el mensaje "8", mientras que C está completamente confundido y/o despistado y no puede descifrar el mensaje real. En este caso, decimos que el mensaje fue encriptado o codificado utilizando un valor de "3", que actúa como la clave de encriptación. A suma 3 y B resta 3 para enviar y recibir el mensaje, respectivamente e interpretar el mensaje.

imagen 2

Hay miles, quizás millones, de formas de hacer encriptación, pero en este tutorial hablaremos de una muy utilizada la cual se hace empleando el algoritmo HASH. Recuerda que puedes aprender mucho más sobre algoritmos y adentrarte en el mundo de la programación tomando nuestro Curso de Algoritmia Online en Vivo.

La criptografía y la encriptación no se usan exclusivamente para proteger la información transmitida si no, por ejemplo, también para verificar que el mensaje haya llegado correctamente al destino como es el caso de la paridad o algo un poco más sofisticado como lo es el CHKSUM tal como lo aprendes en nuestro Curso de Algoritmia Online en Vivo.

 

La Función Criptográfica HASH

Aunque no se puede atribuir el desarrollo o formulación de la función HASH a un individuo u organización en particular, pues esta se fue desarrollando a lo largo de la primera mitad del siglo XX por múltiples esfuerzos individuales y de organizaciones, si podemos mencionar  que esta función en su versión moderna fue desarrollada en 1989 por Ronald Rivest que en aquel entonces se denominó MD2.

imagen 3

La función  HASH consiste de un algoritmo matemático-lógico determinístico de un solo sentido que transforma cualquier bloque de datos en una nueva serie de caracteres, generalmente en base hexadecimal, con una longitud fija sin importar la cantidad de datos de entrada. Dicha longitud dependerá de la versión de la función criptográfica HASH. El nombre HASH viene del inglés  “Picadillo”  porque precisamente la cadena de caracteres de datos originales es partida o dividida en muchas partes para poder calcular la cadena hexadecimal encriptada.
 
Veamos la versión del algoritmo matemático más sencillo que puede aplicarse a la función HASH mas primitiva.

Supongamos que asignamos un número a cada letra del alfabeto español (en mayúsculas), iniciando en 1 y finalizando con 27: A=1, B=2, C=3,………, X=25, Y=26, Z=27. Ahora el bloque de datos que queremos transmitir es EPP, por tanto bajo nuestra lógica lo que transmitiremos es 5-17-17, o mejor 51717. Pero, como dijimos antes esta nueva serie de caracteres se envía en formato hexadecimal, entonces lo que transmitiríamos sería: CA05, con lo cual afirmamos que introdujimos el bloque de entrada EPP a la función HASH y obtuvimos un “hash” CA05 de longitud 4 como salida, obviamente hubo una encriptación y quien no conozca que codificación usamos no podrá interpretar el mensaje EPP.
 
Surge una pregunta respecto al ejemplo anterior, ¿por qué no numerar las letras del alfabeto de 0 a 26? Y la razón no está a primera vista, pero pensemos en esto: que tal que mi mensaje sea A, o sea AA o sea AAA. Pues lo que sucederá es que mi hash siempre será 0. A partir de esto, podemos definir lo que es una colisión es decir hasta donde mi algoritmo elegido será útil?, para cuántos mensajes o combinaciones de letras mayúsculas podrá servirme o cual es el espacio muestral de hashes resultantes que puedo tener?. Una colisión se produce cuando para dos mensajes distintos se obtiene un mismo número hash.

Llamemos a la unión de una o más letras mayúsculas y combinaciones posibles de ellas el conjunto “Mensajes” y a todos los códigos hash de longitud 4 producidos el conjunto “hashes”.
 
imagen 4
 
En términos cartesianos las abscisas son los hashes y las ordenadas los Mensajes, así las cosas si dos ordenadas tienen una misma abscisa pues no tendríamos una función, en este caso no sería una función HASH. Si no recuerdas esta terminología o no la conocías te invitamos a profundizar más sobre esto en nuestro Curso de Matemáticas para Tecnología Online en Vivo.

En términos  formales se define la función HASH más sencilla como:
 
formula hash 1 
Para una cadena de caracteres de mensaje S de longitud n.
 
Donde p y m son números enteros positivos y que podemos condensar de la siguiente manera, de acuerdo a lo aprendido en nuestro Curso de Matemáticas para Tecnología Online en Vivo:
formula hash 2
 
Que se conoce como Función Polinómica Hash de Desplazamiento.
 
Generalmente se toma p como el número primo mayor más próximo al número de caracteres del alfabeto de entrada con el que se construyen los mensajes s. Para nuestro ejemplo del mensaje EPP se escogería p = 29. Mientras que m debería ser un numero grande, ya que la probabilidad de que dos cadenas aleatorias colisionen es aproximadamente de 1/m. A veces se elige m = 2^64, ya que entonces el desbordamiento de enteros de 64 bits funciona exactamente como la operación módulo. Sin embargo, existirá un método que genere cadenas en colisión (que funcionan independientemente de la elección de 'p'). Por lo tanto, en la práctica, no se recomienda m = 2^64 sino que se elige como un numero entero primo muy grande. De la Función Polinómica Hash de Desplazamiento podemos concluir que solo se producirá un número entero como resultado por tanto será de longitud 1 por esto es la función HASH más sencilla.

Bueno, es hora de aplicar lo anterior a nuestro ejemplo de la cadena de caracteres s=EPP. Asumiremos p = 29 y m = 2^5 para simplificar las cosas, entendiendo que existen infinitas opciones tanto para p como para m y allí es donde radica la belleza de este algoritmo. Así las cosas tenemos:
 
ejemplo hash decimal

Que en base hexa es 17.

 

Tipos de algoritmos HASH

Como se mencionó en varias ocasiones anteriormente existe una infinidad de procedimientos y alternativas para lograr un algoritmo HASH, pero a nivel de estándar de la industria tenemos estos como los más importantes: 

tipos de hashes

Nos centraremos en el tipo de algoritmo SHA-2 variante SHA-256 y para resumirlo lo denominaremos a partir de ahora como SHA-256.

SHA-256

La importancia de este algoritmo radica en que actualmente es muy utilizado para infinidad de encriptación para envío de información en la web y en el mundo de las criptomonedas. Su sigla SHA hace referencia a “Secure HASH Algorithm” o Algoritmo HASH Seguro y es uno de los más usados por su equilibrio entre seguridad y coste computacional de generación, pues es un algoritmo muy eficiente para la alta resistencia de colisión que posee. SHA-256, como se explicó anteriormente al ser algoritmo HASH, es una función determinística de un solo sentido y siempre tiene una longitud fija, en este caso de 64 caracteres hexadecimales que corresponden a 256 bits o 32 bytes.

Como vimos anteriormente, podemos deducir que mi conjunto o espacio muestral de hashes tiene 2^256 hashes que equivalen a:
 
hashes en SHA 256

Así, para comprender la magnitud de este número puedes intentar algo interesante: en la web hay muchas opciones que te permiten convertir texto o cadena alfanumérica a SHA-256, intenta y tal vez la salida SHA-256 sea un número que jamás ha sido visto en la historia humana. De esa magnitud estamos hablando!

Para resumir el funcionamiento de SHA-256 me centraré en criptomonedas. SHA-256 se utiliza para el proceso de minería, es decir creación de bitcoins, y, también para generar las direcciones de esos bitcoins. Así todos los nodos de la red blockchain tendrán una copia del HASH de cada bitcoin.

 

La Recompensa Multimillonaria en Dólares

recompensa

 

Tal vez en la lectura hay una palabra que has pasado por alto “Determinístico”, si lo sabes bien por ti, pero si no te lo resumo así: una función determinística es en un solo sentido. Para nuestro caso una entrada produce una salida pero siempre la misma entrada da el mismo resultado de salida, adicionalmente se agregó la frase “en un solo sentido”, pues bien la noticia es que nadie ha logrado ir en el sentido contrario, es decir con una salida obtener la entrada original. Si tomaste nuestro Curso de Algoritmia Online en Vivo sabes que se puede obtener un f(x) para un x especifico y también obtener uno o varios x de entrada para un f(x) específico por lo que desde el punto de vista lógico-matemático esto debería ser posible para el algoritmo SHA-256. Adivina qué? Hasta la fecha nadie lo ha logrado!

Se han invertido millones de millones de dólares y nadie ha conseguido obtener un algoritmo inverso para SHA-256. Puede ser posible encontrar un algoritmo tal que, dada una salida SHA-256 S, el algoritmo te permitiría construir una entrada I de manera que su SHA-256(I) sea igual a S. Pero existen 2²⁵⁶ posibles salidas SHA-256, lo que hace imposible encontrar la entrada correcta I en un período de tiempo admisible, incluso después de combinar toda la potencia computacional que tenemos en todo el mundo. Te preguntarás pero con un computador cuántico se podría, si claro el problema es que no existe aún ninguno capaz de hacerlo.


Por qué resolverlo valdría la pena?


Porque si puedes invertir un hash SHA-256, por ejemplo, podrás minar bitcoins más rápido que cualquier persona en el planeta. Para minar bitcoins, debes encontrar una entrada que produzca una salida SHA-256 con alrededor de 70 ceros al principio. Dado que no hay una fórmula conocida para hacer esto, el único método que tenemos es un algoritmo de fuerza bruta. Es simplemente probar miles de millones de millones de millones de entradas diferentes hasta encontrar algo que funcione.

Ahora, encontrar el mismo hash con una entrada es imposible, pero para minar bitcoins, solo necesitas que coincida con una pequeña parte de él. Así que es posible. De esta manera, en casi 10 minutos, alguien, en algún lugar, se gana a sí mismo 12.5 bitcoins. Eso es casi 432,498 dólares estadounidenses.

Ahora, piensa en esto. Si tuvieras un algoritmo para encontrar una entrada que genere la salida que coincide con el hash dado, literalmente estarías ganando miles de millones en poco tiempo.

Y esto solo para el ejemplo de bitcoins, pero como hablamos desde inicio imagina el potencial que esto tendría para las miles de actividades que se hacen en la web.
Si alguien logra esto estaríamos hablando de que ROMPERIA SHA-256!
 
 

Qué se está haciendo actualmente para romper SHA-256?

rompiendo SHA 256

A día de hoy se tiene la noticia de que 24 investigadores chinos afirmaron que podrían factorizar un número de 48 bits utilizando una computadora cuántica de 10 qubits. Esto podría ser crucial para romper el algoritmo de cifrado RSA que sustenta gran parte de la comunicación en internet. Pero no es suficiente para romper SHA-256.

Estos investigadores afirman que pueden utilizar computadoras cuánticas para resolver un paso previamente insoluble en el método de Schnorr para factorizar grandes números primos. Resolver los factores primos de un número grande es un paso crucial para romper el algoritmo de cifrado RSA y SHA-256.

Aunque el documento es teóricamente sólido, los expertos dicen que es difícil demostrar que las computadoras cuánticas actuales mejorarán el proceso. "En ausencia de cualquier análisis que muestre que será más rápido, sospecho que el escenario más probable es que no sea una mejora significativa", dijo el científico del MIT, Peter Shor.

Esperamos esta información te haya sido entretenida, interesante y/o útil. No olvides dejarnos tus comentarios en nuestras redes sociales y regalarlos un me gusta o un me encanta. También, si te ha gustado por favor compártelo!

      youtube logo

Enero/2024.