134 / 736SCHNORR

Schnorr Signature

Schnorrův podpis

Když peněženka podepisuje platbu, nevytváří obrázek podpisu ani neodesílá váš soukromý klíč. Vytvoří důkaz, který síť může ověřit. Schnorr Signature je způsob, jak takový důkaz vytvořit úsporně a umožnit i společné podepisování více lidí. V Bitcoinu se používá s Taprootem.

Schnorr Signature je digitální způsob, jak schválit konkrétní zprávu bez prozrazení soukromého klíče. Peněženka tímto tajným klíčem vytvoří podpis; ostatním stačí odpovídající veřejný klíč, tedy údaj určený k ověření. V Bitcoinu podpis pomáhá prokázat oprávnění utratit mince, ale nenahrazuje ostatní kontroly transakce. Bitcoinovou podobu určuje BIP340 a používá se s Taprootem.

Alice chce poslat bitcoin Bobovi. Peněženka je aplikace nebo zařízení pro přijímání a odesílání bitcoinů. Peněženka sestaví transakci a soukromým klíčem podepíše údaje, které předepisují pravidla jejího podpisového režimu. Uzel pak ověří podpis a všechny další podmínky utracení. Uzel je program, který ověřuje transakce a bloky a komunikuje s dalšími účastníky sítě. Platný podpis sám nepotvrzuje občanskou identitu Alice, správnost adresáta ani dostatek neutracených prostředků; to jsou odlišné otázky. Podepsaná platba stále může být chybou, kterou Alice nechtěla udělat. [5] [3] [10] [11]

BIP340 od Pietera Wuilleho, Jonase Nicka a Tima Ruffinga přesně vymezuje bitcoinový Schnorrův podpis. BIP341 jej zapojuje do pravidel Taprootu, která se na hlavní bitcoinové síti (Mainnet) aktivovala v bloku 709632 v roce 2021. Blok sdružuje transakce do dávky, která se připojuje ke společné historii. Jde o dvě vrstvy: podpisový algoritmus a podmínky utracení. Starší výstupy a SegWit v0 dál používají ECDSA, starší podpisový algoritmus; aktualizace jejich podpisy zpětně nepřepsala. [1] [2] [11]

Bajt je běžná jednotka množství dat. Bitcoinová varianta používá eliptickou křivku secp256k1, matematickou strukturu pro práci s klíči a podpisy. BIP340 stanoví pevný 64bajtový formát podpisu. Veřejný klíč se zapisuje 32 bajty souřadnice x; označení x-only neznamená vynechanou bezpečnostní kontrolu. Pravidla jednoznačně určují i to, kterou variantu bodu na křivce ověřovatel použije. Menší a přesně popsaný formát usnadňuje práci programům, ale velikost celé transakce z těchto dvou čísel samotných nevyčtete. [1] [12]

Peněženka nepodepisuje neurčité „souhlasím“. Režim sighash určuje, z jakých údajů transakce vznikne podepisovaná zpráva. SIGHASH_DEFAULT chrání údaje o všech vstupech a všech výstupech obdobně jako SIGHASH_ALL: tedy o tom, které dříve přijaté mince se utrácejí a jaké nové částky s podmínkami utracení vznikají. Změna pokrytých údajů podpis zneplatní. Neznamená to však podpis každého bajtu, například ostatních podpisů. Jiné povolené režimy chrání jiný rozsah. Samotný podpis má 64 bajtů; u nevýchozího režimu se připojí bajt typu, takže tato položka má 65 bajtů. To stále není velikost celého vstupu ani transakce. [2]

Při podepisování vzniká tajná hodnota nonce. Její opakované použití pro odlišné zprávy se stejným klíčem může odhalit soukromý klíč. BIP340 proto přesně popisuje odvození nonce a doporučuje doplňující náhodná data jako další ochranu implementace. Uživatel si nonce nevymýšlí ani ji nezapisuje do zálohy. Spravuje ji ověřená podpisová knihovna; vlastní improvizace zde může zničit jinak správnou kryptografii. [1] [9]

