Base58

Base58 — семейство способов преобразования двоичных данных в текст с помощью 58 букв и цифр. Алфавит Bitcoin: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz. В нём нет 0, O, I и строчной l, чтобы уменьшить зрительную неоднозначность; также исключены пробелы и знаки пунктуации.[1]
Base58 — кодирование, а не шифрование и не получение ключей. Кодирование закрытого ключа не вычисляет открытый ключ, а декодирование строки не доказывает пригодность данных для конкретной программы.
Кодирование
Последовательность байтов рассматривается как большое целое число и многократно делится на 58; остатки выбирают символы алфавита. Начальные нулевые байты в варианте Bitcoin представлены начальными символами 1. Декодирование выполняет обратное преобразование.
Обычный Base58 не обнаруживает ошибок. Base58Check обычно соединяет байт версии или префикс с полезными данными, добавляет первые четыре байта двойного SHA-256 как контрольную сумму и затем кодирует результат.[2] Контрольная сумма обнаруживает многие случайные ошибки, но не является цифровой подписью.
Варианты и компромиссы
«Base58» не обозначает единственный универсальный алфавит. Варианты base58btc Bitcoin и Base58 Flickr используют разный порядок символов, поэтому текст одного варианта нельзя декодировать другим только потому, что в обоих 58 знаков.[3]
Поскольку 58 не является степенью двойки, символы не соответствуют фиксированным группам входных битов или байтов. Общий кодировщик выполняет преобразование основания всей большой числовой величины, а не прямую группировку битов, как Base64. Получаются компактные идентификаторы без пунктуации, но для длинных двоичных данных метод менее удобен; это одна из причин применения основания 32 в новых форматах адресов Bitcoin.[4]
Применение в Bitcoin
Base58Check используется для старых адресов P2PKH и P2SH, для закрытых ключей в Wallet Import Format (WIF) и в BIP 32 для сериализации расширенных открытых и закрытых ключей.[5] Программа должна проверять длину и ожидаемый префикс декодированных данных.
Дескрипторы Bitcoin Core документируют видимые префиксы основной сети: 1 для P2PKH и 3 для P2SH; P2PKH testnet может начинаться с m или n, а P2SH testnet — с 2.[6] Это следствие закодированных байтов версии, а не символы, которые можно безопасно добавлять или удалять вручную.
Нативные адреса SegWit используют Bech32. BIP 173 ввёл Bech32 для witness версии 0 и описал недостатки Base58, включая цену смешанного регистра в QR-кодах.[4] BIP 350 определил Bech32m для witness версий 1–16; версия 0 продолжает использовать Bech32.[7]
Base58 чувствителен к регистру. Изменение буквы, удаление начального 1 или замена символа меняет байты либо приводит к ошибке контрольной суммы.
См. также
Примечания
- ↑ Bitcoin Core, “base58.h”, проверено 15 сентября 2026 года.
- ↑ Bitcoin Developer Reference, “Transactions: Address Conversion”, проверено 15 сентября 2026 года.
- ↑ Multiformats, “Multibase table”, проверено 15 сентября 2026 года.
- ↑ 4,0 4,1 BIP 173: Base32 address format for native v0-16 witness outputs, проверено 15 сентября 2026 года.
- ↑ BIP 32: Hierarchical Deterministic Wallets, проверено 15 сентября 2026 года.
- ↑ Bitcoin Core, “Output Script Descriptors”, проверено 15 сентября 2026 года.
- ↑ BIP 350: Bech32m format for v1+ witness addresses, проверено 15 сентября 2026 года.