SeedQR — відкрито задокументований формат даних проєкту SeedSigner, а не новий різновид seed, шифрування чи протокол Bitcoin. Standard SeedQR об’єднує індексовані від нуля позиції слів BIP39 у числовий QR; CompactSeedQR записує початкову ентропію як бінарні дані й дає приймачу заново обчислити checksum.
Standard SeedQR бере кожне слово мнемоніки, знаходить його позицію з індексацією від нуля у списку BIP39 і записує рівно чотирма цифрами. Тому значення 12 записують як 0012. Результат — не фотографія слів і не приватний ключ у текстовій формі, а інше безвтратне представлення того самого секрету. [1]
Список BIP39 містить 2048 елементів з індексами від 0 до 2047. Стандартна фраза з 12 слів утворює 48 цифр і QR-сітку 25×25; фраза з 24 слів — 96 цифр і сітку 29×29. Порядок чотиризначних блоків відповідає порядку слів, тому перестановка блоків відновить іншу або недійсну фразу. [1]
SeedSigner задуманий як stateless signer: після вимкнення завантажені секретні дані зникають, і наступного разу seed потрібно вводити знову. SeedQR скорочує введення до одного сканування або ручного перенесення. Його не можна плутати з PSBT, wallet descriptor чи адресним QR: вони можуть містити публічні або транзакційні дані, тоді як SeedQR містить секрет відновлення. [7]
Перед перенесенням інтерфейс SeedSigner попереджає: “SeedQR is your private key”, а також забороняє фотографувати його чи сканувати пристроєм, під’єднаним до інтернету. Air gap обмежує мережевий шлях витоку, але не шифрує QR і не заважає камері, копії, фізичному злодію чи скомпрометованому офлайн-пристрою прочитати seed. [5]
Офіційна документація вказує підтримку Standard SeedQR і CompactSeedQR для BIP39-фраз із 12 слів і 24 слів. Публічний запит додати проблемний тестовий вектор CompactSeedQR відкрили 25 липня 2022 року, а згодом закрили зміною проєкту; це свідчить про публічне тестування сумісності, а не формальну стандартизацію BIP. [2] [6]
CompactSeedQR об’єднує 11-бітові індекси слів, для 12 слів вилучає 4 біти checksum і зберігає 128 бітів, або 16 байтів, у сітці 21×21. Для 24 слів він вилучає 8 бітів checksum і зберігає 256 бітів, або 32 байти, у сітці 25×25. Формат менший, але звичайний сканер може неправильно показати бінарні дані чи нульові байти; ця незручність не є криптографічним захистом. [1]
BIP39 створює слова, ділячи ентропію та її checksum на 11-бітові індекси списку. Тому CompactSeedQR може опустити біти checksum і після сканування знову обчислити їх з ентропії. Однак payload не містить однозначного ідентифікатора мови списку; відновлення має використати той самий список, а головна специфікація рекомендує англійський. [4]
Реалізацію слід перевіряти за опублікованими тестовими векторами та фактичним кодом encoder, зокрема з нульовим байтом у CompactSeedQR. Практичну вправу відновлення проводять на офлайн-пристрої без цінності: після завантаження порівнюють fingerprint, descriptor або першу адресу отримання з очікуваним гаманцем. Справжній seed ніколи не тестують у вебгенераторі. [3]
Для повної картини прочитайте також Seed Phrase, BIP 39, BIP39 checksum, Private Key, Hardware Wallet, Air-gapped Wallet. На цю статтю також посилаються BBQr.
01Чи SeedQR — це те саме, що звичайний QR-код із bitcoin-адресою?+
Ні. Адресний QR зазвичай публікує місце призначення для отримання платежу, а SeedQR кодує дані, потрібні для відновлення BIP39-гаманця. Той, хто правильно прочитає SeedQR і знає можливу BIP39 passphrase, може вивести приватні ключі. Тому з ним слід поводитися як із seed phrase, а не як із публічною адресою.
02Чи захищає CompactSeedQR seed через те, що звичайний телефон його не читає?+
Ні. CompactSeedQR лише компактніше зберігає той самий секрет як бінарну ентропію. Деякі звичайні сканери показують її неправильно або не показують, але спеціалізоване ПЗ може її декодувати. Це перешкода сумісності, а не шифрування; безпека має спиратися на фізичний захист, контрольоване офлайн-сканування та, за потреби, окремо збережену BIP39 passphrase.