Гаманці - це важливі інструменти, які дозволяють користувачам управляти своїми обліковими записами у блокчейні, безпечно зберігати свої активи та підписувати транзакції для внесення змін до стану блокчейну.
У цьому пості ми розглянемо, що таке гаманець, як створюються гаманці, і як вони використовують еліптичну криву криптографію для генерації та захисту приватно-публічних ключевих пар, похідні мнемонічні фрази та полегшують безпечну взаємодію з блокчейном.
Гаманець - це програма, яка дозволяє переглядати та взаємодіяти з вашими обліковими записами блокчейну; ці облікові записи дозволяють вам надсилати транзакції для виконання дій, таких як відправлення токенів або взаємодія з смарт-контрактами.
Кожний обліковий запис на блокчейні складається з криптографічної пари ключів; набору з 2 ключів, які пов'язані між собою. У контексті блокчейнів цей вид облікового запису зазвичай називається Зовнішнім Власним Обліковим Записом (EOA) і складається з публічного ключа і приватного ключа:
Ця пара ключів має потужну функцію, яка називається функцією підвіконня. Це означає, що:
Гаманці використовуються для підпису повідомлень або транзакцій за допомогою приватного ключа гаманця, щоб відправити на блокчейн.
Гаманці надають можливість знати, які повідомлення або транзакції погодив гаманець; оскільки публічний ключ відправника транзакції може бути відновлений з підпису транзакції. Це надзвичайно важливо для запобігання прийняття фальшивих / зловісних транзакцій у блокчейні.
Наприклад, Джаррод міг би подати транзакцію, заявляючи, що Абріл відправила йому 5 ETH, навіть якщо вона ніколи не погодилася на цю транзакцію. Однак, оскільки блокчейн перевіряє підпис кожної транзакції, він швидко відхилить транзакцію, оскільки відновлена адреса з підпису не відповідає «відправнику» транзакції (тобто Абріл).
Блокчейни, такі як Ethereum, використовують ECDSA (еліптичний цифровий алгоритм підпису на еліптичній кривій), щоб перевірити, чи відновлений публічний ключ з підпису транзакції відповідає публічному ключу особи, яка відправила транзакцію до мережі.
Для створення гаманця необхідно створити пару публічного-приватного ключа. Однак, значення цієї пари ключів повинні дотримуватися кількох правил, щоб вони працювали на блокчейні.
Цей трьохетапний процес є основним потоком того, як генеруються облікові записи на блокчейні.
Далі ми розглянемо, як отримується публічний ключ за допомогою еліптичної кривої та приватного ключа. Але перед цим ми відповімо на кілька інших питань, які у вас можуть виникнути щодо гаманців, наприклад:
Хоча можливо згенерувати випадкове значення 64-шістнадцяткового значення, як ми щойно продемонстрували, зазвичай, приватні ключі генеруються за допомогою конкретних стандартів, які виникли з Bitcoin. Ці стандарти дозволяють користувачам запам'ятовувати фразу-сім'ю, яка складається з 12-24 слів, яку можна використовувати для створення будь-якої кількості нових облікових записів, пов'язаних з нею.
Це дозволяє користувачам запам'ятовувати один набір слів для доступу до всіх своїх облікових записів; кожен з окремою парою публічного-приватного ключа. Будь-яку кількість нових приватних ключів можна отримати з одного початкового фрази за допомогою конкретної функції виведення ключа (KDF).
Таким чином, спочатку давайте розберемо, як генеруються фрази зі сім'ями насіння через випадкову ентропію і як приватні ключі можна похідні від фрази зі сім'єю насіння, перш ніж нарешті повернутися до того, як публічні ключі походять від приватних ключів.
Коли ви вперше встановлюєте додаток для гаманця, зазвичай вас попросять записати і безпечно зберегти фразу для відновлення десь; зазвичай це комбінація з 12 або 24 слів. Ви можете побачити приклад списку можливих англійських слів тут, яку ви помітите, складається з 2048 слів у довжину (ми скоро повернемося до цього числа).
Ця ідея зберігання мнемонічних кодів була запропонована в 2013 році з BIP (пропозиція щодо поліпшення Bitcoin); BIP-39. Ця пропозиція надає стандартизований спосіб генерації випадкової ентропії та перекладу її на послідовність легко запам'ятовуваних слів.
Спочатку ми повинні переконатися, що наша фраза-сід була випадково згенерована, в кінці кінців, ми не хочемо, щоб хтось інший випадково потрапив у наш гаманець і отримав доступ до наших коштів.
Для цього генерується випадкове число за допомогою CSPRNG (криптографічно стійкого псевдовипадкового генератора чисел), що можна зробити в вашому браузері:
Ця випадкове число називається ентропією. Ця ентропія використовується для створення набору слів, які утворюють фразу-сід. У нашому випадку, 128 біт відповідає 12 словам, але також можливо використовувати інші довжини, наприклад:
Отже, як ми використовуємо ці біти, щоб створити фразу-сід? Яка взаємозв'язок між бітами та словами? Спочатку для ентропії створюється контрольна сума та додається до 128 бітів; це 4-бітний хеш ентропії, створений для забезпечення її цілісності.
Таким чином, зараз у нас є 128 біт ентропії + 4 біти контрольної суми, загалом 132 біти. Далі 132 біти перетворюються на двійковий код; конкретно вони розбиваються на частини по 11 біт.
У нас зараз є набір з 12 двійкових чисел, кожне з яких має довжину 11 біт. Підказка: у нас є 12 чисел, і наш код-фраза складатиметься з 12 слів!
Згадайте, що у нашому списку 2048 слів, і 2048 було обрано, оскільки 2048 дорівнює 2^11, оскільки існує 2048 різних можливих двійкових чисел, які можна створити з 11 біт.
Тепер нам просто потрібно перетворити ці двійкові числа на слова зі списку слів. Це виконується за допомогою двійкового числа як індексу для пошуку слова в списку слів. тобто Якщо двійкове число - 10, ми використовуємо 9-е слово в списку (оскільки ми починаємо з індексу 0), наприклад:
Повторіть це 12 разів, один для кожного 11-розрядного числа, щоб сформувати фразу-насіння, що містить 12 слів.
Генеруючи випадкове значення ентропії, розбиваючи його на частини бінарного коду і використовуючи ці значення як індекси для пошуку слів у списку слів, ми отримуємо випадкову фразу-сід.
Ваша негайна реакція на це може бути такою: "Якщо є лише 2048 можливих слів, чи не зможе хтось вгадати мою фразу-сід?" Технічно так, але це дуже... дуже малоймовірно. Як малоймовірно ви запитуєте?
Уявіть, що ми забуваємо про випадковий 128-бітний крок генерації, і просто вручну вибираємо 12 слів зі списку. Щоразу, коли ми вибираємо слово, ми вибираємо один варіант із пулу з 2048 слів.
Отже, ми можемо сказати, що для того, щоб хтось інший також вгадав цю саму послідовність слів, йому потрібно правильно вгадати те саме слово, що й ми, з ймовірністю 1/2048, 12 разів поспіль. Зараз ви, напевно, думаєте: «Добре, це звучить не так вже й складно...», чи не так??Але давайте зіграємо в це:
Це 2048 х 2048 х 2048 ... 12 разів. Або 2048^12. Що є... абсурдно велика кількість. Приблизно, 5 септильйонів, або 5 квадрильйонів мільярдів. Це незбагненно для нас, але давайте спробуємо...
Уявіть, що ви почали вгадувати прямо зараз, використовуючи неймовірно потужний комп'ютер, який може вгадувати 1 трлн фраз насіння за секунду. Цій машині знадобиться 159 трлн років, щоб вгадати одну фразу насіння. Або (в залежності від того, в що ви вірите), приблизно в 11 000 разів довше, ніж поточний вік Всесвіту.
Чи є початкові фрази з 24 слів кращими за 12?
Деякі гаманці вибирають 128 біт (12 слів), але сучасніші гаманці просить вас запам'ятати 24 слова для вашої початкової фрази! Це, знову ж таки, надзвичайно велике.
Тепер у нас є початкова фраза з 12 слів, як вона використовується для створення приватних ключів для облікових записів? Для цього нам потрібно перетворити нашу seed-фразу в двійкове насіння, яке можна використовувати для генерації гаманців. Цей процес включає в себе наступні етапи:
Цей процес (називається функцією похідного ключа) виводить 64-байтове хеш-значення, яке називається бінарним насінням, використовуючи інший алгоритм, який називається HMAC-SHA512, як псевдовипадкову функцію.
Виведене 64-байтове хеш-значення може бути використане для генерації рахунків за допомогою логіки, що виникла з інших стандартів Bitcoin; а саме BIP-32 і за бажанням, розширення BIP-32, BIP-44.
BIP-32 вводить ієрархічні визначені (HD) гаманці; де з одного насіння може бути похідних багато гаманців, і з цих гаманців можуть бути похідні ще більше гаманців, створюючи "дерево" гаманців.
BIP-44 надає стандартизований спосіб створення ієрархії для структур гаманця з одного бінарного насіння шляхом виконання конкретного шляху похідності відповідно до структури: m / purpose’ / coin_type’ / account’ / change / address_index:
Не всі гаманці використовують BIP-44, але це загальний спосіб стандартизації походження облікових записів від бінарного насіння.
Як ми вже зазначали раніше, приватні ключі складаються з 64 шістнадцяткових символів, тобто 32 байти. І ми щойно згенерували 64-байтове бінарне насіння через процес PBKDF2 - отже, як ми використовуємо це 64-байтове хеш-значення для створення приватних ключів?
Спочатку хеш розбивається на дві половини, кожна по 32 байти в розмірі:
Тепер ми розуміємо, як виглядають приватні ключі, як вони випадковим чином генеруються та як з однієї секретної фрази можна отримати кілька ключів. Наступне, давайте дослідимо, як публічні ключі походять від приватних ключів.
З використанням шифрування еліптичних кривих (ECC) ми можемо знайти публічний ключ для заданого приватного ключа. Існують різні види еліптичних кривих, але той, що використовується як Bitcoin, так і Ethereum, називається secp256k1.
Специфікація для цієї еліптичної кривої включає базову точку G, яка використовується як початкова точка для створення інших точок на кривій. З цієї початкової точки ми «рухаємося по» кривій певну кількість разів (визначену нашим приватним ключем) в певний спосіб. Точка на кривій, в якій ми зупиняємо цей процес, буде нашим публічним ключем.
Спосіб, яким ми «рухаємося» по кривій, називається скалярним множенням. При роботі з еліптичними кривими скаляр означає число, яке використовується для масштабування точки на кривій. Ми беремо базову точку G і застосовуємо до неї скалярне число, щоб досягти нової точки на кривій шляхом «розтягування» цієї точки.
Скалярне число, яке ми застосовуємо до базисної точки, є нашим приватним ключем; Простіше кажучи, ми беремо нашу початкову точку G і масштабно множимо її на наш приватний ключ, щоб досягти нашого відкритого ключа.
Насправді, оскільки крива визначена над простим полем ℤp, вона виглядає більше як купа розкиданих крапок... але все ще має ті ж властивості еліптичної кривої.
Наприкінці цього процесу скалярного множення (підстрибування навколо <приватного ключа> кількість разів) ми опинимося в новій точці кривої, яка є нашим відкритим ключем. Ви можете уявити, що цей процес виглядає приблизно так:
Публічні ключі, як ім'я вказує, можуть бути розповсюджені публічно з будь-ким. Вони корисні для:
Гаманці - це важлива складова блокчейнів, які використовують еліптичну криву криптографію для того, щоб дозволити користувачам відправляти транзакції та підписувати повідомлення зі своїх облікових записів.
Однак, деякі блокчейни, такі як Abstract, також підтримують нові види гаманців, що називаються рахунками розумних контрактів, які надають більше функцій і забезпечують більшу безпеку, механізми відновлення та інше.
Ця стаття передрукована з [https://abs.xyz/blog], Перешліть оригінальний заголовок« Що таке гаманець? », Усі авторські права належать оригінальному автору [ Джаррод Уоттс ]. Якщо є заперечення щодо цього передруку, будь ласка, зв'яжіться зGate Learnкоманда, і вони швидко цим займуться.
Відповідальність за відмову: погляди та думки, висловлені в цій статті, належать виключно автору і не становлять жодної інвестиційної поради.
Переклади статей на інші мови виконуються командою Gate Learn. Якщо не зазначено інше, заборонено копіювання, розповсюдження або плагіат перекладених статей.
Гаманці - це важливі інструменти, які дозволяють користувачам управляти своїми обліковими записами у блокчейні, безпечно зберігати свої активи та підписувати транзакції для внесення змін до стану блокчейну.
У цьому пості ми розглянемо, що таке гаманець, як створюються гаманці, і як вони використовують еліптичну криву криптографію для генерації та захисту приватно-публічних ключевих пар, похідні мнемонічні фрази та полегшують безпечну взаємодію з блокчейном.
Гаманець - це програма, яка дозволяє переглядати та взаємодіяти з вашими обліковими записами блокчейну; ці облікові записи дозволяють вам надсилати транзакції для виконання дій, таких як відправлення токенів або взаємодія з смарт-контрактами.
Кожний обліковий запис на блокчейні складається з криптографічної пари ключів; набору з 2 ключів, які пов'язані між собою. У контексті блокчейнів цей вид облікового запису зазвичай називається Зовнішнім Власним Обліковим Записом (EOA) і складається з публічного ключа і приватного ключа:
Ця пара ключів має потужну функцію, яка називається функцією підвіконня. Це означає, що:
Гаманці використовуються для підпису повідомлень або транзакцій за допомогою приватного ключа гаманця, щоб відправити на блокчейн.
Гаманці надають можливість знати, які повідомлення або транзакції погодив гаманець; оскільки публічний ключ відправника транзакції може бути відновлений з підпису транзакції. Це надзвичайно важливо для запобігання прийняття фальшивих / зловісних транзакцій у блокчейні.
Наприклад, Джаррод міг би подати транзакцію, заявляючи, що Абріл відправила йому 5 ETH, навіть якщо вона ніколи не погодилася на цю транзакцію. Однак, оскільки блокчейн перевіряє підпис кожної транзакції, він швидко відхилить транзакцію, оскільки відновлена адреса з підпису не відповідає «відправнику» транзакції (тобто Абріл).
Блокчейни, такі як Ethereum, використовують ECDSA (еліптичний цифровий алгоритм підпису на еліптичній кривій), щоб перевірити, чи відновлений публічний ключ з підпису транзакції відповідає публічному ключу особи, яка відправила транзакцію до мережі.
Для створення гаманця необхідно створити пару публічного-приватного ключа. Однак, значення цієї пари ключів повинні дотримуватися кількох правил, щоб вони працювали на блокчейні.
Цей трьохетапний процес є основним потоком того, як генеруються облікові записи на блокчейні.
Далі ми розглянемо, як отримується публічний ключ за допомогою еліптичної кривої та приватного ключа. Але перед цим ми відповімо на кілька інших питань, які у вас можуть виникнути щодо гаманців, наприклад:
Хоча можливо згенерувати випадкове значення 64-шістнадцяткового значення, як ми щойно продемонстрували, зазвичай, приватні ключі генеруються за допомогою конкретних стандартів, які виникли з Bitcoin. Ці стандарти дозволяють користувачам запам'ятовувати фразу-сім'ю, яка складається з 12-24 слів, яку можна використовувати для створення будь-якої кількості нових облікових записів, пов'язаних з нею.
Це дозволяє користувачам запам'ятовувати один набір слів для доступу до всіх своїх облікових записів; кожен з окремою парою публічного-приватного ключа. Будь-яку кількість нових приватних ключів можна отримати з одного початкового фрази за допомогою конкретної функції виведення ключа (KDF).
Таким чином, спочатку давайте розберемо, як генеруються фрази зі сім'ями насіння через випадкову ентропію і як приватні ключі можна похідні від фрази зі сім'єю насіння, перш ніж нарешті повернутися до того, як публічні ключі походять від приватних ключів.
Коли ви вперше встановлюєте додаток для гаманця, зазвичай вас попросять записати і безпечно зберегти фразу для відновлення десь; зазвичай це комбінація з 12 або 24 слів. Ви можете побачити приклад списку можливих англійських слів тут, яку ви помітите, складається з 2048 слів у довжину (ми скоро повернемося до цього числа).
Ця ідея зберігання мнемонічних кодів була запропонована в 2013 році з BIP (пропозиція щодо поліпшення Bitcoin); BIP-39. Ця пропозиція надає стандартизований спосіб генерації випадкової ентропії та перекладу її на послідовність легко запам'ятовуваних слів.
Спочатку ми повинні переконатися, що наша фраза-сід була випадково згенерована, в кінці кінців, ми не хочемо, щоб хтось інший випадково потрапив у наш гаманець і отримав доступ до наших коштів.
Для цього генерується випадкове число за допомогою CSPRNG (криптографічно стійкого псевдовипадкового генератора чисел), що можна зробити в вашому браузері:
Ця випадкове число називається ентропією. Ця ентропія використовується для створення набору слів, які утворюють фразу-сід. У нашому випадку, 128 біт відповідає 12 словам, але також можливо використовувати інші довжини, наприклад:
Отже, як ми використовуємо ці біти, щоб створити фразу-сід? Яка взаємозв'язок між бітами та словами? Спочатку для ентропії створюється контрольна сума та додається до 128 бітів; це 4-бітний хеш ентропії, створений для забезпечення її цілісності.
Таким чином, зараз у нас є 128 біт ентропії + 4 біти контрольної суми, загалом 132 біти. Далі 132 біти перетворюються на двійковий код; конкретно вони розбиваються на частини по 11 біт.
У нас зараз є набір з 12 двійкових чисел, кожне з яких має довжину 11 біт. Підказка: у нас є 12 чисел, і наш код-фраза складатиметься з 12 слів!
Згадайте, що у нашому списку 2048 слів, і 2048 було обрано, оскільки 2048 дорівнює 2^11, оскільки існує 2048 різних можливих двійкових чисел, які можна створити з 11 біт.
Тепер нам просто потрібно перетворити ці двійкові числа на слова зі списку слів. Це виконується за допомогою двійкового числа як індексу для пошуку слова в списку слів. тобто Якщо двійкове число - 10, ми використовуємо 9-е слово в списку (оскільки ми починаємо з індексу 0), наприклад:
Повторіть це 12 разів, один для кожного 11-розрядного числа, щоб сформувати фразу-насіння, що містить 12 слів.
Генеруючи випадкове значення ентропії, розбиваючи його на частини бінарного коду і використовуючи ці значення як індекси для пошуку слів у списку слів, ми отримуємо випадкову фразу-сід.
Ваша негайна реакція на це може бути такою: "Якщо є лише 2048 можливих слів, чи не зможе хтось вгадати мою фразу-сід?" Технічно так, але це дуже... дуже малоймовірно. Як малоймовірно ви запитуєте?
Уявіть, що ми забуваємо про випадковий 128-бітний крок генерації, і просто вручну вибираємо 12 слів зі списку. Щоразу, коли ми вибираємо слово, ми вибираємо один варіант із пулу з 2048 слів.
Отже, ми можемо сказати, що для того, щоб хтось інший також вгадав цю саму послідовність слів, йому потрібно правильно вгадати те саме слово, що й ми, з ймовірністю 1/2048, 12 разів поспіль. Зараз ви, напевно, думаєте: «Добре, це звучить не так вже й складно...», чи не так??Але давайте зіграємо в це:
Це 2048 х 2048 х 2048 ... 12 разів. Або 2048^12. Що є... абсурдно велика кількість. Приблизно, 5 септильйонів, або 5 квадрильйонів мільярдів. Це незбагненно для нас, але давайте спробуємо...
Уявіть, що ви почали вгадувати прямо зараз, використовуючи неймовірно потужний комп'ютер, який може вгадувати 1 трлн фраз насіння за секунду. Цій машині знадобиться 159 трлн років, щоб вгадати одну фразу насіння. Або (в залежності від того, в що ви вірите), приблизно в 11 000 разів довше, ніж поточний вік Всесвіту.
Чи є початкові фрази з 24 слів кращими за 12?
Деякі гаманці вибирають 128 біт (12 слів), але сучасніші гаманці просить вас запам'ятати 24 слова для вашої початкової фрази! Це, знову ж таки, надзвичайно велике.
Тепер у нас є початкова фраза з 12 слів, як вона використовується для створення приватних ключів для облікових записів? Для цього нам потрібно перетворити нашу seed-фразу в двійкове насіння, яке можна використовувати для генерації гаманців. Цей процес включає в себе наступні етапи:
Цей процес (називається функцією похідного ключа) виводить 64-байтове хеш-значення, яке називається бінарним насінням, використовуючи інший алгоритм, який називається HMAC-SHA512, як псевдовипадкову функцію.
Виведене 64-байтове хеш-значення може бути використане для генерації рахунків за допомогою логіки, що виникла з інших стандартів Bitcoin; а саме BIP-32 і за бажанням, розширення BIP-32, BIP-44.
BIP-32 вводить ієрархічні визначені (HD) гаманці; де з одного насіння може бути похідних багато гаманців, і з цих гаманців можуть бути похідні ще більше гаманців, створюючи "дерево" гаманців.
BIP-44 надає стандартизований спосіб створення ієрархії для структур гаманця з одного бінарного насіння шляхом виконання конкретного шляху похідності відповідно до структури: m / purpose’ / coin_type’ / account’ / change / address_index:
Не всі гаманці використовують BIP-44, але це загальний спосіб стандартизації походження облікових записів від бінарного насіння.
Як ми вже зазначали раніше, приватні ключі складаються з 64 шістнадцяткових символів, тобто 32 байти. І ми щойно згенерували 64-байтове бінарне насіння через процес PBKDF2 - отже, як ми використовуємо це 64-байтове хеш-значення для створення приватних ключів?
Спочатку хеш розбивається на дві половини, кожна по 32 байти в розмірі:
Тепер ми розуміємо, як виглядають приватні ключі, як вони випадковим чином генеруються та як з однієї секретної фрази можна отримати кілька ключів. Наступне, давайте дослідимо, як публічні ключі походять від приватних ключів.
З використанням шифрування еліптичних кривих (ECC) ми можемо знайти публічний ключ для заданого приватного ключа. Існують різні види еліптичних кривих, але той, що використовується як Bitcoin, так і Ethereum, називається secp256k1.
Специфікація для цієї еліптичної кривої включає базову точку G, яка використовується як початкова точка для створення інших точок на кривій. З цієї початкової точки ми «рухаємося по» кривій певну кількість разів (визначену нашим приватним ключем) в певний спосіб. Точка на кривій, в якій ми зупиняємо цей процес, буде нашим публічним ключем.
Спосіб, яким ми «рухаємося» по кривій, називається скалярним множенням. При роботі з еліптичними кривими скаляр означає число, яке використовується для масштабування точки на кривій. Ми беремо базову точку G і застосовуємо до неї скалярне число, щоб досягти нової точки на кривій шляхом «розтягування» цієї точки.
Скалярне число, яке ми застосовуємо до базисної точки, є нашим приватним ключем; Простіше кажучи, ми беремо нашу початкову точку G і масштабно множимо її на наш приватний ключ, щоб досягти нашого відкритого ключа.
Насправді, оскільки крива визначена над простим полем ℤp, вона виглядає більше як купа розкиданих крапок... але все ще має ті ж властивості еліптичної кривої.
Наприкінці цього процесу скалярного множення (підстрибування навколо <приватного ключа> кількість разів) ми опинимося в новій точці кривої, яка є нашим відкритим ключем. Ви можете уявити, що цей процес виглядає приблизно так:
Публічні ключі, як ім'я вказує, можуть бути розповсюджені публічно з будь-ким. Вони корисні для:
Гаманці - це важлива складова блокчейнів, які використовують еліптичну криву криптографію для того, щоб дозволити користувачам відправляти транзакції та підписувати повідомлення зі своїх облікових записів.
Однак, деякі блокчейни, такі як Abstract, також підтримують нові види гаманців, що називаються рахунками розумних контрактів, які надають більше функцій і забезпечують більшу безпеку, механізми відновлення та інше.
Ця стаття передрукована з [https://abs.xyz/blog], Перешліть оригінальний заголовок« Що таке гаманець? », Усі авторські права належать оригінальному автору [ Джаррод Уоттс ]. Якщо є заперечення щодо цього передруку, будь ласка, зв'яжіться зGate Learnкоманда, і вони швидко цим займуться.
Відповідальність за відмову: погляди та думки, висловлені в цій статті, належать виключно автору і не становлять жодної інвестиційної поради.
Переклади статей на інші мови виконуються командою Gate Learn. Якщо не зазначено інше, заборонено копіювання, розповсюдження або плагіат перекладених статей.