134 / 736SCHNORR

Schnorr Signature

Підпис Шнорра

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

Schnorr Signature — цифровий спосіб схвалити конкретне повідомлення, не розкриваючи приватного ключа. Гаманець створює підпис цим таємним ключем; іншим для перевірки достатньо відповідного відкритого ключа. У Bitcoin підпис допомагає підтвердити право витратити монети, але не замінює інших перевірок транзакції. Варіант для Bitcoin визначає BIP340, і він використовується з Taproot.

Аліса хоче надіслати біткоїни Бобу. Гаманець — це застосунок або пристрій для отримання й надсилання біткоїнів. Гаманець складає транзакцію та приватним ключем підписує дані, передбачені обраним режимом підпису. Потім вузол перевіряє підпис і всі інші умови витрачання. Вузол — програма, що перевіряє транзакції та блоки й обмінюється даними з іншими учасниками мережі. Сам по собі дійсний підпис не засвідчує особу Аліси за документами, правильність одержувача чи достатню кількість невитрачених коштів: це окремі питання. Підписаний платіж усе ще може бути ненавмисною помилкою. [5] [3] [10] [11]

BIP340, авторами якого є Pieter Wuille, Jonas Nick і Tim Ruffing, точно визначає підпис Шнорра для Bitcoin. BIP341 включає його до правил витрачання Taproot, активованих в основній мережі Bitcoin (Mainnet) на блоці 709632 у 2021 році. Блок об’єднує транзакції в пакет, який додають до спільної історії. Це два рівні: алгоритм підпису та умови витрачання. Старі виходи й SegWit v0 і далі використовують ECDSA, попередній алгоритм підпису; оновлення не замінило їхні підписи заднім числом. [1] [2] [11]

Байт — звичайна одиниця обсягу даних. Варіант для Bitcoin використовує еліптичну криву secp256k1 — математичну структуру для роботи з ключами й підписами. BIP340 установлює фіксований формат підпису довжиною 64 байти. Публічний ключ записується як 32 байти координати x; x-only не означає пропущеної перевірки безпеки. Правила також однозначно визначають, який варіант точки кривої має використати перевіряльник. Менший і точно описаний формат полегшує роботу програм, але лише за цими двома числами розмір усієї транзакції не визначити. [1] [12]

Гаманець підписує не абстрактне «погоджуюся». Режим sighash визначає, які дані транзакції утворюють підписуване повідомлення. SIGHASH_DEFAULT захищає відомості про всі входи й виходи, подібно до SIGHASH_ALL: які раніше отримані монети витрачаються та які нові суми з умовами витрачання створюються. Зміна охоплених даних робить підпис недійсним. Це не означає підписування кожного байта, наприклад інших підписів. Інші дозволені режими мають інше охоплення. Сам підпис займає 64 байти; для режиму, відмінного від стандартного, додається байт типу, тож цей елемент має 65 байтів. Це все ще не розмір усього входу чи транзакції. [2]

Під час підписування створюється секретне значення nonce. Повторне використання його для різних повідомлень із тим самим ключем може розкрити приватний ключ. Тому BIP340 точно описує отримання nonce і радить допоміжні випадкові дані для додаткового захисту реалізації. Користувач не вигадує nonce та не записує її до резервної копії. Цим керує перевірена бібліотека підписування; імпровізація тут здатна зруйнувати навіть правильну криптографію. [1] [9]

Математична будова підписів Шнорра дозволяє протоколи, у яких кілька людей узгоджують одне повідомлення та створюють спільний підпис. Приклад — MuSig2 за BIP327. У базовому варіанті цього протоколу потрібен внесок кожного члена обраної групи. Він потребує координації, правильної роботи з ключами й окремого безпечного порядку використання nonce. Просто додати довільні готові підписи недостатньо. Сама підтримка Schnorr Signature також не означає, що гаманець уміє організувати таку співпрацю. [8]

Taproot пропонує різні шляхи витрачання. За key path мережа перевіряє підпис щодо відкритого ключа, записаного у виході. За ним може стояти одна людина або група, що співпрацює. За script path розкривається обраний скрипт — програма з умовами, які має виконати платіж. Tapscript — версія цієї скриптової мови для Taproot. Його інструкція OP_CHECKSIGADD перевіряє один підпис і в разі успіху додає одиницю до поточного лічильника. Повторюючи її, можна перевірити кілька окремих підписів і потрібну кількість. Такий скриптовий Multisig — інший підхід, ніж один агрегований підпис. Для конкретного гаманця з’ясовуйте, хто має співпрацювати, що стане публічним і яке відновлення залишиться можливим після втрати ключа. [7] [2]

У мережі без центрального арбітра один вузол не повинен приймати підпис, який інший відхиляє через інше прочитання байтів. Тому BIP340 докладно визначає допустимі ключі, підписи та процедуру перевірки. Він також дозволяє batch verification — спільну перевірку кількох підписів для економії обчислень. Це не переписує їхні записи в блокчейні й не об’єднує підписи різних входів транзакції. [1]

Спільний підпис key-path може виглядати як підпис одного ключа. Тому з самого підпису не завжди видно, скільки людей домовилися. Однак суми, зв’язки між входами й виходами та час транзакції зазвичай залишаються спостережуваними. Schnorr Signature не шифрує платіж. Приватність залежить також від використання Taproot, поведінки гаманця та обставин платежу. [2] [3]

Звичайному користувачеві потрібен гаманець, який правильно показує одержувача, суму й комісію та забезпечує надійне відновлення. Розробник додатково перевіряє точну підтримку BIP340, тестові вектори, роботу з nonce і поведінку при збоях. Назва алгоритму не гарантує якість усього продукту. Добра бібліотека, наприклад libsecp256k1, виконує криптографічні обчислення, але не вирішує за людину, чи слід погоджувати показаний платіж. [4] [9] [6]

Для повної картини прочитайте також Taproot, MuSig2, Multisig, Bitcoin Script. На цю статтю також посилаються SHA-256, Opcode, MuSig2, Nostr.

DOC · 001BIP 340 — Schnorr SignaturesСпецифікація DOC · 002BIP 341 — TaprootСпецифікація DOC · 003Bitcoin Optech — Schnorr signaturesДокументація DOC · 004Bitcoin Core — secp256k1 verificationДокументація DOC · 005Bitcoin Core — Script interpreterДокументація DOC · 006BIP 340 rendered specificationСпецифікація DOC · 007BIP342 — Validation of Taproot ScriptsСпецифікація DOC · 008BIP327 — MuSig2Специфікація DOC · 009libsecp256k1 — Schnorr signature APIДокументація DOC · 010Bitcoin Developer Guide — WalletsДокументація DOC · 011Bitcoin Developer Guide — Block ChainДокументація DOC · 012Bitcoin Developer Reference — TransactionsДокументація
Переглянуто: Спочатку джерела · Не інвестиційна порада