Hashing es el proceso de convertir una entrada de letras y caracteres de tamaño no fijo para producir una salida de tamaño fijo. Este proceso se realiza mediante fórmulas matemáticas como funciones hash (implementadas como algoritmos hash). 

Si bien no todas las funciones hash utilizan criptografía, las llamadas funciones hash criptográficas son el núcleo de las criptomonedas. Gracias a ellos, blockchain y otros sistemas distribuidos pueden alcanzar un alto nivel de integridad y seguridad de los datos.

Las funciones hash tradicionales, así como las funciones hash criptográficas, son deterministas. El determinismo significa que, mientras la entrada permanezca constante, el algoritmo hash siempre da la misma salida (también llamado representación o hash).

Normalmente, los algoritmos hash de criptomonedas están diseñados como funciones hash unidireccionales, lo que significa que no se pueden volver a convertir fácilmente sin consumir mucho tiempo y recursos computacionales. En otras palabras, es fácil crear una salida a partir de los datos de entrada, pero no es posible transformar en la dirección opuesta (para encontrar los datos de entrada sólo a partir del resultado de salida). En general, cuanto más difícil es encontrar los datos de entrada, más seguro es el algoritmo hash.


¿Cómo funciona la función hash?

Diferentes funciones hash producirán resultados de diferentes tamaños, pero el tamaño de los resultados que se pueden obtener siempre es fijo. Por ejemplo, el algoritmo SHA-256 solo puede producir salidas de 256 bits, mientras que el algoritmo SHA-1 siempre producirá una representación de 160 bits.

Para ilustrar, ejecutemos las palabras "Binance" y "binance" a través del algoritmo hash SHA-256 (el algoritmo utilizado en Bitcoin).

SHA-256

Aporte

Entrada (256 bits)

binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Se puede ver que un pequeño cambio (poner la primera letra en mayúscula) da como resultado un valor hash completamente diferente. Sin embargo, debido a que utilizamos SHA-256, las salidas siempre tienen un tamaño fijo de 256 bits (o 64 caracteres), independientemente del tamaño de los datos de entrada. Estos dos resultados siguen siendo los mismos sin importar cuántas veces ejecutemos estas dos palabras a través de este algoritmo.

Por el contrario, cuando ejecutamos estas entradas a través del algoritmo hash SHA-1, obtenemos los siguientes resultados:

SHA-1

Aporte

Salida (160 bits)

binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


SHA es el acrónimo de Secure Hash Algorithms. Este es un conjunto de funciones hash criptográficas, incluidas las funciones hash SHA-0, SHA-1 y los grupos de funciones hash SHA-2 y SHA-3. SHA-256, junto con SHA-512 y otras funciones hash, pertenece al grupo de funciones hash SHA-2. Actualmente, sólo los grupos SHA-2 y SHA-3 se consideran grupos de funciones hash seguras.


¿Cuál es la importancia de la función hash?

Las funciones hash tradicionales tienen muchos casos de uso, incluidas búsquedas en bases de datos, análisis de archivos grandes y gestión de datos. Por otro lado, las funciones hash criptográficas también se utilizan ampliamente en aplicaciones de seguridad de la información, como la autenticación de mensajes y la toma de huellas digitales. Cuando se utilizan en Bitcoin, las funciones hash criptográficas son una parte esencial del proceso de minería y también contribuyen a la generación de nuevas direcciones y claves.

El hash es realmente una herramienta poderosa cuando se trata de procesar grandes cantidades de información. Por ejemplo, podemos ejecutar un archivo grande o un conjunto de datos a través de una función hash y luego usar su salida para verificar rápidamente la precisión e integridad de los datos. Esto es posible debido a la naturaleza determinista de las funciones hash: la entrada siempre dará como resultado una salida (hash) concisa y simplificada. Gracias a esta técnica ya no será necesario almacenar y "memorizar" grandes cantidades de información.

El hashing es un proceso particularmente útil en la tecnología blockchain. La cadena de bloques de Bitcoin tiene una serie de operaciones que utilizan el proceso de hash, la mayoría de las cuales se realizan durante el proceso de minería. De hecho, casi todos los protocolos de criptomonedas se basan en hash para vincular y reducir grupos de transacciones en bloques y también para crear vínculos criptográficos entre cada bloque, creando una cadena de bloques única de manera efectiva.


Funciones hash criptográficas

Nuevamente, una función hash que implementa técnicas criptográficas se puede definir como función hash criptográfica. En general, romper una función hash criptográfica requiere esfuerzos de fuerza bruta. Para que una persona pueda "recuperar" una función hash criptográfica, tendría que adivinar cuál fue la entrada mediante prueba y error hasta que se produjera la salida correspondiente. Sin embargo, también es posible que diferentes insumos produzcan el mismo resultado, situación conocida como “colisión”.

Técnicamente, una función hash criptográfica debe tener las siguientes tres propiedades para considerarse segura. Esos tres atributos son anticonflicto, antiimagen y antisegunda imagen.

Antes de hablar de cada atributo, resumamos estos atributos.

  • Protección contra colisiones: dos entradas diferentes no pueden producir el mismo hash.

  • Inversión anti-imagen: el hash no se puede "recuperar" (la entrada no se puede determinar en función de la salida).

  • Anti-segunda inversión de imagen: no se puede encontrar una segunda entrada que entre en conflicto con una entrada determinada.


