¿Qué es una función hash?

Una función hash es un algoritmo que recibe cualquier tipo de información (entrada) y la convierte en un código de un tamaño fijo (salida). Este código funciona como una “huella digital” o una identificación de la información original. Este tipo de funciones son usadas por la criptografía y, por ende, son una parte clave del funcionamiento de las criptomonedas. En este artículo vamos a repasar su funcionamiento, sus características y algunos ejemplos. 

contenido 12

¿Cómo funcionan los hash?

Durante los años fueron surgiendo diferentes tipos de funciones hash, sin embargo las bases son las mismas. La idea es partir de cualquier tipo de información, ya sea una palabra, un libro o una imagen, y generar un código de un tamaño fijo. Los procesos que utilizan las funciones hash para lograr esto varían, pero suelen estar basados en cálculos matemáticos complejos. 

Ya que toda esta teoría nos puede sonar confusa, vamos a llevarlo a la práctica.

La idea de cualquier función hash es la siguiente:

Entrada (cualquier información digital) → función hash → salida (código de tamaño fijo)

Ejemplo real del algoritmo que utiliza Bitcoin: SHA-256

Lemmy → SHA-256 → 0ced6126890dab8df066fdabd6791d3668549361d700cd9ea9662aa53c08eb83

Lemy → SHA-256 → bf4e9a285e916ec985ddec9a4f9cfe368153f94dbfc619351eca170fc0a2e9de

Hash del whitepaper de Bitcoin → 37c4c67a7266a5a6cdd938302b06f1794159e61929c1d0f2a2c9c7b8569e3462

Podemos ver que un pequeño cambio en la entrada entre el primer y el segundo ejemplo va a resultar en una salida totalmente distinta. Además, no importa si la entrada tiene 4 caracteres o nueve páginas como el whitepaper de Bitcoin, el código del algoritmo SHA-256 siempre va a tener 64 caracteres de largo. 

Características de la función hash

  • Resistente a colisiones

Cuando hablamos de funciones hash, una colisión sucede cuando dos entradas tienen la misma salida. Es decir que dos pedazos de información diferentes pasados por la función hash dan como resultado el mismo código. 

Este sería el ejemplo de una colisión:

Lemon → función hash → f464d7d71c06e47a535ce441aa202a

Cash   → función hash → f464d7d71c06e47a535ce441aa202a

“Lemon” y “Cash” son dos entradas distintas, sin embargo al pasar por la función hash nos da el mismo código. Aunque las funciones criptográficas no están libres de colisiones, las probabilidades de encontrar una son infinitesimales. Es por eso que a funciones como SHA-256 se las considera resistentes a colisiones. 

  • Unidireccionales 

Una de las características más importantes de las funciones hash es la unidireccionalidad. Esto implica que a partir de una entrada es fácil obtener la salida, pero es casi imposible hacer lo opuesto. Es decir que viendo solamente el código resultante, es muy difícil encontrar con que entrada corresponde. 

Esta particularidad es indispensable, por ejemplo, para obtener las direcciones de nuestras wallets. La entrada es la llave privada y la salida, o el código, es la llave pública. Como ya sabemos, no es posible usar la llave pública de una billetera y obtener la llave privada. De lo contrario, cualquiera que sepa nuestra dirección podría robar nuestras monedas. 

Llave privada → función hash → llave pública (facil de hacer)

Llave pública → función hash revertida → llave privada (prácticamente imposible)

¿Para qué se usan los hash?

  • Firmas digitales

Casi todos los sistemas de firmas digitales requieren el uso de funciones hash. Por ejemplo, para hacer un envío de BTC, nuestra wallet debe probarle a la red que somos dueños de las monedas que estamos queriendo mover. Para esto, la wallet va a combinar la información de la transacción con nuestra llave privada y pasarla por una función hash. Así se obtiene la firma digital de la transacción. Con ella, la red puede verificar que tenemos la llave privada correspondiente sin tener que verla. 

  • Proof of work

Las funciones hash también se utilizan para la minería. Los famosos problemas criptográficos que tienen que resolver los mineros para poder subir un bloque a la blockchain y recibir la recompensa no son más que funciones hash. 

El código que los mineros deben encontrar debe ser menor a un valor indicado por la red. Entonces, el trabajo de los mineros es generar diferentes bloques y calcular su código hasta obtener uno que cumpla con ese requisito. Mientras más potentes sean sus computadoras, más intentos van a poder hacer por segundo y más chances tienen de encontrar un bloque válido. 

  • Para unir bloques en la blockchain

Como su nombre lo dice, la blockchain es una cadena de bloques. Esto implica que cada bloque es un eslabón que está conectado al bloque anterior y al siguiente. Esta conexión se logra con funciones hash.

Cuando se quiere agregar un bloque nuevo a la blockchain, este debe contener el código del bloque anterior. Es decir que el código de un bloque se obtiene pasando por una función hash la combinación de todas sus transacciones y el código del bloque anterior.

De esta manera, si se produce un cambio en un bloque, también cambiaría su código y, consecuentemente, el código de todos los bloques siguientes. Por eso se dice que la blockchain es inmutable, porque cualquier mínimo cambio es evidente.

bXJ4rUg4BfrKSbMbCoF6EKe0StiTQoOiw3Ju3pbDcb4BDvfIxrWbTb6W6HrYjloqDrL pNyIiwZCdu9RWayAFnNRPFndLtl8TxLpLp3 5LZxJPcNDzi

Ejemplos de funciones hash

  • SHA-256

Como mencionamos antes, esta es la función hash utilizada por la red de Bitcoin. Las siglas SHA vienen de Secure Hash Algorithm o algoritmo seguro de hasheo. Este algoritmo fue creado por la National Security Agency (NSA) de Estados Unidos en el 2002 como un sucesor del SHA-1.

  • Keccak-256

Keccak-256 es el algoritmo que usa la red de Ethereum. Este nació a partir de una competencia que organizó el National Institute of Standards and Technology en el 2006. Aunque recién en el 2015 fue aceptado oficialmente como un estándar de hasheo. Aunque la lógica de Keccak es diferente a la del SHA-256, las características siguen siendo muy parecidas.