En la seguridad informática la función hash es muy importante para garantizar la integridad de la transferencia y registro de información que requiere de altos niveles de protección.
Las funciones hash se emplean en acciones como la validación y autenticación de usuarios, la firma de documentos, y también en las criptomonedas como método para evitar la falsificación de transacciones y prevenir acciones maliciosas.
Una función hash es un procedimiento criptográfico donde se emplea un algoritmo específico para transformar una información determinada (por ejemplo, un texto) en una una secuencia alfanumérica única de longitud fija, denominada hash.
Como ya hemos explicado en detalle qué es un hash en el anterior capítulo, no entraremos en mucho detalle, pero destacaremos que un hash no viene como resultado de un cifrado, si no que es un resumen unidireccional porque el proceso es irreversible, es decir, no se puede descifrar / recuperar la información original a partir del hash final si no es probando a hashear sin parar hasta dar con el texto original, dado que el hash encontrado coincidirá con el que estabas buscando y ya sabías.
A lo largo de los años han aparecido muchas formas (algoritmos) de generar hashes, es decir existen muchos tipos de funciones hash, pero desde un punto de vista técnico todas deben tener una serie de características para cumplir con su cometido de forma correcta:
- Unidireccionalidad: Si nosotros tenemos un documento M el hash permite realizar un hash resumen del mismo denominado h(M), pero a partir de este hash es imposible conocer el contenido del documento original M.
- Compresión: Es indiferente el peso del documento M ya que el hash resultante siempre tendrá la misma longitud con el mismo número de bits.
- Facilidad de cálculo: Debe ser sencillo realizar el cálculo de h(M) a partir de ‘M’ para una generación rápida y que no resulte un desperdicio de tiempo, energía y poder de cálculo.
- Difusión de bits: El hash h(M) debe ser una función compleja del mensaje original ‘M’. Si se diera el caso que se modificara M en cualquier parte, y aunque fuera una modificación mínima, el elemento h(M) cambiara por completo.
- Resistencia débil a colisiones: Será computacionamente imposible que conocido M, podamos encontrar otro M’ tal que h(M) = h(M’). Primera pre-imagen.
- Resistencia fuerte a colisiones: Debe ser computacionalmente difícil encontrar un par (M, M’) de forma que h(M) = h(M’). Segunda pre-imagen.
Seguridad del hash
Si. Se puede encontrar el texto original de un hash. Pero es prácticamente imposible. Solo mediante fuerza bruta.
Por ejemplo, el hash de 128 bits (una versión básica de hash) cuenta con 2^128 posibilidades diferentes y la probabilidad del 50% seria la raíz cuadrada de 2^128 que da como resultado 2^64 de que se de una instancia. De esto se obtiene que a nivel estadístico es más sencillo romper la colisión que romper la resistencia de la imagen previa.
Así que es cierto, no existe una función hash en el mundo que esté libre de colisiones, pero si no tiene un fallo en su diseño, conseguir romperla es muy complicado y llevaría un tiempo significativo, a veces miles de millones de años con una capacidad de cálculo superior a la de todo el planeta tierra.
Función hash en Bitcoin
Uno de los algoritmos de función hash por excelencia es el SHA-256, se usa en infinidad de casuísticas dado su equilibrio entre seguridad y complejidad de generación (en cuánto a tiempo y gasto de energía se refiere)
Uno de los cientos de miles de lugares donde se usa es en Bitcoin.
Dentro del ecosistema de Bitcoin la función del hash es muy importante siempre que éste sea eficiente, y para que eso sea así el hash debe ser complejo ofreciendo así un alto grado seguridad, lo que implica que se necesita más tiempo para su cálculo y más ineficiente es el proceso.
La función Hash en Bitcoin se utiliza en dos áreas.
1. Creación de la dirección
Uno de los usos más comunes de la función hash es en el proceso de generación de la dirección Bitcoin.
La función hash de tipo SHA256 se utiliza hasta en 3 veces en el proceso de generación de la dirección.
Gracias a esta función se consigue que la dirección sea más corta que la clave pública de la que viene. Además se consigue que sea consistente en su conjunto al generar caracteres de control (checksum).
Si aun no sabes cómo se genera una dirección puedes pasarte por el siguiente enlace.
2. Minería: Proof-of-Work
Como ya hemos explicado en detalle en el capítulo destinado a la minería de Bitcoin, es la acción realizada por determinadas personas que deciden ofrecer su potencia de cómputo a la red Bitcoin para la verificación de las diferentes transacciones.
Las funciones hash es un proceso clave en la creación de bloques, es más, se usa también en múltiples pasos, ya que el minero debe asociar las transacciones al bloque. Para ello utiliza la función hash para crear el Árbol de Merkle.
Con ese resultado, además del al hash resultante del bloque anterior y un dato que el debe inventarse (llamado nonce) debe conseguir que el hash resultante tenga un determinado patrón. Si lo cumple habrá resuelto el problema matemático, habrá minado un bloque y ganará casi 50.00 € actualmente (Junio 2020).
Así es como se consigue vincular por completo todas las transacciones nuevas y pasadas, generando total integridad e inmutabilidad
Hacer el proceso de hash una vez es extremadamente fácil, pero el minero debe hacerlo millones de veces. Es como hacer una sentadilla, que es fácil, pero millones de veces no.
Finalmente, para que los nodos verifiquen que todo es correcto, volverán a hacer el proceso una sola vez, aplicando de nuevo la función hash en las diferentes partes del proceso.
Ahora ya sabes qué es una función hash y que papeles juega dentro de las criptomonedas. Te animamos a seguir formándote para convertirte en todo un experto en las criptomonedas y la tecnología blockchain.