# ¿Qué es una función hash?

Las funciones matemáticas que ayudan a que Bitcoin funcione

Category: Minería
Source: https://strike.me/int/es/learn/what-is-a-hash-function/

---

Las funciones hash son funciones matemáticas que se utilizan en criptografía, seguridad de la información y finanzas. Gracias a sus propiedades únicas y a su fiabilidad, se utilizan en Bitcoin para la seguridad, la privacidad y las operaciones de minería de Bitcoin.

![](https://www.datocms-assets.com/99305/1704930845-learn-what-is-a-hash-function-state-hero.png)

Una función hash toma una entrada y produce una salida (llamada «hash»). La entrada puede ser información de cualquier tamaño, mientras que la salida siempre tendrá una longitud fija, normalmente como una secuencia de números y letras. 

Es algo parecido a una máquina: las materias primas son las entradas y un producto terminado de tamaño estándar es la salida.

Las formas específicas en que las funciones hash toman entradas para producir hashes, así como las relaciones únicas entre entradas y hashes, han propiciado su uso generalizado en distintos sectores. Estas son las características importantes de las funciones hash: 

1. **Entrada variable, salida fija:** Independientemente de la longitud de la entrada —ya sea un solo carácter o un libro entero—, el hash producido siempre tendrá la misma longitud. Esta uniformidad de las salidas es fundamental para que el almacenamiento y el procesamiento sean predecibles.
2. **Determinista:** Dada una entrada concreta, una función hash siempre producirá exactamente el mismo hash, sin importar cuántas veces la repitas. Esta reproducibilidad resulta útil para fines de verificación, ya que cualquier cambio en la entrada, como cambiar una sola letra de un libro, producirá un hash diferente.
3. **Unidireccional:** Las funciones hash están diseñadas para funcionar en una sola dirección: puedes usar una entrada para producir un hash, pero no puedes tomar un hash y averiguar cuál fue su entrada. Aunque el proceso de generar un hash a partir de una entrada es rápido y sencillo, el proceso inverso de generar la entrada a partir de un hash es, a todos los efectos prácticos, imposible.
4. **Impredecibilidad del hash:** Es imposible predecir el hash de una entrada determinada sin procesarla realmente mediante la función hash. Esta impredecibilidad es una característica de seguridad, ya que impide que posibles atacantes deduzcan la entrada con solo observar el hash.
5. **Resistente a colisiones:** Dos entradas diferentes no deberían producir el mismo hash, lo que se conoce como una «colisión».  
6. **Asimetría entre creación y verificación:** Dado que el hash es impredecible, crear un hash con características específicas (como un hash que empiece por 5 ceros: «00000») requiere muchos recursos computacionales y tiempo. La única forma conocida de hacerlo es mediante prueba y error, ejecutando simplemente la función hash una y otra vez con nuevas entradas. Sin embargo, una vez encontrada una entrada que produce el hash deseado, comprobar que la entrada corresponde al resultado es rápido y sencillo. Esta asimetría entre producir un hash específico y verificar su validez es especialmente importante en los sistemas que dependen de la prueba de trabajo (minería de Bitcoin).

Puedes imaginarlo como una biblioteca municipal que imprime un sello único en cada uno de sus libros y que recoge por completo toda la información de ese libro. Aunque algunos libros son relatos cortos (datos de entrada pequeños) y otros son novelas extensas (datos de entrada grandes), el sello (también llamado hash) siempre tiene exactamente el mismo tamaño. Las copias idénticas de un libro siempre tendrán sellos idénticos, pero cambiar una sola letra del libro cambiará por completo su sello. Además, es muy fácil comprobar si un libro y un sello coinciden, pero si solo tienes un sello, no hay forma de determinar a qué libro pertenece.

![](https://www.datocms-assets.com/99305/1707356681-learn-what-is-the-strike-api-state-hero.png)

## ¿Cómo utiliza Bitcoin las funciones hash?
Bitcoin utiliza funciones hash en sus operaciones, entre ellas la minería de Bitcoin, la integridad de la información y la generación de direcciones de Bitcoin.

La función hash más utilizada en Bitcoin se llama «SHA-256» (también conocida como algoritmo de hash seguro de 256 bits). Esta función hash es un estándar del sector que se utiliza ampliamente en la banca, la seguridad de la información y las redes de comunicación. Lo más probable es que, si haces clic en el icono 🔒 del navegador web junto a la URL del sitio web y consultas el certificado de seguridad del sitio, descubras que utiliza SHA-256 para proteger tu conexión.

A continuación se muestran las diferentes formas en que se utilizan las funciones hash en Bitcoin.

### Minería de Bitcoin 
La minería de Bitcoin es un proceso que cumple el doble objetivo de procesar transacciones y poner nuevos bitcoins en circulación. Consiste en que los ordenadores (también llamados mineros) utilizan su capacidad de cálculo (también llamada potencia de hash) para producir hashes y competir por añadir el siguiente bloque de transacciones a la cadena de bloques de Bitcoin, a cambio de una recompensa en nuevos bitcoins. Es un sistema que democratiza la actualización del registro de transacciones de Bitcoin sin depender de ninguna autoridad central.

¿Cómo funciona?

Los mineros utilizan entradas para intentar producir un hash con propiedades específicas (un determinado número de ceros al principio), definidas por el software de Bitcoin. La entrada incluye información fija y variable:
1. **Información fija:** La versión del software de Bitcoin, el hash del bloque anterior, el hash de las transacciones del bloque más reciente (también llamado «raíz de Merkle»), una marca de tiempo y el nivel de dificultad requerido establecido por el software de Bitcoin.
2. **Información variable:** Un número llamado «nonce».

Dado que los hashes son impredecibles, la única forma de producir un hash deseado es mediante prueba y error, volviendo a ejecutar la función hash con un nuevo nonce variable. El primer minero que produce un hash válido difunde su hallazgo y gana el derecho a añadir el siguiente bloque a la cadena de bloques. Aunque es difícil producir el hash deseado, comprobar si es válido resulta muy fácil, por lo que la verificación es sencilla. 

El software de Bitcoin ajusta automáticamente la dificultad de este proceso de cálculo de hashes modificando el número de ceros iniciales requeridos en el hash objetivo, para garantizar que, en promedio, se añadan nuevos bloques cada 10 minutos.

### Garantizar la integridad de la cadena de bloques
Las funciones hash se utilizan para garantizar la integridad de los datos dentro de cada bloque. Cada bloque de la cadena de bloques contiene el hash del bloque anterior, que a su vez contiene el hash de su bloque anterior, y así sucesivamente, formando una «cadena» ininterrumpida de bloques (también llamada cadena de bloques) que se remonta hasta el origen de Bitcoin. 

Alterar la información de cualquier bloque anterior cambiaría drásticamente su hash y, en consecuencia, el hash de cada bloque posterior, ya que todos están conectados mediante hashes secuenciales.

Esto hace que manipular los datos de los bloques sea prácticamente imposible, ya que cualquier cambio se detectaría fácilmente y todos los participantes de la red lo rechazarían de inmediato.

### Garantizar la integridad de las transacciones
Las funciones hash se utilizan para mantener la integridad de los datos de las transacciones dentro de cada bloque. Para ello se utiliza una estructura de datos llamada «árbol de Merkle», que permite estructurar y organizar hashes.

Estos son los conceptos básicos de cómo se convierten las transacciones en hashes dentro de los árboles de Merkle:
1. **Crear el hash de la transacción:** Se calcula el hash de cada transacción dentro de un bloque de Bitcoin.
Desde una perspectiva general, esa cifra es suficientemente aproximada, pero técnicamente es ligeramente inferior. **Emparejar hashes:** A continuación, los hashes individuales de las transacciones se agrupan por pares y se calcula su hash conjunto.
3. **Repetir el emparejamiento:** El proceso de emparejar y calcular hashes se repite una y otra vez utilizando los hashes resultantes del paso anterior.
4. **Crear una raíz de Merkle:** El proceso iterativo continúa hasta que queda un único hash final, llamado «raíz de Merkle», que se almacena en la cabecera del bloque.

La «raíz de Merkle» representa un resumen completo de todos los datos de transacciones del bloque. Es una forma rápida y eficiente en términos de espacio de resumir datos, y puede utilizarse para verificar si una transacción específica está incluida en un bloque sin necesidad de disponer de todos los datos del bloque. También puede evitar la manipulación, ya que cualquier cambio mínimo en los datos de una transacción cambiará por completo el hash de esa transacción y todos los hashes posteriores, incluida la raíz de Merkle. 

### Gestionar claves privadas y públicas
Una clave privada es un código numérico secreto generado aleatoriamente que se utiliza para firmar transacciones y demostrar la propiedad y el control sobre los bitcoins asociados a una dirección de Bitcoin específica. 
Esta clave privada se somete a una serie de transformaciones criptográficas, incluido el cálculo de un hash, para producir una clave pública. Este proceso garantiza que, aunque la clave pública se pueda compartir libremente, la clave privada, que es fundamental para acceder a los bitcoins y transferirlos, permanezca en secreto y sea inviable derivarla a partir de la información pública. 

### Generar direcciones de Bitcoin
Bitcoin utiliza una combinación de SHA-256 y otra función hash llamada RIPEMD-160 para generar direcciones de Bitcoin. La clave pública de un usuario, que se deriva de su clave privada, primero se somete a un cálculo de hash mediante SHA-256 y, después, el hash resultante se vuelve a calcular mediante RIPEMD-160. Este proceso de dos pasos, que a menudo se combina con una suma de comprobación para detectar errores, genera la dirección de Bitcoin que se utiliza para enviar bitcoins.

From Strike's Learn library — https://strike.me/int/es/learn/
