Base58

Base58 es una familia de codificaciones de binario a texto que utiliza 58 caracteres alfanuméricos. El alfabeto de Bitcoin es 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz. Omite 0, O, I y la l minúscula para reducir confusiones visuales, y evita puntuación y espacios.[1]
Base58 es una codificación, no cifrado ni derivación de claves. Codificar una clave privada no calcula su clave pública y decodificar una cadena no demuestra que los datos sean válidos para una aplicación.
Codificación
La secuencia de bytes se interpreta como un entero grande y se divide repetidamente entre 58; los restos seleccionan símbolos del alfabeto. Los bytes cero iniciales se representan con caracteres 1 iniciales. La decodificación invierte la conversión.
Base58 por sí solo no detecta errores. Base58Check combina normalmente un byte de versión o prefijo con una carga útil y añade como suma de comprobación los primeros cuatro bytes de un doble hash SHA-256 antes de codificar.[2] La suma detecta muchos errores accidentales, pero no es una firma digital.
Variantes y compromisos
“Base58” no identifica un único alfabeto universal. El base58btc de Bitcoin y el Base58 de Flickr ordenan los caracteres de forma distinta; un texto de una variante no debe decodificarse con otra solo porque ambas usan 58 símbolos.[3]
Como 58 no es una potencia de dos, los símbolos no se alinean con grupos fijos de bits o bytes. Un codificador general realiza conversión de base sobre el entero completo, no agrupación directa de bits como Base64. Se obtienen identificadores compactos y sin puntuación, pero resulta menos cómodo para datos binarios largos; esta es una razón por la que los formatos de dirección Bitcoin más nuevos usan base 32.[4]
Usos en Bitcoin
Base58Check se usa en direcciones Bitcoin P2PKH y P2SH heredadas, en Wallet Import Format (WIF) para claves privadas y en BIP 32 para claves públicas y privadas extendidas serializadas.[5] El software debe validar longitud y prefijo tras decodificar.
Los descriptores de Bitcoin Core documentan los prefijos visibles de mainnet 1 para P2PKH y 3 para P2SH; P2PKH de testnet puede empezar por m o n, y P2SH de testnet por 2.[6] Son consecuencias de bytes de versión codificados, no caracteres que puedan añadirse o quitarse manualmente con seguridad.
Las direcciones SegWit nativas usan Bech32. BIP 173 introdujo Bech32 para la versión witness 0 y señaló limitaciones de Base58, como el coste de mayúsculas y minúsculas mezcladas en códigos QR.[4] BIP 350 especificó Bech32m para las versiones 1 a 16; la versión 0 sigue usando Bech32.[7]
Base58 distingue mayúsculas y minúsculas. Cambiar una letra, quitar un 1 inicial o sustituir un símbolo altera los bytes o hace fallar la suma de comprobación.
Véase también
Referencias
- ↑ Bitcoin Core, “base58.h”, consultado el 15 de septiembre de 2026.
- ↑ Bitcoin Developer Reference, “Transactions: Address Conversion”, consultado el 15 de septiembre de 2026.
- ↑ Multiformats, “Multibase table”, consultado el 15 de septiembre de 2026.
- ↑ 4,0 4,1 BIP 173: Base32 address format for native v0-16 witness outputs, consultado el 15 de septiembre de 2026.
- ↑ BIP 32: Hierarchical Deterministic Wallets, consultado el 15 de septiembre de 2026.
- ↑ Bitcoin Core, “Output Script Descriptors”, consultado el 15 de septiembre de 2026.
- ↑ BIP 350: Bech32m format for v1+ witness addresses, consultado el 15 de septiembre de 2026.