El hashing es un proceso que genera salidas de tamaño fijo a partir de entradas de tamaño variable utilizando fórmulas matemáticas conocidas como funciones hash. Si bien no todas las funciones hash involucran criptografía, las funciones hash criptográficas son fundamentales para las criptomonedas, permitiendo que las blockchains y otros sistemas distribuidos logren niveles significativos de integridad y seguridad de los datos.
Tanto las funciones hash regulares como las funciones hash criptográficas son determinísticas, lo que significa que mientras los datos de entrada permanezcan sin cambios, el algoritmo hash siempre producirá el mismo resultado ( también conocido como digest o hash ).
Los algoritmos de hash de criptomonedas están diseñados típicamente como funciones unidireccionales, lo que hace que sean difíciles de revertir sin un tiempo y recursos computacionales sustanciales. En otras palabras, es relativamente fácil generar una salida a partir de una entrada, pero considerablemente desafiante ir en la dirección contraria. Generalmente, cuanto más difícil es encontrar la entrada, más seguro se considera que es el algoritmo de hash.
¿Cómo funciona una función hash?
Diferentes funciones hash producen resultados de tamaños variados, pero los tamaños de salida posibles para cada algoritmo hash son siempre constantes. Por ejemplo, el algoritmo SHA-256 solo puede producir resultados de 256 bits, mientras que SHA-1 siempre genera un resumen de 160 bits.
Para ilustrar, pasemos las palabras "Gate" y "Gate" a través del algoritmo de hash SHA-256 (el utilizado en Bitcoin).
Nota que un ligero cambio (en la capitalización de la primera letra)resultó en un valor de hash completamente diferente. Pero dado que usamos 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 pasemos las dos palabras a través del algoritmo, las dos salidas seguirán siendo constantes.
Y si pasamos las mismas entradas a través del algoritmo de hash SHA-1, obtenemos los siguientes resultados:
SHA-1
Salida
Output (160 bits)
Gate
f8e4eba8d46e2b1079e6a1a8abf0a0d8c3a81d73
Gate
b7e23ec29af22b0b4e41da31e868d57226121c84
Curiosamente, SHA significa Algoritmos de Hash Seguros. Es un conjunto de funciones hash criptográficas que incluyen los algoritmos SHA-0 y SHA-1, así como los grupos SHA-2 y SHA-3. SHA-256 es parte de la familia SHA-2, junto con SHA-512 y otras variantes. Actualmente, solo los grupos SHA-2 y SHA-3 se consideran seguros.
¿Por qué es importante esta tecnología?
Las funciones hash convencionales tienen una amplia gama de usos, incluyendo búsquedas en bases de datos, análisis de archivos grandes y gestión de datos. Por otro lado, las funciones hash criptográficas se utilizan ampliamente en aplicaciones de seguridad de la información, como la autenticación de mensajes y la huella digital. En lo que respecta a Bitcoin, las funciones hash criptográficas son una parte integral del proceso de minería y también juegan un papel en la generación de nuevas direcciones y claves.
El verdadero poder de la función hash se revela al trabajar con grandes cantidades de información. Por ejemplo, puedes ejecutar un archivo grande o un conjunto de datos a través de una función hash y luego usar sus resultados para verificar rápidamente la precisión e integridad de los datos. Esto es posible debido a la naturaleza determinista de las funciones hash: la entrada siempre resulta en una salida comprimida y simplificada (el hash). Este método elimina la necesidad de almacenar y "memorizar" grandes volúmenes de datos.
El hash es particularmente útil en el contexto de la tecnología blockchain. La blockchain de Bitcoin tiene varias operaciones relacionadas con el hash, la mayoría de las cuales se realizan en el proceso de minería. De hecho, casi todos los protocolos de criptomonedas dependen del hash para vincular y combinar grupos de transacciones en bloques y para crear vínculos criptográficos entre cada bloque, creando así una cadena de bloques.
Funciones hash criptográficas
Una vez más, una función hash que utiliza técnicas criptográficas puede definirse como una función hash criptográfica. En general, descifrar una función hash criptográfica requiere muchos intentos de fuerza bruta. Para "desplegar" 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 ocurrirá una "colisión".
Técnicamente, una función hash criptográfica debe cumplir tres propiedades para ser considerada segura. Podemos describirlas como: resistencia a colisiones y resistencia a ataques de primera y segunda preimagen.
Antes de describir cada propiedad, resumamos su lógica en tres oraciones cortas.
Resistencia a colisiones: imposibilidad de encontrar dos entradas diferentes que produzcan el mismo hash.
Primera resistencia a la preimagen: incapacidad para "invertir" la función hash ( encontrar la entrada a través de una salida dada ).
Resistencia a la segunda preimagen: incapacidad para 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 resistente a colisiones hasta que alguien descubre tal colisión. Tenga en cuenta que las colisiones siempre existirán 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 pequeña 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 poderosas que se pueden considerar estables (e.g., SHA-256).
Entre los diferentes algoritmos SHA, los grupos SHA-0 y SHA-1 ya no son seguros porque se han detectado colisiones. Actualmente, solo los grupos SHA-2 y SHA-3 se consideran resistentes a colisiones.
Primera resistencia a la preimagen
Esta propiedad está estrechamente relacionada con el concepto de funciones unidireccionales. Se considera que una función hash es fuerte para encontrar la primera preimagen siempre que haya una probabilidad muy baja de que alguien pueda encontrar la entrada utilizando la salida generada.
Tenga en cuenta que esta propiedad es diferente de la anterior porque el atacante necesita adivinar la entrada en función de una salida específica. Este tipo de colisión ocurre cuando alguien encuentra dos entradas diferentes que producen la misma salida, independientemente de qué entrada particular se utilizó.
La primera propiedad de resistencia a la preimagen es valiosa para la seguridad de los datos, ya que un hash simple de un mensaje puede demostrar su autenticidad sin necesidad de revelar información adicional. En la práctica, muchos proveedores de servicios web y aplicaciones almacenan y utilizan hashes generados a partir de contraseñas en lugar de usarlos en formato de texto.
Resistencia a la segunda imagen
Este tipo de estabilidad se encuentra entre las dos propiedades anteriores. El ataque de segunda preimagen consiste en encontrar una entrada específica con la que es posible generar una salida que ya ha sido generada utilizando otra entrada que se conocía previamente.
En otras palabras, un ataque de segunda preimagen implica detectar 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 es resistente a ataques de segundo preimagen, ya que este último siempre requiere una colisión. Sin embargo, todavía es posible realizar un ataque de primer preimagen en una función tolerante a colisiones, ya que esto implica buscar una entrada con una salida.
Minería
Hay muchos pasos en la minería de Bitcoin que se realizan utilizando funciones hash. Estos incluyen verificar el saldo, vincular las entradas y salidas de las transacciones, y combinar todas las transacciones en un bloque para formar un árbol de Merkle. Pero una de las principales razones por las cuales la cadena de bloques de Bitcoin es segura es que los mineros deben realizar tantas operaciones hash como sea posible para finalmente encontrar la solución correcta para el siguiente bloque.
Un minero debe utilizar varias entradas diferentes al generar un hash para su bloque candidato. Solo será posible verificar el bloque si la salida generada correctamente en forma de hash comienza con un cierto número de ceros. El número de ceros determina la dificultad de la minería y varía según la tasa de hash de la red.
En este caso, el hashrate es una medida de la potencia de cálculo que inviertes en la minería de Bitcoin. Si el hashrate comienza a aumentar, el protocolo de 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, lo que resulta en una caída significativa del hashrate, la dificultad de minería se ajustará para facilitar temporalmente el cálculo ( hasta que el tiempo promedio de formación de bloques vuelva a ser de 10 minutos ).
Tenga en cuenta que los mineros no necesitan buscar colisiones porque hay varios hashes que pueden generar como salida válida ( que comienzan con un cierto número de ceros ). Por lo tanto, hay varias soluciones posibles para un bloque dado, y los mineros solo necesitan encontrar una de ellas, de acuerdo con un umbral determinado por la dificultad de minería.
Dado que la minería de Bitcoin es una tarea costosa, los mineros no tienen razones para engañar al sistema, ya que esto resultaría en pérdidas financieras significativas. En consecuencia, cuanto más mineros se unan a la cadena de bloques, más grande y fuerte se volverá.
Conclusión
No hay duda de que las funciones hash son una de las principales herramientas en la computación, especialmente al trabajar con grandes cantidades de datos. Cuando se combinan con la criptografía, los algoritmos hash pueden ser muy útiles, ya que proporcionan seguridad y autenticación de diversas maneras. Por lo tanto, las funciones hash criptográficas son vitales para casi todas las redes de criptomonedas, y entender sus propiedades y mecanismos de funcionamiento es sin duda útil 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.
Entendiendo las funciones hash en Criptomoneda
El hashing es un proceso que genera salidas de tamaño fijo a partir de entradas de tamaño variable utilizando fórmulas matemáticas conocidas como funciones hash. Si bien no todas las funciones hash involucran criptografía, las funciones hash criptográficas son fundamentales para las criptomonedas, permitiendo que las blockchains y otros sistemas distribuidos logren niveles significativos de integridad y seguridad de los datos.
Tanto las funciones hash regulares como las funciones hash criptográficas son determinísticas, lo que significa que mientras los datos de entrada permanezcan sin cambios, el algoritmo hash siempre producirá el mismo resultado ( también conocido como digest o hash ).
Los algoritmos de hash de criptomonedas están diseñados típicamente como funciones unidireccionales, lo que hace que sean difíciles de revertir sin un tiempo y recursos computacionales sustanciales. En otras palabras, es relativamente fácil generar una salida a partir de una entrada, pero considerablemente desafiante ir en la dirección contraria. Generalmente, cuanto más difícil es encontrar la entrada, más seguro se considera que es el algoritmo de hash.
¿Cómo funciona una función hash?
Diferentes funciones hash producen resultados de tamaños variados, pero los tamaños de salida posibles para cada algoritmo hash son siempre constantes. Por ejemplo, el algoritmo SHA-256 solo puede producir resultados de 256 bits, mientras que SHA-1 siempre genera un resumen de 160 bits.
Para ilustrar, pasemos las palabras "Gate" y "Gate" a través del algoritmo de hash SHA-256 (el utilizado en Bitcoin).
SHA-256
Salida
Salida (256 bits)
Gate
7f43e4e2c9d9e6249ba0df8a911b46400f6fd5e9993a5f1ea65e4633e2de5a6c
Gate
9c6b057a2b9d96746c38a3f4e466678e1b4c4425ff8fe9659e96c903e7a1f3cc
Nota que un ligero cambio (en la capitalización de la primera letra)resultó en un valor de hash completamente diferente. Pero dado que usamos 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 pasemos las dos palabras a través del algoritmo, las dos salidas seguirán siendo constantes.
Y si pasamos las mismas entradas a través del algoritmo de hash SHA-1, obtenemos los siguientes resultados:
SHA-1
Salida
Output (160 bits)
Gate
f8e4eba8d46e2b1079e6a1a8abf0a0d8c3a81d73
Gate
b7e23ec29af22b0b4e41da31e868d57226121c84
Curiosamente, SHA significa Algoritmos de Hash Seguros. Es un conjunto de funciones hash criptográficas que incluyen los algoritmos SHA-0 y SHA-1, así como los grupos SHA-2 y SHA-3. SHA-256 es parte de la familia SHA-2, junto con SHA-512 y otras variantes. Actualmente, solo los grupos SHA-2 y SHA-3 se consideran seguros.
¿Por qué es importante esta tecnología?
Las funciones hash convencionales tienen una amplia gama de usos, incluyendo búsquedas en bases de datos, análisis de archivos grandes y gestión de datos. Por otro lado, las funciones hash criptográficas se utilizan ampliamente en aplicaciones de seguridad de la información, como la autenticación de mensajes y la huella digital. En lo que respecta a Bitcoin, las funciones hash criptográficas son una parte integral del proceso de minería y también juegan un papel en la generación de nuevas direcciones y claves.
El verdadero poder de la función hash se revela al trabajar con grandes cantidades de información. Por ejemplo, puedes ejecutar un archivo grande o un conjunto de datos a través de una función hash y luego usar sus resultados para verificar rápidamente la precisión e integridad de los datos. Esto es posible debido a la naturaleza determinista de las funciones hash: la entrada siempre resulta en una salida comprimida y simplificada (el hash). Este método elimina la necesidad de almacenar y "memorizar" grandes volúmenes de datos.
El hash es particularmente útil en el contexto de la tecnología blockchain. La blockchain de Bitcoin tiene varias operaciones relacionadas con el hash, la mayoría de las cuales se realizan en el proceso de minería. De hecho, casi todos los protocolos de criptomonedas dependen del hash para vincular y combinar grupos de transacciones en bloques y para crear vínculos criptográficos entre cada bloque, creando así una cadena de bloques.
Funciones hash criptográficas
Una vez más, una función hash que utiliza técnicas criptográficas puede definirse como una función hash criptográfica. En general, descifrar una función hash criptográfica requiere muchos intentos de fuerza bruta. Para "desplegar" 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 ocurrirá una "colisión".
Técnicamente, una función hash criptográfica debe cumplir tres propiedades para ser considerada segura. Podemos describirlas como: resistencia a colisiones y resistencia a ataques de primera y segunda preimagen.
Antes de describir cada propiedad, resumamos su lógica en tres oraciones cortas.
Resistencia a colisiones: imposibilidad de encontrar dos entradas diferentes que produzcan el mismo hash.
Primera resistencia a la preimagen: incapacidad para "invertir" la función hash ( encontrar la entrada a través de una salida dada ).
Resistencia a la segunda preimagen: incapacidad para 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 resistente a colisiones hasta que alguien descubre tal colisión. Tenga en cuenta que las colisiones siempre existirán 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 pequeña 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 poderosas que se pueden considerar estables (e.g., SHA-256).
Entre los diferentes algoritmos SHA, los grupos SHA-0 y SHA-1 ya no son seguros porque se han detectado colisiones. Actualmente, solo los grupos SHA-2 y SHA-3 se consideran resistentes a colisiones.
Primera resistencia a la preimagen
Esta propiedad está estrechamente relacionada con el concepto de funciones unidireccionales. Se considera que una función hash es fuerte para encontrar la primera preimagen siempre que haya una probabilidad muy baja de que alguien pueda encontrar la entrada utilizando la salida generada.
Tenga en cuenta que esta propiedad es diferente de la anterior porque el atacante necesita adivinar la entrada en función de una salida específica. Este tipo de colisión ocurre cuando alguien encuentra dos entradas diferentes que producen la misma salida, independientemente de qué entrada particular se utilizó.
La primera propiedad de resistencia a la preimagen es valiosa para la seguridad de los datos, ya que un hash simple de un mensaje puede demostrar su autenticidad sin necesidad de revelar información adicional. En la práctica, muchos proveedores de servicios web y aplicaciones almacenan y utilizan hashes generados a partir de contraseñas en lugar de usarlos en formato de texto.
Resistencia a la segunda imagen
Este tipo de estabilidad se encuentra entre las dos propiedades anteriores. El ataque de segunda preimagen consiste en encontrar una entrada específica con la que es posible generar una salida que ya ha sido generada utilizando otra entrada que se conocía previamente.
En otras palabras, un ataque de segunda preimagen implica detectar 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 es resistente a ataques de segundo preimagen, ya que este último siempre requiere una colisión. Sin embargo, todavía es posible realizar un ataque de primer preimagen en una función tolerante a colisiones, ya que esto implica buscar una entrada con una salida.
Minería
Hay muchos pasos en la minería de Bitcoin que se realizan utilizando funciones hash. Estos incluyen verificar el saldo, vincular las entradas y salidas de las transacciones, y combinar todas las transacciones en un bloque para formar un árbol de Merkle. Pero una de las principales razones por las cuales la cadena de bloques de Bitcoin es segura es que los mineros deben realizar tantas operaciones hash como sea posible para finalmente encontrar la solución correcta para el siguiente bloque.
Un minero debe utilizar varias entradas diferentes al generar un hash para su bloque candidato. Solo será posible verificar el bloque si la salida generada correctamente en forma de hash comienza con un cierto número de ceros. El número de ceros determina la dificultad de la minería y varía según la tasa de hash de la red.
En este caso, el hashrate es una medida de la potencia de cálculo que inviertes en la minería de Bitcoin. Si el hashrate comienza a aumentar, el protocolo de 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, lo que resulta en una caída significativa del hashrate, la dificultad de minería se ajustará para facilitar temporalmente el cálculo ( hasta que el tiempo promedio de formación de bloques vuelva a ser de 10 minutos ).
Tenga en cuenta que los mineros no necesitan buscar colisiones porque hay varios hashes que pueden generar como salida válida ( que comienzan con un cierto número de ceros ). Por lo tanto, hay varias soluciones posibles para un bloque dado, y los mineros solo necesitan encontrar una de ellas, de acuerdo con un umbral determinado por la dificultad de minería.
Dado que la minería de Bitcoin es una tarea costosa, los mineros no tienen razones para engañar al sistema, ya que esto resultaría en pérdidas financieras significativas. En consecuencia, cuanto más mineros se unan a la cadena de bloques, más grande y fuerte se volverá.
Conclusión
No hay duda de que las funciones hash son una de las principales herramientas en la computación, especialmente al trabajar con grandes cantidades de datos. Cuando se combinan con la criptografía, los algoritmos hash pueden ser muy útiles, ya que proporcionan seguridad y autenticación de diversas maneras. Por lo tanto, las funciones hash criptográficas son vitales para casi todas las redes de criptomonedas, y entender sus propiedades y mecanismos de funcionamiento es sin duda útil para cualquier persona interesada en la tecnología blockchain.