Приватні ключі
Як було зазначено раніше, ці криптовалютні гаманці зберігають криптографічні ключі, які дають контроль над певною кількістю криптовалюти.
З цього криптографічного ключа додаток-гаманець може зрозуміти, скільки криптовалют є у користувача, а також вивести минулі транзакції, пов'язані з цим гаманцем. Криптографічний ключ зазвичай називають приватним ключем.
Програма-гаманець - це інструмент, в якому, по суті, зберігається ваш приватний ключ. Саме приватний ключ дає вам контроль за певною кількістю криптовалюти.
Додаток-гаманець некастодіального типу використовує приватний ключ, щоб отримати криптовалютний баланс та історію транзакцій із блокчейну.
Ми не будемо вдаватися до технічних деталей пристрою та роботи приватних ключів. Вам необхідно знати, що під терміном "приватний ключ" зазвичай мається на увазі криптографічний ключ, про який ми згадали раніше.
Нижче, ми трохи детальніше розповімо про аспекти безпеки, щоб дати вам краще розуміння приватних ключів, а також інших пов'язаних аспектів безпеки.
1. Як забезпечити конфіденційність приватного ключа?
Дуже часто шахраї (що видають себе за команду підтримки крипто-гаманця) обманом змушують користувачів ділитися своїми приватними ключами. Коли користувач ділиться ключем, шахрай краде кошти, які є у користувача на балансі.
Не існує абсолютно жодних причин, щоб ви, як користувач програми гаманця, будь-коли повинні були ділитися своїм приватним ключем з будь-ким. Це стосується всіх гаманців.
Ніколи не ділитесь своїм приватним ключем з ким би там не було, навіть при спілкуванні з людьми, які створили додаток-гаманець, яким ви користуєтеся.
Ви можете розкрити свій приватний ключ людині тільки якщо маєте намір передати цій людині у власність свої кошти. Майже всі некастодіальні гаманці надають користувачеві можливість доступу та перегляду приватного ключа прямо в самому додатку-гаманці.
2. Резервна копія ключа
Більшість некастодіальних програм-гаманців відображають приватний ключ під час встановлення програми-гаманця. Програма-гаманець зазвичай запитує, щоб користувач записав приватний ключ і зберіг його десь у безпечному місці поза мережею.
Приватний ключ - це єдиний спосіб відновити доступ до засобів, якщо пристрій, на якому встановлений додаток-гаманець, з якихось причин стає недоступним. його вкрали чи воно просто перестало працювати.
Щоб полегшити створення резервної копії приватного ключа, інженери блокчейн системи вигадали спосіб перетворити приватний ключ на просту послідовність із 12 або 24 звичайних слів.
Більшість вільних гаманців відображають приватний ключ у формі, що піддається читанню, як правило, у вигляді послідовності з 12/24 слів.
Створіть копію приватного ключа і переконайтеся, що у вашій копії немає помилок. Крім самих слів, їх порядок у послідовності не менш важливий.
Якщо ви втратите або ненароком покажете свій приватний ключ будь-кому, то ця людина зможе заволодіти вашою криптовалютою.
Послідовність із 12/24 слів має бути збережена у правильному порядку. Некастодіальний гаманець може зрозуміти, що ви зробили друкарську помилку в одному зі слів і вивести відповідне повідомлення.
Якщо слова будуть розташовані в неправильному порядку, вільний гаманець все одно відновить якийсь випадковий гаманець - він не буде вашим. Тому правильний порядок слів теж не менш важливий.
3. Створення приватного ключа
Коли ви вперше встановлюєте програму-гаманець некастодіального типу, код, на якому працює програма-гаманець, генерує для вас безпечний приватний ключ у випадковому порядку. Для того щоб приватний ключ був дійсно захищеним, дуже важливо, щоб додаток-гаманець згенерував приватний ключ, який буде по-справжньому випадковим.
Якщо приватний ключ, згенерований некастодіальним гаманцем, не буде випадковим, то гаманець не буде захищений.
Це одна з причин, чому некастодіальні гаманці залишають свій код у відкритому доступі. Сторонні інженери згодом можуть провести аналіз коду та перевірити, чи справді додаток-гаманець правильно створює приватні ключі.
Існують такі вебсайти як WalletScrutiny.com, які призначені для того, щоб переконатися в тому, що гаманці, що розміщуються в сервісі Google Play, насправді використовують саме той код, який був опублікований у відкритому доступі.
Будь-який гарний некастодіальний гаманець повинен бути розроблений відповідно до публічних керівних принципів безпеки та стандартів, що застосовуються до додатків-гаманців.
4. Один ключ, багато монет
Інший важливий аспект - один приватний ключ може бути використаний для управління балансами множини криптовалют. При використанні такого ключа, програма-гаманець може автоматично встановити місце розташування балансу всіх підтримуваних програмою криптовалют.
Наприклад, при створенні гаманця в додатку Unstoppable wallet користувач отримує єдиний приватний ключ для 5 видів криптовалют:
- Bitcoin
- Dash
- Bitcoin Cash
- Litecoin
- Ethereum
Лише один приватний ключ використовується для управління безліччю криптовалют, на кожну з яких припадає свій баланс та історія транзакцій.
5. Баланси та транзакції
Як було зазначено вище, існують стандарти для "приватних ключів", вироблених інженерами за роки роботи. Ці стандарти визначають чіткі критерії як додатки гаманці повинні використовувати приватний ключ під час роботи з безліччю криптовалют.
Гаманець використовує ваш приватний ключ, щоб вивести вашу платіжну адресу для кожної окремої криптовалюти. Платіжна адреса - це адреса якої ви ділитеся з іншими користувачами, які бажають заплатити вам криптовалютою.
Додаток-гаманець має бути здатним вивести вашу адресу для Біткоїна, Ефіріуму та багатьох інших криптовалют лише на основі вашого приватного ключа. Різні адреси окремих криптовалют.
При перенесенні приватного ключа в іншу програму-гаманець, яка відповідає загальноприйнятим стандартам, ця інша програма буде виводити ті ж адреси.
Загалом, таким чином гаманець може використовувати приватний ключ, який був використаний в іншому додатку і за допомогою цього ключа відновити баланси і транзакції кількох криптовалют.
Якщо приватний ключ генерується відповідно до стандарту, будь-який гаманець, розроблений з дотриманням стандартів, повинен правильно вивести платіжні адреси та минулі транзакції для всіх підтримуваних додатком криптовалют.
Як тільки додатком стають відомі адреси, скажімо для Біткоїна, він підключається до блокчейну Біткоїна і запускає пошук транзакцій, пов'язаних із цими адресами. В результаті цього процесу додаток-гаманець може відображати баланси та транзакції, пов'язані з цим приватним ключем.
6. Перенесення приватного ключа з одного гаманця до іншого
Хороші некастодіальні гаманці дозволяють здійснювати перенесення приватного ключа з одного гаманця до іншого. Іншими словами, приватний ключ, створений в одному некастодіальному гаманці, має бути сумісним із іншими некастодіальними гаманцями.
Користувач не повинен бути прив'язаний до єдиного провайдера гаманця і повинен вільно здійснювати перенесення в інші гаманці некастодіальні, створені іншими розробниками.
Якщо навіть ваш телефон зламався або програма-гаманець перестає працювати, ваші кошти захищені – ви завжди зможете відновити доступ до вашої криптовалюти, використовуючи приватний ключ. Тимчасових обмежень немає - той самий ключ працюватиме і багато років.
При виборі гаманця, шукайте такий, що відповідає стандартам та підтримує можливість перенесення приватних ключів у/з програми.
Примітка: При переносі вашого приватного ключа з одного гаманця до іншого, вам потрібно переконатися в тому, що той гаманець, в який ви переносите свій ключ, також підтримує всі види криптовалют, які контролюються вашим приватним ключем.
Якщо на балансі вашого приватного ключа є суми в Біткоїнах та Ефіріумі, але гаманець, в який ви переносите ваш приватний ключ, підтримує тільки Біткоїн, то баланс Ефіріуму не відображатиметься в цьому додатку.Він все ще належатиме вам і буде доступний в якомусь іншому гаманці.
Що потрібно знати про приватний ключ Біткоїн (Private Key Bitcoin)
Приватний / закритий ключ Біткоїн (Private Key Bitcoin) - секретна комбінація букв / цифр, що надає доступ до гаманця та криптовалюті в ньому. Застосовується для здійснення незворотних операцій та захисту монет. У разі втрати його не можна відновити. Такою інформацією має володіти лише власник гаманця, адже від цього залежить безпека Bitcoin. Розглянемо, що таке закритий ключ Біткоїн, як він виглядає, для чого потрібен, яким чином генерується і т.д.
Що таке приватний ключ Bitcoin
Private Key Bitcoin - набір цифр і символів, які шифруються в декількох форматах і надають доступ до криптовалютного гаманця. По суті, це 256-бітове число, створюване у випадковому порядку при створенні облікового запису в сховищі для Біткоін. Кодування може здійснюватися у багатьох форматах, серед яких WIF (звичайний, стислий), MINI, Base64 та інші.
Використовується паралельно з публічним (відкритим) ключем, але, на відміну від нього, зберігається тільки у власника і не розголошується. Для порівняння Public Key Біткоїн використовується для проведення транзакцій та передачі іншим користувачам. Маючи під рукою Private Key, можна дізнатися публічний, але за наявності відкритого ключа отримає доступ до закритого не вийде.
Характеристики:
- Функція – доступ до гаманця, цифровий підпис.
- Вигляд – від 44 до 64 символів залежно від шифрування.
- Спосіб зберігання – доступність лише власнику, повна конфіденційність.
- Варіант отримання – генератор закритих ключів, створення індивідуального номера.
- Безпека – неможливість отримання інформації з публічного ключа чи інших джерел.
Для порівняння публічний ключ застосовується як адреса для відправки, має максимум 34 символи, знаходиться у відкритому доступі та генерується з Private Key. Інформацію можна отримати з реєстру блокчейн-ланцюга.
Як виглядає
Приватний Біткоїн-ключ - спеціальний пароль, який кодується різними способами з урахуванням особливостей гаманця, що застосовується. Він може мати різний вигляд, але найчастіше представлений у вигляді набір символів та цифр, які випадково генеруються системою. Їхня кількість постійно різна, щоб ускладнити ймовірність злому.
Вигляд Private Key Bitcoin залежить від формату:
- WIF. Систем кодування байтів ключа за формулою base 58 "плюс" контрольна сума. Під час створення публічного використовується закритий ключ, що відбувається у вигляді еліптичних перетворень. Байти приватного пароля застосовуються при обчисленні координат початкової точки. Число символів - 52 і "5" перша.
- WIF стиснутий. Альтернативний спосіб кодування приватного ключа. Має таку ж технологію одержання, як і попередній варіант. Відмінність у цьому, що у складі більше символів (52). Легко розпізнати наявність L або K на початку.
- HEX. У такому кодуванні використовується шістнадцятковий формат файлу, в якому містяться необхідні дані для входу в гаманець. Є одним із найпопулярніших способів кодування, що часто використовується при створенні приватного ключа. Складається із 64 символів.
- Base 64 - Класичний стандарт кодування даних. Такий формат активно застосовується в електронній пошті та кодуванні закритих паролів для входу в гаманець Біткоїн. Легко розпізнати наявність 44 символів.
Для зручності зведемо основні формати Private Key Bitcoin та їх особливості до таблиці.
| Формат кодування | Кількість символів | Приклад приватного ключа Біткоін |
| WIF | 51, 5 - перша | 5J4XJRyLGgzbXEgh8VNi4qovLzxRftzVd8a18KkdXv4EqAwX3tS |
| WIF-стислий | 52, До або L перша | KxFC1jnghGoACiATWZ3oXa748VP6ac3TYzGkd7YbsqGLY |
| HEX | 64, від 0 до 9, від A до F | 1E99674A4CA27606A45A1813F0E9E52CFA330AC563EDBB32C8AAC6A578AECA |
| Base 64 | 44 | 5J/4XJRyLGgzbXEgh8VNi4qovLzxRftzVd8a18KkdXv= |
Навіщо потрібен
Власники гаманців Біткоїн повинні знати, для чого потрібний закритий пароль. Він виконує кілька функцій:
- Забезпечує зберігання криптовалюти. Тільки власник сховища має цю інформацію та, відповідно, отримує доступ до своїх монет. Наявність такого пароля дозволяє проводити операції у різних напрямках.
- Підпис проведених операцій. Private Key Bitcoin перебирає функції цифрового підпису. Під час передачі криптовалюти іншому користувачеві система перевіряє відповідність адреси з публічним ключем. Оскільки останній формується із закритого, створюється надійний ланцюжок. Після отримання потрібної кількості підтверджень транзакція доходить до одержувача.
Як працює
Під час створення закритого ключа застосовується симетричне шифрування, що забезпечує безпеку транзакції. Сам Private Key є випадковим номером, який не можна підібрати або вгадати. При роботі з криптовалютою користувач отримує два паролі: приватний та відкритий. На публічній адресі лежать доступні гроші, які можна надіслати іншій людині. Але навіть при отриманні токенів на відкриту адресу використовувати їх без закритого ключа не вийде.
Криптовалютний гаманець зберігає Private Key. Під час створення транзакції програма формує цифровий підпис із застосуванням цих даних. Такий підхід захищає систему від злому.Також підпис застосовується для підтвердження операції та гарантує її безповоротність та належність коштів власнику.
Як створити
Для отримання приватного колюча його необхідно створити, а сам процес залежить від типу гаманця, що застосовується. Залежно від типу сховища, користувач має повний контроль над секретною інформацією або передає її іншим сервісам. Останній варіант актуальний для біржових майданчиків, що вимагають реєстрацію та отримують доступ до адреси Bitcoin. При цьому Private Key залишається лише у власника. Але так буває не завжди, тож перед вибором потрібно уточнювати цей момент.
Створення закритого ключа Біткоїн можливе такими способами:
- Програмні гаманці: Jaxx, Coinomi та інші. Мають вигляд програм, які встановлюються на Віндовс, Мак, ОС мобільних пристроїв і т. д. Можуть зберігати весь ланцюжок блокчейн («товсті») або лише частина інформації («тонкі»).
- Криптовалютні біржі. Потрібна реєстрація та створення облікового запису. Після цього відкривається доступ до лістингу та криптовалютів. При цьому Private Key залишаються у користуванні біржовою платформою. Після створення облікового запису допускається поповнення рахунку, торгівля віртуальними монетами, виведення грошей і т.д.
- Онлайн-сховища. При створенні вимагають вказівки електронної пошти та пароля. Дозволяють переглядати Private Key або не надають такої опції. До найбільш популярних сайтів можна віднести Блокчейн (blockchain.com).
- Апаратні гаманці. Виділяються найбільшою безпекою, надають повний контроль за власними криптовалютами. Найбільш популярні моделі - Trezor Model T, Ledger Nano X, Ledger Nano S, Trezor Model One та інші.
- Паперові. Тут для створення приватного ключа Біткоїн застосовується спеціальний сервіс.Наприклад, це можливо bitaddress.org.
Імпорт та експорт приватних ключів Bitcoin
У процесі користування криптовалютним гаманцем може знадобитися експорт або імпорт віртуальних монет. Для вирішення завдання важливо знати особливості та правила безпеки виконання роботи.
Імпорт
Іноді виникає ситуація, коли потрібно перенести закритий ключ Біткоін, наприклад, з паперового в програмний гаманець. Тут потрібно усвідомлювати, що у такий спосіб створюється друга копія. Такий підхід, у свою чергу, негативно впливає на безпеку та підвищує ризик крадіжки власних коштів.
Альтернативним рішенням є свіпінг. Він проводиться у кілька етапів:
- Створіть новий Private Key у сховищі, який буде застосовуватись надалі.
- Переведіть гроші зі старого на нову адресу.
В результаті виходить новий закритий пароль, який є тільки у вас на руках та в єдиному екземплярі. Застосування свіпінгу актуальне за наявності копії Private Key в іншої людини, у разі втрати цих даних та наявності мнемонічної фрази, а також за бажання використовувати гроші, коли приватний код знаходиться на папері.
Розглянемо приклад імпорту з урахуванням програми Bitcoin Core:
- Запустіть програму.
- Натисніть кнопку допомоги у верхній частині вікна.
- Клацніть на Debug Window.
- Увійдіть у розділ Console, щоб ввести команду.
- Розблокуйте гаманець, якщо він був шифрований за допомогою walletpassphrase “пароль програми” 600.
- Введіть importkey “закритий ключ”.
- Переконайтеся, що нова адреса додана до сховища.
- Заблокуйте сховище командою walletlock.
Після встановлення імпортуйте приватний ключ.
Експорт
Ще одна ситуація - вилучення Private Key з гаманця Біткоїн. Тут багато залежить від типу застосовуваного сховища.
Десктопний
Найчастіше власники Bitcoin стикаються з необхідністю експорту приватного ключа з десктопних гаманців. Спочатку ці дані добре заховані, що зумовлено вимогами безпеки. Розглянемо покрокові дії щодо експорту для популярного гаманця Exodus:
- Натисніть комбінацію Ctr+Shift+D. Це необхідно для активації меню розробника.
- Перейдіть до розділу Developer, а далі Assets та Bitcoin. Це необхідно для вибору криптовалюти, яку потрібно експортувати.
- У новому вікні підтвердіть своє бажання шляхом натискання клавіші Im sure.
- Копіюйте файл CSV з папки Exodus Export у надійне місце.
- Видаліть папку.
Відкрийте приватний ключ за допомогою будь-якої програми, щоб відкрити текстові файли. Це може бути Ексель, Блокнот та інші.
Онлайн-гаманець
Іноді виникає потреба експортувати Private Key з онлайн-сховища, наприклад, Блокчейн. У налаштуваннях програми не передбачено можливостей експорту ключів. Отже, доведеться використати інший шлях:
- Увійдіть до «Налаштування».
- Перейдіть до розділу «Безпека».
- Клацніть на пункт "Фраза для відновлення гаманця".
- Копіюйте ці слова.
- Перейдіть на посилання iancoleman.io/bip39/.
- Вставте копійовані дані у форму BIP 39 Mnemonic.
- Опустіться в нижню частину сторінки в розділі Derived Addresses. Тут буде адреса, а також відкритий/закритий пароль.
Паперовий гаманець
На окрему увагу заслуговує експорт Private Key з паперового сховища. Робота виконується за допомогою спеціального крипт через веб-провідник. Зробіть таке:
- Перейдіть на посилання bitaddress.org.
- Водіть мишкою спеціальним полем до досягнення 100%.
- Отримайте QR-коди секретного та відкритого ключа.
- Копіюйте дані у надійне місце.
Як зберігати
Приватний ключ Біткоін - головний елемент, що дозволяє володіти криптовалютою та контролювати її. Для забезпечення безпеки наявних монет можна використовувати різні способи зберігання:
- Папір. Варіант, що підходить для паперових гаманців. Інформацію можна зберігати на звичайному папері шляхом друку або переписування даних. Такий метод має невеликий рівень захисту, адже шматок гаманця можна втратити, випадково спалити, намочити чи пошкодити. Для надійності краще зробити ламіновану чи металеву копію.
- Флешка. Більш надійний метод зберігання, що дозволяє завжди тримати Біткоїни при собі. Перед додаванням інформації на виносний пристрій необхідно перевірити його на віруси та видалити зловмисне програмне забезпечення (за наявності). Тут є кілька варіантів зберігання: текстовий документ, wallet.dat, скріншот.
- ПК/ноутбук. Ще один надійний спосіб, що дозволяє зберегти криптовалюту, коли пристрій не підключено до Мережі і працює. Крім того, необхідно вигадати пароль на файл з ключем і нікому його не давати.
- Пам'ять. Найбільш надійний спосіб зберігання конфіденційних даних. Підходить для випадків, коли потрібно запам'ятати не алфавітно-числовий код, а мнемонічну фразу. Але варто врахувати, що у випадку, якщо ви забудете цю інформацію, відновити доступ вже не вдасться.
Як відновити
Найбільша проблема виникає у разі втрати закритого ключа для доступу до гаманця Біткоїн. При цьому на руках залишається лише адреса, яка є у багатьох користувачів, а не тільки у власника. У такому випадку є кілька шляхів:
- Використання мнемонічної фрази для відновлення. Зокрема, за її допомогою можна згенерувати приватний ключ. Для цього використовується сервіс iancoleman.io/bip39, про який згадувалося вище. Крім того, сид-фразу можна використовувати для відновлення доступу до апаратного сховища.
- Звернення до служби підтримки гаманця. При цьому власнику необхідно довести своє право на криптовалюту. В іншому випадку відновити доступ не вдасться. Крім того, далеко не завжди служба підтримки може допомогти у поверненні доступу.
- Застосування спеціальної утиліти. Найбільш складний випадок, коли файл із закритим ключем вилучено, а резервна копія відсутня. Рішенням є застосування R Studio. Можливості програмного забезпечення дозволяють відновити жорсткий диск, якщо це потрібно, або конкретні файли. Софт можна завантажити за посиланням r-studio.com/ru/. Софт підтримує різні ОС, дозволяє реконструювати пошкоджені дискові матеріали, створювати образ та вирішувати інші завдання. Щоб відновити, натисніть на диск і запустіть процес сканування. За наявності помаранчевих секторів ймовірність відновлення є меншою.
Правила безпеки
Для захисту особистих заощаджень Біткоїн необхідно дотримуватись кількох правил безпеки:
- Використовуйте 2-факторну автентифікацію за допомогою програми Google Authentication. Це особливо актуально під час роботи на біржових платформах.
- Встановлюйте лише надійні паролі на своїх гаманцях.
- Зберігайте закритий код у надійному та недоступному для третіх осіб місці.
- Використовуйте лише перевірені програми для зберігання. Найбільший попит мають апаратні сховища.
Підсумки
Приватний / закритий ключ Біткоїн - головний код, що забезпечує доступ до грошей на криптовалютному гаманці. У разі його втрати доведеться дуже постаратися для відновлення коштів, а в деяких випадках це зовсім неможливо. Щоб уникнути негативних наслідків, відповідальне підходите до зберігання криптовалюти Bitcoin, використовуйте лише надійні сховища та ніколи не передавайте Private Key стороннім.
Технологія створення биткоин гаманця
У статті розглядаються секрети створення приватних ключів для Биткоина, і навіть способи отримання адреси гаманця. Наводяться практичні приклади мовою bash.Стаття є результатом аналізу інформації вихідного коду кількох проектів GitHub, а також ресурсів зарубіжних авторів.
Створення приватного ключа.
Приватний ключ містить 256 біт (32 байти) значень, що починаються з 0х1 до 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140. В результаті всього може існувати 2^.
Для створення приватного ключа використовується хеш SHA256. Хеш може бути згенерований будь-якою програмою або отриманий на основі закладеної людиною певної комбінації символів, яку знає тільки він. Це робиться з метою того, щоб людина завжди змогла відновити свій приватний ключ зі своєї пам'яті. Такі гаманці прийнято називати Brain Wallets. Тобто. у них закладено якусь смислову інформацію. Але завжди є ризик забути її та втратити доступ до свого гаманця. Після перетворення смислового рядка в хеш SHA256, на виході завжди виходить термін має 256 бітне значення. Враховуючи те, що кожні 2 символи є 8 біт або 1 байт, то в підсумкове значення містить 64 символи.
Нижче наведено приклад, як вихідний рядок перетворюється на хеш SHA256 використовуючи bash.
$ echo "це є групою слів . generate a private key" | openssl sha256 # out: a966eb6058f8ec9f47074a2faadd3dab42e2c60ed05bc34d39d6c0e1d32b8bdf
Створення громадського ключа.
Публічний ключ генерується з приватного ключа використовуючи еліптичну криву secp256k1 за такою формулою K = k * G, де K - це публічний ключ, k - приватний ключ, а G це константа, яка називається точкою генератора. Цей алгоритм немає зворотного перетворення, тобто. не можна за формулою відновити приватний ключ, маючи публічний.
Нижче наведено приклад, як приватний ключ «a966eb6058f8ec9f47074a2faadd3dab42e2c60ed05bc34d39d6c0e1d32b8bdf» отриманий на попередньому етапі використовується для генерації публічного ключа.
На виході в прикладі ми отримуємо відкритий ключ «043cba1f4d12d1ce0bced725373769…….dfe47e5dce2e08601d6f11f5a4», який включає префікс 0х04, а також X і Y координати на еліптичній кривій secp25.
$ openssl ec -inform DER -text -noout -in <(cat <(echo -n "302e0201010420") <(echo -n "a966eb6058f8ec9f47074a2faadd3dab42e2c60ed05bc34d30 06052b8104000a") | xxd -r -p) 2 >/dev/null | tail -6 | head -5 | sed's/[:]//g' | tr -d '\n' && echo #out: # PREFIX: 04 # X: 3cba1f4d12d1ce0bced725373769b2262c6daa97be6a0588cfec8ce1a5f0bd09 # Y: 2f56b544 dfe47e5dce2e08601d6f11f5a4
Отримання стисненого публічного ключа.
Більшість гаманців реалізують стислий публічний ключ для економії простору блокчейну. Для конвертації не стисненого публічного ключа в стислий, ви можете не враховувати Х, тому що його можна розрахувати з значенням Y, вирішивши рівняння еліптичної кривої Y² = X³ + 7. Префікс 0x02 додається для позитивних значень Y, а 0x03 для негативних. Якщо остання двійкова цифра координати дорівнює 0, число позитивне, і якщо 1 — негативне. У результаті отримуємо стислу версію публічного ключа:
02 3cba1f4d12d1ce0bced725373769b2262c6daa97be6a0588cfec8ce1a5f0bd09
Префікс 0x02 доданий тому, що координата Y містила в кінці значення 0xa4, що говорить про її позитивне значення.
Генерація bitcoin-адреси.
Біткоїн використовує 2 типи адрес, один з них називається P2SH-P2WPKH (pay-to-script hash & pay-to-witness-public-key-hash) який зараз виповнюється за замовчуванням у всіх гаманцях.
Другий називається P2PKH (Pay to Public Key Hash) та був попередником першого. Скрипти дають більше функціональності, тому вони популярніші зараз.
Отримуємо хеш публічної адреси.
Стиснуту версію публічного ключа, отриману на попередньому кроці, потрібно хешувати в sha256, а потім у ripemd160.Це гарантує, що у разі непередбаченого взаємозв'язку між еліптичною кривою та sha256, інша не пов'язана хеш функція значно ускладнить можливість розшифрування хешу.
$ echo 023cba1f4d12d1ce0bced725373769b2262c6daa97be6a0588cfec8ce1a5f0bd09 | xxd-r-p | openssl sha256 # out: (stdin)= 8eb001a42122826648e66005a549fc4b4511a7ad3fc378221aa1c73c5efe77ef $ echo 8eb001a42122826648e66005a549fc4b4511a7ad3fc378221aa1c73c5efe77ef | xxd-r-p | openssl ripemd160 # out: (stdin)= 3a38d44d6a0c8d0bb84e0232cc632b7e48c72e0e
Зверніть увагу, т.к. на вході у нас рядок, то команда xxd -r -p конвертуватиме hex рядок у бінарний а потім виведе її в ascii, яку openssl чекає на вході.
Кодування base58.
У результаті ми отримали хеш публічного ключа, який можна перетворити на більш компактний вигляд за допомогою base58check. Алгоритм base58check дозволяє отримувати компактний вигляд хешу за рахунок більшого використання букв алфавіту та уникаючи спокійних символів, наприклад, таких як О та 0. Контрольна сума використовується для того, щоб перевірити правильність перетворення адреси.
Формат адреси P2PKH.
Формат P2PKH адреси Біткоіна починаються зі значення байта версії 0х00 і закінчуються 4-байтовою контрольною сумою. Спочатку ми додаємо байт із номером версії до нашого хешу відкритого ключа та обчислюємо його. А потім додаємо контрольну суму, після чого кодуємо результат base58.
$ echo 003a38d44d6a0c8d0bb84e0232cc632b7e48c72e0e | xxd-p-r | base58 -c && echo # out: 16JrGhLx5bcBSA34kew9V6Mufa4aXhFe9X
Примітка: опція -c означає, що була застосована чексума. Чексума розраховується як SHA256(SHA256(prefix+data)) після чого береться тільки перші 4 байти і додаються до кінця хеша ключа.
В результаті значення адреси P2PKH для Bitcoin набуде вигляду:
19P1LctLQmH6tuHCRkv8QznNBGBvFCyKxi
Формат адреси P2SH-P2WPKH.
Подібні кроки використовуються для генерації P2SH-P2WPKH адреси за винятком того, що хеш виконується у сценарії транзакції замість відкритого ключа.
У Біткоїна є мова сценаріїв. В основному це дозволяє встановлювати вимоги до сигнатури для відправлення біткоїнів, затримки часу перед відправкою і т.д. Зазвичай сценарій є транзакцією з кількома сигналами: OP_0 0x14 , де PubKey Hash це RIPEMD160 від SHA256 від відкритого ключа (як визначалося для P2WPKH) і 0х14 байтів в PubKey Hash. Таким чином, щоб перетворити цей скрипт на адресу, ви просто застосовуєте BASE58CHECK до RIPEMD160 від SHA256 від OP_0 0x14 , за винятком того, що ви додаєте 0х05 до хеш-скрипт замість 0х00 для позначення типу адреси P2SH.
$ echo 00143a38d44d6a0c8d0bb84e0232cc632b7e48c72e0e | xxd-r-p | openssl sha256 # out: (stdin)= 1ae968057eaef06c3e13439695edd7a54982fc99f36c3aa41d8cc41340f30195 $ echo 1ae968057eaef06c3e13439695edd7a54982fc99f36c3aa41d8cc41340f30195 | xxd-r-p | openssl ripemd160 # out: (stdin)= 1d521dcf4983772b3c1e6ef937103ebdfaa1ad77 $ echo 051d521dcf4983772b3c1e6ef937103ebdfaa1 xxd-p-r | base58 -c && echo # out: 34N3tf5m5rdNhW5zpTXNEJucHviFEa8KEq
