Уявіть собі один головний ключ, який відмикає всі двері в будівлі: вхідні двері, офіс, сейф. А тепер уявіть, що цей ключ неможливо замінити. Жоден слюсар не зможе зробити його копію, а в керівника будівлі немає запасного. У криптовалюті такою є сид-фраза. Загубите її — втратите все, що вона захищає. Дасте її комусь іншому — ця людина отримає контроль над усім.
Цей посібник охоплює всю тему в одному місці: що насправді закодовано у 12 або 24 словах, як із них утворюються ключі для десятків блокчейнів, як їх зберігати, що можна й не можна відновити за їхньою допомогою, а також які проблеми можуть виникнути саме під час відновлення. Якщо ви прочитаєте лише одну статтю про безпеку гаманця, нехай це буде вона.
Простими словами
Сид-фраза (її також називають мнемонічною фразою або фразою відновлення) — це список із 12 або 24 звичайних англійських слів, наприклад correct horse battery staple. Разом вони кодують головний секрет вашого криптогаманця. Це не пароль, який ви придумали самі. Це зручне для людини подання випадкового числа, настільки великого, що його неможливо вгадати обчислювальними методами.
Коли ви відновлюєте гаманець на новому пристрої, вводите слова в потрібному порядку — і повертаються всі адреси та приватні ключі, які цей гаманець коли-небудь створював. Не потрібно відновлювати обліковий запис, надсилати запит у службу підтримки чи чекати. У цьому й полягає сенс сид-фрази, але водночас і весь ризик.
Що насправді являє собою сид-фраза
Процес стандартизовано в BIP-39 (пропозиції щодо вдосконалення Bitcoin № 39), де визначено, як програмне забезпечення гаманця перетворює випадкові дані на список слів.
- Гаманець генерує випадкове число, яке називають ентропією: 128 бітів для фрази з 12 слів або 256 бітів для фрази з 24 слів. Загалом визначено п’ять довжин: 128 бітів — 12 слів, 160 — 15, 192 — 18, 224 — 21, 256 — 24.
- До числа додається коротка контрольна сума. Гаманець обчислює хеш ентропії за допомогою SHA-256 і бере перші кілька бітів результату: 4 біти для ентропії у 128 бітів або 8 бітів для ентропії у 256 бітів.
- Ентропію разом із контрольною сумою ділять на фрагменти по 11 бітів. Кожен фрагмент є індексом у фіксованому списку з 2,048 англійських слів, тож кожне слово кодує рівно 11 бітів. Саме тому сид-фрази складаються зі слів зі словника, а не з довільних рядків символів.
- Результат — 12 слів для ентропії у 128 бітів або 24 слова для ентропії у 256 бітів.
На практиці важливі дві деталі. Перші чотири літери кожного слова зі списку унікальні, тому скорочене введення не спричиняє неоднозначності. Контрольна сума дає змогу виявляти помилки: якщо гаманець відхиляє фразу під час імпорту, це означає, що контрольна сума не збігається. Зазвичай це свідчить про помилкове слово або неправильний порядок слів, а не про втрату коштів.
Список слів однаковий у всіх гаманцях із підтримкою BIP-39. Завдяки цьому сид-фразу Zelcore можна відновити в інших сумісних гаманцях — і навпаки.
Щоб дізнатися, що саме відновлюється із сид-фрази на новому пристрої, прочитайте посібник про синхронізацію Zelcore між пристроями.
Фраза з 12 слів забезпечує 128 бітів захисту — стільки ж, скільки один приватний ключ Bitcoin. Фраза з 24 слів забезпечує 256 бітів. За допомогою сучасного обладнання чи такого, яке можна передбачити в найближчому майбутньому, перебрати всі можливі варіанти практично неможливо. Тож вибір між ними залежить від вашої моделі загроз і готовності записати більше слів, а не від того, що один варіант є «небезпечним».
Від слів до головного сіду: PBKDF2 і парольна фраза
Слова не використовуються безпосередньо як ключ. Вони слугують вхідними даними для функції розтягування ключа.
PBKDF2 приймає мнемонічну фразу як рядок і 2,048 разів виконує над нею HMAC-SHA512. Сіллю є слово mnemonic, за яким іде необов’язкова парольна фраза, яку іноді називають 25-м словом. На виході отримуємо 512-бітне значення, яке називають головним сідом. Цей етап розтягування робить спроби перебору дорогими навіть тоді, коли зловмисник має більшу частину фрази.
Парольна фраза створює чимало проблем, тому варто точно пояснити, як вона працює:
- Вона ніде не зберігається: ані в апаратному гаманці, ані в застосунку, ані в резервній копії. Вона є лише у вашій пам’яті або в окремому письмовому записі.
- Будь-яка інша парольна фраза, навіть порожня, створює зовсім інший головний сід, а отже, й зовсім інший гаманець. Гаманці, створені з тих самих слів, але з різними парольними фразами, криптографічно не пов’язані.
- Порожня парольна фраза — це допустимий варіант, який створює стандартний гаманець, яким користується більшість людей.
Ця модель безпеки передбачає два фактори: якщо хтось викраде слова, але не парольну фразу, ця людина потрапить у гаманець за замовчуванням. Його можна використовувати як гаманець-приманку з невеликим балансом. Однак компроміс тут серйозний: якщо ви забудете парольну фразу, відновити її неможливо. Немає ні функції скидання, ні способу звернутися по допомогу. У статті «25-те слово» пояснено, коли ця функція може стати в пригоді. Якщо коротко, початківцям спершу варто навчитися правильно зберігати звичайну сид-фразу.
Від головного сіду до всіх ключів: BIP-32 і BIP-44
512-бітний головний сід передається на вхід HMAC-SHA512 разом із фіксованим ключем Bitcoin seed. Результат ділиться навпіл: ліві 256 бітів стають головним приватним ключем, а праві 256 бітів — кодом ланцюга, частиною ентропії, яка використовується на кожному наступному етапі виведення ключів. Разом вони утворюють корінь ієрархічного детермінованого (HD) гаманця, визначеного в BIP-32.
Від цього кореня гаманець виводить практично необмежене дерево дочірніх ключів. На кожному етапі батьківський ключ, код ланцюга та номер індексу поєднуються в результаті ще одного запуску HMAC-SHA512. Є два режими:
- Захищене виведення використовує приватний батьківський ключ. Дочірні ключі, отримані таким способом, неможливо обчислити навіть маючи розширений публічний ключ батьківського рівня (xpub). Це не дає витоку xpub призвести до розкриття приватних ключів.
- Звичайне виведення використовує публічний батьківський ключ. Завдяки цьому гаманці лише для перегляду та біржі можуть створювати адреси для депозитів, не торкаючись приватного ключа.
BIP-44 стандартизує структуру шляхів для різних монет:
m / 44' / coin_type' / account' / change / address_index
Значення coin_type залежить від блокчейну: для Bitcoin це 0, для Ethereum — 60 і так далі для сотень зареєстрованих монет. Апострофи на перших трьох рівнях позначають захищене виведення й оберігають ключі облікових записів, навіть якщо витече xpub адресного рівня. Завдяки цьому одна сид-фраза може бути резервною копією гаманця для багатьох блокчейнів: кожен ланцюг має власний шлях від того самого кореня. Так Zelcore виводить облікові записи для понад 80 ланцюгів з однієї фрази. Докладніше про це — у статті «Проблема зберігання активів у мультичейн-гаманці».
Оскільки кожен етап детермінований, той самий сід завжди дає ті самі ключі. Самого головного приватного ключа недостатньо, щоб отримати всі дочірні ключі, адже для кожного виведення потрібен також код ланцюга. Але сид-фраза містить обидва компоненти. Хто має сид-фразу, той має доступ до всього.
Чому її втрата означає кінець
У блокчейнах немає скидання пароля. Жодна компанія не зберігає копію ваших ключів, а служба підтримки не може повернути втрачені кошти. Підписуючи транзакцію в блокчейні, ви використовуєте приватний ключ, похідний від вашого сіду. Якщо сід втрачено, зникають і ключі, а кошти на відповідних адресах назавжди стають недоступними.
За оцінками дослідників, від 2.3 до 3.7 мільйона BTC назавжди недоступні. Значну частину цих коштів втрачено через те, що в перші роки існування Bitcoin сид-фрази й приватні ключі не зберігали належним чином.
PIN-код апаратного гаманця тут не допоможе. Після надто багатьох неправильних спроб введення PIN-коду апаратний гаманець стирає всі дані. Пристрій втрачено, але сид-фраза, збережена офлайн, дає змогу за кілька хвилин відновити гаманець на новому пристрої. Без сид-фрази самого фізичного пристрою недостатньо.
Саме тому під час налаштування будь-якого серйозного гаманця вас просять одразу записати сид-фразу й перевірити її, перш ніж ви внесете бодай одну монету.
Що відновлює сид-фраза, а що — ні
«У мене є сид-фраза, отже, усе гаразд» — це правда для стандартних облікових записів, але не для кількох речей, які люди помилково вважають відновлюваними.
Що можна відновити лише за сид-фразою:
- Баланси в блокчейні й історію транзакцій для всіх стандартних облікових записів BIP-44
- Усі похідні адреси в усіх підтримуваних блокчейнах
- Можливість витрачати кошти з будь-якої з цих адрес
Що не можна відновити за сид-фразою:
- PIN-коди апаратного гаманця, власні назви облікових записів і записи в адресній книзі. Це метадані, що зберігаються лише на пристрої.
- Стан каналів Lightning Network. Lightning працює поза блокчейном; для відкритих каналів, крім сид-фрази, потрібен файл статичної резервної копії каналів (SCB).
- Конфігурації для перегляду без можливості витрачати кошти, у яких використовувалися нестандартні шляхи деривації.
- Дані конкретних застосунків, як-от мітки портфеля, сповіщення про ціни й власні кінцеві точки RPC. У Zelcore після відновлення контакти й налаштування потрібно створити заново; на баланси це не впливає.
Скидання апаратного гаманця можна повністю виправити, якщо сид-фраза збереглася, а ви забули лише PIN-код. Якщо втрачено й сид-фразу, пристрій перетворюється на непотріб.
Як зберігати сид-фразу
Коли ви розумієте, що таке сид-фраза, правила стають очевидними.
Робіть так:
- Щойно сид-фраза з’явиться під час налаштування, запишіть усі слова на папері в правильному порядку.
- Пройдіть перевірку, яку пропонує гаманець, а потім перевірте відновлення на практиці, перш ніж вносити значні кошти.
- Зберігайте щонайменше дві копії в різних захищених місцях: у вогнетривкому сейфі, банківській скриньці або в надійній схованці поза домом.
- Якщо плануєте зберігати кошти тривалий час, вигравіюйте сид-фразу на металевій пластині для резервної копії. Сталь або титан витримують температуру типової пожежі в будинку й затоплення. Папір — ні.
Не робіть цього:
- Не фотографуйте сид-фразу. На більшості телефонів фотографії автоматично синхронізуються з хмарними сервісами.
- Не вводьте її в жоден застосунок, розширення чи на вебсайт, окрім випадку, коли ви свідомо відновлюєте гаманець. Навіть тоді перевірте джерело програмного забезпечення.
- Не надсилайте її електронною поштою й не зберігайте в нотатках, хмарному документі чи онлайн-менеджері паролів.
- Нікому її не передавайте. Жоден постачальник гаманця, біржа чи працівник служби підтримки ніколи не попросить у вас сид-фразу. Той, хто її просить, намагається викрасти ваші кошти. Служба підтримки Zelcore ніколи не проситиме у вас сид-фразу.
Оберіть спосіб зберігання відповідно до загроз
Питання не в тому, «яка резервна копія найкраща», а в тому, «від чого я захищаюся». Для більшості людей реальні загрози — це не цілеспрямовані атаки. Це пожежа, затоплення, крадіжка зі зломом або забуте місце, де лежить резервна копія.
- Папір дешевий і зручний для читання, але з часом псується й не витримує вогню чи води.
- Метал витримує і вогонь, і воду, але коштує дорожче та потребує більше часу на виготовлення. Щойно втрата коштів стане для вас відчутною, метал — практичний вибір.
- Цифрові копії (фотографії, хмарне сховище, нотатки в менеджері паролів) залишають лише один злам облікового запису до повної втрати коштів. Для самої сид-фрази цей спосіб не рекомендований.
Не розділяйте сид-фразу на частини
Зберігати половину слів в одному місці, а половину — в іншому поширено, але це послаблює захист. Якщо зловмисник знайде половину 12-слівної фрази, простір пошуку звузиться настільки, що решту можна підібрати повним перебором. Щоб розподілити ризик між різними місцями, зберігайте окремі повні копії або скористайтеся схемою розподілу секрету Шаміра (SLIP-39). Вона розділяє секрет на N частин, з яких будь-які M дають змогу його відновити, не послаблюючи захист окремих частин. Trezor підтримує SLIP-39; в інших гаманцях ця функція доступна не всюди.
Помилки під час відновлення, про які не попереджають
Вони даються взнаки лише під час відновлення — саме тоді, коли на кону найбільше.
Забута парольна фраза. Слова введено правильно. Гаманець генерує адреси без балансу. Повідомлення про помилку немає. Кошти залишаються в гаманці, захищеному парольною фразою, і до них неможливо дістатися. Це найпоширеніший випадок безповоротної втрати коштів серед тих, хто ввімкнув парольну фразу й покладався лише на пам’ять.
Неправильний шлях деривації. Якщо відновити в застосунку з типовим шляхом BIP-44 гаманець, який використовував BIP-49 (обгорнутий SegWit) або BIP-84 (нативний SegWit), з тієї самої сид-фрази буде отримано інший набір адрес. Може здатися, що баланси зникли. Щоб це виправити, змініть шлях деривації в розширених налаштуваннях нового застосунку, якщо знаєте, де шукати.
Несумісність гаманців. Не кожен гаманець підтримує всі мови BIP-39 або всі типи монет. Якщо відновити гаманець у програмі, яка не підтримує шлях для потрібного блокчейну, нічого не відобразиться. Кошти не зникли — їх просто не видно, доки ви не скористаєтеся програмою з підтримкою цього блокчейну.
Канали Lightning без SCB. Сид-фраза відновлює баланс у блокчейні. Щоб спільно закрити відкриті канали, потрібен файл SCB. Без нього канали можуть закрити примусово, а застаріла резервна копія може дозволити контрагенту скористатися транзакцією зі штрафом.
Зберігання, яке можна зчитати камерою. QR-код із сид-фразою або фотографія в галереї, синхронізованій із хмарою, означають, що одного зламу облікового запису досить для повної втрати коштів. Сид-фраза ніколи не має існувати у формі, яку камера чи знімок екрана можуть передати на сервер.
Найпоширеніші помилки
- Цифрове зберігання. Знімки екрана, нотатки, чернетки й хмарні документи можуть стати доступними через шкідливе програмне забезпечення або витік даних. Сид-фраза має зберігатися офлайн.
- Соціальна інженерія. Якщо «служба підтримки» просить вашу сид-фразу, щоб «підтвердити» або «відновити» обліковий запис, це завжди шахрайство. У статті «Ваша поверхня атаки» описано різні його варіанти.
- Лише одна копія. Одна паперова копія в одному місці — це пожежа, затоплення чи крадіжка зі зломом, що відділяє вас від безповоротної втрати.
- Пропуск перевірки відновлення. П’ять хвилин зараз — інакше ви ризикуєте втратити все.
- Плутанина між сид-фразою та приватним ключем. Приватний ключ керує однією адресою. Сид-фраза дає змогу отримати всі ключі. Втрата одного ключа — болісна, а втрата сид-фрази — остаточна.
Що робити далі
- Перевірте резервну копію сьогодні. Знайдіть сид-фразу й переконайтеся, що кожне слово можна розібрати.
- Запишіть шлях деривації, якщо ваш гаманець використовує нестандартний. Стандартний BIP-44 можна не зазначати.
- Зберігайте парольну фразу окремо й перевірте її. Якщо користуєтеся нею, хоча б раз повністю відновіть гаманець із сид-фразою та парольною фразою.
- Зберігайте статичну резервну копію каналів, якщо користуєтеся Lightning. Тримайте її окремо від сид-фрази та оновлюйте після кожного відкриття чи закриття каналу.
- Доберіть спосіб зберігання відповідно до суми. Папір підійде для невеликих сум за низького рівня ризику; якщо коштів багато, оберіть метал.
- Складіть план зберігання коштів. У статті «Ваш особистий план зберігання коштів» ці правила перетворено на конкретні порогові значення, яких легко дотримуватися, а в покроковій інструкції «Резервне копіювання та відновлення гаманця» показано точні кроки для Zelcore.
Головне
- Сид-фраза — це зрозуміле людині кодування головної ентропії, з якої генеруються всі ключі у вашому гаманці; її стандартизовано BIP-39, BIP-32 і BIP-44.
- 12 слів відповідають 128 бітам ентропії, а 24 слова — 256 бітам. Вгадати будь-яку з них практично неможливо.
- Втрата сид-фрази означає остаточну й незворотну втрату доступу. Те саме стосується забутої парольної фрази.
- Сид-фраза відновлює баланси й адреси. Вона не відновлює PIN-коди, мітки, канали Lightning або нестандартні шляхи деривації.
- Зберігайте щонайменше дві офлайн-копії в окремих надійних місцях; для значних сум надавайте перевагу металу. Ніколи не розділяйте слова на частини й не записуйте їх там, де до них може дістатися камера або інтернет.



