¿Qué es y por qué se utiliza el algoritmo RIPEMD-160 en la creación de claves públicas Bitcoin? (VIII)

Llave con códigos

(OroyFinanzas.com) – En este artículo vamos a explicar la función hash RIPEMD-160 que se utiliza en el proceso de creación de direcciones o claves públicas en el protocolo Bitcoin. A diferencia de SHA-256 que es una función hash muy conocida, RIPEMD-160 no lo es tanto, incluso para los entendidos de Bitcoin.

Wikipedia: “RIPEMD-160 (acrónimo de RACE Integrity Primitives Evaluation Message Digest, primitivas de integridad del resumen del mensaje) es un algoritmo del resumen del mensaje de 160 bits (y función criptográfica de hash) desarrollado en Europa por Hans Dobbertin, Antoon Bosselaers y Bart Preneel, y publicados originalmente en 1996. Es una versión mejorada de RIPEMD, el cual estaba basado sobre los principios del diseño del algoritmo MD4, y es similar en seguridad y funcionamiento al más popular SHA-1.

También existen versiones de 128, 256 y 320 bits de este algoritmo, llamadas RIPEMD-128, RIPEMD-256 y RIPEMD-320 respectivamente. La versión 128 bits fue pensada solamente como un reemplazo para el RIPEMD original, que eran también de 128 bits, y en la que habían sido encontradas razones para cuestionar su seguridad. Las versiones de 256 y 320 bits solamente disminuyen la posibilidad de colisiones hash accidentales, y no tienen niveles más altos de seguridad con respecto a RIPEMD-128 y RIPEMD-160.

RIPEMD-160 fue diseñado en la comunidad académica abierta, en contraste con el algoritmo SHA-1, diseñado por la Agencia de Seguridad Nacional estadounidense (NSA). Por otra parte, RIPEMD-160 es un diseño menos popular y está peor estudiado.

Ninguna patente está asociada al RIPEMD-160.

En agosto del año 2004, una colisión hash fue divulgada para el algoritmo RIPEMD original que no afecta al resto de algoritmos.

Los hashes de 160 bits RIPEMD (también llamados resúmenes RIPE del mensaje) se representan típicamente como números en código hexadecimal de 40 dígitos. El resultado de usar RIPEMD-160 con una cadena vacía es éste: 9c1185a5c5e9fc54612808977ee8f548b2258d31.”

¿Por qué se utiliza RIPEMD-160 en la creación de direcciones o claves públicas en el protocolo Bitcoin?

Las únicas personas que parecen haberse preocupado por responder a esta pregunta en internet, según nuestras búsquedas en inglés, son David Schwartz y Oleg Andreev (oleganza en Bitcointalk.org).

Según David Schwartz, RIPEMD-160 fue utilizado porque crea los hash más cortos que se pueden considerar seguros en el proceso de creación de una clave o dirección Bitcoin (por ejemplo, 31uEbMgunupShBVTewXjtqbBv5MndwfXhb). Eso permite que las direcciones públicas Bitcoin puedan ser más cortas y tener “solo” entre 27 a 33 dígitos.

SHA-256, una función hash muy conocida, es utilizada en combinación con RIPEMD-160 porque el uso del protocolo Bitcoin de una dirección pública podría crear riesgos de seguridad por interactuaciones imprevistas entre RIPEMD-160 y ECDSA. ECDSA es el algoritmo de creación de un par de claves privada y pública de Bitcoin. Se asume que la interposición de SHA-256 entre ECDSA y RIPEMD-160 hace casi imposible encontrar colisiones de una dirección pública Bitcoin.

Proceso abreviado de creación de una clave pública Bitcoin

El proceso de creación de una dirección o clave pública Bitcoin consiste de 10 pasos según Bitcoin.it/wiki:

0 – Tener una clave privada ECDSA:
18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725

1 –Seleccionar la clave pública generada por ECDSA: 0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

2 –Hacer un hash con SHA-256 sobre la clave pública:
600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

3 –Hacer un hash con RIPEMD-160 sobre el resultado anterior del hash SHA-256:
010966776006953D5567439E5E39F86A0D273BEE

4 –Añadir el byte de versión delante del hash que ha creado RIPEMD-160 hash (0x00 para Main Network del protocolo Bitcoin): 00010966776006953D5567439E5E39F86A0D273BEE

5 –Hacer un hash SHA-256 sobre el resultado extendido de RIPEMD-160: 445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094

6 –Hacer un hash SHA-256 sobre el hash anterior SHA-256:
D61967F63C7DD183914A4AE452C9F6AD5D462CE3D277798075B107615C1A8A30

7 –Seleccionar los primeros 4 bytes del último hash SHA-256. Ese es el identificador checksum de la dirección pública:
D61967F6

8 –Añadir los 4 bytes del checksum del punto anterior al hash extendidoRIPEMD-160 del punto 4. Esto es una dirección Bitcoin de 25 bytes binaria: 00010966776006953D5567439E5E39F86A0D273BEED61967F6

9 – Convertir el resultado de una cadena de bytes (string en inglés) a una cadena con base58 utilizando el codificado de Base58Check. Y con eso obtenemos finalmente nuestra dirección pública Bitcoin con este formato:
16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

En otro artículo explicaremos en detalle la creación de claves públicas y privadas en el protocolo Bitcoin y su relación con los algoritmos ECDSA, SHA-256 y RIPEMD-160.

© OroyFinanzas.com

© OroyFinanzas.com

Sobre el autor

Alex Preukschat
Autor de BitcoinComic.org - Estudioso del dinero en todos sus formatos con énfasis en el oro y Bitcoin. Twitter @AlexPreukschat
mencionado en: