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

"Recovery phrase is invalid, retry"

Чи означає це, що створити новий гаманець із власним набором слів неможливо?
Ось приємний сюрприз: це можливо, хоча з певним обмеженням. Але почнемо з початку.

Першим обмеженням є вимога щодо того, що всі слова мають бути в стандартному списку BIP39 (Пропозиція щодо вдосконалення біткойна - номер 39). Докладніше про пропозиції щодо вдосконалення Bitcoin ви можете дізнатися з цієї статті Вікіпедії. BIP39 – це не що інше, як просто набір із 2048 слів, вибраних таким чином, що перші 4 літери кожного слова є унікальними. Це правило стосується навіть слів із 3 букв. Ця властивість полегшує їх запам’ятовування під час створення послідовності з кількох слів, яка є саме тим, чим є ваша фраза відновлення.

Друге обмеження – це вимога до останнього слова вашої послідовності. Це визначена конкретна контрольна сума усіма іншими елементами послідовності, і ви не можете вибрати це самостійно. Це саме причина, чому ми бачимо повідомлення про помилку, щоразу, коли ми намагаємося ввести випадково вибрані слова як фраза відновлення до нашого Ledger Nano. Зазвичай умова контрольної суми відповідає більше ніж одному слову; однак шанс знайти дійсний, просто вгадавши неймовірно малий. Кількість слів, які задовольняють умову контрольної суми, строго пов’язана із загальною кількістю вихідних слів. У випадку вихідного коду з 24 слів (найбезпечніший варіант) завжди є рівно 8 можливих слів, які можуть служити контрольною сумою. Таким чином, шанс випадково витягти дійсне з набору BIP39 із 2048 слів дорівнює рівно 8 у 2048 році, або лише 0,39%. Не дивно, що ви побачили повідомлення про помилку.

Тоді як ми можемо знайти належну контрольну суму для послідовності за власним вибором? Для прикладу візьмемо випадковий набір із 23 слів, які відповідають стандарту BIP39:

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

amount
00001000000
bone
00011001010
ceiling
00100100111
cake
00100000010
cause
00100100100
cost
00110000101
credit
00110011000
cupboard
00110101110
dinosaur
00111110011
dragon
01000010000
drum
01000011100
error
01001100110
fault
01010011111
fatal
01010011100
fog
01011010010
foam
01011010000
hold
01101100100
green
01100110010
hold
01101100100
kick
01111010001


На наступному кроці ми об’єднуємо всі індекси, зберігаючи їх порядок вигляду. Це дає нам 253-бітну двійкову послідовність:

0000100000011111111101000110001100001100101000100100111001000000100010010010000110000101001100110000011010111000111110011010000100000100001110001001100110010100111110101001110001011010010010110100000110110010001100110010011011001000111100000101111010001

Отриманий результат ми доповнюємо додатковими 3 бітами на власний вибір. Ви пам’ятаєте, як ми вже говорили, що 24 слівний код має рівно 8 можливих результатів контрольної суми? Число 8 — це лише простий наслідок ціх 3 біт. Усі 8 результатів, які ми отримаємо, просто вказавши тут 000, 001, 010, 011, 100, 101, 110 і 111.
Для цього прикладу ми вибираємо: 000.
Ми з’єднуємо його в кінці, що призводить до 256-бітного двійкового слова:

0000100000011111111101000110001100001100101000100100111001000000100010010010000110000101001100110000011010111000111110011010000100000100001110001001100110010100111110101001110001011010010010110100000110110010001100110010011011001000111100000101111010001000

Наступним кроком є ​​обчислення хешу SHA256 таких підготовлених двійкових даних. Алгоритм SHA256 (алгоритм безпечного хешування, 256-бітний вихід) є невід’ємною частиною технології блокчейн. Докладніше про SHA256 ви можете дізнатися зі статті Вікіпедії про алгоритм SHA-256.
У результаті цього обчислення ми отримуємо наступне шістнадцяткове слово:

Наступним кроком буде виділення перших 8 біт із результату вище. Таким чином ми беремо перші 2 шістнадцяткові символи - 27.
Вони відповідають:

Знову ми використовуємо ті ж 3 біти, які ми вибрали раніше. Цього разу ми приєднуємо їх до передньої частини вилученого двійкового рядка. Отже, отримуємо:

це двійкове значення 39. Це індекс BIP39 слова контрольної суми, яке ми намагаємося знайти. Не забувайте, що нумерація індексу починається з «0». Тож якщо ви використовуєте список слів BIP39 зі стандартною нумерацією, починаючи з «1», тоді фактичний індекс буде 40. Ми знаходимо відповідний індекс на Список BIP39 і ми отримуємо слово: agent І, нарешті, фраза відновлення з 24 слів, що містить 23 слова на власний вибір це:

Для решти 3-бітових комбінацій останнє слово контрольної суми:

001
coil
010
faculty
011
hospital
100
middle
101
recall
110
ten
111
tragic

Калькулятор фрази відновлення:

Використовуйте ЛИШЕ для тестування та освітніх цілей
Заповніть текстове поле 23 словами, що відповідають вимогам BIP39 стандарт:

більше про користувацька фраза відновлення...

offline security vault

Як зробити це безпечним способом?

Шукаючи рішення, ми повинні дотримуватися двох суперечливих умов - послідовність повинна бути мнемонічної, але в той же час абсолютно випадковою. Неможливо? Не обов'язково. читати...