Blockchain/Nivel II · Mecánica/2.1 Criptografía/Lección 2
HASH160: SHA-256 y luego RIPEMD-160
Un doble hash que acorta las claves y la debilidad que oculta
MaterialesUn explorador de bloques como blockstream.info o blockchain.comUn conjunto de ejemplo de direcciones de BitcoinUn editor de texto o una hoja de cálculo
Curiosidad
- ¿Por qué usaría Bitcoin dos funciones de hash diferentes en secuencia?
- ¿Qué ofrece un hash de 160 bits que uno de 256 bits no ofrece?
- ¿Cómo puede un hash de 20 bytes ser al mismo tiempo seguro y vulnerable?
Explorar
- Una clave pública en bruto en Bitcoin mide 33 bytes una vez comprimida. Esta longitud es demasiado grande para un uso eficiente en transacciones. Para reducirla sin perder la integridad criptográfica, Bitcoin aplica un proceso de dos pasos: SHA-256 seguido de RIPEMD-160. Esta combinación se denomina HASH160 y produce una salida de 160 bits (20 bytes), lo suficientemente compacta para la codificación de direcciones.
- RIPEMD-160, diseñado en 1996 por Hans Dobbertin, Antoon Bosselaers y Bart Preneel, proporciona un resultado más corto que SHA-256 y surgió de un proceso de diseño académico abierto. Primero se aplica SHA-256 a la clave pública (o, en el caso de P2SH, al script), y luego se aplica RIPEMD-160 al resultado obtenido con SHA-256. Esta secuencia ofrece un equilibrio entre seguridad y eficiencia, y se utiliza en los formatos Pay-to-PubKey-Hash (P2PKH), Pay-to-Script-Hash (P2SH) y Pay-to-Witness-PubKey-Hash (P2WPKH).
- El uso de dos funciones hash distintas añade una capa de defensa en profundidad. El anidamiento ayuda principalmente contra los ataques de preimagen, ya que encontrar una clave que coincida con un hash dado significaría superar ambas funciones; no ayuda contra las colisiones, porque cualquier colisión de SHA-256 es también una colisión de HASH160. Sin embargo, 160 bits de salida implica una resistencia a las colisiones de unos 80 bits, lo cual es aceptable para las salidas de direcciones con una sola clave. Se vuelve problemático en scripts compartidos donde contribuyen múltiples partes; de ahí que SegWit y Taproot utilicen valores de 32 bytes para los scripts nativos.
- Una afirmación común es que el hash de la clave protege las monedas contra los futuros ordenadores cuánticos. La protección es parcial: el gasto revela la clave pública, por lo que solo cubre aquellas salidas cuyas claves nunca se han mostrado; la reutilización de direcciones elimina esa protección; y las salidas Taproot colocan una clave pública directamente en la cadena. Un ordenador cuántico capaz amenazaría a cualquier clave expuesta.
- Para construir una dirección de Bitcoin a partir de una clave pública, se aplica HASH160; luego, al resultado se le añade un identificador de red (0x00 para la red principal P2PKH), seguido por una suma de verificación de 4 bytes derivada del doble SHA-256. Esta secuencia de 25 bytes se codifica posteriormente en Base58 para crear una dirección legible por humanos. Esta codificación elimina caracteres ambiguos e incluye una suma de verificación para detectar errores de transcripción.
- Para verlo en la práctica, abra un explorador de bloques y busque una transacción P2PKH. Localice el campo scriptPubKey, que debería incluir el hash de 20 bytes. Compare esto con la clave pública que se revela cuando la salida fue gastada. Verá que la clave pública es más larga, y que el hash es la versión acortada y codificada que se utiliza en la dirección.
Datos clave
- HASH160 es la combinación de SHA-256 seguido de RIPEMD-160.
- La salida de HASH160 es de 160 bits (20 bytes).
- RIPEMD-160 fue diseñado en 1996 por Hans Dobbertin, Antoon Bosselaers y Bart Preneel.
- HASH160 se utiliza en los scripts de salida P2PKH, P2SH y P2WPKH.
- Las salidas de hash de 160 bits ofrecen una resistencia a colisiones de aproximadamente 80 bits.
- El hashing oculta una clave pública solo hasta que se utiliza; las salidas de Taproot muestran la clave directamente.
Ejercicio nueve, seis, tres, uno
9ReunirEnumera 9 direcciones de Bitcoin. Ten en cuenta el formato (que comienza con 1, 3, bc1q, bc1p, etc.) y su longitud en caracteres.
6AgruparAgrupa las 9 direcciones en 6 según su tipo de codificación y tipo de script (por ejemplo, Base58, Bech32, SegWit, etc.).
3DestilarReduce los 6 grupos a 3 principios que expliquen por qué Bitcoin utiliza diferentes formatos de dirección.
1CristalizarEscribe una oración que explique por qué Bitcoin utiliza dos funciones de hash para crear una dirección.
Verificación de hechos
Fechas, cifras y afirmaciones verificadas con las fuentes publicadas que se enumeran a continuación.