Hashing se refiere al proceso de crear una salida de tamaño fijo a partir de una entrada de tamaño variable. Esto se hace mediante el uso de fórmulas matemáticas conocidas como funciones hash (implementadas como algoritmos hash). 

Aunque no todas las funciones hash utilizan criptografía, las llamadas funciones hash criptográficas son el núcleo de las monedas digitales. Gracias a ellos, blockchain y otros sistemas distribuidos pueden alcanzar niveles significativos de integridad y seguridad de los datos.

Tanto las funciones hash tradicionales como las criptográficas son deterministas. El significado de que sea determinista es que mientras las entradas no cambien, el algoritmo hash siempre producirá la misma salida (también conocido como Digest o Hash).

Los algoritmos de hash de criptomonedas suelen estar diseñados como funciones unidireccionales, lo que significa que no se pueden deshacer fácilmente sin una cantidad significativa de tiempo y recursos computacionales. En otras palabras, es muy fácil obtener resultados a partir de insumos, pero relativamente difícil hacer lo contrario (obtener insumos sólo a partir de productos). En general, cuanto más difícil sea encontrar la entrada, más seguro será el algoritmo hash.


¿Cómo funcionan las funciones hash?

Diferentes funciones hash producen resultados de diferentes tamaños, pero los posibles tamaños de salida para cada algoritmo hash siempre son fijos. Por ejemplo, SHA-256 solo puede producir una salida de 256 bits, mientras que SHA-1 siempre genera un resumen de 160 bits.

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

SHA-256

Aporte

Salida (256 bits)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

Binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Tenga en cuenta que un pequeño cambio (en la forma de la primera letra) dio como resultado un valor hash completamente diferente. Pero como utilizamos SHA-256, la salida siempre tendrá un tamaño fijo de 256 bits (o 64 caracteres), independientemente del tamaño de la entrada. Además, no importa cuántas veces ejecutemos las dos palabras a través del algoritmo, ya que las dos salidas permanecerán constantes.

Por el contrario, si ejecutamos la misma entrada a través del algoritmo hash SHA-1 obtendremos los siguientes resultados:

SHA-1

Aporte

Salida (160 bits)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

Binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Vale la pena señalar que la palabra SHA es una abreviatura de Secure Hash Algorithms. Se refiere a un conjunto de funciones hash criptográficas que incluye los algoritmos SHA-0 y SHA-1 junto con combinaciones SHA-2 y SHA-3. SHA-256 es parte de la suite SHA-2, junto con SHA-512 y otras variantes. Actualmente sólo los bloques SHA-2 y SHA-3 se consideran seguros.


¿Por qué es importante?

Las funciones hash tradicionales tienen una amplia gama de casos de uso que incluyen búsquedas en bases de datos, análisis de archivos grandes y gestión de datos. Las funciones hash criptográficas, por otro lado, se utilizan ampliamente en aplicaciones de seguridad de la información, como la autenticación de mensajes y la toma de huellas digitales. Para Bitcoin, los hashes criptográficos son una parte esencial del proceso de minería y también desempeñan un papel en la generación de nuevas direcciones y claves.

El verdadero poder de la segmentación surge cuando se trata de cantidades masivas de información. Por ejemplo, un archivo o conjunto de datos de gran tamaño se puede ejecutar a través de una función hash y luego utilizar 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: las entradas siempre conducen a salidas simplificadas y condensadas (hash). Esta tecnología elimina la necesidad de almacenar y recordar grandes cantidades de datos.

El hashing es particularmente útil en el contexto de la tecnología blockchain. La cadena de bloques de Bitcoin contiene muchas operaciones que incluyen hash, la mayoría de las cuales se encuentran en el proceso de minería. De hecho, casi todos los protocolos de criptomonedas se basan en hash para vincular conjuntos de transacciones y condensarlas en bloques. Y también para crear enlaces criptográficos entre cada bloque, creando efectivamente una cadena de bloques.


Funciones hash criptográficas

Nuevamente, una función hash que utiliza técnicas criptográficas se puede definir como función hash criptográfica. Hackear una función hash criptográfica requiere innumerables ataques de fuerza bruta. Para que se invierta una función hash, deben adivinar cuál fue la entrada mediante prueba y error hasta que se produzca la salida correspondiente. Pero también es posible que diferentes insumos produzcan el mismo resultado, en cuyo caso se produce una “colisión”.

Técnicamente, una función hash criptográfica debe seguir tres propiedades para poder considerarse efectivamente segura. Podríamos describir estas propiedades como: resistencia a la colisión, resistencia a la preimagen y resistencia a la segunda preimagen.

Antes de discutir cada propiedad, resumamos su razonamiento en tres oraciones cortas.

  • Resistencia a la colisión: no es posible encontrar dos entradas diferentes que produzcan el mismo hash que la salida.

  • Resistencia previa a la imagen: la función hash no se puede "invertir" (buscar entradas a partir de salidas determinadas).

  • Resistencia de segunda preimagen: no se puede encontrar ninguna segunda entrada que colisione con otra entrada especificada.


