Skip to main content

Hash | Bitcoin Glossary | Mapping Bitcoin

Hash

Criptografía

Also known as: digest

Salida de longitud fija generada por función hash. Bitcoin usa SHA-256 en bloques y transacciones. Un cambio mínimo en el input altera el hash totalmente.

Descripción General

Un hash es la salida de una función hash: una cadena de caracteres de tamaño fijo que representa de forma única una entrada de cualquier tamaño. En Bitcoin, los hashes se utilizan de manera generalizada: para identificar transacciones, para vincular bloques entre sí, para crear el puzzle de prueba de trabajo, y para derivar direcciones a partir de claves públicas. El hash a menudo se describe como una "huella digital" porque incluso un cambio mínimo en la entrada produce una salida completamente diferente.

Propiedades de un Buen Hash

Entrada: "Hello"        → SHA-256 → 185f8db32271fe25f561a6fc938b2e26...
Entrada: "Hello."       → SHA-256 → 2d8bd7d9bb5f85ba643f0110d50cb506...
Entrada: "hello"        → SHA-256 → 2cf24dba5fb0a30e26e83b2ac5b9e29e...

Observaciones clave:
1. Longitud fija: Siempre 256 bits (64 caracteres hexadecimales) sin importar el tamaño de la entrada
2. Determinista: La misma entrada siempre produce el mismo hash
3. Efecto avalancha: Pequeño cambio en la entrada → hash completamente diferente
4. Unidireccional: No se puede recuperar la entrada a partir del hash
5. Resistente a colisiones: Prácticamente imposible encontrar dos entradas diferentes
   que produzcan el mismo hash

Cómo Bitcoin Utiliza los Hashes

IDs de transacción (TXIDs): Cada transacción se identifica mediante el hash doble SHA-256 de sus datos serializados. Esto proporciona un identificador compacto y único para cada transacción.

Hashes de bloque: Cada bloque se identifica mediante el hash doble SHA-256 de su encabezado de 80 bytes. Este hash debe estar por debajo del objetivo actual para que el bloque sea válido (prueba de trabajo).

Vinculación de la blockchain: Cada encabezado de bloque contiene el hash del bloque anterior, creando una cadena irrompible:

┌──────────┐    ┌──────────┐    ┌──────────┐
│ Bloque N │    │ Bloque N+1    │ Bloque N+2
│          │    │          │    │          │
│ Prev: ◄──┼────│ Prev: ◄──┼────│ Prev:    │
│ Hash     │    │ Hash     │    │ Hash     │
│          │    │          │    │          │
│ Merkle   │    │ Merkle   │    │ Merkle   │
│ Root     │    │ Root     │    │ Root     │
└──────────┘    └──────────┘    └──────────┘

Árboles de Merkle: Los hashes de transacción se emparejan y se hashean repetidamente para formar un árbol de Merkle, con el hash raíz incluido en el encabezado del bloque.

Generación de direcciones: Las direcciones de Bitcoin se derivan hasheando las claves públicas mediante SHA-256 y RIPEMD-160.

Funciones Hash Usadas en Bitcoin

  • SHA-256: Usado para minería (doble SHA-256), IDs de transacción y árboles de Merkle
  • RIPEMD-160: Usado en combinación con SHA-256 para generar hashes de dirección más cortos (HASH160)
  • SHA-512: Usado en HMAC-SHA512 para la derivación de claves de billetera HD
  • SipHash: Usado internamente para operaciones de tabla hash para prevenir ataques DoS

Conceptos Erróneos Comunes

  • Un hash no es cifrado. El cifrado es reversible con la clave correcta; el hashing es un proceso unidireccional.
  • Si bien las colisiones (dos entradas con el mismo hash) son teóricamente posibles, encontrar una para SHA-256 es computacionalmente inviable con la tecnología actual.
  • El término "hash" en la minería de Bitcoin se refiere a un solo intento de calcular el hash del encabezado de un bloque con un valor de nonce particular.