SNICKER by mohl být dalším nástrojem v rostoucím souboru nástrojů pro ochranu osobních údajů v bitcoinu.
Ačkoli Satoshi Nakamoto je bílý papír naznačuje, že ochrana soukromí byla designovým cílem bitcoinového protokolu, analýza blockchainu může dnes často narušit soukromí uživatelů. Tohle je problém. Uživatelé bitcoinů nemusí nutně chtít, aby svět věděl, kde utrácejí peníze, co vydělávají nebo kolik vlastní, zatímco podniky možná nebudou chtít předávat podrobnosti transakcí konkurenci – vyjmenovat několik příkladů.
Naštěstí vývojáři a vědci v oblasti bitcoinů přicházejí s více a více řešeními pro uživatele, aby získali zpět své soukromí. Jedním z těchto šampiónů v oblasti ochrany bitcoinů je Adam „waxwing“ Gibson, který je nejlépe známý svými příspěvky do JoinMarket, protokolu, který umožňuje uživatelům míchat své mince – a nabízí finanční odměnu za účast v těchto mixech.
V poslední době představil Gibson nový nápad: SNICKER (Simple Non-Interactive Coinjoin with Keys for Encryption Reused). Nyní předloženo jako návrh vylepšení bitcoinu (BIP), SNICKER by umožnil míchání mincí bez jakékoli synchronizace nebo interakce: Není potřeba, aby uživatelé koordinovali nebo byli současně online.
CoinJoin
SNICKER je založen na dosud dobře zavedené technice míchání bitcoinů CoinJoin. Některá z nejpopulárnějších míchacích řešení, která jsou dnes k dispozici, tento trik již používají, včetně peněženky Wasabi Wallet (ZeroLink), Samourai Wallet (Whirlpool) a JoinMarket.
Další čtení: Co jsou bitcoinové mixéry?
CoinJoin je v podstatě nástroj ke sloučení několika transakcí do jedné. Řekněme tedy, že Alice chce zaplatit Carol jeden bitcoin a Bob chce zaplatit Daveovi jeden bitcoin. V tomto příkladu mohou Alice a Bob spolupracovat na vytvoření jedné velké transakce, kde oba utratí jeden bitcoin (celkem dva), a Carol a Dave obdrží každý jeden bitcoin. Blockchainový špión nebude schopen zjistit, který z odesílatelů zaplatil, který z příjemců, což těží z soukromí všech.
Ve skutečnosti jsou však množství transakcí bitcoinů často úniky soukromí. Pokud chce Alice zaplatit Carol jeden bitcoin, ale Bob chce zaplatit Daveovi dva bitcoiny, bude zřejmé, kdo komu zaplatil porovnáním odesílacích a přijímajících částek.
Proto se CoinJoin obvykle používá k míchání. Místo toho, aby platili někomu jinému, Alice a Bob si posílají jeden bitcoin pro sebe. Když to spojí do jedné transakce, blockchainoví špióni nemohou zjistit, kdo dostal kterou minci zpět: Mince jsou smíšené a chrání soukromí Alice i Boba do budoucna.
Mixéry CoinJoin dnes fungují, ale mají nevýhodu: Vyžadují interaktivitu. Transakce CoinJoin je platná, pouze pokud všichni zúčastnění uživatelé podepíší celou transakci – ale k podepsání celé transakce musí zúčastnění uživatelé nejprve přidat všechny své coiny a nové přijímací adresy. To obvykle znamená, že musí transakci projít několikrát a obvykle vyžaduje, aby byli všichni online současně.
Takové požadavky jsou pro mnoho uživatelů trochu překážkou, což je jeden z důvodů, proč transakce CoinJoin nejsou příliš běžné. Tyto požadavky SNICKER obchází.
SNICKER Verze 1
Protokol popsaný v této části je první navrhovanou verzí SNICKER. Tato verze je o něco srozumitelnější než alternativní verze, ale je důležité si uvědomit, že to ve skutečnosti není nejlepší verze protokolu nebo verze, která bude s největší pravděpodobností implementována. (Více o alternativních verzích později.)
S tím bylo řečeno, takto funguje SNICKER verze 1:
Řekněme, že Alice má jeden bitcoin, který chce smíchat, představovaný nevyčerpaným transakčním výstupem (UTXO) na blockchainu. První věc, kterou udělá, je znovu odeslat tento bitcoin … na stejnou adresu. To je pravda, v této verzi SNICKER znovu používá adresu, která porušuje osvědčené postupy bitcoinu. Ale přijde to vhod: Veřejně označuje UTXO jako (potenciálně) dostupné pro míchání.
To mimochodem neznamená, že Alice nemůže minci použít. Stále sedí v její peněžence a je připravena ji kdykoli utratit. Je to jen označené, pro případ, že by to někoho zajímalo.
Bob má také jednu minci k míchání. (Ve skutečnosti se částky nemusí předem rovnat – Bob musí mít alespoň tolik jako Alice.) Bob nezná Alici, ale ví, že uživatelé jako Alice jsou venku a označují jejich UTXO jako míchatelný. Bob tedy skenuje blockchain kvůli možným shodám. Najde Alice UTXO a pravděpodobně ještě pár odpovídajících UTXO, včetně falešných poplachů (ne všechny znovu použité adresy jsou opravdu k dispozici pro mixování). Ale prozatím pro zjednodušení předpokládejme, že Bob najde pouze jednu shodu: Alice’s UTXO. (K dalším potenciálním shodám a falešným poplachům se vrátíme později.)
Se shodou Bob nyní vezme veřejný klíč odpovídající opětovně použité adrese. To je možné přesně proto, že adresa je znovu použita: Při prvním použití Alice zveřejnila tento veřejný klíč na blockchainu. (Veřejné klíče se stanou viditelnými na blockchainu, jakmile jsou mince vyčerpány, zatímco adresy jsou vždy viditelné.)
V tomto okamžiku má Bob Alicino UTXO (protože ho označila) a její veřejný klíč (protože jednou utratila ze své adresy).
Nyní Bob používá Alicin veřejný klíč a kombinuje jej se svým vlastním soukromým klíčem (pro minci, kterou chce smíchat), aby vytvořil „sdílené tajemství“. Doslova nejstarší trik v kryptografické knize, toto tajemství je sdíleno, protože ho mohou vygenerovat pouze Alice a Bob: Bob se svým soukromým klíčem a Aliciným veřejným klíčem a Alice se svým soukromým klíčem a Bobovým veřejným klíčem (odpovídá mincím, které chce zamíchat).
Takže teď má Bob Alicino UTXO a její veřejný klíč a sdílené tajemství (protože ho vygeneroval s Aliciným veřejným klíčem a jeho soukromým klíčem).
Bob používá sdílené tajemství novým způsobem. Používá jej k matematickému „vyladění“ veřejného klíče Alice. Toto vyladění ve skutečnosti vytváří nový veřejný klíč. Kromě … nikdo k tomu nemá soukromý klíč. Dosud.
Zajímavé je, že díky dalšímu kousku kryptoměny může vylepšený soukromý klíč pro vylepšený veřejný klíč objevit také Alice! Pokud by vylepšila svůj původní soukromý klíč se stejným sdíleným tajemstvím, výsledný vylepšený soukromý klíč by odpovídal vylepšenému veřejnému klíči.
Jinými slovy, Bob může generovat nový veřejný klíč, a tedy novou adresu bitcoinu pro Alici, ze které může utrácet jen ona. I bez toho, aby to teď věděla!
Takže Bob má nyní Alicino UTXO a její veřejný klíč, sdílené tajemství a novou adresu bitcoinu pro Alici (generovanou s jejím veřejným klíčem a sdíleným tajemstvím).
To je téměř dost na vytvoření platné transakce CoinJoin. Bob konkrétně vezme Alice’s UTXO a přidá UTXO pro svou vlastní minci, takže existují dva vstupy. Potom přidá Aliciinu novou adresu a vlastní adresu jako výstupy (stejně jako poplatky a některé další podrobnosti, jako je třeba adresa pro změnu, pokud je potřeba). A podepisuje transakci.
Jediné, co teď chybí, je Alicin podpis.
Oslovení Alice
Poslední krok – dosažení Alice – je ve skutečnosti snazší, než se zdá, ale vyžaduje poslední trik.
Bob mohl jednoduše publikovat téměř úplnou transakci CoinJoin někde, kde ji Alice mohla najít. Například na nástěnce věnované uživatelům SNICKER; nejlépe jeden na skryté službě Tor nebo jinak zaručeně nabízející anonymitu vydavatelů.
Pokud by to však bylo provedeno v prostém textu, nebylo by to ideální. Pokud špión sleduje vývěsku, mohli by triviálně zjistit, který vstup patří navrhovateli (v tomto případě Bobovi) a který vstup patří příjemci (v tomto případě Alici): Podepsaný je navrhovatelův. Může to být únik soukromí sám o sobě. Ale bylo by ještě horší, kdyby Bob dal více návrhů na míchání různých mincí. V takovém případě by mohl být špión schopen připojit všechny různé UTXO k Bobovi, protože jeho dávka návrhů byla současně zveřejněna na nástěnce.
Místo toho tedy Bob zašifruje transakci CoinJoin … pomocí veřejného klíče Alice! Tímto způsobem může transakci dešifrovat pouze Alice a špion se nemůže nic naučit.
Po zveřejnění šifrované transakce na nástěnce udělal Bob vše, co potřebuje. Pokud chce, může zmizet online.
Alice’s Turn
Vzhledem k tomu, že transakce CoinJoin je nyní šifrována, přináší to jednu poslední, lehkou komplikaci. I když Alice ví, kde hledat balíček – na nástěnce SNICKER – neví, co hledat: Všechny transakce CoinJoin na nástěnce vypadají jako šifrované objekty BLOB.
Existuje pouze jedna cesta ven. Alice se musí pokusit dešifrovat všechny balíčky pomocí svého soukromého klíče v naději, že se jeden z nich promění v něco užitečného.
Ale když se Bobův šifrovaný blob změní na transakci CoinJoin, Alice má vše, co potřebuje k dokončení mixu. Pomocí svého soukromého klíče a veřejného klíče Boba (který je součástí jeho vstupu) vygeneruje sdílené tajemství, které pak může použít k vytvoření svého nového vylepšeného soukromého klíče. Po kontrole, že nový klíč odpovídá její nové přijímací adrese na výstupu, podepíše a odešle transakci do bitcoinové sítě.
Alice a Bob míchali své mince, i když nikdy neinteragovali, ani nemuseli být online současně.
A i když může proces znít v textu poněkud pracně, mějte na paměti, že vše lze odebrat pomocí softwaru, přeložit do několika tlačítek na obrazovce notebooku nebo telefonu nebo dokonce úplně automatizovat.
SNICKER verze 2
SNICKER, jak je dosud vysvětleno, je první verzí návrhu. Gibson již navrhl druhou verzi a na stole jsou také další varianty.
Druhá verze SNICKER je podobná, ale vyhýbá se nutnosti opětovného použití adresy – za cenu o něco složitější.
V této druhé verzi Bob nedostane Alicin veřejný klíč z znovu použité adresy. Místo toho Bob vezme veřejný klíč ze vstupu stejné transakce, která vytvořila Alice’s UTXO. Bob předpokládá, že alespoň jeden ze vstupů v této transakci vytvořil Alice sama a že pro ně stále má soukromé klíče.
Bob dělá tento předpoklad, protože tentokrát je Alice’s UTXO ještě jasněji označena jako dostupná pro mixování a tak jasně by byla označena, pouze pokud Alice ovládá soukromé klíče odpovídající vstupům. SNICKER BIP nespecifikuje, jak by se provedlo počáteční značení, ale naznačuje, že určité peněženky (jako peněženky JoinMarket) takové informace nepochybně odhalí. Alternativně by Alice mohla jednoduše zveřejnit zprávu na nástěnce propagující její UTXO.
Ale ještě lepší: Jakmile se SNICKER začne používat, hledání nových zápasů by mělo být mnohem jednodušší. Je to proto, že samotné transakce SNICKER by bylo triviální rozpoznat a stávající uživatelé SNICKER by pravděpodobně chtěli znovu promíchat své mince. Jinými slovy, po počáteční fázi bootstrappingu by se nesmíchané mince smíchaly s dříve smíchanými mincemi, což mělo za následek více smíšených mincí, které by zase mohly být využity pro více míchání.
Výzvy a příležitosti
Jak již bylo zmíněno výše, SNICKER BIP je stále jen koncept a podléhá kontrole a možnému zlepšení. (Myšlenka se již v některých aspektech vyvinula od doby, kdy ji poprvé veřejně navrhl Gibson v a příspěvek na blogu.) Nyní byl předložen návrh, aby se stal BIP, aby mohl být standardizován a následně kompatibilní s různými peněženkami.
SNICKER také čelí některým otevřeným otázkám a výzvám, i když se žádná z nich nezdá nepřekonatelná. Patří mezi ně například, které UTXO by měly být vybrány jako shody, a zejména jak omezit počet falešných poplachů. Kromě znovu použitých adres lze potenciální shody filtrovat například podle množství, stáří UTXO nebo konkrétních typů použitých peněženek.
Ale jak již bylo zmíněno dříve v tomto článku, i když existuje více shod (včetně falešných poplachů), je to pravděpodobně jen malý problém. Navrhovatelé („Bob“) mohli jednoduše vytvořit kandidátské transakce pro všechny z nich. I když jsou tyto návrhy v rozporu (protože Bob používá pro všechny stejné UTXO), jednoduše to znamená, že první příjemce (první „Alice“), který odpoví, získá kombinaci – další potenciální zákazníci zjistí, že bylo příliš pozdě, ale neškodí bude hotovo. U falešných poplachů nedojde ani ke skutečné škodě, Bobova nabídka bude jen sedět na nástěnce a bude navždy ignorována (nebo dokud nebude odstraněna).
Zvláště významným problémem však může být spam. Vzhledem k tomu, že vývěska by hostovala šifrované bloky dat, nebylo by možné odfiltrovat „falešné“ návrhy: náhodný blábol zveřejněný útočníkem, který by narušil protokol SNICKER. Gibson ve svém návrhu BIP navrhl některá řešení tohoto problému, ale ta by představovala nové kompromisy, jako náklady na zveřejnění návrhu.
Na druhé straně nabízí SNICKER také některé výhody, které byly pro zjednodušení dosud vynechány z vysvětlení. Jednou z takových výhod je, že nabízející) mohou přidat nějaké finanční prostředky do produkce příjemce a přidat tak určitou finanční pobídku k přijetí kombinace. Je také možné provádět SNICKER mixy s více než dvěma uživateli najednou – i když díky tomu bude trik mnohem složitější.
A právě proto, že protokol není interaktivní, Gibson věří, že SNICKER by bylo relativně snadné implementovat do peněženek, ve srovnání s některými jinými technologiemi ochrany osobních údajů, jako je například JoinMarket. Peněženka Electrum zatím projevila zájem o přijetí tohoto návrhu – ačkoli jeho skutečné provedení může být ještě daleko.
Další informace a informace o SNICKERU najdete v koncept BIP, postupujte podle seznamu adres bitcoin-dev diskuse nebo si přečtěte Gibson (mírně zastaralý) příspěvek na blogu o návrhu.