Hechos clave:
-
La función hash es un algoritmo que permite generar códigos de longitud finita.
-
En Bitcoin, la función hash se utiliza para generar pares de llave privada y llave pública.
-
La función hash (o resumen) se utiliza para identificar bloques de transacciones en una blockchain.
-
En términos de seguridad, una función hash cifra información para mantenerla en secreto.
Table of Contents
Una función hash es un algoritmo o secuencia de operaciones matemáticas que transforma un conjunto de datos en un código alfanumérico de una longitud fija. Una función hash también se conoce como función de resumen, porque los datos que se introducen pueden ser arbitrarios (extensos o cortos) y, aun así, el código resultante tendrá siempre la misma cantidad de caracteres.
Bitcoin utiliza una blockchain o cadena de bloques para archivar una lista creciente de transacciones digitales. Cada uno de los bloques que conforman el archivo digital está encadenado al anterior con criptografía. Es decir, a través de una función hash, los nodos que guardan copias de la blockchain se encargan de validar la secuencia de bloques de transacciones y de distribuir la información en una red pública de manera segura.
La función hash también sirve para generar la llave privada y la llave pública que se utilizan en Bitcoin para cifrar o descifrar un mensaje o transacción. Este par también se conoce como clave privada y clave pública o criptografía asimétrica.
Antes de empezar, debes tener en cuenta que este es un artículo para usuarios que ya dominan, al menos, las principales nociones sobre los conceptos de blockchain y criptomonedas. Si aún no lo haces, lo mejor es iniciar con información básica sobre Bitcoin.
1 ¿Qué es un hash criptográfico?
La palabra hash proviene del inglés y significa literalmente «picadillo». En términos criptográficos un hash es el resultado de convertir un mensaje, sin importar su tamaño, en una secuencia alfanumérica, a través de la función hash. Es decir, la función hash «pica», «mezcla», «trocea» la información que recibe para proteger su contenido, convirtiéndola en un código de longitud fija que solo puede descifrarse mediante el uso de claves.
SHA-256
Sha-256 es un algoritmo criptográfico altamente seguro, que por ejemplo utiliza la inteligencia militar en todo el mundo. Específicamente, se trata de la función hash o procedimiento matemático que utiliza Bitcoin (y otras criptomonedas). La misma función se utiliza en distintas etapas y niveles del protocolo. Por ejemplo, para crear llaves privadas e identificar bloques de transacciones.
El hash (también conocido como digest o mensaje de salida) cumple la función de ofrecer una prueba de que ese mensaje (o transacción) particular que representa no fue modificado antes de su entrega. Si una sola parte, aunque sea un solo punto del mensaje original cambia, el hash (digest) también lo hace de forma radical.
2 ¿Cómo funciona un hash criptográfico?
La mejor manera de comprender cómo funciona una función hash es viéndolo trabajar. A través de una herramienta en línea para cifrar con el algoritmo SHA256 (del que hablaremos más adelante) podemos introducir el siguiente mensaje:
Bitcoin es la primera criptomoneda
Y conseguir a cambio el siguiente resultado:
91D3081626672039C99F27323895D06B88376312706BF7AB035A662B6C5C0B1B
Si añadiéramos palabras o cambiáramos, aunque fuera un punto en el mensaje original, el hash obtenido también cambiaría, aunque continuaría siendo de la misma extensión (64 caracteres). Veamos:
Bitcoin es la primera criptomoneda.
AE0B40E7FC912BCE189A06F3A8069776FB24DCCC493332F2D349F0A470DE1254
Nótese que sólo añadimos un punto al final de la frase. Aun así, el resultado es completamente distinto al primero. En otro caso, si las frases volvieran a cifrarse con este mismo algoritmo, pero con otra herramienta, sus digest continuarían siendo los mismos: una entrada particular produce siempre el mismo resultado único.
Nótese que sólo añadimos un punto al final de la frase. Aun así, el resultado es completamente distinto al primero. En otro caso, si las frases volvieran a cifrarse con este mismo algoritmo, pero con otra herramienta, sus digest continuarían siendo los mismos: una entrada particular produce siempre el mismo resultado único.
De esa forma, los mensajes se transmiten de manera segura e íntegra, pues es casi imposible averiguar el mensaje original a partir del digest, y, por tanto, tampoco sería posible modificarlo. A esto se le conoce como funciones de un solo sentido o unidireccionales. Podemos profundizar más al respecto.
3 ¿Qué es la función unidireccional de un hash?
Una función unidireccional, en matemática, se define como una función (relación entre los elementos de dos conjuntos) que tiene la característica de ser fácil de calcular, pero difícil de invertir. Nótese que se dice «difícil», pero no imposible. En realidad, las funciones totalmente unidireccionales en ciencias de la computación aún son sólo una conjetura.
Las funciones hash, sin embargo, se hacen para ser lo suficientemente difíciles de invertir. Sólo así es posible que sean útiles para la criptografía, pues revertirlas tomaría una cantidad contraproducente (para el atacante) de tiempo y recursos.
Transacción de Bitcoin
Una transacción es un envío de dinero de una persona a otra, a través de la red Bitcoin. De hecho, cada transacción es un procedimiento mediante el cual una persona utiliza su llave privada para firmar o autorizar que otra persona puede gastar las monedas que le transfirió. En otras palabras, una transacción es un registro en el archivo de la blockchain. Sin embargo, para generar firmas digitales y validar transacciones no se utiliza una función hash, sino un tipo de criptografía conocido como Algoritmo de Firma Digital de Curva Elíptica (o ECDSA por si siglas en inglés).
Construir un hash es un proceso matemático complejo, pero una de las formas de hacerlo es mediante funciones modulares, que asegurarían su ‘unidireccionalidad’. Puesto de forma sencilla, las funciones modulares producen el remanente de una división. Así, por ejemplo, 10 mod 3 = 1, porque 10 dividido entre 3 es 3 más un remanente de 1. En otra forma, 3 cabe 3 veces en 10, y queda un añadido de 1.
Ahora, digamos que para construir un hash tenemos una llave privada (X) mod 5 = 2. Sólo tú sabrías el valor de X, el cual, digamos que es 27, porque dividido entre 5 es igual a 5 más un remanente de 2. Supongamos, además, que 5 son los datos de una transacción que realizaste y 2 es el hash resultante de esa transacción. Aunque estos últimos datos sean públicos, es casi imposible averiguar que tu llave privada es 27, pues para llegar al resultado de 2 utilizando también 5 existen infinitas posibilidades. Tu «X» pudo ser 7, 52, 23390787 u otro: averiguarlo es casi imposible.
En la práctica, este mismo principio se aplica a algoritmos más sofisticados y cantidades de datos muy superiores, por lo que la dificultad de averiguar el dato de origen aumenta muchísimo más. Los datos resguardados por una función hash están seguros.
Algoritmo de Firma Digital de Curva Elíptica
Además de la función hash, Bitcoin utiliza el Algoritmo de Firma Digital de Curva Elíptica (ECDSA) para asegurar el sistema de intercambio de valor. Este algoritmo se utiliza para generar firmas digitales capaces de validar transacciones. Cada firma digital está asociada a un mensaje o transacción y una llave privada particular, lo que le permite saber, a quien recibe ciertas monedas, si alguien es su propietario, pues solo este puede autorizar el traspaso de valor a su nuevo propietario. Satoshi Nakamoto definió las monedas de bitcoin como cadenas de firmas digitales.
4 ¿Cuáles son las propiedades de una función hash segura?
Existen varios tipos de funciones hash, pero todos ellos, para ser seguros, deben poseer cuatro características principales:
1. Computacionalmente eficiente
Las funciones hash se utilizan en computadores, así que, aunque suene un poco obvio, estos computadores deben ser capaces de llevar a cabo la labor matemática necesaria para crear un hash en un período de tiempo muy corto. Si no fuera así, cada proceso que involucre la emisión de un hash tardaría demasiado y sería poco práctico utilizarlos. En la actualidad, esto no es un problema, pues una computadora promedio puede realizar la tarea en menos de un segundo.
2. Determinista
Esto implica que el mismo mensaje (entrada) debe producir siempre el mismo digest (salida) cada vez que sea utilizado o consultado. Si la función produjera un resultado al azar cada vez, sería inútil, pues no serviría para verificar que se trata del mensaje original. El punto de un hash, para el caso que nos ocupa, es corroborar que una firma digital sea auténtica sin tener acceso a la llave privada.
3. Resistente a preimagen
Significa que la salida no debe revelar ningún dato en absoluto sobre la entrada. Es por eso que un hash debería tener siempre la misma longitud en el digest, independientemente del tamaño del mensaje. Tampoco debe darse ninguna pista sobre el contenido de tal mensaje, por lo que, al más mínimo cambio, el hash resultante debe ser por completo distinto.
4. Resistente a colisión
Dos (o más) entradas diferentes no deberían producir la misma salida (digest). Es necesario mencionar que ninguna función hash está por completo libre de colisión: es una simple probabilidad matemática. Las salidas tienen una longitud determinada, a diferencia de las entradas que pueden ser de cualquier tamaño, así que el número de resultados es finito y, por tanto, propenso a colisión. Sin embargo, esta probabilidad es bastante pequeña, y la meta de cualquier función hash es hacerla lo más pequeña posible.
5 ¿Cuáles son los tipos de hash criptográficos?
Existen numerosos tipos de algoritmos para crear hash en distintas plataformas, con diversas funciones, desde autenticación de documentos y verificación de contraseñas, hasta verificación de firmas digitales y, por supuesto, minería de criptomonedas. Entre los que continúan siendo efectivos, podemos mencionar el BLAKE2, MD6, Streebog y, especialmente, la serie SHA (Secure Hash Algorithm).
La serie SHA fue diseñada por la Agencia Nacional de Seguridad (NSA) estadounidense e incluye el SHA-256, ampliamente utilizado en el criptomundo debido a que fue el algoritmo escogido por Satoshi Nakamoto para hacer funcionar la blockchain de Bitcoin, de la cual, a su vez, se han derivado otras criptomonedas que han conservado el mismo algoritmo (como Bitcoin Cash, Bitcoin SV, Namecoin y Peercoin, entre otras).
La función hash y ataque de 51%
Cuando distintas redes comparten un mismo algoritmo de función hash, las más pequeñas y por lo tanto menos seguras corren el riesgo de un ataque de 51%. Para que esto ocurra, un grupo de mineros, con equipos especializados en el procesamiento con una función hash específica y el poder de cómputo suficiente, puede migrar por un periodo de tiempo hacia la otra red y atacar. En Bitcoin este ataque es improbable, pero si fuese rentable y hubiese mala intención, otras redes que usen Sha-256 pueden ser víctimas de lo que también se conoce como reorganización de cadena.
El SHA-256 produce un digest de 256 bits y 64 caracteres. Por otro lado, tenemos el SHA-3, incluido en el mismo estándar, pero con estructura diferente, pues produce digest de tamaño arbitrario. Este es el algoritmo utilizado para el sistema Ethash de Ethereum.
6 ¿Por qué es importante la función hash para Bitcoin?
Una de las principales razones por la que se usa una función hash en Bitcoin tiene que ver con su capacidad para proteger las claves privadas de los propietarios de monedas. Debido a que Bitcoin es un archivo público, cualquiera puede consultar los intercambios de valor entre distintas direcciones públicas.
La criptografía evita que alguien pueda conocer la información secreta de otra persona que posee monedas a través de los datos de una transacción. Aunque no se usa en la validación transacciones, pues para esto se utiliza el Algoritmo de Firma Digital de Curva Elíptica, un tipo de algoritmo criptográfico que genera firmas digitales en Bitcoin.
Además, la función hash también permite otorgarle una identificación única a cada bloque de transacciones que se almacena en el archivo de la blockchain. Esta identificación resume varios datos que son necesarios para la validación y registro de las transacciones en el archivo.
De esta manera, la función hash permite que los nodos validadores de bloques utilicen menos recursos computacionales para ejecutar la tarea de archivar bloques, porque no necesitan escanear cada uno de los datos de todas las transacciones, basta una abstracción de estos, que sea imposible de alterar sin que los nodos o computadoras que almacenan la blockchain se den cuenta de cualquier cambio.
Si quieres saber más sobre Bitcoin, su tecnología y su influencia en el mundo, te invitamos a que leas otros artículos de nuestra Criptopedia.
- ¿Qué es y cómo funciona Bitcoin?
- ¿Qué es una blockchain o cadena de bloques?
- ¿Qué es la minería de Bitcoin y otras criptomonedas?
- ¿Qué es el hashrate de Bitcoin?