Hashing se refiere al proceso de generar una salida de tamaño fijo a partir de una entrada de tamaño variable. Este método se logra mediante el uso de fórmulas matemáticas conocidas como funciones hash (implementadas como algoritmos hash).

Aunque no todas las funciones hash incluyen sistemáticamente el uso de criptografía, las funciones hash criptográficas son la base de las criptomonedas. A través de estas características, las cadenas de bloques y otros tipos de sistemas distribuidos pueden alcanzar niveles significativos de integridad y seguridad de los datos.

Las funciones hash convencionales y criptográficas son deterministas. Esto significa que mientras la entrada no cambie, el algoritmo hash siempre producirá la misma salida (también conocida como hash o hash).

Normalmente, los algoritmos de hash de criptomonedas están diseñados como funciones unidireccionales, lo que significa que no pueden revocarse fácilmente sin una gran cantidad de tiempo y recursos informáticos. En otras palabras, es bastante fácil crear una salida a partir de una entrada, pero relativamente difícil ir en la dirección opuesta (generar la entrada sólo a partir de la salida). En general, cuanto más difícil es encontrar la entrada, más seguro se considera el algoritmo hash.


¿Cómo funciona una función hash?

Diferentes funciones hash producirán resultados de diferentes tamaños, pero los posibles tamaños de salida específicos de cada algoritmo hash son siempre constantes. Por ejemplo, el algoritmo SHA-256 solo puede producir una salida de 256 bits, mientras que SHA-1 siempre generará un hash de 160 bits.

Para ilustrar, apliquemos una función hash SHA-256 (utilizada para Bitcoin) a las palabras Binance y binance.

SHA-256

Entrada

Salida (256 bits)

binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec58339ddcae7f5e8b5da0c36624784b2


Observe cómo un cambio menor (aquí el caso de la primera letra) resultó en un valor hash totalmente diferente. Como utilizamos SHA-256, las salidas siempre tendrán un tamaño fijo de 256 bits (o 64 caracteres), independientemente del tamaño de la entrada. Además, no importa cuántas veces se aplique este algoritmo a estas palabras en particular, ambas salidas siempre serán las mismas.

Por otro lado, si utilizamos las mismas entradas mediante el algoritmo hash SHA-1, obtendríamos los siguientes resultados:

SHA-1

Entrada

Salida (160 bits)

binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


El acrónimo SHA significa Algoritmos Hash Seguros. Se refiere a un conjunto de funciones criptográficas que incluye los algoritmos SHA-0 y SHA-1, así como los grupos SHA-2 y SHA-3. SHA-256 forma parte del grupo SHA-2, junto con SHA-512 y otras variantes. Actualmente, sólo los grupos SHA-2 y SHA-3 se consideran seguros.


¿Por qué son importantes?

Las funciones hash convencionales tienen una amplia gama de 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 se utilizan ampliamente en aplicaciones de seguridad de la información, como la autenticación de mensajes y la impresión de huellas dactilares. Cuando se trata de Bitcoin, las funciones hash criptográficas 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 del hash se revela cuando se trata de procesar grandes cantidades de información. Por ejemplo, se puede ejecutar un archivo o 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 simplificada y condensada (hash). Esta técnica 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 tiene varias operaciones que implican hash, la mayoría de las cuales ocurren en el proceso de minería. De hecho, casi todos los protocolos de criptomonedas se basan en hash para vincular y condensar grupos de transacciones en bloques, así como para producir vínculos criptográficos entre cada bloque para, en última instancia, crear una cadena de bloques.


Funciones hash criptográficas

Una función hash que implementa técnicas criptográficas se puede definir como función hash criptográfica. Normalmente, romper una función hash criptográfica requiere una gran cantidad de intentos de fuerza bruta. Para que un individuo pueda revertir una función hash criptográfica, necesitaría adivinar cuál fue la entrada a través de muchos intentos y fallas hasta que se produjera la salida correcta. Sin embargo, también existe la posibilidad de que diferentes insumos produzcan exactamente el mismo resultado, en cuyo caso se produce colusión.

