¿Qué es un hash?
Un hash es una función criptográfica que cumple un rol fundamental en el funcionamiento del efectivo electrónico de persona a persona. Se utiliza en múltiples partes del protocolo y su correcta implementación garantiza la seguridad de la red.
Existen múltiples algoritmos de funciones de hash en bitcoin se utilizan dos siendo la principal El algoritmo SHA-256.
Características
Una función de hash sirve para obtener, a partir de cualquier tipo de información, un número representado como bits de tamaño uniforme de tal manera que solamente aplicando la función de hash a los datos originales se pueda obtener ese número.
Por ejemplo, si se aplica la función SHA-256 a la cadena de texto Bitcoin
se obtiene el siguiente resultado:
B4056DF6691F8DC72E56302DDAD345D65FEAD3EAD9299609A826E2344EB63AA4
Si se modifica a Bitcoin Cash
:
8A9851255D671C4E0AC3AD525AD0FF595CB31A1AD85327A77DF3D15129B0A245
Como se puede ver, aunque haya cambiado poco el input de la función, esto no significa el resultado de la función cambie poco. Es claro que existe una gran diferencia entre el primer número y el segundo (los números están representados en formato hexadecimal).
Además, las funciones de hash tienen una alta resistencia a las colisiones. Esto significa que no es posible determinar previamente número resultará de la función de hash sin conocer la información y por lo tanto es una forma de verificar que no ha existido manipulación ni corrupción de datos. La resistencia a las colisiones hacen que sea extremadamente difícil encontrar dos o más entradas de la función que den como resultado el mismo hash. Esta es una ventaja deseada de la función, ya que de lo contrario no se podría verificar la integridad de la información originalmente brindada. Si esto no fuera así, un agente malicioso podría haber manipulado la información y luego tratar de obtener el mismo hash.
Por ejemplo, ¿cómo saber cuál es la entrada es lo que produce el siguiente hash?
682FC380BDA56463E1C21EC365D1D9A9596C1BA87656E603EF74440B0BAEA416
Sin conocer la información previa, es imposible saberlo. Adivinarlo por fuerza bruta puede no ser una opción. En este caso, se trata del hash del Abstract del whitepaper.
Por último, las funciones de hash son fáciles de hacer y difíciles de deshacer. Por lo tanto, validar la información no tiene prácticamente costo, mientras que generar un hash, sobre todo si se busca que cumpla con alguna característica determinada, uno específico lleva tiempo, poder de cómputo, y energía.
Su uso en Bitcoin
Prueba de trabajo
Esta última característica de los algoritmos de hash —que sean fáciles de hacer y difíciles de deshacer— es la que la hace ideal para su uso como la pieza clave en el mecanismo de prueba de trabajo diseñado por Satoshi Nakamoto. Si un minero quiere probar que ha dedicado tiempo, poder de cómputo, y por lo tanto está invertido económicamente en asegurar la red, se le pide que cada bloque tenga un hash que comience con una cantidad determinada de ceros. A mayor dificultad de la red mayor será este número de ceros.
Y, dado que por las características del algoritmo de hash, no es fácil ni barato obtener un hash específico, esto garantiza que quien aporta prueba de trabajo no desee que ese poder de cómputo sea desperdiciado y actúe en conformidad con las reglas de la red, ya que obtener ese poder de cómputo le ha costado dinero y electricidad.
En la raíz del bloque
Los hashes también se utilizan para generar un arbol de Merkle, que es una estructura que permite verificar la pertenencia de una transacción a un bloque. Juega un rol fundamental en SPV.