Glosario / Direcciones y claves
Base58Check
También se conoce como Base58.
- ¿Qué es Base58Check?
- Base58Check, la codificación de texto original de bitcoin, convierte datos binarios en una cadena de caracteres escrita con 58 símbolos fáciles de transcribir y añade una suma de comprobación de cuatro bytes para detectar erratas.
El alfabeto elimina los cuatro caracteres que la gente confunde al copiar a mano: el cero, la O mayúscula, la I mayúscula y la l minúscula. Una suma de comprobación de cuatro bytes, tomada de un doble SHA-256 de la carga útil, hace que la billetera rechace una dirección mal escrita en lugar de enviar nada al vacío, con alrededor de una posibilidad entre 4,29 mil millones de que se cuele. Toda dirección que empieza por 1 o por 3 es Base58Check.
Cómo funciona
Toda cadena Base58Check lleva tres piezas. Un byte de versión al principio indica qué clase de datos son, la carga útil del medio lleva los bytes reales, y los cuatro bytes de suma de comprobación del final son los primeros cuatro bytes de SHA-256 aplicado dos veces a la versión y a la carga útil juntas. Después, el resultado se escribe en base 58 en lugar de en base 16, lo que lo acorta considerablemente y elimina los glifos ambiguos.
El byte de versión es lo que produce los conocidos caracteres iniciales. La versión 0x00 marca una dirección pay-to-public-key-hash, que empieza por 1; la versión 0x05 marca una dirección pay-to-script-hash, que empieza por 3; la versión 0x80 marca una clave privada en formato de importación de billetera, que empieza por 5, K o L. Las claves extendidas usan en cambio una versión de cuatro bytes, 0x0488B21E, y por eso toda xpub empieza por esas cuatro letras.
Los bytes cero a la izquierda reciben un tratamiento especial, porque de lo contrario la conversión de base los descartaría. Cada byte 0x00 al comienzo de la carga útil se escribe como un carácter "1" adicional, y por eso algunas direcciones heredadas (legacy) son más cortas o más largas que sus vecinas pese a llevar la misma cantidad de datos.
Dónde aparece
Base58Check está en todas partes en la primera década de bitcoin y en ninguno de sus formatos más nuevos. Las direcciones heredadas, las direcciones pay-to-script-hash, las claves privadas WIF y las claves extendidas xprv y xpub que usted exporta desde una billetera lo usan todas. Nada que empiece por bc1 lo usa.
Dos propiedades explican tanto su popularidad como su abandono. La seguridad en la transcripción era el objetivo: el alfabeto se diseñó para que una dirección leída en voz alta, copiada de una pantalla o estampada en una placa de metal sobreviva a la manipulación humana, y la suma de comprobación convierte los errores restantes en rechazos en lugar de pérdidas. Pero la codificación distingue mayúsculas de minúsculas, lo que obliga a un código QR a usar el modo de bytes en lugar del modo alfanumérico, más compacto, y solo puede decirle a usted que algo está mal, nunca qué ni dónde.
Base58Check frente a Bech32
Base58Check detecta errores y bech32 los corrige. Bech32, especificado en el BIP-173 y adoptado para las direcciones SegWit nativas en 2017, usa un alfabeto de 32 caracteres sin ninguna mayúscula, de modo que toda la cadena de caracteres cabe en el modo alfanumérico de QR y se escanea desde una imagen más pequeña. Su suma de comprobación BCH garantiza la detección de hasta cuatro caracteres erróneos y puede señalar qué posiciones son sospechosas, en lugar de simplemente fallar.
El sucesor necesitó su propio parche. Una debilidad de extensión de longitud en la suma de comprobación original de bech32 hacía que ciertas direcciones pudieran ganar o perder un carácter final sin que se detectara, así que el BIP-350 definió bech32m, que cambia una constante y es lo que usan las direcciones Taproot que empiezan por bc1p. Base58Check sigue siendo válido y seguirá funcionando indefinidamente, pero en él no se están definiendo nuevos tipos de dirección.