SLIP-39 — стандарт резервного копіювання гаманця за допомогою кількох списків слів, які називають частками для відновлення. Заздалегідь визначають, скільки різних часток знадобиться. Наприклад, у схемі дві з трьох одну можна втратити й усе одно відновити гаманець. Однієї частки недостатньо. Стандарт SatoshiLabs використовує Shamir’s Secret Sharing, математичний метод поділу секрету. Його частки не є простим переписуванням звичайної Seed Phrase за BIP 39.
Анна обирає копію за схемою дві з трьох. Гаманець — це застосунок або пристрій для отримання й надсилання біткоїнів. Гаманець створює три різні частки, а будь-які дві дозволяють відновлення; цю мінімальну кількість називають порогом. Дві фотографії тієї самої частки досі рахуються як одна. Проста схема використовує одну групу. SLIP-39 підтримує й складніші правила: наприклад, 2 із 3 груп, у кожній потрібно 2 із 3 часток. Двох часток із групи A та двох із B достатньо. Трьох із A та однієї з B — ні, бо повною є лише група A. Тож важливий розподіл, а не сама кількість аркушів. [1] [6]
Кожен список містить інші дані та відомості для їх правильного поєднання. SLIP-39 використовує сталий словник із 1024 англійських слів. Слова копії не перекладають, навіть якщо інтерфейс гаманця український. Секрет завдовжки 128 біт дає частки по 20 слів, а 256 біт — по 33. Біт — одиниця даних, а не ще одне слово для запису. Частка також позначає свій набір, групу та позицію, потрібні пороги й налаштування шифрування. Відновлення перевіряє узгодженість цих даних і відмінність часток. Довільні списки однакової довжини не можна просто змішати. [1]
Анна може використовувати й passphrase — власний додатковий пароль. Достатня кількість часток його не замінить, а правильна комбінація сама не виявить друкарську помилку: інша passphrase дає інший головний секрет, а отже, інший гаманець. Тому результат порівнюють із відомими адресами, а не лише з повідомленням про чинну копію. Без passphrase вхід порожній. SLIP-39 допускає друковані символи ASCII 32–126: базові латинські символи без діакритики, зокрема пробіл. Це правило цього стандарту, а не всіх гаманців. Passphrase — не PIN для розблокування пристрою. [1]
Seed Phrase за BIP 39 створюється інакше та має інший словник. Розподіл її слів між аркушами не перетворює їх на частки SLIP-39. Щоб зберегти той самий гаманець, перетворення має зберегти seed, таємні вхідні дані для дерева ключів BIP 32, і правильну Derivation Path — шлях до використовуваних ключів. Недостатньо перекодувати початкову ентропію, випадкові дані до створення слів. BIP 39 отримує зі слів і passphrase seed завдовжки 512 біт; його пряма копія за SLIP-39 дає частки по 59 слів. Перетворення одного гаманця також не переносить автоматично інші гаманці, відкриті іншими passphrase. Конкретну підтримувану процедуру слід перевірити заздалегідь. [1] [3] [2]
Сумісна копія з позначкою extendable дозволяє змінити поділ і залишити ті самі гаманці. Trezor описує так перехід від однієї частки до кількох. Але заміна аркушів не змінила секрет Анни: достатня стара комбінація й далі працює. Старі та нові частки не змішують. Технічно значення позначки 1 виключає ідентифікатор набору з допоміжного входу шифрування, який називається salt. Той самий encrypted master secret (EMS), тобто зашифрований головний секрет, тоді можна повторно поділити з новим ідентифікатором без знання passphrase. Це не усуває наслідків витоку старої придатної копії. [1] [4]
Приватний ключ — секретне числове значення, за допомогою якого гаманець створює цифровий підпис, що дозволяє витратити кошти. Після відновлення гаманець Анни може підписувати звичайним способом. Власники часток не мусять схвалювати кожну оплату: SLIP-39 відновлює один секрет, тоді як Multisig вимагає кількох підписів за умовами витрачання. Одна пожежа може знищити три частки в тій самій квартирі. Розміщення має ускладнювати і спільну втрату, і збирання достатніх часток нападником; складніша схема водночас ускладнює відновлення. Пробу слід виконувати підтримуваним способом на довіреному пристрої. Еталонна бібліотека python-shamir-mnemonic призначена для розробників, які перевіряють сумісність на публічних тестових прикладах, а не для обробки вашої справжньої копії. Вона прямо попереджає, що недостатньо захищає секрети. [1] [4] [5] [6]
Для гаманця BIP 32 головний секрет — вхідний seed, а не вже обчислений розширений приватний корінь дерева ключів. Спочатку seed шифрують, а потім ділять отриманий EMS. Шифрування використовує чотири раунди конструкції Feistel; кожен містить PBKDF2-HMAC-SHA256 із 2500×2^e повтореннями, де збережений показник e задає обчислювальну складність. Це точно визначена обробка пароля, а не додавання випадкових слів. Поділ виконується побайтово в GF(256), математичній структурі з 256 значеннями. У поліномі секрет міститься у f(255); за порогу щонайменше 2 у f(254) зберігається перевірочне значення — digest. [1] [2]
Останні три слова частки утворюють контрольну суму RS1024. Вона гарантовано виявляє помилку, що зачіпає не більш ніж три слова, але не є підписом автора копії чи доказом власності. Стандарт не рекомендує автоматичного виправлення: програма може створити правильні, але інші слова. Під час об’єднання додатковий 32-бітовий digest допомагає виявити неправильний набір. Він має й теоретичний наслідок: той, хто має на одну частку менше, ніж потрібно для досягнення порога, може вичерпним пошуком відкинути деякі можливі секрети. Тому математичне твердження, що нижче порога не витікає жодної інформації, потребує застереження. Це не означає легкого зламу; це пояснює вимогу достатньо сильного початкового секрету. [1]
Для повної картини прочитайте також Shamir Secret Sharing, BIP 39, Trezor, Multisig, HD Wallet, Seed Phrase. На цю статтю також посилаються BIP 39, Trezor, Павол «Stick» Руснак, Shamir Secret Sharing.