El hashing es un proceso fundamental en el ámbito de las criptomonedas que transforma datos de cualquier tamaño en resultados de longitud fija. Este proceso se lleva a cabo mediante fórmulas matemáticas conocidas como funciones hash, implementadas como algoritmos.
Aunque no todas las funciones hash involucran criptografía, las denominadas funciones hash criptográficas son esenciales en el ecosistema de las criptomonedas. Gracias a ellas, las blockchains y otros sistemas descentralizados logran niveles significativos de integridad y seguridad de datos.
Las funciones hash, tanto las convencionales como las criptográficas, son deterministas. Esto significa que, mientras los datos de entrada no cambien, el algoritmo hash siempre producirá el mismo resultado, también conocido como digest o hash.
Los algoritmos de hash utilizados en criptomonedas suelen diseñarse como funciones unidireccionales, lo que implica que no pueden revertirse sin una cantidad considerable de tiempo y recursos computacionales. En otras palabras, es relativamente sencillo generar una salida a partir de una entrada, pero extremadamente difícil hacer lo contrario. Generalmente, cuanto más complicado es encontrar la entrada, más seguro se considera el algoritmo hash.
Funcionamiento de una función hash
Diferentes funciones hash producen resultados de distintas longitudes, pero los posibles tamaños de salida de cada algoritmo hash son siempre constantes. Por ejemplo, el algoritmo SHA-256 solo puede generar resultados de 256 bits, mientras que SHA-1 siempre producirá un digest de 160 bits.
Para ilustrar esto, pasemos las palabras "Gate" y "gate" a través del algoritmo hash SHA-256 (el utilizado en Bitcoin).
Observe que un pequeño cambio (la mayúscula inicial) resultó en un valor hash completamente diferente. Sin embargo, como utilizamos SHA-256, las salidas siempre tendrán un tamaño fijo de 256 bits (o 64 caracteres) independientemente del tamaño de la entrada. Además, no importa cuántas veces ejecutemos las dos palabras a través del algoritmo, las dos salidas permanecerán constantes.
Si pasamos las mismas entradas a través del algoritmo hash SHA-1, obtenemos los siguientes resultados:
SHA-1
Entrada
Salida (160 bits)
Gate
96a296d224f285c67bee93c30f8a309157f0daa7
gate
5f42c325eef7e85610308428b407748b77d8c98e
Es interesante notar que SHA significa Secure Hash Algorithms (Algoritmos de Hash Seguros). Es un conjunto de funciones hash criptográficas que incluye los algoritmos SHA-0 y SHA-1, así como las familias SHA-2 y SHA-3. SHA-256 forma parte de la familia SHA-2, junto con SHA-512 y otras variantes. Actualmente, solo las familias SHA-2 y SHA-3 se consideran seguras.
Importancia de esta tecnología
Las funciones hash convencionales tienen una amplia gama de aplicaciones, incluyendo búsquedas en bases de datos, análisis de archivos grandes y gestión de información. Por otro lado, las funciones hash criptográficas se utilizan extensamente en aplicaciones de seguridad de la información, como autenticación de mensajes y generación de huellas digitales. En el contexto de Bitcoin, las funciones hash criptográficas son una parte integral del proceso de minería y también juegan un papel crucial en la generación de nuevas direcciones y claves.
El verdadero potencial del hashing se revela al trabajar con grandes volúmenes de información. Por ejemplo, es posible ejecutar un archivo extenso o un conjunto de datos a través de una función hash y luego utilizar sus resultados para verificar rápidamente la precisión e integridad de los datos. Esto es factible debido a la naturaleza determinista de las funciones hash: la entrada siempre produce una salida comprimida y simplificada (el hash). Este método elimina la necesidad de almacenar y "memorizar" grandes cantidades de datos.
El hashing es particularmente útil en el contexto de la tecnología blockchain. La cadena de bloques de Bitcoin involucra múltiples operaciones relacionadas con el hashing, la mayoría de las cuales se realizan durante el proceso de minería. De hecho, casi todos los protocolos de criptomonedas dependen del hashing para vincular y agrupar transacciones en bloques y para crear enlaces criptográficos entre cada bloque, formando así una cadena de bloques.
Funciones hash criptográficas
Una función hash que emplea técnicas criptográficas puede definirse como una función hash criptográfica. En general, descifrar una función hash criptográfica requiere numerosos intentos de fuerza bruta. Para "revertir" una función hash criptográfica, es necesario seleccionar entradas mediante prueba y error hasta obtener una salida adecuada. Sin embargo, también existe la posibilidad de que diferentes entradas produzcan el mismo resultado, en cuyo caso se produce una "colisión".
Técnicamente, una función hash criptográfica debe cumplir tres propiedades para considerarse segura. Podemos describirlas como: resistencia a colisiones, resistencia a la preimagen y resistencia a la segunda preimagen.
Antes de describir cada propiedad, resumamos su lógica en tres frases breves:
Resistencia a colisiones: imposibilidad de encontrar dos entradas diferentes que produzcan el mismo hash.
Resistencia a la preimagen: incapacidad de "revertir" la función hash (encontrar la entrada a partir de una salida dada).
Resistencia a la segunda preimagen: imposibilidad de encontrar una segunda entrada que tenga el mismo hash que la primera.
Resistencia a colisiones
Como se mencionó anteriormente, una colisión ocurre cuando diferentes entradas producen el mismo hash. La función hash se considera entonces resistente a colisiones hasta que alguien descubre dicha colisión. Es importante notar que siempre existirán colisiones para cualquier función hash debido al número infinito de entradas y al número finito de salidas.
Por lo tanto, una función hash es resistente a colisiones cuando la probabilidad de detectar una colisión es tan baja que requeriría millones de años de cálculo. Por esta razón, aunque no existen funciones hash libres de colisiones, algunas son tan robustas que pueden considerarse estables (por ejemplo, SHA-256).
Entre los diferentes algoritmos SHA, las familias SHA-0 y SHA-1 ya no se consideran seguras porque se han detectado colisiones. Actualmente, solo las familias SHA-2 y SHA-3 se consideran resistentes a colisiones.
Resistencia a la preimagen
Esta propiedad está estrechamente relacionada con el concepto de funciones unidireccionales. Una función hash se considera resistente a la preimagen siempre que exista una probabilidad muy baja de que alguien pueda encontrar la entrada utilizando la salida generada.
Observe que esta propiedad es diferente de la anterior porque el atacante necesita adivinar la entrada basándose en una salida específica. La colisión, en cambio, ocurre cuando alguien encuentra dos entradas diferentes que producen la misma salida, independientemente de qué entrada en particular se utilizó.
La propiedad de resistencia a la preimagen es valiosa para la seguridad de los datos, ya que un simple hash de un mensaje puede demostrar su autenticidad sin la necesidad de revelar información adicional. En la práctica, muchos proveedores de servicios y aplicaciones web almacenan y utilizan hashes generados a partir de contraseñas en lugar de utilizarlas en formato de texto plano.
Resistencia a la segunda preimagen
Este tipo de resistencia se encuentra entre las dos propiedades anteriores. El ataque de segunda preimagen consiste en encontrar una entrada específica con la que sea posible generar una salida que ya ha sido producida utilizando otra entrada conocida previamente.
En otras palabras, un ataque de segunda preimagen implica la detección de colisiones, pero en lugar de encontrar dos entradas aleatorias que generen el mismo hash, el ataque tiene como objetivo encontrar una entrada que pueda reproducir un hash que ya ha sido generado por otra entrada.
Por lo tanto, cualquier función hash que sea resistente a colisiones también lo es al ataque de segunda preimagen, ya que este último siempre requiere una colisión. Sin embargo, todavía es posible realizar un ataque de preimagen en una función resistente a colisiones, ya que esto implica buscar una entrada para una salida dada.
Minería
Existen numerosos pasos en la minería de Bitcoin que se realizan mediante funciones hash. Estos incluyen la verificación de saldos, la vinculación de entradas y salidas de transacciones, y la combinación de todas las transacciones en un bloque para formar un árbol de Merkle. Pero una de las principales razones por las que la blockchain de Bitcoin es segura es que los mineros deben realizar tantas operaciones de hash como sea posible para finalmente encontrar la solución correcta para el siguiente bloque.
Un minero debe utilizar diversas entradas al generar un hash para su bloque candidato. El bloque solo podrá ser verificado si la salida generada correctamente en forma de hash comienza con un cierto número de ceros. La cantidad de ceros determina la dificultad de la minería y varía según el hashrate de la red.
En este contexto, el hashrate es una medida de la potencia computacional que se invierte en la minería de Bitcoin. Si el hashrate comienza a aumentar, el protocolo Bitcoin ajustará automáticamente la dificultad de minería para que el tiempo promedio necesario para minar un bloque sea de aproximadamente 10 minutos. Si varios mineros deciden dejar de minar, resultando en una caída significativa del hashrate, la dificultad de minado se ajustará para facilitar temporalmente el cálculo (hasta que el tiempo promedio de formación de bloques vuelva a 10 minutos).
Es importante destacar que los mineros no necesitan buscar colisiones porque hay varios hashes que pueden generar como salida válida (comenzando con una cierta cantidad de ceros). Por lo tanto, existen múltiples soluciones posibles para un bloque determinado, y los mineros deben encontrar solo una de ellas, según un umbral determinado por la dificultad de la minería.
Dado que la minería de Bitcoin es una tarea costosa, los mineros no tienen incentivos para engañar al sistema, ya que esto resultaría en pérdidas financieras significativas. En consecuencia, cuantos más mineros se unan a la blockchain, más grande y robusta se volverá.
Conclusión
Es indudable que las funciones hash son una de las herramientas fundamentales en la informática, especialmente al trabajar con grandes volúmenes de datos. Cuando se combinan con la criptografía, los algoritmos hash resultan extremadamente útiles, ya que proporcionan seguridad y autenticación de diversas formas. Por lo tanto, las funciones hash criptográficas son vitales para casi todas las redes de criptomonedas, y comprender sus propiedades y mecanismos de funcionamiento es ciertamente valioso para cualquier persona interesada en la tecnología blockchain.
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
El poder del hashing en el mundo de las criptomonedas
El hashing es un proceso fundamental en el ámbito de las criptomonedas que transforma datos de cualquier tamaño en resultados de longitud fija. Este proceso se lleva a cabo mediante fórmulas matemáticas conocidas como funciones hash, implementadas como algoritmos.
Aunque no todas las funciones hash involucran criptografía, las denominadas funciones hash criptográficas son esenciales en el ecosistema de las criptomonedas. Gracias a ellas, las blockchains y otros sistemas descentralizados logran niveles significativos de integridad y seguridad de datos.
Las funciones hash, tanto las convencionales como las criptográficas, son deterministas. Esto significa que, mientras los datos de entrada no cambien, el algoritmo hash siempre producirá el mismo resultado, también conocido como digest o hash.
Los algoritmos de hash utilizados en criptomonedas suelen diseñarse como funciones unidireccionales, lo que implica que no pueden revertirse sin una cantidad considerable de tiempo y recursos computacionales. En otras palabras, es relativamente sencillo generar una salida a partir de una entrada, pero extremadamente difícil hacer lo contrario. Generalmente, cuanto más complicado es encontrar la entrada, más seguro se considera el algoritmo hash.
Funcionamiento de una función hash
Diferentes funciones hash producen resultados de distintas longitudes, pero los posibles tamaños de salida de cada algoritmo hash son siempre constantes. Por ejemplo, el algoritmo SHA-256 solo puede generar resultados de 256 bits, mientras que SHA-1 siempre producirá un digest de 160 bits.
Para ilustrar esto, pasemos las palabras "Gate" y "gate" a través del algoritmo hash SHA-256 (el utilizado en Bitcoin).
SHA-256
Entrada
Salida (256 bits)
Gate
7f98b5c76e1f90c0e51e5947eae545f3b6f4b4736c774c504d7e6741f5070861
gate
e77b9a9ae9e30b0dbdb6f510a264ef9de781501d7b6b92ae89eb059c5ab743a0
Observe que un pequeño cambio (la mayúscula inicial) resultó en un valor hash completamente diferente. Sin embargo, como utilizamos SHA-256, las salidas siempre tendrán un tamaño fijo de 256 bits (o 64 caracteres) independientemente del tamaño de la entrada. Además, no importa cuántas veces ejecutemos las dos palabras a través del algoritmo, las dos salidas permanecerán constantes.
Si pasamos las mismas entradas a través del algoritmo hash SHA-1, obtenemos los siguientes resultados:
SHA-1
Entrada
Salida (160 bits)
Gate
96a296d224f285c67bee93c30f8a309157f0daa7
gate
5f42c325eef7e85610308428b407748b77d8c98e
Es interesante notar que SHA significa Secure Hash Algorithms (Algoritmos de Hash Seguros). Es un conjunto de funciones hash criptográficas que incluye los algoritmos SHA-0 y SHA-1, así como las familias SHA-2 y SHA-3. SHA-256 forma parte de la familia SHA-2, junto con SHA-512 y otras variantes. Actualmente, solo las familias SHA-2 y SHA-3 se consideran seguras.
Importancia de esta tecnología
Las funciones hash convencionales tienen una amplia gama de aplicaciones, incluyendo búsquedas en bases de datos, análisis de archivos grandes y gestión de información. Por otro lado, las funciones hash criptográficas se utilizan extensamente en aplicaciones de seguridad de la información, como autenticación de mensajes y generación de huellas digitales. En el contexto de Bitcoin, las funciones hash criptográficas son una parte integral del proceso de minería y también juegan un papel crucial en la generación de nuevas direcciones y claves.
El verdadero potencial del hashing se revela al trabajar con grandes volúmenes de información. Por ejemplo, es posible ejecutar un archivo extenso o un conjunto de datos a través de una función hash y luego utilizar sus resultados para verificar rápidamente la precisión e integridad de los datos. Esto es factible debido a la naturaleza determinista de las funciones hash: la entrada siempre produce una salida comprimida y simplificada (el hash). Este método elimina la necesidad de almacenar y "memorizar" grandes cantidades de datos.
El hashing es particularmente útil en el contexto de la tecnología blockchain. La cadena de bloques de Bitcoin involucra múltiples operaciones relacionadas con el hashing, la mayoría de las cuales se realizan durante el proceso de minería. De hecho, casi todos los protocolos de criptomonedas dependen del hashing para vincular y agrupar transacciones en bloques y para crear enlaces criptográficos entre cada bloque, formando así una cadena de bloques.
Funciones hash criptográficas
Una función hash que emplea técnicas criptográficas puede definirse como una función hash criptográfica. En general, descifrar una función hash criptográfica requiere numerosos intentos de fuerza bruta. Para "revertir" una función hash criptográfica, es necesario seleccionar entradas mediante prueba y error hasta obtener una salida adecuada. Sin embargo, también existe la posibilidad de que diferentes entradas produzcan el mismo resultado, en cuyo caso se produce una "colisión".
Técnicamente, una función hash criptográfica debe cumplir tres propiedades para considerarse segura. Podemos describirlas como: resistencia a colisiones, resistencia a la preimagen y resistencia a la segunda preimagen.
Antes de describir cada propiedad, resumamos su lógica en tres frases breves:
Resistencia a colisiones: imposibilidad de encontrar dos entradas diferentes que produzcan el mismo hash.
Resistencia a la preimagen: incapacidad de "revertir" la función hash (encontrar la entrada a partir de una salida dada).
Resistencia a la segunda preimagen: imposibilidad de encontrar una segunda entrada que tenga el mismo hash que la primera.
Resistencia a colisiones
Como se mencionó anteriormente, una colisión ocurre cuando diferentes entradas producen el mismo hash. La función hash se considera entonces resistente a colisiones hasta que alguien descubre dicha colisión. Es importante notar que siempre existirán colisiones para cualquier función hash debido al número infinito de entradas y al número finito de salidas.
Por lo tanto, una función hash es resistente a colisiones cuando la probabilidad de detectar una colisión es tan baja que requeriría millones de años de cálculo. Por esta razón, aunque no existen funciones hash libres de colisiones, algunas son tan robustas que pueden considerarse estables (por ejemplo, SHA-256).
Entre los diferentes algoritmos SHA, las familias SHA-0 y SHA-1 ya no se consideran seguras porque se han detectado colisiones. Actualmente, solo las familias SHA-2 y SHA-3 se consideran resistentes a colisiones.
Resistencia a la preimagen
Esta propiedad está estrechamente relacionada con el concepto de funciones unidireccionales. Una función hash se considera resistente a la preimagen siempre que exista una probabilidad muy baja de que alguien pueda encontrar la entrada utilizando la salida generada.
Observe que esta propiedad es diferente de la anterior porque el atacante necesita adivinar la entrada basándose en una salida específica. La colisión, en cambio, ocurre cuando alguien encuentra dos entradas diferentes que producen la misma salida, independientemente de qué entrada en particular se utilizó.
La propiedad de resistencia a la preimagen es valiosa para la seguridad de los datos, ya que un simple hash de un mensaje puede demostrar su autenticidad sin la necesidad de revelar información adicional. En la práctica, muchos proveedores de servicios y aplicaciones web almacenan y utilizan hashes generados a partir de contraseñas en lugar de utilizarlas en formato de texto plano.
Resistencia a la segunda preimagen
Este tipo de resistencia se encuentra entre las dos propiedades anteriores. El ataque de segunda preimagen consiste en encontrar una entrada específica con la que sea posible generar una salida que ya ha sido producida utilizando otra entrada conocida previamente.
En otras palabras, un ataque de segunda preimagen implica la detección de colisiones, pero en lugar de encontrar dos entradas aleatorias que generen el mismo hash, el ataque tiene como objetivo encontrar una entrada que pueda reproducir un hash que ya ha sido generado por otra entrada.
Por lo tanto, cualquier función hash que sea resistente a colisiones también lo es al ataque de segunda preimagen, ya que este último siempre requiere una colisión. Sin embargo, todavía es posible realizar un ataque de preimagen en una función resistente a colisiones, ya que esto implica buscar una entrada para una salida dada.
Minería
Existen numerosos pasos en la minería de Bitcoin que se realizan mediante funciones hash. Estos incluyen la verificación de saldos, la vinculación de entradas y salidas de transacciones, y la combinación de todas las transacciones en un bloque para formar un árbol de Merkle. Pero una de las principales razones por las que la blockchain de Bitcoin es segura es que los mineros deben realizar tantas operaciones de hash como sea posible para finalmente encontrar la solución correcta para el siguiente bloque.
Un minero debe utilizar diversas entradas al generar un hash para su bloque candidato. El bloque solo podrá ser verificado si la salida generada correctamente en forma de hash comienza con un cierto número de ceros. La cantidad de ceros determina la dificultad de la minería y varía según el hashrate de la red.
En este contexto, el hashrate es una medida de la potencia computacional que se invierte en la minería de Bitcoin. Si el hashrate comienza a aumentar, el protocolo Bitcoin ajustará automáticamente la dificultad de minería para que el tiempo promedio necesario para minar un bloque sea de aproximadamente 10 minutos. Si varios mineros deciden dejar de minar, resultando en una caída significativa del hashrate, la dificultad de minado se ajustará para facilitar temporalmente el cálculo (hasta que el tiempo promedio de formación de bloques vuelva a 10 minutos).
Es importante destacar que los mineros no necesitan buscar colisiones porque hay varios hashes que pueden generar como salida válida (comenzando con una cierta cantidad de ceros). Por lo tanto, existen múltiples soluciones posibles para un bloque determinado, y los mineros deben encontrar solo una de ellas, según un umbral determinado por la dificultad de la minería.
Dado que la minería de Bitcoin es una tarea costosa, los mineros no tienen incentivos para engañar al sistema, ya que esto resultaría en pérdidas financieras significativas. En consecuencia, cuantos más mineros se unan a la blockchain, más grande y robusta se volverá.
Conclusión
Es indudable que las funciones hash son una de las herramientas fundamentales en la informática, especialmente al trabajar con grandes volúmenes de datos. Cuando se combinan con la criptografía, los algoritmos hash resultan extremadamente útiles, ya que proporcionan seguridad y autenticación de diversas formas. Por lo tanto, las funciones hash criptográficas son vitales para casi todas las redes de criptomonedas, y comprender sus propiedades y mecanismos de funcionamiento es ciertamente valioso para cualquier persona interesada en la tecnología blockchain.