Anticonflicto

Como se describió, las colisiones ocurren cuando diferentes entradas producen el mismo hash. Por lo tanto, una función hash se considera a prueba de colisiones hasta que alguien encuentra una colisión. Tenga en cuenta que las colisiones siempre existirán en cualquier función hash, porque las entradas son infinitas, mientras que las posibles salidas son finitas.

En otras palabras, una función hash se considera a prueba de colisiones cuando la probabilidad de encontrar una colisión es muy baja y pueden ser necesarios millones de años de cálculo para encontrar una colisión. Por lo tanto, aunque ninguna función hash está completamente libre de colisiones, algunas funciones son lo suficientemente potentes como para considerarse resistentes a colisiones (por ejemplo, SHA-256).

Entre los muchos algoritmos SHA, los grupos SHA-0 y SHA-1 ya no son seguros porque se han encontrado conflictos en este grupo. Actualmente, los grupos SHA-2 y SHA-3 se consideran a prueba de conflictos.


Prevenir la manipulación de imágenes

La propiedad antiimagen está relacionada con el concepto de funciones unidimensionales. Una función hash se considera antirreversa cuando la probabilidad de encontrar los datos de entrada de una determinada salida es muy baja.

Este atributo es diferente del primer atributo; el atacante utilizará este atributo para intentar adivinar los datos de entrada en función del resultado de salida conocido. Mientras tanto, se produce una colisión cuando se encuentran dos datos de entrada diferentes que producen la misma salida, pero no importa qué datos de entrada se utilizaron.

La propiedad antiimagen es importante para la protección de datos, ya que sólo se necesita el hash de un mensaje para demostrar su autenticidad, sin revelar la información. De hecho, muchas aplicaciones web y proveedores de servicios almacenan y utilizan contraseñas como hashes en lugar de texto sin formato.


Antiinversión de la segunda imagen.

En pocas palabras, la segunda antiimagen se encuentra entre los dos primeros atributos. El segundo ataque de inversión de imagen ocurre cuando alguien encuentra una entrada particular que produce una salida que es idéntica a la salida de otra entrada que ya conoce.

En otras palabras, el segundo ataque de preimagen consiste en encontrar una colisión, pero en lugar de encontrar dos entradas aleatorias que produzcan el mismo hash, buscan una entrada que produzca el mismo hash con el hash de una entrada que ya conocen.

Por lo tanto, cualquier función hash que evite colisiones también evita ataques de inversión de segunda imagen, porque la inversión de segunda imagen también significa que se producirán colisiones. Sin embargo, todavía es posible realizar un ataque de inversión en una función anti-imagen, ya que eso significa encontrar una entrada única basada en una salida única.


Excavar

En Bitcoin, hay muchos pasos que utilizan funciones hash de minería, como verificar saldos, vincular entradas y salidas de transacciones y hacer hash de transacciones en un bloque para formar un árbol Merkle. Pero una de las razones por las que la cadena de bloques de Bitcoin es segura es que los mineros tienen que crear innumerables hashes para encontrar finalmente una solución válida para el siguiente bloque.

Específicamente, un minero debe probar varias entradas diferentes al generar un hash para su bloque potencial. En esencia, los mineros solo pueden validar su bloque si generan un hash de salida que comienza con unos pocos ceros. La cantidad de ceros determina la dificultad de la minería, y la dificultad varía según la tasa de hash de la red.

En este caso, la tasa de hash representa la cantidad de potencia informática utilizada para extraer Bitcoin. Si la tasa de hash de la red aumenta, el protocolo Bitcoin ajustará automáticamente la dificultad de la minería para que el tiempo promedio necesario para extraer un bloque se mantenga en 10 minutos. Por el contrario, si algunos mineros dejan de minar, lo que hace que la tasa de hash disminuya significativamente, entonces la dificultad de la minería se ajustará, haciendo que la minería sea más fácil (hasta que el tiempo promedio para minar un bloque vuelva a ser de 10 minutos).

Tenga en cuenta que los mineros no necesitan encontrar colisiones porque hay muchos hashes que pueden producir como resultados válidos (comenzando con una cierta cantidad de ceros). Por lo tanto, existen varias soluciones para extraer un bloque en particular, y los mineros solo necesitan encontrar una de ellas, de acuerdo con un umbral determinado por la dificultad de la minería. 

Debido a que la minería de Bitcoin es una tarea costosa, los mineros no tienen motivos para engañar al sistema, ya que eso conduciría a pérdidas financieras significativas. Cuantos más mineros se unan a una cadena de bloques, más fuerte se vuelve esa cadena de bloques.


Concluir

Se puede afirmar que las funciones hash son herramientas esenciales en informática, especialmente cuando se trata de grandes volúmenes de datos. Cuando se combinan con la criptografía, los algoritmos hash se pueden utilizar de forma flexible, proporcionando seguridad y autenticación de diversas formas. Debido a esto, las funciones hash criptográficas son esenciales para la mayoría de las redes de criptomonedas, por lo que comprender sus propiedades y mecanismos de funcionamiento será sin duda beneficioso para aquellos interesados ​​en la tecnología blockchain.