Técnicamente, una función hash criptográfica debe seguir tres propiedades para ser considerada efectivamente segura. Podemos describir esto como: resistencia a la colisión, resistencia a la preimagen y resistencia a la segunda preimagen.

Antes de discutir cada propiedad, resumamos su lógica en tres oraciones cortas.

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

  • Fuerza de la preimagen: es imposible revertir la función hash (encontrar la entrada de una salida determinada).

  • Segunda resistencia de preimagen: es imposible encontrar una segunda entrada que colisione con una entrada específica.


Resistencia a la colisión

Como se mencionó, se produce una colisión cuando diferentes entradas producen exactamente el mismo hash. Por lo tanto, una función hash se considera resistente a colisiones hasta 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 las colisiones cuando la posibilidad de encontrar una colisión es tan baja que requeriría millones de años de cálculo. Entonces, si bien no existen funciones hash libres de colisiones, algunas de ellas son lo suficientemente fuertes como para ser consideradas robustas (por ejemplo, SHA-256).

Entre los diferentes algoritmos SHA, los grupos SHA-0 y SHA-1 ya no se consideran seguros porque se encontraron colisiones. Actualmente, SHA-2 y SHA-3 se consideran resistentes a colisiones.


Resistencia previa a la imagen

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

Tenga en cuenta que esta propiedad es diferente de la anterior, porque aquí un atacante hipotético intentaría adivinar la entrada mirando una salida determinada. Una colisión, por otro lado, ocurre cuando alguien encuentra dos entradas diferentes que generan la misma salida, pero no importa específicamente qué entrada se utilizó.

La propiedad de resistencia a la preimagen es valiosa para proteger los datos porque simplemente aplicar hash a un mensaje puede demostrar su autenticidad, sin tener que revelar su contenido. 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 a la segunda preimagen

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

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

Por lo tanto, cualquier función hash resistente a colisiones también es resistente a ataques de segunda preimagen, porque estos siempre implicarán una colisión. Sin embargo, todavía se puede realizar un ataque de preimagen a una función resistente a colisiones, porque implica encontrar una única entrada a partir de una única salida.


Minería

Hay muchos pasos en la minería de Bitcoin que involucran funciones de hash, como verificar saldos, vincular la entrada/salida de las transacciones y hacer hash de 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 que los mineros deben realizar una gran cantidad de operaciones de hash para encontrar una solución válida para crear y agregar un bloque.

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

En este caso, la tasa de hash representa la cantidad de energía informática invertida 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 necesario para extraer un bloque se mantenga cercano a los 10 minutos. Par contre, si plusieurs mineurs décident d'arrêter de miner, en entraînant une baisse significative du taux de hachage, la difficulté de minage sera ajustée, ce qui facilitera le minage (jusqu'à ce que le temps de bloc moyen soit ramené à 10 minutos).

Tenga en cuenta que los mineros no necesitan verificar posibles colisiones porque hay múltiples hashes que pueden generar como salida válida (comenzando con un número específico de ceros). Por lo tanto, hay varias soluciones posibles para un determinado bloque, y los mineros deben encontrar una, según el umbral determinado por la dificultad de la minería.

Dado que la minería de Bitcoin es una tarea de alto costo, los mineros no tienen motivos para hacer trampa dentro del sistema, ya que esto resultaría en pérdidas financieras significativas. Cuantos más mineros hay en una cadena de bloques y, por lo tanto, cuanto más grande se vuelve, más fuerte se vuelve.


Para concluir

No hay duda de que las funciones hash son herramientas esenciales en informática, especialmente cuando se trata de cantidades masivas de datos. En combinación con la criptografía, los algoritmos hash pueden ser bastante versátiles, particularmente para seguridad y autenticación, de varias maneras. 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 definitivamente útil para cualquier persona interesada en la tecnología blockchain.