Що таке public key: як відкриті ключі пов’язані з адресами

Що таке public key: як відкриті ключі пов'язані з адресами

Як відкритий ключ з’являється з приватного

У Bitcoin та Ethereum контроль над звичайним акаунтом починається з приватного ключа — випадково згенерованого числа в допустимому діапазоні кривої secp256k1. Його подання зазвичай має 256 бітів, а десятковий запис може містити до 78 цифр. Приватний ключ не можна розкривати: той, хто його отримав, може створювати підписи від імені власника. Загальну логіку мережі пояснює матеріал про блоки, транзакції та вузли. Саме тому мнемонічна фраза seed phrase потребує такого ж ретельного збереження, як і сам приватний ключ.

Абстрактна візуалізація перетворення приватного ключа у відкритий через еліптичну криву

Приватний ключ проходить через математичну функцію на основі еліптичної кривої secp256k1 і перетворюється на відкритий ключ. Цей процес односторонній: за відкритим ключем неможливо обчислити приватний, навіть маючи потужні комп’ютери. Саме ця властивість лежить в основі безпеки блокчейнів Bitcoin та Ethereum.

Для secp256k1 відкритий ключ є точкою з координатами X і Y. У поширеному SEC-поданні незжатий ключ займає 65 байтів і починається з 0x04, а стиснений — 33 байти й починається з 0x02 або 0x03. Ethereum під час обчислення адреси використовує 64 байти координат без префікса. Формати інших мереж і алгоритмів можуть відрізнятися.

Від public key до блокчейн-адреси: що відбувається всередині

Адреса гаманця, яку ви бачите в інтерфейсі обмінника або гаманця, — це вже не сам відкритий ключ, а його подальше перетворення. Цей ланцюжок перетворень залежить від конкретної криптовалюти, хоча загальна логіка схожа.

Ілюстрація ланцюжка хешування відкритого ключа в блокчейн-адресу

У Bitcoin відкритий ключ спочатку хешується алгоритмом SHA-256, а результат — алгоритмом RIPEMD-160. Отримане 160-бітне значення називають хешем відкритого ключа. До нього додається префікс мережі (0x00 для основної мережі Bitcoin), і все це кодується у форматі Base58Check з контрольною сумою. На виході з’являється знайома адреса, що починається з «1» — P2PKH-адреса.

Ethereum використовує інший підхід. Відкритий ключ хешується функцією Keccak-256, і з отриманих 256 бітів беруться останні 160 бітів — 20 байтів. Це значення записується у шістнадцятковому форматі з префіксом «0x». На відміну від Bitcoin, Ethereum-адреса не містить контрольної суми у вихідному вигляді, хоча згодом з’явився стандарт EIP-55, який використовує регістр літер для перевірки цілісності.

Чому адреса не дорівнює відкритому ключу

Багато початківців плутають ці поняття, і це зрозуміло: обидва значення публічні, обидва використовуються для отримання коштів. Проте між ними є принципова різниця в безпеці та функціональності.

Порівняння відкритого ключа та адреси як різних за складністю структур

Відкритий ключ потрібен для перевірки цифрового підпису. У Bitcoin виходи типу P2PKH і P2WPKH містять хеш відкритого ключа, а сам ключ розкривається під час витрачання. P2SH і P2WSH хешують скрипт, а Taproot публікує вихідний ключ і може приховувати невикористані гілки скрипта. Тому рівень розкриття залежить від типу виходу, а повторне використання адреси погіршує приватність.

Адреса — це закодований і забезпечений контрольною сумою ідентифікатор умов витрачання, а не універсально «обрізаний відкритий ключ». У HD-гаманцях сід-фраза породжує дерево різних приватних і відкритих ключів; нові адреси зазвичай відповідають різним похідним ключам, а не одному й тому самому public key.

Типи адрес і їхній зв’язок із відкритими ключами

Розвиток Bitcoin показав, що одного формату адрес недостатньо. З’явилися нові типи, які по-різному використовують відкриті ключі або взагалі обходяться без них на етапі створення адреси.

