La aplicación de la función hash en la tecnología de Bitcoin
Las funciones de hash criptográficas son fundamentales para la tecnología de Bitcoin porque resuelven de manera ingeniosa el problema de la duplicidad de los registros en un libro de contabilidad.
La cadena de bloques se puede pensar como un libro de contabilidad en que no solo el contador, sino cualquiera de los participantes de la economía asociada, puede escribir un nuevo registro con las transacciones que han tenido lugar en los últimos diez minutos. Esta lista se conoce como bloque.
Con la finalidad de evitar que dos miembros de la red escriban el mismo bloque, Satoshi Nakamoto, el desaparecido creador de Bitcoin, tuvo que idear un mecanismo que garantizara que cada bloque se registrara solo una vez.
La solución consistió en crear una especie de competencia: cada vez que llega el momento de registrar un nuevo bloque, los nodos compiten para producir un hash. En simple, una función hash es una función matemática que, a partir de una cadena de caracteres (que puede ser básicamente cualquier cosa, desde una letra aislada hasta un archivo comprimido gigante), produce un número. En este caso, el número está escrito en hexadecimal y tiene 64 dígitos de longitud. El requisito para ganar la competencia es que el número producido debe contener una cierta cantidad de ceros al comienzo.
Como la lista de transacciones a registrar es la misma para todos los nodos que participan de la competencia, en principio, el output de la función hash es igual para todos los participantes. Las funciones matemáticas se caracterizan por eso: una cierta entrada siempre producirá la misma salida. Por ejemplo, si la función duplica la entrada, cada vez que entre un 3, saldrá un 6.
La implementación en Bitcoin, sin embargo, incorpora un mecanismo ingenioso para que la función hash produzca resultados distintos a partir de un mismo bloque. Antes de calcular el hash, se añade en el encabezado un número llamado nonce que los nodos van variando aleatoriamente de modo que el resultado de la función sea distinto en cada caso. Consideremos que basta con que el nonce varíe en un dígito para que el hash sea totalmente distinto. Como la entrada no es la misma, la salida tampoco.
La dificultad de esta competencia es que, como la función hash es fácil de calcular conociendo la entrada, pero fundamentalmente imposible de revertir (en términos matemáticos, decimos que la función no es invertible), no es posible determinar qué input produciría un cierto output. Por eso, los nodos no tienen otra opción más que probar una y otra vez hasta conseguir un resultado que satisfaga las condiciones impuestas por el software—la cantidad de ceros al comienzo del resultado. La competencia se reduce a una misión: encontrar un nonce adecuado.
Este tipo de innovación no solo ha mostrado un valor en términos monetarios. La tecnología que sustenta la blockchain se puede usar en cualquier materia donde tradicionalmente se habría recurrido a un contrato mediado por un tercero. Aunque ya existen múltiples implementaciones (e.g., smart contracts), es casi seguro que la blockchain seguirá transformando la manera en que interactuamos.