Las Funciones Hash Criptográficas: Una Mirada Profunda Al Funcionamiento Del Hashing En Blockchain
Este capítulo está aquí a petición de los lectores en sus comentarios. Es una mirada profunda al funcionamiento del hashing. Esta sección va a ser bastante técnica y no tienes que leerla para entender los principios de la blockchain. Perfectamente puedes saltar al próximo capítulo: “Bitcoin, la Madre de todas las Blockchain” si este te resulta demasiado técnico. Aunque no lo leas, serás capaz de comprender el resto del libro. Para aquellas almas osadas que quieran sumergirse en el hashing, comencemos.
¿Qué es una función hash criptográfica?
La minería de Bitcoin y otros esquemas de prueba de trabajo usan mucho las funciones hash criptográficas. Por tanto, cualquiera que desee comprender en profundidad la blockchain tiene que aprender sobre hashing criptográfico.
Ya sabemos que una función hash criptográfica toma una serie de caracteres, sin importar cuán larga sea, y las transforma en una sucesión de caracteres aleatorios con una longitud estándar. (En el ejemplo que veremos, la longitud de salida es de 4 caracteres, pero hay funciones más cortas o más largas.)
Anteriormente vimos que un hash tiene ciertas propiedades centrales.
- Funciona de forma unidireccional, lo que significa que:
- Es fácil crear el hash de una entrada (tal vez no manualmente, como veremos, pero sí por computadora)
- No es factible trabajar de forma inversa para encontrar la entrada que produjo determinado hash (a esto se le llama resistencia pre-imagen). La única forma de hacerlo sería mediante la fuerza bruta, adivinando y comprobando posibles entradas miles o millones de veces.
- Un pequeño cambio en la entrada cambia radicalmente el valor del hash.
- Es determinista, por lo que la misma entrada siempre produce el mismo hash.
Estas propiedades hacen que el hashing sea una solución ideal para todo tipo de aplicaciones, no solo para la blockchain. Puedes usar una función hash para añadir una firma digital a un documento. Si pones online el hash del documento junto con el archivo, cualquiera que lo descargue puede saber rápidamente si ha sido modificado o alterado simplemente con pasarlo por una función hash y comparar el hash con que el que pusiste online.
También se puede usar el hash de un documento o un archivo como un ID único de ese documento. Con el algoritmo que veremos en este capítulo, SHA-256, nunca se ha dado el caso de que dos entradas diferentes produzcan el mismo resultado. (Esto se llama “colisión” en criptografía). Existen 2256 posibles hash de salida. Incluso las computadoras más poderosas del mundo trabajando en conjunto necesitarían más tiempo del que lleva el universo en existencia para encontrarse una colisión con el algoritmo SHA-256.
La Historia Del Hashing
SHA significa en inglés “Secure Hash Algorithm” (Algoritmo Seguro de Hash). Estos son los más usados y reconocidos. Provienen de la Agencia de Seguridad Nacional de Estados Unidos, una agencia de inteligencia que se ocupa de las señales de inteligencia, transmitiendo e interceptando las señales de inteligencia y contrainteligencia extranjera.
La Agencia de Seguridad Nacional hizo públicos los algoritmos porque, incluso sabiendo cómo funcionan, no se pueden socavar sus bases o desmantelarlo. Actualmente el SHA está oficialmente mantenido y estandarizado por el Instituto Nacional de Estándares y Tecnología.
Existen otros algoritmos de hash que se usan en diferentes proyectos. Este capítulo estará centrado en el SHA, específicamente en el SHA-256, pero es bueno resaltar que las blockchains pueden funcionar, y de hecho lo hacen, con varios algoritmos. Todos cumplen funciones similares, pero necesitan diferente hardware para trabajar eficientemente, de ahí la variedad.
Elevada Perspectiva General Del Hashing Rn La Prueba De Trabajo
Para lo que nos concierne, los algoritmos de hash son útiles en la minería de la prueba de trabajo, tal y como se ha descrito anteriormente. Los mineros compilan toda la información de un bloque. Luego, agregan un nonce al encabezado del bloque. Comienzan por agregar ceros,
“0000000000”
Entonces completan el hash del bloque usando el algoritmo SHA-256. El resultado se ve así:
“8fc49a37693b9427e0dfd4d09d03faf974fe82701a2f1c1ee078924f87507166”
Recuerda, la minería en Bitcoin solo tiene éxito cuando encuentras un hash que empieza con 18 ceros. Este hash no sirve, así que tendremos que probar con otro nonce. Debido a las características de los algoritmos de hashing, probar con un nonce ligeramente distinto nos dará un resultado distinto por completo.
No obstante, Bitcoin recompensa al minero que encuentra el nonce más bajo, por lo que vamos a repetirlo con un 1 y probar otra vez:
Nonce: “0000000001”
Hash: “d13b969ce6872745059bf8516211d49b904d0b5fcde9b11b8195235b7ee6ce38”
Todavía no hay suerte. Sigamos intentando, probando con nonces desde 0 hasta 9,999,999,999. En algún momento, puede que encontremos uno que produzca un hash con 18 ceros al principio:
“0000000000000000005ef2bdc34baac64d1f51e209554202c83fad1f857619d1”
Si es así, ¡felicidades! Acabamos de hacer nuestro primer bloque exitoso en Bitcoin. Vamos a transmitirlo al resto de la red. Todo el mundo revisará nuestro bloque y nuestro nonce, y si concuerdan en que el bloque es válido, ganaremos la recompensa de bloque. De hecho, ya hemos incluido una operación en nuestro bloque para enviarnos 12,5 bitcoins acabadas de hacer. Una vez que encontremos un bloque, todo el mundo se pone a trabajar en uno nuevo y el proceso vuelve a empezar.
Sin embargo, es altamente improbable que encontremos un hash exitoso. Probablemente lleguemos al nonce “9999999999” y ninguno de nuestros hashes cumpla el criterio de los 18 ceros. ¿Qué podemos hacer?
Bueno, existe la posibilidad de que haya pasado el tiempo desde que empezamos a comprobar los nonce. Podemos actualizar el sello de tiempo de nuestro bloque. Ya que un pequeño cambio en el bloque significa que el hash será completamente distinto, podemos probar otra vez desde 0 hasta 9,999,999,999. También podemos cambiar el orden de las transacciones en nuestro bloque, añadir más transacciones, o modificar la dirección de destino para la recompensa de los 12,5 bitcoin (la operación de la coinbase).
Todos estos pequeños cambios introducen 9,999,999,999 posibles nonces que tenemos que comprobar hasta encontrar el que produzca el hash con 18 ceros iniciales. Puede parecer mucho, pero considera que las computadoras más rápidas de la minería pueden computar hasta un billón de hashes en un segundo (terahashes). Son 1,000,000,000,000 intentos por segundo. Todas las computadoras mineras de Bitcoin tienen una capacidad combinada de chequear 22 000 000 000 000 000 000 hashes por segundo. Aún así, con el nivel actual de dificultad (18 ceros), les toma diez minutos en promedio encontrar un hash correcto.
No se exagera al decir lo difícil que es encontrar un hash que sirva. Es más difícil que encontrar un grano de arena en todas las playas del mundo. Esta es la clave de la seguridad de la prueba de trabajo. Para sobrescribir la blockchain con una falsa, tendrías que hashear más rápido que todos los nodos de la blochchain legal. Y eso es extremadamente improbable.
¿Se usa el hashing en la prueba de participación y otros mecanismos de consenso?
¡Sí! Los sistemas de prueba de ...