Resistencia a colisiones

Como se mencionó anteriormente, se produce una colisión cuando diferentes entradas producen exactamente el mismo hash. Por lo tanto, la función hash es resistente a colisiones hasta el momento en que alguien encuentra una colisión. Tenga en cuenta que siempre existirán colisiones para cualquier función hash porque las posibles entradas son infinitas mientras que las posibles salidas son finitas.

En otras palabras, una función hash es resistente a colisiones cuando la probabilidad de encontrar una colisión es tan baja que requeriría millones de años de cálculo. Entonces, aunque no existen funciones hash libres de colisiones, algunas son lo suficientemente fuertes como para considerarse resistentes (por ejemplo, SHA-256).

Entre los diferentes algoritmos SHA, las combinaciones SHA-0 y SHA-1 ya no son seguras debido a colisiones. Actualmente, los bloques SHA-2 y SHA-3 se consideran resistentes a colisiones.


Resistencia de preimagen

La propiedad de resistencia de preimagen está relacionada con el concepto de funciones unidireccionales. Una función hash se considera resistente a la preimagen cuando existe una probabilidad muy baja de que alguien encuentre la entrada que produce una salida particular.

Teniendo en cuenta que esta característica difiere de la anterior porque un atacante intentará adivinar cuál fue la entrada mirando ciertas salidas. Por otro lado, una colisión ocurre cuando alguien encuentra diferentes entradas que generan la misma salida pero no importa qué entrada se utilizó.

La resistencia a la preimagen es valiosa en la protección de datos porque un simple hash de un mensaje puede demostrar su autenticidad sin tener que revelar ninguna información. En la práctica, muchos proveedores de servicios y aplicaciones web almacenan y utilizan hashes generados a partir de contraseñas en lugar de contraseñas de texto sin formato.


Resistencia de segunda preimagen

Para simplificar, podemos decir que la resistencia a la segunda preimagen se encuentra en algún punto entre las otras propiedades anteriores. Un ataque de segunda preimagen ocurre cuando alguien encuentra una entrada específica que genera el mismo resultado que otra entrada que ya conoce.

En otras palabras, un ataque de segunda preimagen implica encontrar una colisión, pero en lugar de buscar dos entradas aleatorias que generen el mismo hash como salida, buscan una entrada que genere el mismo hash generado por otra entrada específica.

Por lo tanto, cualquier función hash que sea resistente a colisiones también lo es a ataques de segunda preimagen, ya que estos últimos siempre significarán una colisión. Pero los atacantes aún pueden realizar un ataque temprano a una función resistente a colisiones porque implica encontrar una entrada a partir de una salida.


Minería

Hay varios pasos en el proceso de minería de Bitcoin que contienen funciones de hash, como verificar saldos, vincular entradas y salidas a transacciones y hacer hash de transacciones dentro de 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 el hecho de que los mineros necesitan innumerables hashes para encontrar una solución válida para el siguiente bloque.

Específicamente, el minero debe probar varias entradas diferentes al generar un valor hash para su bloque candidato. En esencia, solo podrán validar su bloque si generan un hash resultante que comience con una cierta cantidad de ceros. La cantidad de ceros determina la dificultad de la minería y varía según la tasa de hash asignada a la red.

En este caso, la tasa de hash representa la cantidad de potencia informática que se invierte en la extracción de Bitcoin. Si la tasa de hash de la red aumenta, el protocolo Bitcoin ajustará automáticamente la dificultad de extracción para que el tiempo promedio para extraer un bloque se mantenga cercano a los 10 minutos. Por otro lado, si muchos mineros deciden dejar de minar, lo que conducirá a una disminución significativa en la tasa de hash, se ajustará la dificultad de minado, lo que facilita el proceso de minado (hasta que el tiempo promedio de minado de bloques vuelva a 10 minutos).

Tenga en cuenta que los mineros no tienen que encontrar colisiones porque solo hay un número limitado de hashes que pueden generar como salidas válidas (comenzando con una cierta cantidad de ceros). Por lo tanto, hay muchas soluciones posibles para un bloque determinado y los mineros no tienen que encontrar una de ellas según el comienzo determinado por la dificultad de la minería. 

Dado que la minería de Bitcoin es muy cara, los mineros tienen pocas razones para engañar al sistema, ya que esto resultará en pérdidas financieras significativas. Cuantos más mineros se unan a la cadena de bloques, más poderosa se vuelve.


Pensamientos finales

No hay duda de que las funciones hash son herramientas esenciales en informática, especialmente cuando se trata de cantidades masivas de datos. Los algoritmos hash pueden ser versátiles cuando se combinan con la criptografía, proporcionando seguridad y autenticación de muchas maneras diferentes. Como tal, las funciones hash criptográficas son extremadamente importantes para casi todas las redes de criptomonedas. Por lo tanto, comprender sus propiedades y mecanismos de funcionamiento es definitivamente útil para cualquier persona interesada en la tecnología blockchain.