|
|
Публикувано на 2025-10-17 09:01:55
|
|
|
|

Base58, Base58Check, Bech32 и Bech32m са често използвани формати за кодиране в блокчейн технологията, основно използвани за подобряване на четивността, намаляване на грешките и осигуряване на целостта на данните. Тези четири кода имат своите предимства по отношение на сигурността, съвместимостта и възможностите за корекция на грешки и са важни основи на съвременните блокчейн адресни системи.
Base58
"Base58" е метод за кодиране, изобретен от Сатоши Накамото, който е адаптиран от добре познат метод за кодиране "Base64". Наборът от символи за Base64 включва: всички числа, главни и малки букви, както и два символа ("+" и "/"); Общо 64 знака. Сатоши Накамото премахна числото 0, главните букви I и O, малката буква l и символа, и той стана Base58.
Набор от символи: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Base58Check
В сравнение с Base58, кодирането в Base58Check има само едно изчисление повече за контролна сума. Както е показано по-долу:
Base58Check решава проблемите с податливостта на грешки, трудно разпознаваемото и непроверено в традиционните методи за кодиране, предоставяйки сигурен, компактен, приятелски настроен към хората и откриващ грешки метод за представяне на ключови данни в блокчейна (като адреси и частни ключове). Въпреки че сега постепенно се заменя от по-напредналия Bech32/Bech32m (за SegWit адреси), той изигра ключова роля в ранната Bitcoin екосистема.
Bech32
"Bech32" е метод за кодиране, дефиниран от BIP 0173, автор на който са Питер Вуил и Грег Максуел. Въпреки това, това кодиране има и своите корени: "Bech" се отнася до "BCH" – цикличен алгоритъм за корекция на грешки, изобретен от трима математици съответно през 1959 и 1960 г. (името BCH идва от имената на тези трима математици). "32" означава, че наборът от символи на метода за кодиране съдържа само 32 знака: малки букви и цифри, без числата "1", буквите "b", "i" и "o".
В началото на BIP 0173 авторите посочват нежеланите аспекти на Base58:
- Base58 използва както големи, така и малки букви английски букви, което прави данните му да се изчерпват в QR кодове не в по-малкия режим "числова азбука", а само в по-големия режим "byte data".
- Използването както на калъф, така и на калъф също затруднява транскрибирането, писането и четенето на клавиатурата на телефона.
- Контролната сума изискваше две последователни операции с SHA256, които бяха бавни и нямаха възможност да локализират грешното място.
- Повечето локализиращи методи за кодиране на грешки работят само ако размерът на набора от знаци е с основна степен, а 58 не е просто степен.
- Base58 е по-сложен за декодиране и по-бавен за декодиране.
В резултат на това новият подход на Bech32 използва само малки букви и цифри; Когато е необходимо, например при рисуване на QR код, тези букви могат да бъдат заменени с главни букви за по-компактно представяне. По-малките QR кодове, тъй като адресите на Bech32 са единствени, можете да ги кодирате като QR кодове в алфанумеричен режим. Това означава, че можеш да създадеш по-компактен QR код, защото Base58 изисква главни и малки букви (което означава, че не можеш да използваш буквено-цифров режим), докато Bech32 не го прави. Както е показано по-долу:
Както виждате, въпреки адреса Bech32Съдържа повече знаци, но възможността за използване на буквено-цифрови модели означава, че QR кодовете използват по-малко данни като цяло。
В същото време Bech32 има способността да открива грешки: може не само да открие, че сте направили грешка при копиране, но и да посочи кои битове сте копирали неправилно (тази способност за намиране на грешки е много по-добра от Base58).
Всъщност алгоритъмът BCH има и функция за "корекция на грешки": той може не само да показва кои битове сте копирали неправилно, но и какви символи трябва да са. Въпреки това, авторите на BIP 0173 откриха неговите присъщи опасности: от една страна, засилването на корекцията на грешки отслабва способността за откриване на грешки; От друга страна, ако потребителят се доверява твърде много на възможностите за корекция на грешки на софтуера, софтуерът може да коригира грешните данни, въведени от потребителя, в "валиден, но безполезен" парче данни – въпреки че те са валидни като част от BCH кодирани данни; Възможно е обаче възстановеният биткойн скрипт да не е под контрола на получателя или дори на когото и да било. Това е изключително опасно. Затова BIP 0173 предупреждава: "Освен че напомня на потребителите кои битове може да са били копирани неправилно, софтуерът не трябва да внедрява възможности за корекция на грешки (да дава предложения за корекция)." ”
Освен това, Bech32 следва модела, открит в кодирането на Base58:
1. Bech32 данните започват с параграф "data with meaning (hrp)", подобно на префикса в Base58, който може да посочи какъв тип данни представляват. HRP може да използва много повече от 32 знака; Bech32 също използва числото "1" като разделител, за да отдели HRP от данните, които всъщност трябва да бъдат декодирани. Освен Биткойн, има много други проекти, които също са възприели Bech32; HRP се използва за разграничаване на данни от различни елементи. Ето списък с регистрирани HRPs, който е много интересен (но само интересен). 2. Bech32 също проектира контролна сума, която заема последните 6 знака от кодираните данни.
Bech32m
"Bech32m" е метод за кодиране, дефиниран от BIP 0350. Връзка:Входът към хиперлинк е видим.Тя беше предложена, защото разработчиците откриха уязвимост в кода на Bech32:
Когато последният символ е "p", вмъкването или премахването на произволен брой "q" пред този знак няма да причини грешка в контролната сума (данните все пак ще се считат за валидни), тогаваМеханизмът на контролната сума напълно губи своята функцияСвършвам.
Ако не добавите стандартизиран Bitcoin скрипт, този проблем може лесно да се реши: както P2WPKH адресът, така и P2WSH адресът имат определена дължина, просто добавете проверката за дължина. Въпреки това, като се има предвид, че в бъдеще ще добавяме и нови стандартизирани скрипти, дължината на адреса може да се промени, затова е необходимо да се реши този проблем.
Bech32m решава този проблем, като променя параметър в генератора на контролна сума Bech32.
В момента Bech32m се използва само за кодиране на адреси на "P2TR" скриптове, добавени с ъпгрейда "Taproot". Може да се използва в адресното кодиране на други стандартизирани скриптове в бъдеще.
Препратка:
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим. |
Предишен:tiktok, Douyin залавят пакета и унищожават скрипта на Frida, който може да открие местоположението на пача с файла SOСледващ:Въведение в типовете биткойн адреси Legacy, Nested SegWit, Native SegWit и Taproot
|