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.