Чотири типи біткойн-адрес із різними зв'язками з відкритими ключами
Тип адреси Префікс Як використовується відкритий ключ
P2PKH 1 Хеш відкритого ключа, ключ розкривається при витрачанні
P2SH 3 Хеш скрипта; скрипт і ключі зазвичай розкриваються під час витрачання
Bech32 (P2WPKH) bc1q Хеш відкритого ключа, менший розмір транзакції, SegWit
Bech32m (P2TR) bc1p Taproot: вихідний ключ видно, невикористані гілки скрипта можна приховати

P2TR, активований у листопаді 2021 року, використовує підписи Шнорра та дерево Меркла для скриптів. Відкритий ключ у цьому форматі подається як точка на еліптичній кривій, але логіка витрачання може бути набагато складнішою за просту перевірку підпису. Це покращує приватність і гнучкість смарт-контрактів у Bitcoin.

Ethereum зберігає простішу модель: адреса завжди походить від відкритого ключа, хоча смарт-контракти можуть мати адреси, згенеровані детерміністично з адреси створювача та лічильника транзакцій (nonce). Такі адреси не мають приватного ключа взагалі — їх контролює код контракту.

Практичні наслідки для користувача

Розуміння зв’язку між відкритим ключем і адресою допомагає уникнути кількох типових помилок і краще оцінювати ризики.

Перша помилка — надсилання коштів на адресу, не перевіривши її належність до потрібної мережі. Адреси Bitcoin і Litecoin можуть виглядати схоже, але префікси та мережеві параметри різні. Обмінник може не повернути кошти, надіслані на чужу мережу.

Друга помилка — публікація відкритого ключа замість адреси. Це технічно можливо: ранні транзакції Bitcoin (P2PK) використовували саме відкриті ключі. Проте це погіршує приватність і теоретично знижує безпеку, якщо в майбутньому з’являться квантові атаки на еліптичну криптографію.

Третя ситуація — перевірка адреси перед надсиланням. Формат Base58Check і Bech32 містять контрольні суми, які відловлюють більшість випадкових помилок. Якщо ви помилитеся в одній літері, гаманець або блокчейн-експлорер повідомить про невалідну адресу. Проте це не захищає від цілеспрямованої підміни — наприклад, шкідливого ПЗ, яке замінює адресу в буфері обміну на схожу зловмисника.

Четвертий важливий момент — резервне копіювання. Більшість сучасних гаманців використовують сід-фразу (seed phrase) з 12 або 24 слів за стандартом BIP-39. З неї детерміністично виводяться всі приватні ключі, а відтак — відкриті ключі та адреси. Достатньо зберегти сід-фразу, щоб відновити повний доступ до всіх адрес. Зберігання окремих адрес або відкритих ключів для резервування непотрібне.

Цифровий підпис: де відкритий ключ виконує свою головну роботу

Отримання коштів на адресу — це лише запис у блокчейні. Щоб витратити їх, потрібен цифровий підпис, і тут відкритий ключ стає незамінним.

Візуалізація процесу перевірки цифрового підпису транзакції

Процес виглядає так: гаманець формує транзакцію, хешує її та підписує приватним ключем. Підпис — це пара чисел (r, s), згенерованих з урахуванням приватного ключа та унікального параметра транзакції. Вузли мережі беруть відкритий ключ, перевіряють, що він відповідає адресі, і підтверджують валідність підпису. Якщо все сходиться, транзакція потрапляє до блоку.

Важливо, що підпис залежить від конкретного вмісту транзакції. Зміна будь-якого біта — суми, адреси отримувача, комісії — зробить підпис недійсним. Це запобігає підміні транзакції після підписання. Параметр nonce в Ethereum додатково захищає від повторного відтворення (replay attack): кожна наступна транзакція з тієї ж адреси має містити nonce на одиницю більший за попередню.

У Bitcoin ключ розкривається не для кожного типу входу однаково. Для звичайного P2PKH або P2WPKH-виходу відкритий ключ стає видимим під час витрачання; інші скриптові типи мають власні правила. Не використовувати адресу повторно рекомендують передусім для приватності й простішого обліку, а також щоб не залишати додаткові виходи прив’язаними до вже розкритого ключа.

