Перейти до основного контенту

Що таке BIP39?

U
Автор: UKey Wallet

Специфікація BIP-39 в основному описує алгоритм і процес генерації детермінованих гаманців на основі мнемоніки (набору слів, які легко запам’ятати).

Специфікація складається з двох основних частин:

  1. Як створити мнемосхему.

  2. Як перетворити згенеровану мнемоніку на бінарне початкове число.

Нижче наведено погляд на те, як створити детерміновані гаманці, спочатку описавши кожну з цих двох частин.

Створення мнемоніки

Алгоритмічний процес створення мнемосхеми такий:

Процес виглядає наступним чином:

  1. Створіть випадкову послідовність (ентропію) від 128 до 256 біт (розмір кроку 32 біти)

  2. Виконайте SHA256 для випадкової послідовності, згенерованої на попередньому кроці, щоб згенерувати значення хешування, і візьміть перші N бітів значення хешування (довжина ентропії / 32, наприклад, 128 бітів, тоді N = 4) як контрольну суму випадкової послідовності.

  3. Додайте контрольну суму до кінця випадкової послідовності, згенерованої на першому кроці, щоб для прикладу на малюнку випадкова послідовність із контрольною сумою становила 128 + 4 = 132 біти.

  4. Відокремте випадкову послідовність із попереднього кроку 11-бітовими сегментами (розділіть), щоб для послідовності 128-бітної довжини ентропії було згенеровано 12 сегментів (132/11 = 12).

  5. На цьому етапі відображення кожного значення, що містить 11-бітний сегмент, у попередньо визначений словник із 2048 слів.

  6. Останньою групою слів, створених у порядку вирізання, є мнемоніка.

Початкова генерація з мнемотехніки

Після генерації мнемоніки ми можемо згенерувати початковий код за допомогою алгоритму генерації ключів PBKDF2.

PBKDF2 вимагає двох параметрів: мнемоніки та солі. Мета солі — ускладнити розлом, і в BIP-39 ми можемо ввести парольну фразу як додатковий фактор безпеки для захисту насіння.

«PBKDF2 є частиною серії стандартів криптографії з відкритим ключем (PKCS) RSA Laboratories, зокрема PKCS #5 v2.0, також опублікований як RFC 2898 Internet Engineering Task Force».

Після наведеної вище мнемонічної генерації на наступній діаграмі показано алгоритм генерації вихідного коду.

  • Перший параметр PBKDF2 — це мнемоніка, згенерована вище.

  • Другим параметром PBKDF2 є сіль, яка зазвичай складається з рядка та необов’язкового об’єднання наданих користувачем рядків шифру.

  • PBKDF2 використовує алгоритм HMAC-SHA512, який використовує 2048 хешів для створення 512-бітного значення як початкового числа.

Створення HD-гаманця з насіннєвого матеріалу

Згенероване вище початкове число використовуватиметься як кореневе початкове число гаманця HD, а кореневе початкове число будь-якого гаманця HD може відтворити весь гаманець HD.

Введення кореневого початкового числа в алгоритм HMAC-SHA512 дає 512-бітний хеш, ліві 256 біт якого використовуються як головний закритий ключ, а праві 256 біт — як головний ланцюговий код. Після цього головний відкритий ключ (264 біти) може бути згенерований головним закритим ключем m.

Як видно з наведеного вище малюнка, ключ HD генерується з такими параметрами.

  • Батьківський закритий ключ або батьківський відкритий ключ; (обидва є нестисненими 256-бітними ключами ECDSA).

  • Код батьківського ланцюга 256 біт.

  • 32-розрядне ціле число індексу.

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

Ввівши (батьківський відкритий ключ, батьківський ланцюговий код, номер індексу) в алгоритм HMAC-SHA512, ми можемо створити його підключі, а також ми можемо налаштувати номер індексу для генерації кількох підключів на одному рівні.

Про Extended Key

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

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

Ключ, наданий у розширеному ключі, може бути закритим або відкритим ключем у поєднанні з ланцюжковим кодом під назвою Розширений приватний ключ і Розширений відкритий ключ, відповідно, і позначений як (k, c) і (K, c) відповідно, де відкритий ключ K = point(k).

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

Ви отримали відповідь на своє запитання?