Hashing se refiere al proceso de crear una salida específica a partir de datos de entrada de diferentes tamaños. Esto se hace mediante fórmulas matemáticas, también conocidas como funciones hash (implementadas como algoritmos hash). 

No todas las funciones hash implican el uso de criptografía, sino sólo aquellas que están diseñadas específicamente para este propósito, las llamadas funciones hash criptográficas que subyacen a las criptomonedas. Gracias a su trabajo, las cadenas de bloques y otros sistemas distribuidos pueden alcanzar altos niveles de integridad y seguridad de los datos.

Tanto las funciones hash regulares como las criptográficas son deterministas. Ser determinista significa que mientras los datos de entrada no cambien, el algoritmo hash siempre producirá el mismo resultado (también conocido como resumen o hash).

Los algoritmos de hash en las criptomonedas están diseñados de tal manera que su función es unidireccional, lo que significa que los datos no se pueden devolver en orden inverso sin invertir mucho tiempo y recursos para realizar los cálculos. En otras palabras, es bastante fácil crear una salida a partir de una entrada, pero relativamente difícil revertir el proceso (generar una salida a partir de una entrada). Cuanto más difícil sea encontrar el valor de entrada, más seguro se considerará el algoritmo hash.


¿Cómo funciona una función hash?

Los diferentes tipos de funciones hash producen diferentes tamaños de salida, pero el tamaño de salida posible para cada algoritmo hash es siempre constante. Por ejemplo, el algoritmo SHA-256 solo puede producir resultados en formato de 256 bits, mientras que SHA-1 siempre genera un resumen de 160 bits.

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

SHA-256

Datos de entrada

Resultado (256 páginas)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

Binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Tenga en cuenta que un cambio menor (caso de la primera letra) resultó en un valor hash completamente diferente. Como utilizamos SHA-256, los datos de salida siempre tendrán un tamaño fijo de 256 bits (o 64 caracteres), independientemente del tamaño de la entrada. Además de esto, no importa cuántas veces ejecutemos estas dos palabras a través del algoritmo, las dos salidas no cambiarán ya que son constantes.

De la misma forma, si ejecutamos los mismos datos de entrada a través del algoritmo hash SHA-1, obtendremos los siguientes resultados:

SHA-1

Datos de entrada

Resultado (160 páginas)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

Binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Vale la pena señalar que el acrónimo SHA significa Algoritmos Hash Seguros. Se refiere a un conjunto de funciones hash criptográficas que incluye algoritmos como SHA-0 y SHA-1 junto con los grupos SHA-2 y SHA-3. SHA-256 forma parte del grupo SHA-2, junto con SHA-512 y otros análogos. Actualmente, sólo los grupos SHA-2 y SHA-3 se consideran seguros.


¿Por qué esto importa?

Las funciones hash convencionales tienen una amplia gama de casos de uso, incluida la búsqueda en bases de datos, el análisis de archivos grandes y la gestión de datos. A su vez, las funciones hash criptográficas se utilizan ampliamente en aplicaciones de seguridad de la información para la autenticación de mensajes y la toma de huellas digitales. Cuando se trata de Bitcoin, las funciones hash criptográficas son una parte integral del proceso de minería y también desempeñan un papel importante en la generación de nuevas claves y direcciones.

Hashing muestra todo su potencial cuando se trabaja con grandes cantidades de información. Por ejemplo, puede ejecutar un archivo grande o un conjunto de datos a través de una función hash y luego usar la 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 comprimida simplificada (el hash). Este método elimina la necesidad de almacenar y recordar grandes cantidades de datos.

El hashing es particularmente útil con respecto a la tecnología blockchain. Hay varias operaciones que se llevan a cabo en la cadena de bloques de Bitcoin, que incluyen hash, la mayor parte de las cuales es minería. De hecho, prácticamente todos los protocolos de criptomonedas se basan en hash para vincular y comprimir grupos de transacciones en bloques, así como para crear una relación criptográfica y construir de manera eficiente una cadena de bloques.


Funciones hash criptográficas

Nuevamente, tenga en cuenta que una función hash que utiliza métodos criptográficos se puede definir como una función hash criptográfica. Para descifrarlo, serán necesarios innumerables intentos de selección de números por fuerza bruta. Para revertir una función hash criptográfica, deberá seleccionar los datos de entrada mediante prueba y error hasta obtener el resultado adecuado. Sin embargo, es posible que diferentes entradas produzcan la misma salida, en cuyo caso se produce una colisión.

Técnicamente hablando, una función hash criptográfica debe cumplir tres propiedades para ser considerada segura. Podemos describirlas como: resistencia a la colisión y resistencia a la búsqueda de preimagen primera y segunda.

Antes de comenzar a analizar cada propiedad, resumamos su lógica en tres oraciones cortas.

  • Resistencia a la colisión: es imposible encontrar dos entradas diferentes que produzcan un hash similar a la salida.

  • Resistencia a la búsqueda de la primera preimagen: ausencia de un método o algoritmo para la restauración inversa de la función hash (encontrar una entrada a partir de una salida determinada).

  • Resistencia a buscar una segunda preimagen: es imposible encontrar una segunda entrada que se cruce con la primera.


Resistencia a la colisión