Квантові комп’ютери та майбутнє відкритих ключів

Алгоритм Шора, теоретично реалізований на достатньо потужному квантовому комп’ютері, здатний розкладати числа на множники та розв’язувати задачу дискретного логарифмування — саме ту, на якій базується еліптична криптографія. Це означає, що відкритий ключ перестане бути «безпечним для розкриття».

Концептуальна ілюстрація квантової загрози для криптографії з відкритими ключами

Алгоритм Шора потребує відкритого ключа. Якщо в ланцюжку опубліковано лише його хеш, така атака не застосовується безпосередньо до ключа до моменту розкриття, хоча це не робить адресу безумовно «квантово безпечною». Ризик також залежить від типу виходу, повторного використання адреси й можливостей майбутніх квантових систем.

Спільноти Bitcoin та інших блокчейнів обговорюють постквантові схеми підпису, але перехід вимагатиме окремих змін протоколу та міграції коштів. Сучасні адресні формати самі по собі не забезпечують повної постквантової готовності. Наразі квантові комп’ютери не здатні зламати застосовані в цих мережах ключі в практичному масштабі.

Як перевірити відкритий ключ своїй адреси

Досвідчені користувачі іноді хочуть переконатися, що гаманець генерує ключі коректно, або відновити відкритий ключ з підписаної транзакції.

У Bitcoin відкритий ключ легко побачити у входах, що витрачають звичайні P2PKH або P2WPKH-виходи. Для P2SH, P2WSH і Taproot склад розкритих даних залежить від використаного шляху витрачання. Експлорер показує ці дані, але для невитраченого P2PKH/P2WPKH-виходу за адресою відомий лише хеш ключа.

Для Ethereum ситуація інша: відкритий ключ можна обчислити з будь-якої підписаної транзакції, оскільки всі транзакції містять підпис і адресу відправника. Інструменти на кшталт etherscan показують відправника як адресу, але за бажання можна екстрагувати повний відкритий ключ із raw transaction.

Технічно підковані користувачі можуть використовувати бібліотеки на кшталт python-bitcoinlib, web3.py або bitcoinjs-lib для самостійної генерації та перевірки ключових пар. Це корисно для аудиту, розробки та навчання, але для повсякденного зберігання коштів надійніше довірити це перевіреному гаманцю з відкритим кодом.

Часті запитання

Чи можна відновити приватний ключ, знаючи public key?

Ні, математично це обчислювально неможливо з використанням сучасних технологій. Задача дискретного логарифмування на еліптичній кривій не має ефективного класичного розв’язку.

Чи безпечно публікувати свій відкритий ключ?

Відкритий ключ не є секретом, але публікувати його без потреби не варто. У Bitcoin краще передавати адресу потрібного типу. В Ethereum адреса не дозволяє відновити повний відкритий ключ до появи підписаної вихідної транзакції, хоча після такої транзакції ключ можна математично відновити з підпису.

Чому адреси різних криптовалют виглядають по-різному?

Різні префікси, алгоритми хешування та кодування. Bitcoin використовує Base58Check і Bech32, Ethereum — шістнадцятковий формат з префіксом 0x. Кожна мережа має власні параметри для уникнення колізій.

Чи може одна адреса мати кілька відкритих ключів?

Для звичайного P2PKH або P2WPKH-виходу адреса пов’язана з хешем одного відкритого ключа. Скриптові адреси P2SH/P2WSH можуть задавати мультипідпис або інші умови з кількома ключами, а Taproot має власну модель ключового й скриптового шляхів.

Що станеться, якщо я надішлю кошти на неправильну адресу?

Якщо адреса невалідна (помилка в контрольній сумі), мережа відхилить транзакцію. Якщо адреса валідна, але не ваша — кошти втрачено безповоротно. Блокчейн не має механізму скасування або повернення.

Тарас пояснює принципи роботи блокчейнів і цифрових активів: архітектуру мереж, механізми консенсусу, призначення токенів, історію проєктів та обмеження технологій. Він спирається на технічну документацію й відкриті дослідження; матеріали не містять прогнозів цін або інвестиційних рекомендацій.

Додати коментар