Matematická stavba Schnorrova podpisu umožňuje protokoly, v nichž se několik lidí dohodne na jedné zprávě a vytvoří společný podpis. Příkladem je MuSig2 podle BIP327. V základní podobě tohoto protokolu musí přispět každý člen předem zvolené skupiny. Vyžaduje koordinaci, správné zpracování klíčů a vlastní bezpečný postup pro nonce. Nestačí sečíst libovolné již hotové podpisy. Ani podpora Schnorr Signature v peněžence sama neříká, že peněženka umí takovou spolupráci. [8]

Taproot nabízí různé cesty utracení. Při key path síť ověřuje podpis proti veřejnému klíči zapsanému ve výstupu. Za ním může stát jeden člověk i spolupracující skupina. Při script path se zveřejní zvolený skript, tedy program s podmínkami, které musí platba splnit. Tapscript je podoba tohoto skriptového jazyka pro Taproot. Jeho instrukce OP_CHECKSIGADD ověří jeden podpis a při úspěchu přičte jedničku k průběžnému součtu. Opakováním lze vyhodnotit několik samostatných podpisů a požadovaný počet. Takový skriptový Multisig je jiné řešení než jeden agregovaný podpis. U konkrétní peněženky proto sledujte, kdo musí spolupracovat, co se zveřejní a jaká obnova zbývá při ztrátě klíče. [7] [2]

V síti bez centrálního rozhodčího nesmí jeden uzel podpis přijmout a druhý jej kvůli odlišnému čtení bajtů odmítnout. BIP340 proto podrobně určuje platné klíče, podpisy i ověřovací postup. Umožňuje také batch verification: společné ověřování více podpisů pro úsporu výpočtu. To nepřepisuje jejich obsah na blockchainu a není to sloučení podpisů různých vstupů transakce. [1]

Společný key-path podpis může navenek vypadat jako podpis jediného klíče. Ze samotného podpisu proto nemusí být patrné, kolik lidí se dohodlo. Částky, propojení vstupů a výstupů a čas transakce však běžně zůstávají pozorovatelné. Schnorr Signature platbu nešifruje. Výsledek pro soukromí závisí i na použití Taprootu, chování peněženky a okolnostech platby. [2] [3]

Pro běžného uživatele je podstatná peněženka, která správně ukáže adresáta, částku a poplatek a umožní spolehlivou obnovu. Vývojář navíc ověřuje přesnou podporu BIP340, testovací vektory, práci s nonce a chování při chybě. Název algoritmu není záruka celého produktu. Dobrá knihovna, například libsecp256k1, řeší kryptografický výpočet; nerozhodne za člověka, zda má zobrazenou platbu opravdu schválit. [4] [9] [6]

Pro nejúplnější obraz čtěte toto heslo společně s Taproot, MuSig2, Multisig, Bitcoin Script. Opačným směrem na něj odkazují také SHA-256, Opcode, MuSig2, Nostr.

DOC · 001BIP 340 — Schnorr SignaturesSpecifikace DOC · 002BIP 341 — TaprootSpecifikace DOC · 003Bitcoin Optech — Schnorr signaturesDokumentace DOC · 004Bitcoin Core — secp256k1 verificationDokumentace DOC · 005Bitcoin Core — Script interpreterDokumentace DOC · 006BIP 340 rendered specificationSpecifikace DOC · 007BIP342 — Validation of Taproot ScriptsSpecifikace DOC · 008BIP327 — MuSig2Specifikace DOC · 009libsecp256k1 — Schnorr signature APIDokumentace DOC · 010Bitcoin Developer Guide — WalletsDokumentace DOC · 011Bitcoin Developer Guide — Block ChainDokumentace DOC · 012Bitcoin Developer Reference — TransactionsDokumentace
Revidováno: Primární zdroje · Nejde o investiční doporučení