Como se mencionó anteriormente, se produce una colisión cuando diferentes entradas producen el mismo hash. Por lo tanto, la función hash se considera resistente a colisiones hasta que alguien detecta una colisión. Tenga en cuenta que siempre existirán colisiones para cualquiera de las funciones hash, debido al número infinito de entradas y al número limitado de salidas.

Por lo tanto, una función hash es resistente a colisiones cuando la probabilidad de detectarla es tan baja que requeriría millones de años de cálculo. Por esta razón, aunque no existen funciones hash libres de colisiones, algunas de ellas son tan fuertes que pueden considerarse robustas (por ejemplo, SHA-256).

Entre los distintos algoritmos SHA, los grupos SHA-0 y SHA-1 ya no son seguros porque se han detectado colisiones en ellos. Actualmente, sólo los grupos SHA-2 y SHA-3 se consideran los más seguros y resistentes a colisiones.


Resistencia a la primera búsqueda de preimagen

Esta propiedad está estrechamente relacionada con el concepto de funciones unidireccionales. Se considera que una función hash es resistente a la búsqueda de la primera imagen previa siempre que exista una probabilidad muy baja de que alguien pueda encontrar una entrada que pueda generar una salida particular.

Tenga en cuenta que esta propiedad es diferente de la anterior, ya que el atacante necesitaría adivinar la entrada en función de la salida específica. Este tipo de colisión ocurre cuando alguien encuentra dos entradas diferentes que producen el mismo código de salida, sin dar ningún significado a los datos de entrada que se utilizaron para producirlo.

La solidez de la primera imagen previa es valiosa para la seguridad de los datos porque un simple hash de un mensaje puede demostrar su autenticidad sin tener que revelar información adicional. En la práctica, muchos proveedores de servicios y aplicaciones web almacenan y utilizan hashes generados a partir de contraseñas en lugar de utilizarlos en formato de texto sin formato.


Resistencia a la segunda búsqueda de preimagen

Para simplificar su comprensión, podemos decir que este tipo de estabilidad se encuentra en algún punto entre las otras dos propiedades. El segundo ataque de preimagen consiste en encontrar una entrada específica que pueda usarse para generar una salida que fue generada originalmente por otras entradas conocidas.

En otras palabras, un segundo ataque de preimagen implica la detección de colisiones, pero en lugar de encontrar dos entradas aleatorias que generen el mismo hash, el ataque tiene como objetivo encontrar entradas que puedan usarse para recrear el hash que fue generado originalmente por la otra entrada.

Por tanto, cualquier función hash que sea resistente a colisiones también lo será a dichos ataques, ya que este último siempre implica una colisión. Sin embargo, todavía es posible realizar un ataque de primera preimagen en una función resistente a colisiones, ya que implica buscar una única entrada a través de una única salida.


Minería

Hay muchos pasos en la minería que se llevan a cabo utilizando funciones hash, estos incluyen verificar saldos, vincular entradas y salidas de transacciones y aplicar hash a todas las transacciones en un bloque para formar un árbol Merkle. Pero una de las principales razones por las que la cadena de bloques de Bitcoin es segura es porque los mineros deben realizar tantas operaciones de hash como sea posible para, en última instancia, encontrar la solución correcta para el siguiente bloque.

Un minero debe intentar generar varias entradas diferentes al crear un hash para su bloque candidato. Será posible verificar un bloque solo si la salida en forma de hash se genera correctamente y comienza con una cierta cantidad de ceros. La cantidad de ceros determina la dificultad de la minería y varía según el hashrate de la red.

En este caso, el hashrate representa la cantidad de potencia de tu computadora que inviertes en la extracción de Bitcoin. Si el hashrate comienza a aumentar, el protocolo Bitcoin ajustará automáticamente la dificultad de extracción para que el tiempo promedio necesario para extraer un bloque no supere los 10 minutos. Si varios mineros deciden dejar de minar, lo que resulta en una disminución significativa en la tasa de hash, la dificultad de minado se ajustará para aliviar temporalmente el esfuerzo computacional (hasta que el tiempo promedio de generación de bloques vuelva a 10 minutos).

Tenga en cuenta que los mineros no necesitan buscar colisiones, debido a la cantidad limitada de hashes que pueden generar como salida válida (comenzando con una cierta cantidad de ceros). Así, existen varias soluciones posibles para un bloque determinado y los mineros deben encontrar sólo una de ellas, según un umbral determinado por la dificultad de la minería. 

Dado que la minería de Bitcoin es una tarea tan costosa, no hay razón para que los mineros engañen al sistema, ya que esto resultará en pérdidas financieras significativas. En consecuencia, cuantos más mineros se unan a la cadena de bloques, más grande y más fuerte se volverá.


Conclusión

No hay duda de que las funciones hash son una de las herramientas fundamentales de la informática, especialmente cuando se trabaja con grandes cantidades de datos. Cuando se combinan con la criptografía, los algoritmos hash pueden ser bastante versátiles y ofrecen seguridad y una variedad de métodos de autenticación. Por lo tanto, las funciones hash criptográficas son vitales para casi todas las redes de criptomonedas, por lo que comprender sus propiedades y mecanismos de funcionamiento es ciertamente útil para cualquier persona interesada en la tecnología blockchain.