name: Ochrana osobních údajů v bitcoinech goal: Pochopení a zvládnutí zásad ochrany soukromí při používání Bitcoinu objectives:
- Definovat teoretické koncepty potřebné k pochopení problematiky ochrany soukromí
- Identifikace a zmírnění rizik spojených se ztrátou důvěrnosti pro uživatele bitcoinů
- Používání metod a nástrojů na ochranu soukromí na Bitcoinu
- Porozumět metodám analýzy řetězců a vypracovat obranné strategie
Ochrana soukromí na Bitcoinu
Ve světě, kde se důvěrnost finančních transakcí postupně stává luxusem, je pochopení a zvládnutí zásad ochrany soukromí při používání Bitcoinu nezbytné. Tento vzdělávací kurz vám poskytne všechny klíče, teoretické i praktické, jak toho samostatně dosáhnout.
Dnes se na analýzu blockchainu specializují společnosti zabývající se Bitcoinem. Jejich hlavní činnost spočívá právě v pronikání do vaší soukromé sféry s cílem ohrozit důvěrnost vašich transakcí. Ve skutečnosti nic takového jako "právo na soukromí" v Bitcoinu neexistuje. Je tedy na vás, uživatelích, abyste se domáhali svých přirozených práv a chránili důvěrnost svých transakcí, protože nikdo jiný to za vás neudělá.
Kurz je koncipován jako komplexní a obecný. Každý technický koncept je podrobně popsán a doplněn vysvětlujícími schématy. Cílem je zpřístupnit znalosti všem. BTC204 je proto cenově dostupný pro začátečníky i středně pokročilé uživatele. Kurz nabízí přidanou hodnotu i zkušenějším bitcoinářům, protože se hlouběji zabýváme některými technickými koncepty, které jsou často špatně chápány.
Připojte se k nám, abyste změnili způsob používání bitcoinu a stali se informovanými uživateli, kteří jsou schopni porozumět otázkám důvěrnosti a ochrany svého soukromí.
Úvod
Přehled kurzu
Vítejte v kurzu BTC204!
Ve světě, kde se důvěrnost finančních transakcí postupně stává luxusem, je pochopení a zvládnutí zásad ochrany soukromí při používání Bitcoinu nezbytné. Tento vzdělávací kurz vám poskytne všechny klíče, teoretické i praktické, jak toho samostatně dosáhnout.
Dnes se na analýzu blockchainu specializují společnosti zabývající se Bitcoinem. Jejich hlavní činnost spočívá právě v pronikání do vaší soukromé sféry s cílem ohrozit důvěrnost vašich transakcí. Ve skutečnosti nic takového jako "právo na soukromí" v Bitcoinu neexistuje. Je tedy na vás, uživatelích, abyste se domáhali svých přirozených práv a chránili důvěrnost svých transakcí, protože nikdo jiný to za vás neudělá.
Bitcoin není jen o "Number Go Up" a zachování hodnoty úspor. Díky svým jedinečným vlastnostem a historii je především nástrojem protihospodářství. Díky tomuto impozantnímu vynálezu můžete volně nakládat se svými penězi, utrácet je a hromadit, aniž by vám v tom kdokoli mohl zabránit.
Bitcoin nabízí klidný únik z područí státu a umožňuje vám plně využívat vaše přirozená práva, která nelze zpochybnit zavedenými zákony. Díky vynálezu Satoshiho Nakamota máte moc vynutit si respektování svého soukromého vlastnictví a znovu získat svobodu uzavírat smlouvy.
Bitcoin však není ve výchozím nastavení anonymní, což může představovat riziko pro osoby zapojené do protihospodářské činnosti, zejména v regionech pod despotickou vládou. To však není jediné nebezpečí. Protože bitcoin je cenné a nevyčíslitelné aktivum, může být cílem zlodějů. Ochrana vašeho soukromí se tak stává i otázkou bezpečnosti: může vám pomoci zabránit hackerským útokům a fyzickému napadení.
Jak uvidíme, ačkoli protokol sám o sobě nabízí určitou ochranu důvěrnosti, je nezbytné používat další nástroje k optimalizaci a obraně této důvěrnosti.
Tento školicí kurz je navržen tak, aby poskytl ucelený obecný přehled o problematice důvěrnosti bitcoinů. Každý technický koncept je podrobně popsán a doplněn vysvětlujícími diagramy. Cílem je zpřístupnit tyto znalosti všem, i začátečníkům a středně pokročilým uživatelům. Pro zkušenější uživatele Bitcoinu se v průběhu kurzu věnujeme také vysoce technickým a někdy málo známým konceptům, abychom prohloubili porozumění každému tématu.
Cílem tohoto školení není zajistit, abyste byli při používání Bitcoinu zcela anonymní, ale spíše vám poskytnout základní nástroje, abyste věděli, jak chránit svou důvěrnost v souladu s vašimi osobními cíli. Budete si moci svobodně vybrat z představených konceptů a nástrojů a vytvořit si vlastní strategie, přizpůsobené vašim konkrétním cílům a potřebám.
Oddíl 1: Definice a klíčové pojmy
Nejprve si projdeme základní principy fungování Bitcoinu, abychom se pak mohli v klidu věnovat pojmům týkajícím se důvěrnosti. Než budete moci plně pochopit pojmy, kterými se budeme zabývat v následujících kapitolách, je nezbytné zvládnout několik základních pojmů, jako je UTXO, přijímání adres a skriptování. Představíme si také obecný model důvěrnosti Bitcoinu, jak si jej představoval Satoshi Nakamoto, což nám umožní pochopit související sázky a rizika.
Oddíl 2: Porozumění analýze řetězce a ochrana před ní
Ve druhé části se podíváme na techniky, které používají společnosti zabývající se analýzou blockchainu ke sledování vaší aktivity na Bitcoinu. Pochopení těchto metod je zásadní pro posílení ochrany vašeho soukromí. Cílem této části je prozkoumat strategie útočníků, abychom lépe pochopili rizika a připravili si půdu pro techniky, které budeme studovat v následujících částech. Budeme analyzovat vzory transakcí, vnitřní a vnější heuristiky a pravděpodobné interpretace těchto vzorů. Kromě teorie se na praktických příkladech a cvičeních naučíme používat průzkumníka bloků pro analýzu řetězců.
Oddíl 3: Osvojení osvědčených postupů pro ochranu soukromí
Ve třetí části našeho vzdělávacího kurzu přejdeme k samotné podstatě: praxi! Cílem je osvojit si všechny základní osvědčené postupy, které by se měly stát přirozenými reflexy každého uživatele Bitcoinu. Budeme se zabývat používáním prázdných adres, tagováním, konsolidací, používáním kompletních uzlů a také metodami KYC a akvizice. Cílem je poskytnout vám ucelený přehled nástrah, kterým je třeba se vyhnout, abyste si vytvořili pevné základy v naší snaze o ochranu soukromí. U některých z těchto postupů budete odkázáni na konkrétní návod, jak je implementovat.
Oddíl 4: Porozumění transakcím coinjoin
Jak můžeme mluvit o soukromí v Bitcoinu, aniž bychom zmínili coinjoiny? V části 4 se dozvíte vše, co potřebujete vědět o této metodě míchání. Dozvíte se, co jsou coinjoiny, jaká je jejich historie a cíle a jaké různé typy coinjoinů existují. Nakonec se pro zkušenější uživatele podíváme na to, co jsou to anonsety a entropie a jak je vypočítat.
Oddíl 5: Porozumění problémům dalších pokročilých technik utajení
V páté části se podíváme na všechny ostatní dostupné techniky ochrany soukromí na Bitcoinu, kromě coinjoinu. V průběhu let prokázali vývojáři pozoruhodnou kreativitu při navrhování nástrojů věnovaných ochraně soukromí. Podíváme se na všechny tyto metody, jako je payjoin, kolaborativní transakce, coin swap a atomic swap, a podrobně popíšeme, jak fungují, jaké jsou jejich cíle a případné slabiny.
Budeme se také zabývat soukromím na úrovni sítě uzlů a šířením transakcí. Probereme také různé protokoly, které byly v průběhu let navrženy ke zvýšení soukromí uživatelů v Bitcoinu, včetně protokolů statických adres.
Připraveni prozkoumat zákoutí soukromí na Bitcoinu? Jdeme na to!
Definice a klíčové pojmy
Model UTXO společnosti Bitcoin
Bitcoin je především měna, ale víte, jak jsou BTC v protokolu zastoupeny?
UTXO na Bitcoinu: co to je?
Protokol bitcoinu je založen na modelu UTXO, což je zkratka pro "Unspent Transaction Output".
Tento model se výrazně liší od tradičních bankovních systémů, které se při sledování finančních toků spoléhají na mechanismus účtů a zůstatků. V bankovním systému jsou totiž jednotlivé zůstatky vedeny na účtech spojených s identitou. Když si například koupíte bagetu u pekaře, vaše banka jednoduše odečte částku nákupu z vašeho účtu, čímž se sníží váš zůstatek, zatímco na účet pekaře se připíše stejná částka, čímž se zvýší jeho zůstatek. V tomto systému neexistuje žádná vazba mezi penězi, které na váš účet přicházejí, a penězi, které z něj odcházejí, kromě záznamů o transakcích.
Bitcoin funguje jinak. Koncept účtu neexistuje a peněžní jednotky nejsou
spravovány prostřednictvím zůstatků, ale prostřednictvím UTXO. UTXO
představuje určité množství bitcoinů, které ještě nebylo utraceno, a tvoří
tak "kus bitcoinu", který může být velký nebo malý. Jedno UTXO může mít
například hodnotu 500 BTC nebo jednoduše 700 SATS.
**> Satoshi, často zkracovaný na sat, je nejmenší jednotka bitcoinu, srovnatelná s centem ve fiat měnách.
1 BTC = 100 000 000 SATS
Teoreticky může jeden UTXO představovat libovolnou hodnotu v bitcoinech, od jedné sedmičky až po teoretické maximum kolem 21 milionů BTC. Je však logicky nemožné vlastnit všech 21 milionů bitcoinů a existuje spodní ekonomická hranice zvaná "prach", pod kterou je UTXO považováno za ekonomicky nevýhodné utratit.
**> Největší UTXO, které kdy bylo na Bitcoinu vytvořeno, mělo hodnotu 500 000 BTC. Vytvořila ho platforma MtGox během konsolidační operace v listopadu 2011: 29a3efd3ef04f9153d47a990bd7b048a4b2d213daaa5fb8ed670fb85f13bdbcf
UTXO a podmínky výdajů
UTXO jsou směnné nástroje na Bitcoinu. Výsledkem každé transakce je spotřeba UTXO jako vstupů a vytvoření nových UTXO jako výstupů. Po dokončení transakce jsou UTXO použité jako vstupy považovány za "spotřebované" a jsou vytvořeny nové UTXO, které jsou přiděleny příjemcům uvedeným ve výstupech transakce. UTXO tedy jednoduše představuje nespotřebovaný výstup transakce, a tedy množství bitcoinů, které v daném okamžiku patří uživateli.
Všechny UTXO jsou zabezpečeny skripty, které definují podmínky, za nichž je lze utratit. Aby mohl uživatel UTXO spotřebovat, musí síti prokázat, že splňuje podmínky stanovené skriptem, který dané UTXO zajišťuje. Obvykle jsou UTXO chráněny veřejným klíčem (nebo přijímací adresou, která tento veřejný klíč zastupuje). Aby mohl uživatel utratit UTXO spojený s tímto veřejným klíčem, musí prokázat, že je držitelem odpovídajícího soukromého klíče, a to předložením digitálního podpisu vytvořeného tímto klíčem. Proto říkáme, že vaše bitcoinová peněženka ve skutečnosti neobsahuje bitcoiny, ale uchovává vaše soukromé klíče, které vám následně umožňují přístup k UTXO a následně i k bitcoinům, které představují.
Protože v bitcoinech neexistuje pojem účtu, zůstatek peněženky je jednoduše součtem hodnot všech UTXO, které může utratit. Pokud například vaše peněženka s bitcoiny může utratit následující 4 UTXO:
- 2 BTC
- 8 BTC
- 5 BTC
- 2 BTC
Celkový zůstatek vašeho portfolia bude 17 BTC.
Struktura transakcí Bitcoin
Vstupy a výstupy transakcí
Transakce s bitcoiny je operace zaznamenaná v blockchainu, která převádí vlastnictví bitcoinů z jedné osoby na druhou. Přesněji řečeno, protože jsme na modelu UTXO a neexistují žádné účty, transakce splňuje podmínky výdajů, které zajišťují jedno nebo více UTXO, spotřebovává je a ekvivalentně vytváří nové UTXO s novými podmínkami výdajů. Stručně řečeno, transakce přesouvá bitcoiny ze splněného skriptu do nového skriptu určeného k jejich zajištění.
Každá bitcoinová transakce se proto skládá z jednoho nebo více vstupů a jednoho nebo více výstupů. Vstupy jsou UTXO spotřebované transakcí k vytvoření výstupů. Výstupy jsou nové UTXO, které lze použít jako vstupy pro budoucí transakce.
**> Teoreticky může mít bitcoinová transakce nekonečný počet vstupů a výstupů. Jediným omezením je maximální velikost bloku.
Každý vstup v transakci bitcoinu se vztahuje k předchozímu nevydanému UTXO. Aby bylo možné UTXO použít jako vstup, musí jeho držitel prokázat, že je oprávněným vlastníkem, a to ověřením souvisejícího skriptu, tj. splněním uložené podmínky utracení. Obecně to znamená předložit digitální podpis vytvořený pomocí soukromého klíče odpovídajícího veřejnému klíči, který původně zabezpečil toto UTXO. Skript tedy spočívá v ověření, že podpis odpovídá veřejnému klíči použitému při přijetí prostředků.
Každý výstup zase určuje částku bitcoinů, která má být převedena, a příjemce. Ten je definován novým skriptem, který obvykle zablokuje nově vytvořené UTXO s adresou příjemce nebo novým veřejným klíčem.
Aby byla transakce považována za platnou podle pravidel konsensu, musí být
celkový výstup menší nebo roven celkovému vstupu. Jinými slovy, součet
nových UTXO vygenerovaných transakcí nesmí být vyšší než součet UTXO
spotřebovaných jako vstupy. Tento princip je logický: pokud máte pouze 500 000 SATS, nemůžete provést nákup 700 000 SATS.
Výměna a sloučení v transakci Bitcoin
Transakci bitcoinu na UTXO tak lze přirovnat k přetavení zlaté mince. UTXO totiž není dělitelné, ale pouze tavitelné. To znamená, že uživatel nemůže UTXO představující určitou částku v bitcoinech jednoduše rozdělit na několik menších UTXO. Musí jej celý spotřebovat v transakci, aby vytvořil jedno nebo více nových UTXO o libovolné hodnotě na výstupu, která musí být menší nebo rovna původní hodnotě.
Tento mechanismus je podobný mechanismu zlaté mince. Řekněme, že vlastníte minci o váze 2 unce a chcete zaplatit 1 unci za předpokladu, že vám prodávající nemůže vrátit drobné. Museli byste svou minci roztavit a odlít 2 nové po 1 unci.
Bitcoin funguje podobně. Představme si, že Alice má UTXO ve výši 10 000 SATS a chce si koupit bagetu v ceně 4 000 SATS. Alice provede
transakci s 1 UTXO ve výši 10 000 SATS jako vstupem, který celý
spotřebuje, a 2 UTXO ve výši 4 000 SATS a 6 000 SATS jako výstupem. UTXO ve výši 4 000 SATS bude odesláno pekaři
jako platba za bagetu, zatímco UTXO ve výši 6 000 SATS se vrátí
Alici ve formě drobných. Toto UTXO, které se vrací původnímu emitentovi transakce,
se v bitcoinovém žargonu nazývá "výměna".
Nyní si představme, že Alice nemá jeden UTXO o kapacitě 10 000 SATS, ale dva UTXO po 3 000 SATS. V této situaci ani jeden z UTXO
jednotlivě nestačí k nastavení hůlky na 4 000 SATS. Alice proto
musí jako vstupy své transakce použít současně dva UTXO o hodnotě 3 000 SATS. Tímto způsobem dosáhne celková částka vstupů 6 000 SATS, což jí umožní uspokojit platbu 4 000 SATS pekaři. Tento způsob, při kterém se několik UTXO seskupí
jako vstupy do transakce, se často označuje jako "slučování".
Transakční poplatky
Intuitivně by se mohlo zdát, že transakční náklady představují také výstup transakce. Ve skutečnosti tomu tak ale není. Transakční náklady představují rozdíl mezi celkovými vstupy a celkovými výstupy. To znamená, že po použití části hodnoty vstupů na pokrytí požadovaných výstupů v transakci zůstává určitá suma vstupů nevyužita. Tato zbývající částka představuje transakční náklady.
Frais = total inputs - total outputs
Vezměme si příklad Alice, která má UTXO ve výši 10 000 SATS a
chce si koupit bagetu za 4 000 SATS. Alice vytvoří transakci,
jejímž vstupem bude její UTXO ve výši 10 000 SATS. Poté
vygeneruje výstup ve výši 4 000 SATS pro pekaře, který zaplatí
za bagetu. Aby Alice povzbudila těžaře k začlenění její transakce do bloku,
přidělí jim 200 SATS jako poplatky. Poté vytvoří druhý výstup,
směnu, která jí bude vrácena, ve výši 5 800 SATS.
Podle vzorce pro výpočet poplatků zjistíme, že nezletilým skutečně zbývá 200 SATS:
Frais = total inputs - total outputs
Frais = 10 000 - (4 000 + 5 800)
Frais = 10 000 - 9 800
Frais = 200
Když se těžaři podaří blok validovat, je oprávněn vybírat tyto poplatky za všechny transakce zahrnuté v jeho bloku, a to prostřednictvím tzv. "coinbase" transakce.
Vytváření UTXO v systému Bitcoin
Pokud jste pozorně sledovali předchozí odstavce, víte, že UTXO lze vytvořit pouze konzumací jiných existujících UTXO. Tímto způsobem tvoří bitcoinové mince souvislý řetězec. Možná vás však zajímá, jak vznikly první UTXO v tomto řetězci. Vyvstává tak problém podobný tomu o slepici a vejci: kde se vzaly tyto původní UTXO?
Odpověď je v transakční bázi mincí.
Coinbase je specifický typ transakce bitcoinu, který je pro každý blok jedinečný a je vždy první z nich. Umožňuje těžaři, který našel platný důkaz práce, získat odměnu za svůj blok. Tato odměna se skládá ze dvou prvků: dotace bloku a poplatku za transakci, o nichž jsme hovořili v předchozí části.
Transakce coinbase je jedinečná v tom, že jako jediná dokáže vytvářet bitcoiny ex nihilo, aniž by bylo nutné spotřebovávat vstupy pro generování výstupů. Tyto nově vytvořené bitcoiny bychom mohli nazvat "původní UTXO".
Blokově dotované bitcoiny jsou nové BTC vytvořené od nuly podle předem stanoveného harmonogramu vydávání v pravidlech konsensu. Bloková dotace se snižuje na polovinu každých 210 000 bloků, tj. přibližně každé čtyři roky, v procesu známém jako "halving". Původně bylo s každou dotací vytvořeno 50 bitcoinů, ale toto množství se postupně snižovalo; v současnosti činí 3,125 bitcoinu na blok.
Co se týče transakčních poplatků, ty sice také představují nově vytvořené BTC, ale nesmí překročit rozdíl mezi celkovými vstupy a výstupy všech transakcí v bloku. Již dříve jsme viděli, že tyto poplatky představují část vstupů, která není použita ve výstupech transakcí. Tato část je technicky vzato "ztracena" během transakce a těžař má právo tuto hodnotu znovu vytvořit ve formě jednoho nebo více nových UTXO. Jedná se o převod hodnoty mezi emitentem transakce a těžařem, který ji přidává do blockchainu.
**> Na bitcoiny vygenerované transakcí na coinbase se vztahuje doba splatnosti 100 bloků, během níž je těžař nemůže utratit. Toto pravidlo má zabránit komplikacím spojeným s používáním nově vytvořených bitcoinů v řetězci, který by později mohl být zastaralý.
Důsledky modelu UTXO
Především model UTXO přímo ovlivňuje transakční poplatky Bitcoinu. Protože kapacita každého bloku je omezená, těžaři upřednostňují transakce, které nabízejí nejlepší poplatky v poměru k prostoru, který v bloku zaberou. Čím více UTXO totiž transakce obsahuje na svých vstupech a výstupech, tím je těžší, a proto vyžaduje vyšší poplatky. To je jeden z důvodů, proč se často snažíme snížit počet UTXO v našem portfoliu, což může mít vliv i na důvěrnost, což je téma, kterému se budeme podrobně věnovat ve třetí části tohoto kurzu.
Za druhé, jak bylo zmíněno v předchozích částech, mince Bitcoin jsou v podstatě řetězcem UTXO. Každá transakce tak vytváří spojení mezi minulým UTXO a budoucím UTXO. UTXO tedy umožňují explicitně sledovat cestu bitcoinů od jejich vzniku až po jejich současné výdaje. Tuto transparentnost lze vnímat pozitivně, neboť umožňuje každému uživateli přesvědčit se o pravosti přijatých bitcoinů. Na tomto principu sledovatelnosti a auditovatelnosti je však založena i analýza blockchainu, což je postup, který má ohrozit důvěrnost. Na tuto praxi se podrobně podíváme ve druhé části kurzu.
Model soukromí bitcoinu
Peníze: autenticita, integrita a dvojí utrácení
Jednou z funkcí peněz je řešit problém dvojího souběhu potřeb. V systému založeném na směnném obchodu vyžaduje dokončení směny nejen najít jedince, který se vzdává zboží odpovídající mé potřebě, ale také mu poskytnout zboží ekvivalentní hodnoty, které uspokojuje jeho vlastní potřebu. Dosažení této rovnováhy je složitá záležitost.
Proto používáme peníze k přesunu hodnot v prostoru i čase.
Aby ražba mincí tento problém vyřešila, je nezbytné, aby strana poskytující zboží nebo službu byla přesvědčena o své schopnosti tuto částku později utratit. Každý racionálně uvažující jedinec, který chce přijmout minci, ať už digitální, nebo fyzickou, se tedy ujistí, že splňuje dvě základní kritéria:
- Dílo musí být celistvé a autentické ;**
- a nesmí být vynaloženy dvakrát.**
Pokud používáte fyzickou měnu, je to první charakteristika, kterou je nejsložitější potvrdit. V různých historických obdobích byla integrita kovových mincí často narušena praktikami, jako je stříhání nebo propichování. Například ve starověkém Římě bylo běžnou praxí, že občané oškrabávali hrany zlatých mincí, aby získali trochu drahého kovu a zároveň si je schovali pro budoucí transakce. Vnitřní hodnota mince se tak snížila, ale její nominální hodnota zůstala stejná. To je jeden z důvodů, proč byla hrana mince později rýhována.
Pravost je také obtížné ověřit na fyzickém peněžním nosiči. Dnešní techniky boje proti padělaným penězům jsou stále složitější, což nutí prodejce investovat do nákladných ověřovacích systémů.
Na druhou stranu, vzhledem k jejich povaze není dvojí utrácení pro fyzické měny problémem. Pokud vám dám bankovku v hodnotě 10 EUR, neodvolatelně opouští mé vlastnictví a vstupuje do vašeho, což přirozeně vylučuje jakoukoli možnost vícenásobného utrácení peněžních jednotek, které ztělesňuje. Stručně řečeno, tuto bankovku v hodnotě 10 € nebudu moci utratit znovu.
U digitální měny je to jiné. Zajištění pravosti a integrity mince je často jednodušší. Jak jsme viděli v předchozí části, model UTXO Bitcoinu umožňuje dohledat minci až k jejímu původu, a tak ověřit, že byla skutečně vytvořena těžařem v souladu s pravidly konsensu.
Na druhou stranu je složitější zajistit, aby nedocházelo k dvojímu vynakládání prostředků, protože veškeré digitální zboží je v podstatě informací. Na rozdíl od fyzického zboží se informace při výměně nedělí, ale šíří se násobením. Pokud vám například pošlu dokument e-mailem, bude se duplikovat. Nemůžete si být jisti, že jsem původní dokument smazal.
Zabránění dvojímu utrácení za Bitcoin
Jediným způsobem, jak se této duplikaci digitálního aktiva vyhnout, je mít přehled o všech výměnách v systému. Tímto způsobem můžeme zjistit, kdo co vlastní, a aktualizovat držbu jednotlivých osob podle provedených transakcí. To se děje například u skripturálních peněz v bankovním systému. Když zaplatíte 10 eur obchodníkovi kreditní kartou, banka zaznamená směnu a aktualizuje účetní knihu.
U bitcoinu se dvojímu utrácení brání stejným způsobem. Snažíme se potvrdit neexistenci transakce, při které již byly dané mince utraceny. Pokud mince nebyly nikdy použity, můžeme si být jisti, že k dvojímu utracení nedojde. Tento princip popsal Satoshi Nakamoto v Bílé knize slavnou větou:
**Jediný způsob, jak potvrdit neexistenci transakce, je mít povědomí o všech transakcích
Na rozdíl od bankovního modelu však v případě Bitcoinu nechceme důvěřovat centrálnímu subjektu. Všichni uživatelé tedy musí mít možnost potvrdit tuto absenci dvojího utrácení, aniž by se museli spoléhat na třetí stranu. Všichni tedy musí mít přehled o všech bitcoinových transakcích. Proto jsou transakce Bitcoinu veřejně vysílány ve všech uzlech sítě a zaznamenávány v čistém textu v blockchainu.
Právě toto veřejné šíření informací komplikuje ochranu soukromí v bitcoinech. V tradičním bankovním systému teoreticky ví o provedených transakcích pouze finanční instituce. U Bitcoinu jsou naopak o všech transakcích informováni všichni uživatelé, a to prostřednictvím svých uzlů.
Model důvěrnosti: bankovní systém vs. Bitcoin
V tradičním systému je váš bankovní účet spojen s vaší identitou. Bankéř je schopen zjistit, který bankovní účet patří kterému klientovi a které transakce jsou s ním spojeny. Tento tok informací je však mezi bankou a veřejnou sférou přerušen. Jinými slovy, není možné znát zůstatek a transakce na bankovním účtu patřícím jiné osobě. K těmto informacím má přístup pouze banka.
Váš bankéř například ví, že si každé ráno kupujete bagetu u místního pekaře, ale váš soused o této transakci neví. Tímto způsobem je tok informací přístupný zúčastněným stranám, zejména bance, ale zůstává nedostupný pro osoby zvenčí.
Kvůli omezení veřejného šíření transakcí, které jsme viděli v předchozí části, nemůže model důvěrnosti bitcoinu následovat model bankovního systému. Protože v případě Bitcoinu nelze přerušit tok informací mezi transakcemi a veřejným prostorem, model soukromí se opírá o oddělení identity uživatele od samotných transakcí.
Pokud si například koupíte bagetu od pekaře a zaplatíte v BTC, váš soused, který má svůj vlastní kompletní uzel, může vidět, jak vaše transakce proběhla, stejně jako vidí všechny ostatní transakce v systému. Při dodržení zásad důvěrnosti by však neměl být schopen spojit tuto konkrétní transakci s vaší identitou.
Protože jsou však transakce bitcoinů zveřejňovány, je možné mezi nimi vytvořit vazby a odvodit informace o zúčastněných stranách. Tato činnost dokonce představuje samostatnou specializaci, známou jako "analýza blockchainu". V další části kurzu vás zvu k prozkoumání základů blockchainové analýzy, abyste pochopili, jak jsou vaše bitcoiny sledovány, a mohli se proti nim lépe bránit.
Porozumění analýze řetězce a ochrana před ní
Co je analýza řetězce bitcoinů?
Definice a fungování
Analýza blockchainu se zabývá sledováním toku bitcoinů v blockchainu. Obecně řečeno, analýza řetězce je založena na pozorování charakteristik ve vzorcích předchozích transakcí. Poté spočívá v identifikaci stejných charakteristik na transakci, kterou chceme analyzovat, a odvození pravděpodobných interpretací z nich. Tato metoda řešení problému, založená na praktickém přístupu k nalezení dostatečně dobrého řešení, je známá jako "heuristika".
Laicky řečeno, analýza řetězce má tři hlavní fáze:
Sledování blockchainu ;
Identifikace známých prvků ;
**Dedukce předpokladů **
Analýzu blockchainu může provádět kdokoli. Stačí mít přístup k veřejným informacím blockchainu prostřednictvím kompletního uzlu, abyste mohli sledovat pohyby transakcí a vytvářet hypotézy. Existují také bezplatné nástroje, které tuto analýzu usnadňují, jako například OXT.me, kterým se budeme podrobně věnovat v posledních dvou kapitolách této části. Hlavní riziko pro důvěrnost však představují společnosti specializující se na analýzu řetězců. Tyto společnosti dovedly analýzu blockchainu do průmyslového měřítka a prodávají své služby finančním institucím a vládám. Mezi těmito společnostmi je jistě nejznámější Chainalysis.
Cíle analýzy řetězce
Jedním z cílů analýzy blockchainu je seskupit různé aktivity na Bitcoinu, aby bylo možné určit jedinečnost uživatele, který je provedl. Následně bude možné pokusit se spojit toto seskupení činností se skutečnou identitou.
Vzpomeňte si na předchozí kapitolu. Vysvětlil jsem, proč byl model soukromí bitcoinu původně založen na oddělení identity uživatele od transakcí. Bylo by proto lákavé si myslet, že analýza blockchainu je k ničemu, protože i když se nám podaří agregovat aktivity na řetězci, nemůžeme je spojit se skutečnou identitou.
Teoreticky je toto tvrzení správné. V první části tohoto kurzu jsme viděli, že k určení podmínek na UTXO se používají páry kryptografických klíčů. Tyto páry klíčů v podstatě neprozrazují žádné informace o identitě svých držitelů. Takže i když se nám podaří seskupit činnosti spojené s různými páry klíčů, neřekne nám to nic o entitě, která za těmito činnostmi stojí.
Praktická realita je však mnohem složitější. Existuje množství chování, které může spojit skutečnou identitu s aktivitou v řetězci. V analýze se tomu říká vstupní bod a existuje jich velké množství.
Nejběžnější je KYC (Know Your Customer). Pokud vybíráte své bitcoiny z regulované platformy na jednu z vašich osobních přijímacích adres, někteří lidé jsou schopni spojit vaši identitu s touto adresou. V širším smyslu může být vstupním bodem jakákoli forma interakce mezi vaším reálným životem a bitcoinovou transakcí. Pokud například zveřejníte přijímací adresu na svých sociálních sítích, může to být vstupní bod pro analýzu. Pokud provedete platbu v Bitcoinech svému pekaři, bude moci spojit váš obličej (součást vaší identity) s bitcoinovou adresou.
Těmto vstupním bodům se při používání Bitcoinu prakticky nelze vyhnout. I když se můžeme snažit omezit jejich rozsah, budou vždy přítomny. Proto je zásadní kombinovat metody zaměřené na ochranu soukromí. Udržování oddělení vaší skutečné identity od vašich transakcí je sice zajímavý přístup, ale v dnešní době je stále nedostatečný. Pokud totiž lze všechny vaše aktivity v onchainu seskupit, pak i ten nejmenší vstupní bod pravděpodobně ohrozí jedinou vrstvu důvěrnosti, kterou jste si vytvořili.
Obrana proti řetězové analýze
Při používání Bitcoinu si tedy musíme umět poradit i s analýzou blockchainu. Tím můžeme minimalizovat agregaci našich aktivit a omezit dopad vstupního bodu na naše soukromí.
Jak lépe čelit analýze blockchainu, než se seznámit s metodami, které se při ní používají? Pokud chcete vědět, jak zlepšit své soukromí na Bitcoinu, musíte těmto metodám porozumět. Díky tomu lépe pochopíte techniky, jako je coinjoin nebo payjoin (techniky, na které se podíváme v závěrečných částech kurzu), a omezíte chyby, kterých se můžete dopustit.
https://planb.network/tutorials/privacy/on-chain/payjoin-848b6a23-deb2-4c5f-a27e-93e2f842140f
V tomto ohledu můžeme najít analogii s kryptografií a kryptoanalýzou. Dobrý kryptograf je především dobrý kryptoanalytik. Chcete-li vymyslet nový šifrovací algoritmus, musíte vědět, jakým útokům bude čelit, a také studovat, proč byly předchozí algoritmy prolomeny. Stejný princip platí i pro soukromí Bitcoinu. Pochopení metod analýzy blockchainu je klíčem k ochraně před nimi. Proto jsem do tohoto školení zařadil celou část o analýze řetězců.
Metody analýzy řetězce
Je důležité si uvědomit, že analýza řetězců není exaktní věda. Opírá se o heuristiku odvozenou z předchozích pozorování nebo logických interpretací. Tato pravidla nám umožňují získat poměrně spolehlivé výsledky, nikdy však s absolutní přesností. Jinými slovy, řetězcová analýza vždy zahrnuje určitý rozměr pravděpodobnosti v dosažených závěrech. Například lze s různou mírou jistoty odhadnout, že dvě adresy patří stejnému subjektu, ale naprostá jistota bude vždy nedosažitelná.
Celý smysl řetězové analýzy spočívá právě v agregaci různých heuristik, aby se minimalizovalo riziko chyby. Svým způsobem jde o kumulaci důkazů, která nás přibližuje realitě.
Tyto známé heuristiky lze rozdělit do různých kategorií, které si podrobně popíšeme níže:
- Vzory transakcí ;**
- Interní heuristika transakcí ;**
- Heuristika vně transakce.**
Satoshi Nakamoto a analýza řetězce
První dvě heuristiky analýzy řetězce objevil sám Satoshi Nakamoto. Hovoří o nich v 10. části Bílé knihy Bitcoinu. Jsou to :
- cIOH (Common Input Ownership Heuristic);
- a opakované použití adresy.
Zdroj: Nakamoto, "Bitcoin: A Peer-to-Peer Electronic Cash System", https://bitcoin.org/bitcoin.pdf, 2009.
Jaké to jsou, se dozvíme v následujících kapitolách, ale už teď je zajímavé, že tyto dvě heuristiky si dodnes udržují v analýze řetězců prvenství.
Vzory transakcí
Vzor transakce je jednoduše celkový model nebo struktura typické transakce, kterou lze nalézt v blockchainu a jejíž pravděpodobná interpretace je známa. Při studiu vzorů se zaměřujeme na jednu transakci a analyzujeme ji na vysoké úrovni.
Jinými slovy, budeme se zabývat pouze počtem UTXO na vstupech a počtem UTXO na výstupech, aniž bychom se zabývali konkrétnějšími detaily nebo prostředím transakce. Na základě pozorovaného vzoru můžeme interpretovat povahu transakce. Poté budeme hledat charakteristiky její struktury a vyvodíme interpretaci.
V této části se společně podíváme na hlavní modely transakcí, se kterými se setkáváme při analýze řetězců, a u každého modelu uvedu pravděpodobný výklad této struktury a také konkrétní příklad.
Jedna zásilka (nebo jedna platba)
Začněme velmi častým vzorem, protože se objevuje u většiny plateb bitcoiny. Jednoduchý model platby je charakterizován spotřebou jednoho nebo více UTXO jako vstupů a produkcí 2 UTXO jako výstupů. Tento model tedy vypadá následovně:
Když si všimneme této struktury transakcí v blockchainu, můžeme si již udělat výklad. Jak již název napovídá, tento model naznačuje, že se nacházíme v přítomnosti odesílací nebo platební transakce. Uživatel spotřeboval na vstupu své vlastní UTXO, aby na výstupu uspokojil platební UTXO a směnné UTXO (peníze vrácené témuž uživateli).
Víme tedy, že sledovaný uživatel již pravděpodobně nevlastní jeden ze dvou výstupních UTXO (platební UTXO), ale stále vlastní druhý UTXO (výměnný UTXO).
V tuto chvíli nemůžeme určit, který výstup reprezentuje který UTXO, protože to není účelem studie vzoru. K tomu se dostaneme tak, že se budeme spoléhat na heuristiku, kterou budeme studovat v následujících částech. V této fázi se náš cíl omezuje na určení povahy dané transakce, což je v tomto případě prosté odeslání.
Zde je například transakce Bitcoinu, která využívá vzor jednoduchého odeslání:
b6cc79f45fd2d7669ff94db5cb14c45f1f879ea0ba4c6e3d16ad53a18c34b769
Source : Mempool.space
Po tomto prvním příkladu byste měli lépe pochopit, co znamená studovat "transakční model". Transakci zkoumáme tak, že se soustředíme pouze na její strukturu, aniž bychom brali v úvahu její prostředí nebo konkrétní detaily transakce. V tomto prvním kroku se díváme pouze na celkový obraz.
Nyní, když jste pochopili, co je to vzor, přejděme k dalším existujícím vzorům.
Zametání
Tento druhý model je charakterizován spotřebou jednoho UTXO jako vstupu a výrobou jednoho UTXO jako výstupu.
Interpretace tohoto modelu je taková, že se nacházíme v přítomnosti samopřenosu. Uživatel převedl své bitcoiny na sebe, na jinou adresu, která mu patří. Vzhledem k tomu, že při transakci nedochází k žádné výměně, je velmi nepravděpodobné, že jsme v přítomnosti platby. Při platbě je totiž téměř nemožné, aby měl plátce UTXO přesně odpovídající částce požadované prodávajícím plus poplatek za transakci. Obecně je tedy plátce povinen vytvořit směnný výstup.
Pak víme, že sledovaný uživatel pravděpodobně stále vlastní toto UTXO. V kontextu řetězové analýzy, pokud víme, že UTXO použitý jako vstup transakce patří Alici, můžeme předpokládat, že UTXO použitý jako výstup patří také jí. Zajímavým se později stane nalezení heuristik pro vnitřní transakce, které by mohly tento předpoklad posílit (těmto heuristikám se budeme věnovat v kapitole 3.3).
Zde je například transakce s bitcoiny, která využívá vzor sweep:
35f1072a0fda5ae106efb4fda871ab40e1f8023c6c47f396441ad4b995ea693d
Source : Mempool.space
Dejte si však pozor, že tento typ vzoru může odhalit i vlastní převod na účet platformy pro výměnu kryptoměn. Teprve studium známých adres a kontext transakce nám napoví, zda se jedná o samopřevod na peněženku, nebo o výběr na platformu. Adresy směnárenských platforem jsou totiž často snadno identifikovatelné.
Vezměme si znovu příklad Alice: pokud skenování vede na adresu známou nějaké platformě (jako je například Binance), může to znamenat, že bitcoiny byly převedeny mimo přímé vlastnictví Alice, pravděpodobně s úmyslem je prodat nebo uložit na této platformě. Na druhou stranu, pokud je cílová adresa neznámá, lze předpokládat, že jde jednoduše o jinou peněženku, která stále patří Alici. Tento typ studie však patří spíše do kategorie heuristiky než vzorců.
Konsolidace
Tento model je charakterizován spotřebou několika UTXO na vstupu a výrobou jednoho UTXO na výstupu.
Interpretace tohoto vzoru je taková, že se nacházíme ve fázi konsolidace. Jedná se o běžnou praxi mezi uživateli bitcoinu, jejímž cílem je sloučení několika UTXO v očekávání možného zvýšení transakčních poplatků. Provedením této operace v období, kdy jsou poplatky nízké, je možné ušetřit na budoucích poplatcích. O této praxi si povíme více v kapitole 4.3.
Z toho můžeme usuzovat, že uživatel, který stojí za tímto transakčním modelem, pravděpodobně vlastnil všechny UTXO na vstupu a stále vlastní UTXO na výstupu. Pravděpodobně se tedy jedná o automatický převod.
Stejně jako u přehazování může tento typ vzoru odhalit i vlastní převod na účet výměnné platformy. Teprve studium známých adres a kontextu transakce nám napoví, zda se jedná o konsolidaci do portfolia samopřevodu, nebo o výběr na platformu.
Zde je například transakce s bitcoiny, která využívá konsolidační vzor:
77c16914211e237a9bd51a7ce0b1a7368631caed515fe51b081d220590589e94
Source : Mempool.space
Při analýze řetězce může tento model odhalit velké množství informací. Víme-li například, že jeden ze vstupů patří Alici, můžeme předpokládat, že jí patří i všechny ostatní vstupy a výstupy této transakce. Tento předpoklad by pak umožnil vrátit se zpět do řetězce předchozích transakcí a objevit a analyzovat další transakce, které jsou pravděpodobně spojeny s Alicí.
Seskupené výdaje
Tento model se vyznačuje spotřebou několika UTXO jako vstupů (často jen jednoho) a výrobou mnoha UTXO jako výstupů.
Interpretace tohoto modelu je taková, že se jedná o seskupené výdaje. Jedná se o praxi, která pravděpodobně odhaluje velmi rozsáhlou ekonomickou aktivitu, například výměnnou platformu. Seskupené výdaje umožňují těmto subjektům ušetřit náklady tím, že spojí své výdaje do jedné transakce.
Z tohoto modelu můžeme odvodit, že UTXO na vstupu pochází z podniku s vysokou úrovní ekonomické aktivity a že UTXO na výstupu se rozptýlí. Mnoho z nich bude patřit zákazníkům společnosti, kteří si z platformy vybrali bitcoiny. Další mohou připadnout partnerským společnostem. A nakonec se jistě jedna nebo více směn vrátí zpět k vydávající společnosti.
Například zde je transakce s bitcoiny, která využívá vzor sdružené útraty (pravděpodobně se jedná o transakci vydanou platformou Bybit):
8a7288758b6e5d550897beedd13c70bcbaba8709af01a7dbcc1f574b89176b43
Source : Mempool.space
Transakce specifické pro protokol
Mezi transakčními vzory můžeme také identifikovat ty, které odhalují použití konkrétního protokolu. Například transakce Whirlpool coinjoins (o kterých jsme hovořili v části 5) budou mít snadno identifikovatelnou strukturu, která je odliší od ostatních, běžnějších transakcí.
Analýza tohoto vzorce naznačuje, že se pravděpodobně jedná o transakci založenou na spolupráci. Je také možné pozorovat coinjoin. Pokud se tato druhá hypotéza ukáže jako správná, pak by nám počet výstupů mohl poskytnout hrubý odhad počtu účastníků coinjoinu.
Zde je například transakce Bitcoinu, která využívá vzor kolaborativní transakce coinjoin:
00601af905bede31086d9b1b79ee8399bd60c97e9c5bba197bdebeee028b9bea
Source : Mempool.space
Existuje mnoho dalších protokolů s vlastní specifickou strukturou. Existují například transakce Wabisabi, transakce Stamps a transakce Runes.
Díky těmto transakčním vzorům již můžeme interpretovat určité množství informací o dané transakci. Struktura transakcí však není jediným zdrojem informací pro analýzu. Můžeme také studovat její detaily. Tyto vnitřní detaily s oblibou nazývám "vnitřní heuristika" a budeme se jimi zabývat v následující kapitole.
Interní heuristika
Vnitřní heuristika je specifická vlastnost, kterou identifikujeme v rámci samotné transakce, aniž bychom museli zkoumat její okolí, a která nám umožňuje činit závěry. Na rozdíl od vzorů, které se zaměřují na celkovou strukturu transakce na vysoké úrovni, je interní heuristika založena na souboru extrahovatelných dat. Patří sem např:
- Množství různých UTXO na vstupu a výstupu;
- Vše, co souvisí se skripty: adresy pro příjem, verzování, časy uzamčení.
Obecně řečeno, tento typ heuristiky nám umožní identifikovat směnu v konkrétní transakci. Tímto způsobem pak můžeme trvale sledovat entitu v několika různých transakcích. Pokud totiž identifikujeme UTXO patřící uživateli, kterého chceme sledovat, je klíčové určit, když provede transakci, který výstup byl převeden na jiného uživatele a který výstup představuje směnu, která tak zůstává v jeho vlastnictví.
Znovu připomínám, že tyto heuristické metody nejsou absolutně přesné. Jednotlivě nám pouze umožňují identifikovat pravděpodobné scénáře. Právě kumulace několika heuristik pomáhá snižovat nejistotu, aniž by ji kdy dokázala zcela odstranit.
Vnitřní podobnosti
Tato heuristika zahrnuje studium podobností mezi vstupy a výstupy téže transakce. Pokud je stejná vlastnost pozorována na vstupech a pouze na jednom z výstupů transakce, je pravděpodobné, že tento výstup představuje směnu.
Nejzřetelnějším rysem je opakované použití přijímací adresy ve stejné transakci.
Tato heuristika ponechává jen málo prostoru pro pochybnosti. Pokud nebyl hacknut jeho soukromý klíč, stejná přijímací adresa nutně odhaluje aktivitu jediného uživatele. Výsledná interpretace je, že výměna transakcí je výstupem se stejnou adresou jako vstup. Na základě této výměny pak můžeme pokračovat ve sledování jednotlivce.
Zde je například transakce, na kterou lze tuto heuristiku pravděpodobně použít:
54364146665bfc453a55eae4bfb8fdf7c721d02cb96aadc480c8b16bdeb8d6d0
Source : Mempool.space
Tyto podobnosti mezi vstupy a výstupy nekončí u opakovaného použití adresy. Jakákoli podobnost v použití skriptů může být použita k aplikaci heuristiky. Například někdy můžeme pozorovat stejné verzování mezi vstupem a jedním z výstupů transakce.
Na tomto diagramu vidíme, že vstup č. 0 odemyká skript P2WPKH (SegWit V0
začínající na bc1q). Výstup č. 0 používá stejný typ skriptu.
Výstup č. 1 naopak používá skript P2TR (SegWit V1 začínající na bc1p). Interpretace této vlastnosti je taková, že je
pravděpodobné, že adresa se stejným verzováním jako vstup je výměnnou
adresou. Bude tedy vždy patřit stejnému uživateli.
Zde je transakce, na kterou lze tuto heuristiku pravděpodobně použít:
db07516288771ce5d0a06b275962ec4af1b74500739f168e5800cbcb0e9dd578
Source : Mempool.space
Na druhém z nich vidíme, že vstup č. 0 a výstup č. 1 používají skripty P2WPKH (SegWit V0), zatímco výstup č. 0 používá jiný skript P2PKH (Legacy).
Na počátku roku 2010 byla tato heuristika založená na verzování skriptů
poměrně neužitečná vzhledem k omezenému počtu dostupných typů skriptů.
Postupem času a s postupnými aktualizacemi systému Bitcoin však byla
zavedena stále větší rozmanitost typů skriptů. Tato heuristika se proto
stává stále relevantnější, protože s širší škálou typů skriptů se uživatelé
rozdělují do menších skupin, čímž se zvyšuje šance na uplatnění této interní
heuristiky opakovaného použití verzí. Z tohoto důvodu je pouze z hlediska
důvěrnosti vhodné zvolit nejběžnější typ skriptu. Například v době, kdy píšu
tyto řádky, jsou skripty Taproot (bc1p) používány méně často
než skripty SegWit V0 (bc1q). Ačkoli první z nich nabízí v
určitých specifických kontextech ekonomické výhody a výhody v oblasti
důvěrnosti, pro tradičnější použití s jedním podpisem může mít smysl zůstat
u staršího standardu z důvodu důvěrnosti, dokud se nový standard nerozšíří.
Zaokrouhlení plateb
Další interní heuristikou, která nám může pomoci identifikovat výměnu, je heuristika kulatého čísla. Obecně řečeno, pokud se setkáme s jednoduchým platebním vzorem (1 vstup a 2 výstupy), pak pokud jeden z výstupů utratí kulatou částku, představuje to platbu.
Pokud jeden výstup představuje platbu, druhý představuje směnu. Lze tedy interpretovat jako pravděpodobné, že uživatel vstupu má vždy k dispozici výstup identifikovaný jako směna.
Je třeba zdůraznit, že tato heuristická metoda není vždy použitelná, protože většina plateb se stále provádí ve svěřeneckých účetních jednotkách. Pokud totiž maloobchodník ve Francii přijímá bitcoiny, zpravidla nebude zobrazovat stabilní ceny v sátech. Místo toho zvolí přepočet mezi cenou v eurech a částkou v bitcoinech, která má být zaplacena. Na konci transakce by tedy neměla být žádná zaokrouhlená čísla.
Analytik by se nicméně mohl pokusit provést tento přepočet s ohledem na
směnný kurz platný v době, kdy byla transakce vysílána do sítě. Vezměme si
příklad transakce se vstupem 97 552 sats a dvěma výstupy,
jedním 31 085 sats a druhým 64 152 sats. Na první
pohled se zdá, že tato transakce nezahrnuje zaokrouhlené částky. Při použití
směnného kurzu 64 339 € v době transakce však získáme přepočet na eura
následujícím způsobem:
- Vstupní částka 62,76 EUR;
- Výstup ve výši 20 EUR;
- Výstup 41,27 EUR.
Po převodu na fiat měnu lze tuto transakci použít k použití heuristické metody zaokrouhlení částky. Výstup 20 € pravděpodobně přešel k obchodníkovi nebo alespoň změnil vlastníka. Na základě dedukce je pravděpodobné, že výstup ve výši 41,27 € zůstal ve vlastnictví původního uživatele.
Pokud se jednoho dne bitcoin stane preferovanou zúčtovací jednotkou na našich burzách, může být tato heuristika pro analýzu ještě užitečnější.
Zde je například transakce, na kterou lze tuto heuristiku pravděpodobně použít:
2bcb42fab7fba17ac1b176060e7d7d7730a7b807d470815f5034d52e96d2828a
Source : Mempool.space
Největší výkon
Pokud na základě jednoduchého platebního modelu identifikujeme dostatečně velký rozdíl mezi dvěma transakčními výstupy, můžeme odhadnout, že největší výstup bude pravděpodobně devizový.
Tato heuristika největšího výkonu je jistě nejnepřesnější ze všech. Sama o sobě je dost slabá. Tuto vlastnost však můžeme kombinovat s dalšími heuristikami a snížit tak nejistotu naší interpretace.
Pokud se například díváme na transakci s kulatou platbou a větší platbou, použití heuristiky kulaté platby a heuristiky větší platby společně snižuje naši míru nejistoty.
Zde je například transakce, na kterou lze tuto heuristiku pravděpodobně použít:
b79d8f8e4756d34bbb26c659ab88314c220834c7a8b781c047a3916b56d14dcf
Source : Mempool.space
Externí heuristika
Studium externích heuristik znamená analýzu podobností, vzorců a charakteristik určitých prvků, které nejsou specifické pro samotnou transakci. Jinými slovy, zatímco dříve jsme se omezovali na využívání prvků vlastních transakci pomocí interních heuristik, nyní rozšiřujeme pole analýzy o prostředí transakce díky externím heuristikám.
Opětovné použití adresy
Jedná se o jednu z nejznámějších heuristik bitcoinářů. Opakované použití adresy umožňuje vytvořit vazbu mezi různými transakcemi a různými UTXO. Dochází k němu, když je adresa pro příjem bitcoinů použita několikrát.
Je tedy možné využít opakované použití adresy v rámci téže transakce jako interní heuristiku pro identifikaci výměny (jak jsme viděli v předchozí kapitole). Opakované použití adresy lze však využít také jako vnější heuristiku k rozpoznání jedinečnosti entity, která stojí za několika transakcemi.
Interpretace opakovaného použití adresy je taková, že všechny UTXO blokované na této adrese patří (nebo patřily) stejnému subjektu. Tato heuristika ponechává jen malý prostor pro nejistotu. Po identifikaci bude výsledná interpretace pravděpodobně odpovídat skutečnosti. Umožňuje tedy seskupovat různé činnosti v řetězci.
Jak bylo vysvětleno v úvodu třetí části, tuto heuristiku objevil sám Satoshi Nakamoto. V Bílé knize zmiňuje řešení, které má uživatelům pomoci vyhnout se jejímu generování, a to jednoduše použít prázdnou adresu pro každou novou transakci:
"Jako dodatečný firewall by mohl být pro každou transakci použit nový pár klíčů, aby nebyly spojeny se společným vlastníkem."
Zdroj: Nakamoto, "Bitcoin: A Peer-to-Peer Electronic Cash System", https://bitcoin.org/bitcoin.pdf, 2009.
Zde je například adresa, která se opakovaně používá v několika transakcích:
bc1qqtmeu0eyvem9a85l3sghuhral8tk0ar7m4a0a0
Zdroj : Mempool.space
Podobnost písma a otisky peněženek
Kromě opakovaného použití adres existuje mnoho dalších heuristických postupů, které umožňují propojit akce se stejným portfoliem nebo shlukem adres.
Za prvé, analytik může hledat podobnosti v používání skriptů. Například některé menšinové skripty, jako je multisig, lze odhalit snáze než skripty SegWit V0. Čím větší je skupina, ve které se skrýváme, tím těžší je nás odhalit. To je jeden z důvodů, proč na dobrých protokolech Coinjoin všichni účastníci používají naprosto stejný typ skriptu.
Obecněji řečeno, analytik se může zaměřit také na charakteristické otisky portfolia. Jedná se o procesy specifické pro dané použití, které lze identifikovat s cílem využít je jako sledovací heuristiku. Jinými slovy, pokud pozorujeme kumulaci stejných vnitřních charakteristik u transakcí přisuzovaných sledovanému subjektu, můžeme se pokusit identifikovat tytéž charakteristiky u jiných transakcí.
Například budeme moci zjistit, že sledovaný uživatel systematicky odesílá
své změny na adresy P2TR (bc1p...). Pokud se tento proces
opakuje, můžeme jej použít jako heuristický údaj pro zbytek naší analýzy.
Můžeme také použít další otisky, jako je pořadí UTXO, místo změny ve
výstupech, signalizace RBF (Replace-by-Fee) nebo číslo verze, pole nSequence a pole nLockTime.
Jak upozorňuje @LaurentMT v Space Kek #19 (francouzsky psaný podcast), užitečnost portfoliových otisků při analýze řetězců se postupem času výrazně zvyšuje. Rostoucí počet typů skriptů a stále progresivnější zavádění těchto nových funkcí portfoliovým softwarem totiž zvýrazňuje rozdíly. V některých případech je dokonce možné přesně identifikovat software, který sledovaný subjekt používá. Je proto důležité si uvědomit, že studium portfoliových stop je relevantní zejména pro nedávné transakce, nikoli pro transakce zahájené na počátku roku 2010.
Shrneme-li to, otiskem může být jakýkoli specifický postup, prováděný automaticky peněženkou nebo ručně uživatelem, který můžeme najít u jiných transakcí a který nám pomůže při analýze.
Heuristika společného vlastnictví vstupů (CIOH)
Heuristika společného vlastnictví vstupů (CIOH) je heuristika, která říká, že pokud má transakce více vstupů, všechny pravděpodobně pocházejí od jednoho subjektu. V důsledku toho je jejich vlastnictví společné.
Pro použití CIOH nejprve pozorujeme transakci s několika vstupy. Mohou to být 2 vstupy nebo 30 vstupů. Jakmile tuto charakteristiku identifikujeme, ověříme, zda transakce zapadá do známého transakčního modelu. Například pokud existuje 5 vstupů s přibližně stejnou částkou a 5 výstupů s přesně stejnou částkou, budeme vědět, že se jedná o strukturu coinjoinu. Nebudeme moci použít CIOH.
Na druhou stranu, pokud transakce nezapadá do žádného známého modelu kolaborativních transakcí, pak můžeme interpretovat, že všechny vstupy pravděpodobně pocházejí od stejného subjektu. To může být velmi užitečné pro rozšíření již známého shluku nebo pro pokračování ve sledování.
CIOH objevil Satoshi Nakamoto. Hovoří o něm v 10. části Bílé knihy:
"[...] propojení je nevyhnutelné u transakcí s více záznamy, které nutně prozrazují, že jejich záznamy byly v držení stejného vlastníka. Riziko spočívá v tom, že pokud je vlastník klíče odhalen, propojení může odhalit další transakce, které patřily stejnému vlastníkovi."
Zvláště fascinující je, že Satoshi Nakamoto ještě před oficiálním spuštěním Bitcoinu identifikoval dvě hlavní slabiny soukromí uživatelů, a to CIOH a opakované použití adres. Taková předvídavost je docela pozoruhodná, protože tyto dvě heuristiky zůstávají i dnes nejužitečnějšími při analýze blockchainu.
Jako příklad uvádíme transakci, na kterou můžeme pravděpodobně aplikovat CIOH:
20618e63b6eed056263fa52a2282c8897ab2ee71604c7faccfe748e1a202d712
Source : Mempool.space
Údaje mimo řetězec
Analýza řetězců se samozřejmě neomezuje výhradně na data v řetězci. K upřesnění analýzy lze použít i jakákoli data z předchozí analýzy nebo dostupná na internetu.
Pokud například zjistíme, že sledované transakce jsou systematicky vysílány ze stejného bitcoinového uzlu, a podaří se nám identifikovat jeho IP adresu, můžeme být schopni identifikovat další transakce od stejného subjektu a také určit část identity emitenta. Ačkoli tento postup není snadno dosažitelný, protože vyžaduje provoz mnoha uzlů, mohou jej využít některé společnosti specializující se na analýzu blockchainu.
Analytik má také možnost vycházet z analýz, které byly dříve zveřejněny, nebo z vlastních předchozích analýz. Možná se nám podaří najít výstup, který ukazuje na již identifikovaný shluk adres. Někdy je také možné se spolehnout na výstupy, které ukazují na výměnnou platformu, protože adresy těchto společností jsou obecně známé.
Stejným způsobem můžete provést analýzu vylučovací metodou. Například pokud se při analýze transakce se dvěma výstupy jeden z nich vztahuje k již známému shluku adres, ale odlišnému od sledované entity, pak můžeme interpretovat, že druhý výstup pravděpodobně představuje výměnu.
Analýza kanálů zahrnuje také poněkud obecnější složku OSINT (Open Source Intelligence), která zahrnuje vyhledávání na internetu. Z tohoto důvodu nedoporučujeme zveřejňovat adresy přímo na sociálních sítích nebo na webových stránkách, ať už se jedná o pseudonymy nebo ne.
Časové modely
Přemýšlíme o tom méně, ale určité lidské chování je rozpoznatelné v řetězci. Snad nejužitečnější při analýze je váš spánkový režim! Ano, když spíte, nevysíláte bitcoinové transakce. Ale obecně spíte zhruba ve stejnou dobu. Proto se v blockchainové analýze běžně používá časová analýza. Jednoduše řečeno, jedná se o sčítání časů, kdy jsou transakce daného subjektu vysílány do sítě Bitcoin. Analýzou těchto časových vzorců můžeme odvodit řadu informací.
Především časová analýza může někdy určit povahu sledované entity. Pokud zjistíme, že transakce jsou vysílány soustavně po dobu 24 hodin, pak to prozrazuje vysokou úroveň ekonomické aktivity. Subjektem, který za těmito transakcemi stojí, bude pravděpodobně společnost, potenciálně mezinárodní a možná s automatizovanými vnitropodnikovými postupy.
Například tento vzorec jsem rozpoznal před několika měsíci při analýze transakce, která omylem přidělila 19 bitcoinů na poplatcích. Jednoduchá časová analýza mi umožnila vyslovit hypotézu, že máme co do činění s automatizovanou službou, a tedy pravděpodobně s velkým subjektem, jako je výměnná platforma.
O několik dní později se skutečně zjistilo, že finanční prostředky patří společnosti PayPal, a to prostřednictvím směnárenské platformy Paxos.
Naopak, pokud vidíme, že časový vzorec je spíše rozložen do 16 konkrétních hodin, pak můžeme odhadnout, že máme co do činění s jednotlivým uživatelem nebo možná s místní společností v závislosti na vyměňovaných objemech.
Kromě povahy sledované entity nám časový vzorec může díky časovým zónám také přibližně říci, kde se uživatel nachází. Tímto způsobem můžeme porovnat další transakce a použít jejich časové značky jako další heuristiku, kterou lze přidat do naší analýzy.
Například na vícekrát použité adrese, o které jsem se zmínil dříve, vidíme, že transakce, příchozí i odchozí, se soustřeďují na 13hodinový interval.
bc1qqtmeu0eyvem9a85l3sghuhral8tk0ar7m4a0a0
Zdroj: OXT.me
Tento rozsah pravděpodobně odpovídá Evropě, Africe nebo Blízkému východu. Můžeme tedy předpokládat, že uživatel, který za těmito transakcemi stojí, žije v těchto oblastech.
Časová analýza tohoto typu také vedla k hypotéze, že Satoshi Nakamoto neoperoval z Japonska, ale z USA: The Time Zones of Satoshi Nakamoto
Využití v praxi pomocí průzkumníka bloků
V této závěrečné kapitole se budeme věnovat praktickému využití konceptů, které jsme doposud studovali. Ukážu vám příklady skutečných transakcí s bitcoiny a vy budete muset získat informace, které po vás budu chtít.
V ideálním případě by bylo pro provedení těchto cvičení vhodnější použít profesionální nástroj pro analýzu řetězců. Od zatčení tvůrců peněženky Samourai však jediný bezplatný nástroj pro analýzu OXT.me již není k dispozici. Pro tato cvičení proto zvolíme klasický průzkumník bloků. Doporučuji používat Mempool.space pro jeho mnoho funkcí a řadu nástrojů pro analýzu řetězců, ale můžete se rozhodnout i pro jiný průzkumník, například Bitcoin Explorer.
Na začátek vás seznámím se cvičeními. K jejich vyplnění použijte průzkumníka bloků a odpovědi si zapište na list papíru. Na konci této kapitoly vám pak poskytnu odpovědi, abyste si mohli zkontrolovat a opravit své výsledky.
Transakce vybrané pro tato cvičení byly vybrány čistě na základě jejich charakteristik poněkud náhodným způsobem. Tato kapitola má pouze vzdělávací a informativní charakter. Chtěl bych jasně říci, že nepodporuji ani nenabádám k používání těchto nástrojů ke škodlivým účelům. Cílem je naučit vás, jak se chránit před analýzou řetězců, nikoli provádět analýzu za účelem odhalení soukromých informací jiných osob.
Cvičení 1
Identifikátor analyzované transakce :
3769d3b124e47ef4ffb5b52d11df64b0a3f0b82bb10fd6b98c0fd5111789bef7
Jak se jmenuje model této transakce a jaké pravděpodobné interpretace lze vyvodit pouze na základě zkoumání jejího modelu, tj. struktury transakce?
Cvičení 2
Identifikátor analyzované transakce :
baa228f6859ca63e6b8eea24ffad7e871713749d693ebd85343859173b8d5c20
Jak se jmenuje model této transakce a jaké pravděpodobné interpretace lze vyvodit pouze na základě zkoumání jejího modelu, tj. struktury transakce?
Cvičení 3
Identifikátor analyzované transakce :
3a9eb9ccc3517cc25d1860924c66109262a4b68f4ed2d847f079b084da0cd32b
Jaký je model této transakce?
Jaký výstup bude pravděpodobně představovat výměna po identifikaci jejího modelu pomocí interní heuristiky transakce?
Cvičení 4
Identifikátor analyzované transakce :
35f0b31c05503ebfdf7311df47f68a048e992e5cf4c97ec34aa2833cc0122a12
Jaký je model této transakce?
Jaký výstup bude pravděpodobně představovat výměna po identifikaci jejího modelu pomocí interní heuristiky transakce?
Cvičení 5
Představme si, že Loïc zveřejnil jednu ze svých adres pro příjem bitcoinů na sociální síti Twitter:
bc1qja0hycrv7g9ww00jcqanhfpqmzx7luqalum3vu
Které transakce bitcoinu lze na základě těchto informací a s použitím pouze heuristiky opakovaného použití adresy spojit s Loïcovou identitou?
Samozřejmě nejsem skutečným majitelem této adresy a nezveřejnil jsem ji na sociálních sítích. Je to adresa, kterou jsem náhodně převzal z blockchainu
Cvičení 6
Po provedení cvičení 5 jste díky heuristice opakovaného použití adresy dokázali identifikovat několik transakcí Bitcoin, do kterých je Loïc zřejmě zapojen. Za normálních okolností jste si mezi identifikovanými transakcemi měli všimnout této:
2d9575553c99578268ffba49a1b2adc3b85a29926728bd0280703a04d051eace
Tato transakce je vůbec první, při níž byly na Loïcovu adresu odeslány finanční prostředky. Odkud myslíte, že pocházejí bitcoiny, které Loïc touto transakcí obdržel?
Cvičení 7
Po provedení cvičení 5 jste díky heuristice opakovaného použití adresy dokázali identifikovat několik transakcí Bitcoin, do kterých je Loïc zřejmě zapojen. Nyní chcete zjistit, odkud Loïc pochází. Na základě nalezených transakcí proveďte časovou analýzu a zjistěte časové pásmo, které Loïc s největší pravděpodobností používá. Na základě tohoto časového pásma určete místo, kde Loïc zřejmě žije (země, stát/region, město...).
Cvičení 8
Zde je transakce Bitcoin ke studiu:
bb346dae645d09d32ed6eca1391d2ee97c57e11b4c31ae4325bcffdec40afd4f
Jaké informace můžeme interpretovat při pohledu na tuto transakci?
Cvičební řešení
Cvičení 1:
Model této transakce je jednoduchý platební model. Pokud studujeme pouze jeho strukturu, můžeme interpretovat, že jeden výstup představuje směnu a druhý výstup představuje skutečnou platbu. Víme tedy, že pozorovaný uživatel již pravděpodobně nevlastní jeden ze dvou UTXO na výstupu (ten platební), ale stále vlastní druhý UTXO (ten směnný).
Cvičení 2:
Model pro tuto transakci je model seskupených výdajů. Tento model pravděpodobně odhaluje rozsáhlou ekonomickou činnost, například výměnnou platformu. Můžeme usuzovat, že vstupní UTXO pochází od společnosti s vysokou úrovní ekonomické aktivity a že výstupní UTXO budou rozptýlené. Některé budou patřit zákazníkům společnosti, kteří si své bitcoiny vybrali do peněženek pro vlastní úschovu. Jiné mohou připadnout partnerským společnostem. A konečně nepochybně dojde k výměně některých, které se vrátí zpět do vydávající společnosti.
Cvičení 3:
Model této transakce je jednoduchá platba. Na transakci proto můžeme použít interní heuristiku a pokusit se identifikovat směnu.
Osobně jsem identifikoval nejméně dvě vnitřní heuristiky, které podporují stejnou hypotézu:
- Opakované použití stejného typu skriptu ;
- Největší výkon.
Nejzřetelnější heuristikou je opakované použití stejného typu skriptu.
Výstup 0 je totiž P2SH, který poznáme podle jeho
přijímací adresy začínající na 3 :
3Lcdauq6eqCWwQ3UzgNb4cu9bs88sz3mKD
Zatímco výstup 1 je P2WPKH, identifikovatelný
podle adresy začínající na bc1q :
bc1qya6sw6sta0mfr698n9jpd3j3nrkltdtwvelywa
UTXO použitý jako vstup pro tuto transakci také používá skript P2WPKH:
bc1qyfuytw8pcvg5vx37kkgwjspg73rpt56l5mx89k
Můžeme tedy předpokládat, že výstup 0 odpovídá platbě a výstup 1 je směna transakcí, což by znamenalo, že vstupní uživatel vždy vlastní
výstup 1.
Abychom tuto hypotézu podpořili nebo vyvrátili, můžeme hledat další heuristické znaky, které buď potvrzují naši úvahu, nebo snižují pravděpodobnost, že je naše hypotéza správná.
Identifikoval jsem přinejmenším jednu další heuristiku. Je to největší
výstupní heuristika. Výstup 0 měří 123 689 sats,
zatímco výstup 1 měří 505 839 sats. Mezi těmito
dvěma výstupy je tedy významný rozdíl. Největší výstupní heuristika
naznačuje, že největším výstupem bude pravděpodobně devizový. Tato
heuristika dále posiluje naši původní hypotézu.
Zdá se proto pravděpodobné, že uživatel, který poskytl UTXO jako vstup,
stále drží výstup 1, který zřejmě ztělesňuje výměnu transakce.
Cvičení 4:
Model této transakce je jednoduchá platba. Na transakci proto můžeme použít interní heuristiku a pokusit se identifikovat směnu.
Osobně jsem identifikoval nejméně dvě vnitřní heuristiky, které podporují stejnou hypotézu:
- Opakované použití stejného typu skriptu ;
- Výstup kulatého příspěvku.
Nejzřetelnější heuristikou je opakované použití stejného typu skriptu.
Výstup 0 je totiž P2SH, který poznáme podle jeho
přijímací adresy začínající na 3 :
3FSH5Mnq6S5FyQoKR9Yjakk3X4KCGxeaD4
Zatímco výstup 1 je P2WPKH, identifikovatelný
podle adresy začínající na bc1q :
bc1qvdywdcfsyavt4v8uxmmrdt6meu4vgeg439n7sg
UTXO použitý jako vstup pro tuto transakci také používá skript P2WPKH:
bc1qku3f2y294h3ks5eusv63dslcua2xnlzxx0k6kp
Můžeme tedy předpokládat, že výstup 0 odpovídá platbě a výstup 1 je směna transakcí, což by znamenalo, že vstupní uživatel vždy vlastní
výstup 1.
Abychom tuto hypotézu podpořili nebo vyvrátili, můžeme hledat další heuristické znaky, které buď potvrzují naši úvahu, nebo snižují pravděpodobnost, že je naše hypotéza správná.
Identifikoval jsem přinejmenším jednu další heuristiku. Jedná se o výstup
zaokrouhleného množství. Výstup 0 měří 70 000 satelitů, zatímco výstup 1 měří 22 962 satelitů. Máme tedy dokonale kulatý výstup v zúčtovací
jednotce BTC. Heuristika kulatého výstupu naznačuje, že UTXO s kulatou
částkou je s největší pravděpodobností ta platební a že po eliminaci ostatní
představují směnu. Tato heuristika dále posiluje naši původní hypotézu.
V tomto příkladu však může naši původní hypotézu zpochybnit jiná heuristika.
Výstup 0 je totiž větší než výstup 1. Na základě
heuristiky, že největší výstup je zpravidla devizový, bychom mohli usuzovat,
že výstup 0 je devizový. Tato protihypotéza se však jeví jako nepravděpodobná,
protože ostatní dvě heuristiky se zdají být podstatně přesvědčivější než heuristika
největšího výstupu. V důsledku toho se zdá rozumné zachovat naši původní hypotézu
i přes tento zdánlivý rozpor.
Zdá se proto pravděpodobné, že uživatel, který poskytl UTXO jako vstup,
stále drží výstup 1, který zřejmě ztělesňuje výměnu transakce.
Cvičení 5:
Vidíme, že k Lojcově identitě lze přiřadit 8 transakcí. Z nich 4 zahrnují příjem bitcoinů:
2d9575553c99578268ffba49a1b2adc3b85a29926728bd0280703a04d051eace
8b70bd322e6118b8a002dbdb731d16b59c4a729c2379af376ae230cf8cdde0dd
d5864ea93e7a8db9d3fb113651d2131567e284e868021e114a67c3f5fb616ac4
bc4dcf2200c88ac1f976b8c9018ce70f9007e949435841fc5681fd33308dd762
Další 4 se týkají zásilek bitcoinů:
8b52fe3c2cf8bef60828399d1c776c0e9e99e7aaeeff721fff70f4b68145d540
c12499e9a865b9e920012e39b4b9867ea821e44c047d022ebb5c9113f2910ed6
a6dbebebca119af3d05c0196b76f80fdbf78f20368ebef1b7fd3476d0814517d
3aeb7ce02c35eaecccc0a97a771d92c3e65e86bedff42a8185edd12ce89d89cc
Cvičení 6:
Pokud se podíváme na model této transakce, je zřejmé, že se jedná o vázané výdaje. Transakce má totiž jeden vstup a 51 výstupů, což svědčí o vysoké míře ekonomické aktivity. Můžeme tedy vyslovit hypotézu, že Loïc vybral bitcoiny z výměnné platformy.
Tuto hypotézu podporuje několik faktorů. Zaprvé, typ skriptu použitý k zabezpečení vstupu UTXO je multisig skript P2SH 2/3, což naznačuje pokročilou úroveň zabezpečení typickou pro výměnné platformy:
OP_PUSHNUM_2
OP_PUSHBYTES_33 03eae02975918af86577e1d8a257773118fd6ceaf43f1a543a4a04a410e9af4a59
OP_PUSHBYTES_33 03ba37b6c04aaf7099edc389e22eeb5eae643ce0ab89ac5afa4fb934f575f24b4e
OP_PUSHBYTES_33 03d95ef2dc0749859929f3ed4aa5668c7a95baa47133d3abec25896411321d2d2d
OP_PUSHNUM_3
OP_CHECKMULTISIG
Zkoumaná adresa 3PUv9tQMSDCEPSMsYSopA5wDW86pwRFbNF je navíc opakovaně
použita ve více než 220 000 různých transakcích, což je často charakteristické
pro výměnné platformy, které obecně nedbají na jejich důvěrnost.
Časová heuristika aplikovaná na tuto adresu rovněž ukazuje pravidelné vysílání transakcí téměř denně po dobu 3 měsíců s prodlouženými hodinami přes 24 hodin, což naznačuje nepřetržitou aktivitu výměnné platformy.
A konečně, objemy, které tento subjekt zpracovává, jsou obrovské. Adresa přijala a odeslala 44 BTC v 222 262 transakcích mezi prosincem 2022 a březnem 2023. Tyto velké objemy dále potvrzují pravděpodobnou povahu činnosti výměnné platformy.
Cvičení 7:
Analýzou časů potvrzení transakcí lze zjistit následující časy UTC:
05:43
20:51
18:12
17:16
04:28
23:38
07:45
21:55
Analýza těchto časových rozvrhů ukazuje, že časy UTC-7 a UTC-8 jsou u většiny časových rozvrhů v souladu s rozsahem současné lidské činnosti (mezi 8:00 a 23:00):
05:43 UTC > 22:43 UTC-7
20:51 UTC > 13:51 UTC-7
18:12 UTC > 11:12 UTC-7
17:16 UTC > 10:16 UTC-7
04:28 UTC > 21:28 UTC-7
23:38 UTC > 16:38 UTC-7
07:45 UTC > 00:45 UTC-7
21:55 UTC > 14:55 UTC-7
05:43 UTC > 21:43 UTC-8
20:51 UTC > 12:51 UTC-8
18:12 UTC > 10:12 UTC-8
17:16 UTC > 09:16 UTC-8
04:28 UTC > 20:28 UTC-8
23:38 UTC > 15:38 UTC-8
07:45 UTC > 23:45 UTC-8
21:55 UTC > 13:55 UTC-8
Časové pásmo UTC-7 je důležité zejména v létě, protože zahrnuje státy a regiony jako :
- Kalifornie (s městy jako Los Angeles, San Francisco a San Diego);
- Nevada (s Las Vegas) ;
- Oregon (s Portlandem) ;
- Washington (se Seattlem) ;
- Kanadský region Britská Kolumbie (s městy jako Vancouver a Victoria).
Z těchto informací vyplývá, že Loïc pravděpodobně žije na západním pobřeží Spojených států nebo v Kanadě.
Cvičení 8:
Analýza této transakce ukazuje 5 vstupů a jeden výstup, což naznačuje konsolidaci. Při použití heuristiky CIOH můžeme předpokládat, že všechny vstupní UTXO jsou ve vlastnictví jediného subjektu a že výstupní UTXO patří rovněž tomuto subjektu. Zdá se, že uživatel se rozhodl seskupit několik UTXO, které vlastnil, a vytvořit tak jediné UTXO na výstupu s cílem konsolidovat své části. Tento krok byl pravděpodobně motivován snahou využít tehdejších nízkých transakčních nákladů, aby se snížily budoucí náklady.
Při psaní této třetí části o analýze řetězců jsem čerpal z následujících zdrojů:
- Série čtyř článků s názvem: Understanding Bitcoin Privacy with OXT, kterou vytvořila společnost Samourai Wallet v roce 2021 ;*
- Různé zprávy od OXT Research, stejně jako jejich bezplatný nástroj pro analýzu blockchainu (po zatčení zakladatelů Samourai Wallet již není v tuto chvíli k dispozici) ;*
- V širším měřítku mé znalosti pocházejí z různých tweetů a obsahu od @LaurentMT a @ErgoBTC ;*
- Space Kek #19](https://podcasters.spotify.com/pod/show/decouvrebitcoin/episodes/SpaceKek-19---Analyse-de-chane--anonsets-et-entropie-e1vfuji), kterého jsem se zúčastnil ve společnosti @louneskmt, @TheoPantamis, @Sosthene___ a @LaurentMT.*
Rád bych poděkoval jejich autorům, vývojářům a výrobcům. Děkuji také korektorům, kteří pečlivě opravili článek, z něhož vychází tento třetí díl, a poskytli mi své odborné rady :
Osvojení osvědčených postupů pro ochranu soukromí
Opětovné použití adresy
Po prostudování technik, které mohou narušit důvěrnost Bitcoinu, se v této třetí části podíváme na nejlepší postupy, které je třeba přijmout, abyste se ochránili. Cílem této části není zkoumat metody zvyšování důvěrnosti, což je téma, kterému se budeme věnovat později, ale spíše pochopit, jak správně komunikovat s Bitcoinem, abyste si zachovali důvěrnost, kterou přirozeně nabízí, aniž byste se museli uchylovat k dalším technikám.
Na začátku této třetí části budeme samozřejmě hovořit o opakovaném použití adresy. Tento jev je hlavní hrozbou pro důvěrnost uživatelů. Tato kapitola je jistě nejdůležitější z celého kurzu.
Co je to přijímací adresa?
Adresa pro příjem bitcoinů je řetězec nebo identifikátor, který se používá pro příjem bitcoinů do peněženky.
Technicky vzato přijímací adresa bitcoinu "nepřijímá" bitcoiny v pravém slova smyslu, ale slouží spíše k definování podmínek, za kterých lze bitcoiny utratit. Konkrétně řečeno, když je vám zaslána platba, transakce odesílatele pro vás vytvoří nové UTXO jako výstup z UTXO, které spotřebovala jako vstupy. Na tento výstup připojí skript definující, jak lze toto UTXO později utratit. Tento skript se nazývá "ScriptPubKey" nebo "Locking Script". Do tohoto skriptu je integrována vaše přijímací adresa, přesněji řečeno její náklad. Laicky řečeno, tento skript v podstatě říká:
"Chcete-li utratit tento nový UTXO, musíte poskytnout digitální podpis pomocí soukromého klíče spojeného s touto přijímací adresou."
Adresy bitcoinů jsou různých typů v závislosti na použitém modelu
skriptování. První modely, známé jako "Legacy*", zahrnují adresy P2PKH (Pay-to-PubKey-Hash) a P2SH (Pay-to-Script-Hash). Adresy P2PKH začínají vždy na 1 a adresy P2SH na 3. Ačkoli jsou tyto formáty stále bezpečné, jsou nyní
zastaralé, protože s sebou nesou vyšší transakční náklady a nabízejí menší
důvěrnost než nové standardy.
Adresy SegWit V0 (P2WPKH a P2WSH) a Taproot /
SegWit V1 (P2TR) představují moderní formáty. Adresy SegWit
začínají na bc1q a adresy Taproot, zavedené v roce 2021,
začínají na bc1p.
Například zde je adresa příjmu Taproot:
bc1ps5gd2ys8kllz9alpmcwxqegn7kl3elrpnnlegwkm3xpq2h8da07spxwtf5
Způsob konstrukce klíče ScriptPubKey závisí na používaném standardu:
| ScriptPubKey | Šablona skriptu
| ---------------- | ----------------------------------------------------------- |
| P2PKH | OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
|
| P2SH | OP_HASH160 <scriptHash> OP_EQUAL |
| P2WPKH | 0 <pubKeyHash> |
| P2WSH | 0 <witnessScriptHash> |
| P2SH - P2WPKH | OP_HASH160 <redeemScriptHash> OP_EQUAL |
| P2SH - P2WSH | OP_HASH160 <redeemScriptHash> OP_EQUAL |
| P2TR | 1 <pubKey> |
Konstrukce adres pro příjem závisí také na zvoleném modelu skriptu:
- U adres
P2PKHaP2WPKHpředstavuje užitečné zatížení, tj. jádro adresy, hash veřejného klíče; - U adres
P2SHaP2WSHpředstavuje užitečné zatížení hash souboru ; - U adres
P2TRje užitečným nákladem upravený veřejný klíč. Výstupy P2TR kombinují aspekty Pay-to-PubKey a Pay-to-Script. Upravený veřejný klíč je výsledkem přidání klasického výdajového veřejného klíče s "úpravou", odvozenou z Merkleho kořene sady skriptů, které lze také použít k utrácení bitcoinů.
Adresy zobrazené v portfoliovém softwaru obsahují také HRP (Human-Readable Part), obvykle bc pro adresy po SegWitu, oddělovač 1 a číslo verze q pro SegWit V0 a p pro Taproot/SegWit
V1. Přidává se také kontrolní součet, který zaručuje integritu a platnost adresy
během přenosu.
Nakonec jsou adresy převedeny do standardního formátu:
- Base58check pro staré adresy Legacy ;
- Bech32 pro adresy SegWit ;
- Bech32m pro adresy Taproot.
Zde je sčítací matice pro formáty bech32 a bech32m (SegWit a Taproot) od základu 10:
| + | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | q | p | z | r | y | 9 | x | 8 |
| 8 | g | f | 2 | t | v | d | w | 0 |
| 16 | s | 3 | j | n | 5 | 4 | k | h |
| 24 | c | e | 6 | m | u | a | 7 | l |
Co je opakované použití adresy?
Opakované použití adresy je použití stejné přijímací adresy pro blokování několika různých UTXO.
Jak jsme viděli v předchozí části, každý UTXO má svůj vlastní ScriptPubKey, který jej uzamyká a musí být splněn, aby mohl být UTXO použit jako vstup v nové transakci. Právě do tohoto klíče ScriptPubKey jsou integrovány adresy užitečného zatížení.
Pokud různé klíče ScriptPubKeys obsahují stejnou přijímací adresu, jedná se o tzv. opakované použití adresy. V praxi to znamená, že uživatel opakovaně poskytl odesílatelům stejnou adresu, aby mohl přijímat bitcoiny prostřednictvím více plateb. A právě tato praxe je pro vaše soukromí katastrofální.
Proč je opakované použití adresy problém?
Protože je blockchain veřejný, je snadné zjistit, které adresy blokují které UTXO a kolik bitcoinů. Pokud je stejná adresa použita pro několik transakcí, je možné odvodit, že všechny bitcoiny spojené s touto adresou patří stejné osobě. Tento postup ohrožuje soukromí uživatelů tím, že umožňuje vytvořit deterministické vazby mezi různými transakcemi a dohledat bitcoiny v blockchainu. Na tento problém upozornil již sám Satoshi Nakamoto v Bílé knize bitcoinu:
Jako další brána firewall by se pro každou transakci mohl použít nový pár klíčů, aby nebyly spojeny se společným vlastníkem
Zdroj: Nakamoto, "Bitcoin: A Peer-to-Peer Electronic Cash System", https://bitcoin.org/bitcoin.pdf, 2009.
Satoshiho záměrem v této větě bylo vytvořit další firewall v případě spojení mezi identitou uživatele a párem klíčů v Bitcoinu, aby se zabránilo veřejnému propojení celé jeho aktivity s jeho identitou. Dnes, s rozmachem společností zabývajících se analýzou blockchainu a regulací KYC, již používání jedinečných adres není "dodatečnou firewallovou stěnou", ale nezbytnou praxí pro každého, kdo si chce zachovat alespoň minimální soukromí.
Při opakovaném použití adresy vytváříte téměř nepopiratelnou vazbu mezi všemi transakcemi spojenými s touto adresou. To sice přímo neohrožuje vaše finanční prostředky, protože kryptografie eliptických křivek zaručuje bezpečnost vašich soukromých klíčů, ale usnadňuje to sledování vašich aktivit. Kdokoli s uzlem totiž může sledovat transakce a zůstatky na adresách, což zcela ohrožuje vaši anonymitu.
Pro ilustraci si uveďme příklad Boba, uživatele, který pravidelně nakupuje bitcoiny v malých částkách v DCA a posílá je vždy na stejnou adresu. Po dvou letech tato adresa obsahuje značné množství bitcoinů. Pokud Bob použije tuto adresu k platbě místnímu obchodníkovi, ten bude moci vidět všechny související prostředky a odvodit Bobovo bohatství. To může vést k osobním bezpečnostním rizikům, například k pokusu o krádež nebo vydírání. Kdyby Bob používal pro příjem každého pravidelného nákupu prázdnou adresu, prozradil by obchodníkovi neskonale méně informací.
Při analýze řetězců existují 2 typy opakovaného použití adresy:
- Externí opětovné použití ;
- Interní opakované použití v rámci transakce.
První je, když je adresa opakovaně použita v několika různých transakcích s bitcoiny. To je to, o čem jsme mluvili dříve: tato heuristika vyvozuje, že všechny UTXO prošlé přes tuto adresu patří jednomu subjektu.
K opakovanému použití interních adres nedochází, pokud k němu dochází v rámci několika transakcí, ale pokud k němu dochází v rámci jedné transakce. Pokud je totiž stejná adresa použitá k uzamčení vstupu použita jako výstup transakce, pak můžeme odvodit, že tento výstup patří stále stejnému uživateli (burze) a že druhý výstup představuje skutečnou platbu. Tato další heuristika umožňuje zachovat stopu prostředků v průběhu několika transakcí.
Opakované použití adres je pro Bitcoin skutečnou pohromou. Podle webových stránek OXT.me (v současné době nepřístupných) činila v roce 2022 celková míra opakovaného použití adres v Bitcoinu přibližně 52 %:
Tato míra je obrovská, ale pochází v drtivé většině od výměnných platforem, nikoli od jednotlivých uživatelů.
Jak zabránit opakovanému použití adresy?
Zamezit opakovanému použití adresy je poměrně jednoduché: Pro všechny nové platby do peněženky jednoduše použijte novou, prázdnou adresu.
Díky BIP32 jsou nyní moderní portfolia deterministická a hierarchická. To znamená, že uživatel může vygenerovat velké množství adres z jediné počáteční informace: semínka. Uložením této jediné informace je možné obnovit všechny soukromé klíče v portfoliu, což umožní přístup k finančním prostředkům zajištěným příslušnými adresami.
Proto se po stisknutí tlačítka "přijmout" v softwaru peněženky vždy nabídne nepoužitá přijímací adresa. Po přijetí bitcoinů na této adrese software automaticky navrhne novou adresu.
PS: Nedávno některé softwarové peněženky oznámily svůj záměr přestat generovat prázdné adresy, protože se obávají, že to úřady budou vnímat jako formu praní špinavých peněz. Pokud je váš software jedním z nich, důrazně vám doporučuji, abyste jej okamžitě vyměnili, protože je to pro uživatele nepřijatelné Pokud potřebujete statický identifikátor pro příjem plateb, například darů, není vhodné používat klasickou adresu Bitcoin kvůli riziku opakovaného použití. Místo toho použijte adresu Lightning nebo zvolte statický identifikátor platby v řetězci, například BIP47 nebo Silent Payments. Tyto protokoly jsou podrobně vysvětleny v 6. části tohoto školení.
Označování a kontrola dílů
Jak jsme zjistili v části o analýze řetězců, existuje množství heuristických postupů a vzorů, které lze použít k odvození informací o transakci. Jako uživatel je důležité tyto techniky znát, abyste se před nimi mohli lépe chránit.
To zahrnuje důslednou správu peněženky ve vlastní úschově, což znamená znát původ UTXO a pečlivě vybírat, které UTXO se při platbách spotřebují. Tato efektivní správa peněženky se opírá o dvě důležité vlastnosti dobrých bitcoinových peněženek: označování a kontrolu mincí.
V této kapitole se podíváme na tyto funkce a zjistíme, jak je můžete inteligentně využívat, aniž by vás příliš zatěžovaly, a výrazně tak optimalizovat své soukromí v systému Bitcoin.
Co je to označování?
Označování je postup, při kterém se konkrétnímu UTXO v peněžence Bitcoin přiřadí anotace nebo štítek. Tyto anotace jsou ukládány lokálně softwarem peněženky a nikdy nejsou přenášeny přes síť Bitcoin. Labelling je tedy osobní nástroj pro správu.
Pokud mám například UTXO z nákupu P2P na Bisq u společnosti Charles, mohu
jej označit jako "Non-KYC Bisq Charles".
Označování je osvědčený postup, který pomáhá zapamatovat si původ nebo zamýšlené místo určení UTXO, což usnadňuje správu finančních prostředků a optimalizaci ochrany osobních údajů. Vaše bitcoinová peněženka totiž jistě zabezpečuje několik UTXO. Pokud jsou zdroje těchto UTXO různé, možná nebudete chtít tyto UTXO v budoucnu slučovat, jinak byste mohli odhalit jejich společné vlastnictví. Řádným označením všech svých částí si můžete být jisti, že si vzpomenete, odkud pocházejí, až je budete potřebovat použít, i kdyby to mělo být až za několik let.
Co je to rohová kontrola?
Aktivní využívání označování je ještě zajímavější ve spojení s možností kontroly mincí v softwaru pro správu portfolia.
Kontrola mincí je funkce, kterou najdete v dobrém softwaru bitcoinové peněženky a která vám dává možnost ručně vybrat konkrétní UTXO, které chcete použít jako vstupy pro dokončení transakce. Ve skutečnosti, abyste uspokojili výstupní platbu, musíte na oplátku spotřebovat vstupní UTXO. Z řady důvodů, na které se podíváme později, můžete chtít přesně vybrat, které části spotřebovat jako vstupy pro uspokojení dané platby. Přesně to vám umožňuje ovládání mincí. Abychom vám poskytli analogii, tato funkce je podobná výběru konkrétní mince z peněženky při platbě za bagetu.
Použití portfoliového softwaru s kontrolou mincí ve spojení s označením UTXO umožňuje uživatelům rozlišovat a přesně vybírat UTXO pro své transakce.
Jak označujete své UTXO?
Neexistuje žádná univerzální metoda označování UTXO. Je na vás, abyste si definovali systém označování, který bude pro vaše portfolio srozumitelný. V každém případě mějte na paměti, že dobré značení je takové, kterému rozumíte, když ho potřebujete. Pokud je vaše peněženka s bitcoiny určena především ke spoření, nemusí vám být označení užitečné ještě desítky let. Proto se ujistěte, že jsou jasné, přesné a srozumitelné.
Je důležité, aby vaši blízcí mohli snadno zjistit původ finančních prostředků, pokud by jednoho dne potřebovali přístup k vašemu portfoliu. Pomůže jim to jak z důvodu zachování důvěrnosti, tak pro právní účely, pokud by potřebovali původ prostředků zdůvodnit nějakému úřadu.
Nejdůležitější věcí, kterou je třeba na etiketě uvést, je zdroj UTXO. Měli byste jednoduše uvést, jak se mince dostala do vaší peněženky. Je výsledkem nákupu na burzovní platformě? Úhrady faktury od zákazníka? Na peer-to-peer burze? Nebo představuje výměnu výdaje? Můžete například uvést:
- odstranit Exchange.com` ;
- platba zákazníka David` ;
- koupit P2P Charles` ;
Změna nákupu pohovky
Chcete-li vyladit správu UTXO a respektovat strategii oddělení fondů v rámci portfolia, můžete své štítky obohatit o další ukazatel, který toto oddělení odráží. Pokud vaše portfolio obsahuje dvě kategorie UTXO, které byste rádi nemíchali, mohli byste do svých štítků začlenit ukazatel, který tyto skupiny jasně odliší. Tyto oddělovací značky budou záviset na vašich vlastních kritériích, například na rozlišení mezi UTXO vzniklými v důsledku akvizičního procesu, který zahrnuje KYC, nebo mezi profesionálními a osobními fondy. Vezmeme-li si výše uvedené příklady štítků, mohlo by se to projevit takto:
KYC - Withdrawal Exchange.com;KYC - Zákazník Platba David;NO KYC - Koupit P2P Charles;NO KYC - Změna nákupu pohovky
Doporučuje se také udržovat označení dílu v průběhu transakcí. Například při
konsolidaci UTXO no-KYC nezapomeňte výsledné UTXO označit nejen jako konsolidace, ale konkrétně jako konsolidace no-KYC, abyste měli jasný
záznam o tom, odkud mince pocházejí.
A konečně, není povinné uvádět na štítku datum. Většina softwaru peněženek již datum transakce zobrazuje a díky TXID je možné tuto informaci vždy najít v průzkumníku bloků.
Jak vybrat správné díly?
Při provádění transakce umožňuje ovládací prvek mince konkrétně vybrat, které UTXO se mají spotřebovat jako vstupy pro uspokojení výstupu platby. Tato volba má dva aspekty:
- Možnost příjemce platby spojit část vaší identity s UTXO použitými na vstupech;
- Schopnost externího pozorovatele vytvořit vazby mezi všemi UTXO, které jsou spotřebovávány jako vstupy.
Pro ilustraci prvního bodu si uveďme konkrétní příklad. Předpokládejme, že si u svého pekaře koupíte bagetu v bitcoinech. Použijete jeden nebo více UTXO, které držíte jako vstupy, abyste pokryli alespoň cenu bagety ve výstupech a také transakční poplatky. Váš pekař by pak mohl potenciálně spojit váš obličej nebo jakoukoli jinou část vaší identity, kterou zná, s mincemi použitými jako vstupy. S vědomím existence tohoto propojení byste mohli při placení raději zvolit konkrétní UTXO než jinou.
Pokud například jeden z vašich UTXO pochází z výměnné platformy a vy byste byli raději, kdyby pekař o vašem účtu na této platformě nevěděl, vyhnete se použití tohoto UTXO k platbě. Pokud máte UTXO s vysokou hodnotou, které odhaluje značné množství bitcoinů, můžete se také rozhodnout ho nepoužít, aby se pekař nedozvěděl o vašem bohatství v BTC.
Výběr UTXO pro tento první bod je tedy osobním rozhodnutím, které je ovlivněno tím, co jste ochotni prozradit nebo ne. Štítky, které přiřadíte svým UTXO při jejich obdržení, vám pomohou vybrat ty, které po jejich vynaložení odhalí pouze ty informace, které jste ochotni příjemci prozradit.
Kromě informací potenciálně odhalených příjemci ovlivňuje volba vstupů také to, co odhalíte všem pozorovatelům blockchainu. Pokud totiž jako vstupy do transakce použijete několik UTXO, podle heuristiky CIOH (Common Input Ownership Heuristic) prozradíte, že je vlastní stejný subjekt.
Při výběru dílů si proto musíte být vědomi toho, že transakce, kterou se chystáte vysílat, vytvoří spojení mezi všemi použitými UTXO. Toto propojení může být problematické pro vaše soukromí, zejména pokud UTXO pocházejí z různých zdrojů.
Vezměme si příklad mého UTXO bez KYC od společnosti Bisq; chci se vyhnout jeho kombinaci s UTXO například z regulované burzovní platformy, která zná mou identitu. Pokud totiž někdy použiji tyto 2 UTXO jako vstupy do stejné transakce, regulovaná platforma bude schopna spojit mou identitu s UTXO, které jsem koupil na Bisq a které předtím nebylo spojeno s mou identitou.
A konečně, při výběru UTXO, které se použijí jako vstupy transakce, je nejdůležitější vyhnout se použití více UTXO. Pokud můžete, zvolte nanejvýš jednu dostatečně velkou minci, která uspokojí vaši platbu. Tímto způsobem se zcela vyhnete rizikům spojeným s CIOH. Pokud však k platbě nestačí jediné UTXO a musíte jich spotřebovat několik, ujistěte se, že pocházejí z podobných zdrojů, abyste minimalizovali riziko nežádoucích vazeb. Mějte také na paměti, že příjemce by si mohl informace, které o vás má, spojit s historií mincí použitých na vstupu.
Porozumění automatickému výběru dílů
V předchozích částech jsme se zabývali ručním výběrem UTXO, které se mají použít pro transakci. Co se však stane, když software peněženky provede tento výběr automaticky? Existuje několik metod, jak určit, které mince se mají spotřebovat, a výběr UTXO představuje skutečnou oblast výzkumu Bitcoinu. Hlavním cílem tohoto automatického procesu je často minimalizovat transakční náklady pro uživatele.
Metody výběru UTXO, jako jsou FIFO (First In First Out) a LIFO (Last In First Out), patří k nejjednodušším, ale také nejméně efektivním. Při FIFO se nejprve použijí nejstarší části portfolia. Tento přístup je obecně neefektivní jak z hlediska minimalizace transakčních nákladů, tak z hlediska zachování důvěrnosti, s výjimkou případů, kdy se používají relativní časové zámky, které je třeba pravidelně obnovovat. Naopak LIFO upřednostňuje použití nejnovějších UTXO. Obě metody jsou sice jednoduché, ale často se ukazují jako neefektivní.
Pokročilejší metodou je Knapsack Solver. Ten se používal v peněžence Bitcoin Core do verze 0.17. Spočívá v iterativním a náhodném výběru UTXO z peněženky, jejich sečtení v podmnožinách a ponechání řešení, které co nejvíce snižuje váhu transakce, aby se snížily náklady pro uživatele.
Branch-and-Bound (BNB), často přezdívaný "Murchův algoritmus" podle svého vynálezce, nahradil od verze 0.17 v jádře bitcoinu Knapsack Solver. Cílem této pokročilejší metody je najít množinu UTXO, která přesně odpovídá částce potřebné k uspokojení výstupů transakce. Cílem BNB je minimalizovat směnnou částku i poplatky, a to snížením tzv. kritéria odpadu, které zohledňuje jak okamžité náklady, tak očekávané budoucí náklady na směnu. Tato metoda je odvozena z původní koncepce Branch-and-Bound, kterou v roce 1960 vymyslely Ailsa Landová a Alison Harcourtová, a nabízí přesnější optimalizaci poplatků než Knapsack Solver.
Všechny tyto metody automatického výběru UTXO mohou být účinné při snižování transakčních nákladů, ale často jsou neúčinné při zachování důvěrnosti informací o uživateli. Tyto algoritmy totiž mohou sloučit několik UTXO do vstupů, čímž odhalí společnou vlastnost těchto UTXO v důsledku CIOH. Je zřejmé, že tyto metody nemohou brát v úvahu štítky připojené k UTXO, které jsou nicméně klíčové pro vědomý výběr částí, které mají být příjemci transakce odhaleny. V současné době je jediným způsobem, jak optimalizovat důvěrnost při výběru mincí, provádět tento výběr ručně.
Výukový program pro označování UTXO
Pokud se chcete dozvědět, jak označit UTXO, připravili jsme pro vás obsáhlý návod pro hlavní software bitcoinových peněženek:
https://planb.network/tutorials/privacy/on-chain/utxo-labelling-d997f80f-8a96-45b5-8a4e-a3e1b7788c52
KYC a identifikace klíčů
Zkratka KYC znamená "Poznej svého zákazníka". Jedná se o regulační postup, který uplatňují některé společnosti působící v oblasti bitcoinů. Cílem tohoto postupu je ověřit a zaregistrovat totožnost jejich zákazníků, přičemž deklarovaným cílem je boj proti praní špinavých peněz a financování terorismu.
V praxi KYC zahrnuje shromažďování různých osobních údajů klienta, které se mohou lišit v závislosti na jurisdikci, ale obecně zahrnují průkaz totožnosti, fotografii a doklad o adrese. Tyto informace jsou následně ověřeny a uloženy pro budoucí použití.
Tento postup se stal povinným pro všechny regulované burzovní platformy ve většině západních zemí. To znamená, že každý, kdo chce prostřednictvím těchto platforem směnit státní měny za bitcoiny, musí splnit požadavky KYC.
Tento postup není bez rizika pro soukromí a bezpečnost uživatelů. V této kapitole se budeme těmito riziky podrobně zabývat a analyzovat konkrétní dopady procesů KYC a identifikace na soukromí uživatelů bitcoinu.
Usnadnění sledování v řetězci
První riziko spojené s KYC spočívá v tom, že nabízí privilegovaný vstupní bod pro analýzu blockchainu. Jak jsme viděli v předchozí části, analytici mohou shlukovat a sledovat aktivity v blockchainu pomocí transakčních vzorů a heuristiky. Jakmile se jim podaří shlukovat aktivitu uživatele v onchainu, stačí jim najít jediný vstupní bod mezi všemi jeho transakcemi a klíči, aby plně ohrozili jeho důvěrnost.
Když provedete KYC, poskytnete vysoce kvalitní vstupní bod pro analýzu blockchainu, protože spojíte své přijímací adresy používané při výběru bitcoinů z výměnné platformy se svou úplnou, ověřenou identitou. Teoreticky jsou tyto informace známy pouze společnosti, které jste je poskytli, ale jak uvidíme níže, riziko úniku dat je reálné. Navíc už samotný fakt, že společnost tyto informace má, může být problematický, i když je nesdílí.
Pokud tedy nepodniknete další kroky k omezení agregace vašich aktivit v blockchainu, může kdokoli, kdo zná tento vstupní bod KYC, potenciálně spojit všechny vaše aktivity v Bitcoinech s vaší identitou. Z pohledu této společnosti ztrácí vaše používání Bitcoinu veškerou důvěrnost.
Abychom to ilustrovali srovnáním, je to, jako kdyby váš bankéř v Bance X měl přístup nejen ke všem vašim transakcím s Bankou X, ale mohl také sledovat vaše transakce s Bankou Y a všechny vaše hotovostní transakce.
Pamatujte si z první části tohoto školení: Model důvěrnosti bitcoinu, jak jej vymyslel Satoshi Nakamoto, je založen na oddělení identity uživatele od jeho klíčových párů. Přestože tato vrstva důvěrnosti dnes již není dostatečná, je stále rozumné co nejvíce omezit její degradaci.
Vystavení státnímu dohledu
Druhým velkým problémem KYC je, že státu prozrazuje, že jste v určitém okamžiku vlastnili bitcoin. Když si bitcoiny koupíte prostřednictvím regulovaného subjektu, je možné, aby se stát o tomto vlastnictví dozvěděl. V tuto chvíli se to může zdát jako banalita, ale je důležité si uvědomit, že politická a ekonomická budoucnost vaší země není ve vašich rukou.
Za prvé, stát může rychle zaujmout autoritářský postoj. Historie je plná příkladů, kdy se politika náhle změnila. V Evropě dnes mohou bitcoináři psát články o bitcoinech, účastnit se konferencí a spravovat své peněženky ve vlastní režii. Ale kdo může říct, co bude zítra? Pokud se Bitcoin náhle stane veřejným nepřítelem číslo jedna, může být spojování s ním ve vládních spisech problematické.
V případě vážné hospodářské krize by pak stát mohl uvažovat o zabavení bitcoinů v držení občanů. Možná, že zítra budou majitelé bitcoinů vnímáni jako krizoví spekulanti a tváří v tvář znehodnocení fiat měny budou nadměrně zdaněni za své kapitálové zisky.
Možná si myslíte, že to není problém, protože vaše bitcoiny jsou smíšené, a tudíž nevystopovatelné. O dohledatelnost zde však nejde. Skutečným problémem je, že stát ví, že jste bitcoiny vlastnili. Už jen tato informace by mohla stačit k tomu, aby vás usvědčila nebo pohnala k odpovědnosti. Mohli byste se pokusit tvrdit, že jste své bitcoiny utratili, ale to by se muselo projevit ve vašem daňovém přiznání a byli byste přistiženi. Mohli byste také říct, že jste ztratili klíče při nehodě na lodi, ale kromě vtipu na Twitteru si opravdu myslíte, že by to stačilo k vašemu očištění?
Proto je důležité vzít v úvahu riziko, že se stát dozví, že jste vlastnili BTC, jakkoli se toto riziko dnes může zdát vzdálené.
Dalším problémem, který KYC představuje z hlediska státního dohledu, je povinné podávání zpráv regulovanými platformami. Ačkoli neznám předpisy v jiných jurisdikcích, ve Francii jsou Prestataires de Services sur Actifs Numériques (PSAN) povinni hlásit orgánům finančního dohledu jakýkoli pohyb finančních prostředků, který považují za podezřelý.
Ve Francii bylo v roce 2023 nahlášeno 1 449 podezřelých činů ze strany PSAN. Prozatím většina těchto činů souvisí s trestnou činností. Orgány však také žádají regulované platformy, aby hlásily veškeré podezřelé transakce s bitcoiny pouze na základě jejich struktury. Pokud provedete kolaborativní transakci, nebo dokonce jen transakci s mírně netypickou strukturou, a tato transakce proběhne nedaleko od výběru vašich bitcoinů z těchto platforem, můžete se ocitnout v situaci, kdy budete nahlášeni úřadům. I v případě, že nedošlo k nekalému jednání a k legitimnímu výkonu vašich práv, by takové nahlášení mohlo vést ke zvýšeným kontrolám a dohledu, což jsou nepříjemnosti, kterým byste se bez KYC vyhnuli.
Riziko úniku osobních údajů
Dalším problémem KYC je, že vyžaduje, aby všechny vaše osobní údaje byly uloženy na serverech soukromé společnosti.
Nedávné události nám připomněly, že nikdo není imunní vůči finančním nebo IT selháním. V roce 2022 na to doplatili zákazníci společnosti Celsius. Po vyhlášení úpadku společnosti zveřejnily americké soudy během správního řízení jména věřitelů a výši jejich majetku.
Před necelými dvěma lety byla vlajkovou lodí v oblasti kybernetické bezpečnosti kryptoměn, které byly ukradeny osobní údaje zákazníků. Přestože tento incident nebyl přímo spojen s nákupem bitcoinů, zůstává takové riziko i pro směnárenské platformy. S osobními údaji je tedy spojeno určité riziko.
Je pravda, že mnoho svých osobních údajů již svěřujeme soukromým společnostem. Riziko je zde však dvojí, protože tyto údaje vás nejen identifikují, ale jsou také spojeny s aktivitou na Bitcoinu. Když totiž hacker získá přístup k údajům o zákaznících směnárenské platformy, může důvodně předpokládat, že tito zákazníci vlastní Bitcoiny. Toto riziko zvyšuje skutečnost, že Bitcoin, stejně jako jakékoli jiné cenné aktivum, přitahuje pozornost zlodějů.
V případě úniku dat se můžete stát v nejlepším případě terčem cílených pokusů o phishing. V horším případě byste se mohli ocitnout v centru fyzického ohrožení svého domova.
Kromě specifických rizik spojených s bitcoinem existují také nebezpečí spojená s předáváním dokladů totožnosti. V případě úniku dat je totiž možné stát se obětí krádeže identity. Sázky se tedy neomezují pouze na ochranu důvěrnosti transakcí, ale týkají se také osobní bezpečnosti každého jednotlivce.
Některé zažité představy o KYC
Je důležité dekonstruovat některé zažité představy o KYC, se kterými se často setkáváme na Twitteru nebo při výměně názorů mezi bitcoináři.
Především je nepřesné si myslet, že ochrana soukromí u bitcoinů získaných prostřednictvím KYC je zbytečná. Nástroje a metody ochrany soukromí u Bitcoinu jsou různé a slouží různým účelům. Například používání transakcí coinjoin u bitcoinů získaných prostřednictvím KYC není špatný nápad. U regulovaných směnárenských platforem si samozřejmě musíte dávat pozor, aby vám nebyl účet zmrazen nebo zakázán, ale z čistě technického hlediska nejsou tyto postupy neslučitelné. Coinjoin má za následek přerušení historie mince, čímž vám pomůže zmařit určitá rizika analýzy řetězce spojená s KYC. Ačkoli neeliminuje všechna rizika, představuje významný přínos.
Na důvěrnost bitcoinů by se nemělo pohlížet binárně, jako na rozdíl mezi "anonymními" a neanonymními bitcoiny. Vlastnictví bitcoinů získaných prostřednictvím KYC neznamená, že je vše ztraceno; naopak, použití nástrojů pro utajení se může ukázat jako ještě výhodnější.
Naopak získání bitcoinu metodou, která není spojena s KYC, nezaručuje dokonalou důvěrnost ani vás nezbavuje nutnosti přijmout další ochranná opatření. Pokud držíte bitcoiny způsobem non-KYC, ale několikrát opakovaně používáte přijímací adresy, mohou být vaše transakce sledovány a agregovány. Sebemenší spojení se světem mimo Bitcoin může ohrozit jedinou vrstvu důvěrnosti, kterou máte. Proto je důležité považovat všechny nástroje a metody zvyšující soukromí v Bitcoinu za doplňkové. Každá technika řeší konkrétní riziko a může přidat další vrstvu ochrany. Vlastnictví Bitcoinu, který není určen k ochraně osobních údajů, tedy neznamená, že nepotřebujete přijmout další bezpečnostní opatření.
Lze KYC zrušit?
Někdy se mě ptají, zda je možné se po provedení KYC "vrátit zpět", a jak si můžete představit z předchozích odstavců, odpověď je různorodá. Nejjednodušší způsob, jak se vyhnout rizikům spojeným s KYC, je nepoužívat ho při pořizování bitcoinů. Tomuto tématu se budeme věnovat podrobněji v další kapitole. Pokud však KYC již byla provedena a bitcoiny byly zakoupeny, existují způsoby, jak zmírnit rizika s tím spojená?
Pokud jde o riziko vysledování vašich transakcí, je řešením použití funkce coinjoin. Na tuto metodu se podrobně podíváme později v kurzu, ale měli byste vědět, že coinjoin umožňuje přerušit historii mince a zabránit jejímu dohledání z minulosti do současnosti a ze současnosti do minulosti. Dokonce i v případě BTC získaných prostřednictvím regulované platformy může tato technika zabránit jejich dohledatelnosti.
Služba coinjoin však nesmazává druhé riziko spojené s KYC: skutečnost, že stát může být informován o vašem vlastnictví bitcoinů. I když totiž vaše mince již nejsou dohledatelné, stát může mít v závislosti na jurisdikci přístup k vašim prohlášením o převodu kryptoaktiv. Jelikož toto riziko není technické, ale administrativní, neexistují žádná specifická řešení pro Bitcoin, jak ho eliminovat, kromě toho, že se v první řadě nevystavíte KYC. Jediným legálním přístupem ke zmírnění tohoto rizika je prodat na regulovaných platformách své Bitcoiny získané prostřednictvím regulovaných platforem a poté je zpětně odkoupit prostředky bez KYC. Prodejem a nahlášením převodu by měly úřady zjistit, že je již nevlastníte.
Pokud jde o riziko úniku vašich osobních údajů a dokladů totožnosti, jedná se o nebezpečí, které se netýká Bitcoinu, a neexistuje žádné technické řešení, jak se mu vyhnout. Jakmile jsou vaše údaje odhaleny, je obtížné operaci vrátit zpět. Můžete se pokusit zrušit svůj účet na platformě, ale to nezaručuje vymazání vašich údajů KYC, zejména pokud je ověřování totožnosti zadáváno externě. Ověření úplného vymazání vašich údajů je nemožné. Neexistuje proto řešení, které by tomuto riziku zcela zabránilo a zajistilo, že již neexistuje.
Rozdíl mezi KYC a identifikací klíčů
Někdy mají někteří bitcoináři tendenci rozšířit pojem "KYC" na jakoukoli výměnu BTC zahrnující bankovní převod nebo platbu kreditní kartou, protože tyto prostředky mohou rovněž odhalit původ platby, stejně jako KYC. KYC by se však neměl zaměňovat s identifikací klíče. Osobně musím přiznat, že mé vnímání tohoto tématu se v průběhu času vyvíjelo.
KYC se konkrétně týká regulačního postupu, který některé společnosti provádějí za účelem ověření a registrace totožnosti svých zákazníků. Je to binární záležitost: při získávání bitcoinů buď KYC provedete, nebo ne. Identifikace klíče, která se týká vazby mezi aspektem identity uživatele a aktivitou na řetězci, však není tak binární, ale představuje spíše kontinuum. V kontextu získávání nebo převodu bitcoinů je totiž taková identifikace v různé míře možná vždy.
Pokud například nakupujete bitcoiny na regulované platformě ve Švýcarsku, KYC se nevyžaduje. Vaše klíče však mohou být identifikovány, protože nákup byl proveden prostřednictvím vašeho bankovního účtu. Zde se mohou první dvě rizika spojená s KYC - usnadnění sledování na řetězci a vystavení státnímu dohledu - projevit i při výměně bez KYC. Pokud švýcarský subjekt nahlásí podezřelé transakce orgánům ve vaší zemi, mohou jednoduše zkontrolovat bankovní účet použitý k nákupu a zjistit vaši totožnost. Nákup bez KYC na regulovaných platformách je tedy na stupnici rizik pro identifikaci klíče poměrně vysoko.
Vyhýbání se regulovaným platformám a volba metod pořizování P2P však riziko identifikace klíče zcela neodstraňuje, ale pouze snižuje. Vezměme si příklad nákupu na Bisq nebo jiné platformě P2P. K zaplacení protistrany pravděpodobně použijete svůj bankovní účet. Pokud úřady vyslechnou osobu, se kterou jste obchodovali, a požádají o vaše jméno, jsme zpět u rizik 1 a 2. Ačkoli jsou tato rizika mnohem nižší než při nákupu na platformě bez KYC a dokonce nižší než při nákupu s KYC, stále jsou přítomna v menší míře.
A konečně, i když své bitcoiny získáte prostřednictvím fyzické směny za hotovost, nejste zcela anonymní. Osoba, se kterou jste směnili, viděla váš obličej, který je součástí vaší identity. I když je v tomto příkladu minimální, stále existuje možnost identifikace podle klíče.
Závěrem lze říci, že při směně bitcoinů za jiná aktiva, ať už se jedná o nákup ve státní měně nebo prodej za reálné zboží, vždy existuje nějaká forma identifikačního klíče. V závislosti na zvoleném způsobu směny může mít tato identifikace různou intenzitu. Je důležité nezaměňovat tuto identifikaci s KYC, což je přesně definovaný regulační proces. Mezi KYC a spektrem identifikace však existuje souvislost, protože KYC je na vyšším konci spektra, protože systematicky usnadňuje identifikaci klíčů uživatelů ze strany orgánů.
Prodejní a akviziční metody
Po přečtení předchozí kapitoly vás možná zajímá, jak můžete nakupovat nebo prodávat bitcoiny, aniž byste museli podstoupit proceduru ověření totožnosti, abyste se vyhnuli rizikům spojeným s KYC. Existuje několik způsobů, jak s bitcoiny obchodovat.
Výměny hotovosti P2P
Jak jsme viděli, nejlepší metodou z hlediska důvěrnosti zůstává P2P (výměna mezi osobami) s hotovostním vypořádáním. Tato metoda umožňuje minimalizovat zanechané stopy a výrazně snižuje možnost identifikace klíče, ať už nakupujete, nebo prodáváte.
Přesto existují rizika pro osobní bezpečnost. Hlavní nebezpečí spočívá v tom, že během výměny se protistrana dozví, že držíte velkou částku peněz, ať už v hotovosti, nebo v bitcoinech. Tato informace může přilákat pozornost zlomyslných osob. Obecně se totiž doporučuje být ohledně držby bitcoinů diskrétní. Tuto radu lze uplatnit i na hotovost. Při osobní směně je však nevyhnutelné odhalit, že vlastníte bitcoiny, a to může přitáhnout nežádoucí pozornost.
Chcete-li toto riziko omezit, doporučuji vám, abyste upřednostňovali hotovostní transakce s důvěryhodnými osobami, jako jsou členové rodiny nebo blízcí přátelé. Případně můžete zvážit obchodování na místních setkáních bitcoinových obchodníků, poté, co se jich několikrát zúčastníte. To vám umožní lépe poznat ostatní účastníky a nebýt při fyzické výměně sám. Je však důležité si uvědomit, že P2P peněžní burzy s sebou ze své podstaty nesou rizika pro vaši osobní bezpečnost, která při nákupu přes regulovanou platformu a váš bankovní účet neexistují.
Navíc v závislosti na místě, kde žijete, může být přeprava a skladování velkých částek peněz riskantní, ať už jde o bitcoiny, nebo hotovost.
Výměna hotovosti může také představovat právní riziko v případě policejní nebo jiné kontroly. Ačkoli ve většině zemí neexistují žádná omezení týkající se množství hotovosti, které můžete mít u sebe, nadměrné množství může vzbudit podezření. Buďte proto opatrní, zejména pokud musíte cestovat na delší vzdálenosti, a vyvarujte se provádění příliš velkých transakcí najednou, abyste nemuseli zdůvodňovat držení velkých částek.
Další nevýhodou nákupů přes P2P je, že cena je často vyšší než na regulovaných platformách. Prodejci si často účtují přirážku v rozmezí od 1 % do někdy více než 10 %. Tento cenový rozdíl má několik důvodů. Zaprvé se jedná o běžnou praxi prodejců P2P, která se časem ustálila. Za druhé, prodejci mají s transakcí spojené poplatky za odeslání finančních prostředků kupujícímu. Při prodeji P2P je také zvýšené riziko krádeže ve srovnání s transakcemi na platformě, což ospravedlňuje kompenzaci za podstoupené riziko. V neposlední řadě mohou být dodatečné náklady spojeny s poptávkou a kvalitou výměny z hlediska důvěrnosti. Pro kupujícího má zisk z důvěrnosti svou cenu, která se odráží v přirážce uplatňované prodávajícím. Někteří bitcoináři se také domnívají, že cena s přirážkou u BTC nakoupených na P2P odráží jejich skutečnou cenu, a tvrdí, že nižší ceny na regulovaných platformách jsou výsledkem ohrožení důvěrnosti vašich osobních údajů.
Výměny P2P prostřednictvím matchmakingové platformy
Méně rizikovou alternativou z hlediska osobní bezpečnosti je provádět výměny P2P výhradně online prostřednictvím elektronických platebních metod, jako je PayPal, bankovní převody nebo Revolut.
Tento přístup zabraňuje mnoha rizikům spojeným s hotovostními transakcemi. Riziko selhání protistrany při online výměně je však vyšší. Pokud totiž při fyzické směně předáte peníze prodávajícímu, který vám na oplátku nepošle bitcoiny, můžete ho okamžitě volat k zodpovědnosti, protože stojí před vámi. Naproti tomu online je často nemožné vypátrat někoho, kdo vás okradl.
Ke zmírnění tohoto rizika je možné využít specializované platformy pro výměny P2P. Tyto platformy používají mechanismy řešení konfliktů, které chrání poškozené uživatele. Obvykle nabízejí systém úschovy, kde jsou bitcoiny drženy do doby, než prodávající potvrdí platbu ve fiat měně.
Z hlediska osobní bezpečnosti je tento způsob nákupu podstatně bezpečnější než fyzická výměna hotovosti. Jak však bylo uvedeno výše, online P2P výměny zanechávají více stop než fyzická výměna, což může být na úkor soukromí u Bitcoinu. Použitím online fiat platebního prostředku, jako je banka, vystavujete více informací, které by mohly usnadnit identifikaci klíče.
Opět bych na těchto platformách nedoporučoval provádět příliš mnoho velkých obchodů v rámci jedné transakce. Rozdělením transakcí rozložíte riziko krádeže protistrany.
Další nevýhodou nákupů přes P2P je opět to, že cena je často vyšší než na regulovaných platformách. Prodejci si často účtují přirážku v rozmezí od 1 % do někdy více než 10 %. Tento cenový rozdíl má několik důvodů. Zaprvé se jedná o běžnou praxi prodejců P2P, která se časem ustálila. Za druhé, prodejci mají s transakcí spojené poplatky za odeslání finančních prostředků kupujícímu. Při prodeji P2P je také zvýšené riziko krádeže ve srovnání s transakcemi na platformě, což ospravedlňuje kompenzaci za podstoupené riziko. V neposlední řadě mohou být dodatečné náklady spojeny s poptávkou a kvalitou výměny z hlediska důvěrnosti. Pro kupujícího má zisk z důvěrnosti svou cenu, která se odráží v přirážce uplatňované prodávajícím. Někteří bitcoináři se také domnívají, že cena s přirážkou u BTC nakoupených na P2P odráží jejich skutečnou cenu, a tvrdí, že nižší ceny na regulovaných platformách jsou výsledkem ohrožení důvěrnosti vašich osobních údajů.
Co se týče řešení, osobně jsem vždy používal Bisq a jsem s ním velmi spokojen. Jejich systém je vyzkoušený a zdá se být spolehlivý. Bisq je však k dispozici pouze na PC a jeho rozhraní může být pro začátečníky příliš složité. Další nevýhodou je, že Bisq pracuje pouze s onchain transakcemi, což se může v období vysokých transakčních poplatků za Bitcoin prodražit.
-> Viz náš výukový program Bisq.
https://planb.network/tutorials/exchange/peer-to-peer/bisq-fe244bfa-dcc4-4522-8ec7-92223373ed04
Jednodušší variantou je mobilní aplikace Peach, která spojuje kupující a prodávající a má zabudovaný systém řešení konfliktů. Proces je intuitivnější než u společnosti Bisq.
-> Podívejte se na náš výukový program Peach.
https://planb.network/tutorials/exchange/peer-to-peer/peach-c6143241-d900-4047-9b73-1caba5e1f874
Další online možností je HodlHodl, zavedená platforma, která nabízí dobrou likviditu, ačkoli jsem ji osobně netestoval.
-> Viz náš výukový program HodlHodl.
https://planb.network/tutorials/exchange/peer-to-peer/hodlhodl-d7344cd5-6b18-40f5-8e78-2574a93a3879
Pro řešení založená na síti Lightning Network vyzkoušejte RoboSats a LNP2PBot. RoboSats je přístupný prostřednictvím webové stránky a jeho použití je poměrně jednoduché. LNP2PBot je atypičtější, protože funguje prostřednictvím výměnného systému v aplikaci pro zasílání zpráv Telegram.
-> Podívejte se na náš výukový program RoboSats.
-> Viz náš výukový program LNP2PBot.
https://planb.network/tutorials/exchange/peer-to-peer/robosats-b60e4f7c-533a-4295-9f6d-5368152e8c06
Regulované platformy bez KYC
V závislosti na zemi, ve které žijete, můžete mít přístup k regulovaným platformám, které pro nákup nebo prodej bitcoinů nevyžadují postupy KYC. Ve Švýcarsku můžete například používat platformy, jako jsou Relai a MtPelerin.
-> Podívejte se na náš výukový program Relai.
https://planb.network/tutorials/exchange/centralized/relai-v2-30a9671d-e407-459d-9203-4c3eae15b30e
Jak jsme viděli v předchozí kapitole, tento typ platformy vás ušetří rizik spojených s postupy KYC, ale představuje vyšší úroveň rizika pro identifikaci klíčů. Z hlediska důvěrnosti bitcoinů tedy tyto platformy nabízejí lepší ochranu než metody nákupu s KYC, ale zůstávají méně atraktivní než P2P burzy.
Z hlediska osobní bezpečnosti je však používání těchto platforem mnohem méně rizikové než výměna P2P. Jejich používání je také často jednodušší než u platforem P2P.
Bankomaty
Další možností, jak nakupovat nebo prodávat bitcoiny bez KYC, jsou kryptoměnové bankomaty. Osobně jsem nikdy neměl příležitost toto řešení vyzkoušet, protože v mé zemi žádné nejsou. Tento způsob však může být velmi zajímavý, záleží na tom, kde žijete.
Problém s bankomaty spočívá v tom, že v některých zemích jsou buď zakázány, nebo v jiných zemích podléhají přísné regulaci. Pokud bankomat vyžaduje postup ověření totožnosti, pak je vystaven stejným rizikům, jaká jsou vlastní platformám s regulací KYC. Na druhou stranu, pokud bankomat umožňuje transakce bez ověření totožnosti pro malé částky, pak jeho použití může nabídnout úroveň důvěrnosti srovnatelnou s výměnou hotovosti P2P a zároveň se vyhnout většině rizik spojených s tímto typem výměny.
Hlavní nevýhodou bankomatů jsou často vysoké poplatky za směnu, které se pohybují od několika procent až po 15 % směňované částky.
Dárkové karty
Nakonec jsem vám také chtěl představit řešení, které dobře funguje pro ty, kteří chtějí své bitcoiny používat ke každodenním nákupům, a ne je prodávat za fiat měny.
Nejlepší způsob, jak utratit BTC, je samozřejmě použít Bitcoin nebo Lightning Network přímo k nákupu zboží nebo služby. V mnoha zemích je však počet obchodníků přijímajících Bitcoin stále omezený. Praktickou alternativou je použití dárkových karet.
Několik platforem, které nevyžadují postupy KYC, nabízí možnost výměny bitcoinů za dárkové karty, které lze použít u velkých maloobchodníků. Patří mezi ně CoinsBee, The Bitcoin Company a Bitrefill. Tyto platformy výrazně usnadňují každodenní používání bitcoinů a umožňují vám přístup k široké škále produktů a služeb, aniž byste je museli převádět na fiat měnu.
https://planb.network/tutorials/exchange/centralized/bitrefill-8c588412-1bfc-465b-9bca-e647a647fbc1
Další metody akvizice
Mezi další způsoby, jak získat bitcoiny a zároveň chránit své soukromí, patří samozřejmě těžba. Chcete-li začít těžit saty, nemusíte odhalovat svou identitu; stačí najít platný důkaz práce a odeslat jej do sítě. Pokud se rozhodnete pro těžbu v poolu, některé pooly vyžadují určitou formu identifikace, například KYC, zatímco jiné ne.
Další metodou je práce výměnou za bitcoiny. Tento způsob získání může být zajímavý, ale míra požadované identifikace se značně liší v závislosti na okolnostech.
*K napsání této kapitoly jsem použil školení BTC205, které poskytl @pivi___ na síti Plan ₿ (zatím je k dispozici pouze ve francouzštině)
Konsolidace, řízení UTXO a CIOH
Jedním z nejsložitějších aspektů vedení portfolia s vlastní správou je konsolidace. Měli byste konsolidovat? Jaký to má smysl? Jakou velikost UTXO je třeba respektovat? Jaké jsou kompromisy z hlediska důvěrnosti? Na to se podíváme v této části.
Co je to konsolidace?
Bitcoin funguje jako aukční trh, kde těžaři dávají přednost transakcím s nejnižšími poplatky. Každý blok má však maximální váhu, která omezuje počet transakcí, které do něj mohou být zařazeny. Vzhledem k tomu, že blok vzniká v průměru každých 10 minut, je prostor, který je v každém bloku k dispozici, vzácným zdrojem.
Těžaři, jejichž činnost přináší značné náklady na elektřinu, dlouhodobý majetek a údržbu, se přirozeně snaží maximalizovat svou ziskovost. Proto mají tendenci upřednostňovat transakce, které generují nejvyšší poplatky v poměru k jejich váze.
Ne všechny transakce s bitcoiny mají stejnou váhu. Ty s větším počtem vstupů a výstupů budou mít větší váhu. Představme si například 2 transakce:
- Transakce A obsahuje 1 vstup a 1 výstup. Přiděluje 1 994 sátů poplatků a má váhu 141 vB ;
- Transakce B, složitější transakce se 2 vstupy a 2 výstupy, přiděluje 2 640 satelitů v poplatcích za váhu 220 vB.
V tomto příkladu sice transakce B nabízí vyšší celkový poplatek, ale těžaři budou preferovat transakci A, protože nabízí lepší poměr mezi poplatkem a váhou. Zde je výpočet pro každou transakci vyjádřený v satech na virtuální bajt (sat/vB):
TXA : 1994 / 141 = 14 sats/vB
TXB : 2640 / 220 = 12 sats / vB
To znamená, že na každou jednotku váhy nabízí transakce A vyšší náklady než transakce B, i když transakce B nabízí vyšší náklady v absolutním vyjádření.
Pro uživatele je proto vždy zajímavější, aby při svých transakcích spotřebovával co nejméně vstupů. Je však třeba spotřebovat dostatečné množství, aby bylo možné uspokojit výstupní platbu. Při správě svého portfolia musíte mít dostatečně velké UTXO.
Principem konsolidace je právě využití období, kdy jsou poplatky u Bitcoinu nízké, ke sloučení jeho menších UTXO do jednoho většího. Tímto způsobem budete moci v době, kdy se poplatky na Bitcoinu zvýší, provádět transakce s minimem vstupů, a tedy v absolutním vyjádření utratit za poplatky méně. Cílem je tedy předvídat povinné transakce, které se budou provádět v období vysokých poplatků.
Kromě úspory transakčních nákladů pomáhá konsolidace UTXO předcházet vzniku "prachu". Prach" označuje UTXO, jejichž hodnota v satech je tak nízká, že nestačí pokrýt transakční náklady nutné k jejich vydání. Proto je ekonomicky neracionální tyto UTXO používat, dokud jsou transakční náklady vysoké. Aktivním sdružováním UTXO zabráníte jejich proměně v prach a zajistíte, že všechny vaše prostředky zůstanou použitelné.
Jaká je minimální velikost vašich UTXO?
Někdy se mě ptají, jaká je doporučená minimální hodnota pro UTXO. Bohužel neexistuje univerzální odpověď, protože záleží na vašich preferencích a podmínkách na trhu s poplatky. Zde je však vzorec, který vám může pomoci určit hranici vhodnou pro vaše potřeby:
\frac {P \times F}T = M Kde:
- p$ je váha transakce;
Fpředstavuje maximální rychlost nabíjení v satoshi na vbyte (sats/vB), proti které se zajišťujete;- t$ je procento transakčního poplatku, které jste ochotni zaplatit v poměru k celkové hodnotě UTXO ;
- m$ je minimální částka v satoši pro každý UTXO.
Předpokládejme, že máte v plánu pokrýt poplatky za standardní SegWit transakce s 1 vstup a 2 výstupy, váží 141 vB. Pokud zajišťujete až 800 sátů/vB a jste ochotni utratit maximálně 12 % hodnoty UTXO na poplatcích, pak by výpočet vypadal takto:
\frac{141 \times 800}{0.12} = 940\ 000 V tomto příkladu by proto bylo rozumné udržovat ve svém portfoliu minimální hodnotu 940 000 satelitů pro UTXO.
Konsolidace a CIOH
Jednou z nejpoužívanějších heuristik při analýze blockchainu je heuristika CIOH (Common Input Ownership Heuristic), která předpokládá, že všechny vstupy do bitcoinové transakce patří stejnému subjektu. Samotný princip konsolidace spočívá v tom, že se jako vstupy spotřebuje několik UTXO a jako výstup se vytvoří jediný UTXO. Konsolidace tedy umožňuje uplatnit ICOH.
V praxi to znamená, že vnější pozorovatel může usoudit, že všechny konsolidované UTXO pravděpodobně patří stejné osobě a že jí patří i jedinečný vygenerovaný výstup. Tato situace může ohrozit důvěrnost informací tím, že se spojí různé historie transakcí. Řekněme například, že konsoliduji 3 UTXO získané prostřednictvím P2P s jedním UTXO získaným prostřednictvím platformy, která vyžaduje KYC :
Tímto způsobem bude moci jakýkoli subjekt s přístupem k údajům burzovní platformy, potenciálně včetně vládních agentur, zjistit, že vlastním jiné množství BTC. Dříve tyto UTXO nebyly přímo spojeny s mou identitou, nyní již ano. Navíc všem zdrojům prozradí, že vlastním určité množství bitcoinů.
Pokud jde o správu UTXO, ekonomické důvody, které vedou ke konsolidaci za účelem snížení nákladů, se dostávají do rozporu s osvědčenými postupy v oblasti ochrany osobních údajů, které doporučují nikdy neslučovat UTXO. Volba mezi hospodárností a důvěrností proto závisí na prioritách každého uživatele.
Pokud se můžete vyhnout konsolidaci a zároveň si zachovat značné UTXO, je to ideální. Za tímto účelem optimalizujte své akviziční metody. Pokud nakupujete bitcoiny v DCA, snažte se své jednorázové nákupy co nejvíce rozložit, abyste konsolidovali hodnotu v menším počtu UTXO. Bude snazší zvládnout jednorázový nákup ve výši 1 000 EUR každé dva měsíce než nákup ve výši 120 EUR každý týden. Tím minimalizujete počet generovaných UTXO a zjednodušíte správu svého portfolia při zachování důvěrnosti.
Pokud budete muset konsolidovat své bitcoiny, upřednostněte nejprve konsolidaci UTXO ze stejného zdroje. Například sloučení 10 UTXO z jedné platformy ovlivní vaši důvěryhodnost méně než smíchání 5 UTXO z platformy A s 5 UTXO z platformy B. Pokud je konsolidace různých zdrojů nevyhnutelná, snažte se je rozdělit podle jejich vlastností. Například seskupte UTXO získané prostřednictvím KYC do jedné transakce a UTXO získané prostřednictvím P2P do jiné.
V každém případě nezapomeňte, že jakákoli konsolidace s sebou nevyhnutelně nese ztrátu důvěrnosti. Pečlivě proto zhodnoťte potřebu této operace a její možný dopad na vaše soukromí a vezměte v úvahu ČOI.
Další osvědčené postupy
Podívejme se na několik dalších osvědčených postupů pro optimalizaci vašeho soukromí v bitcoinech.
Kompletní uzel
Vlastnit své bitcoiny ve vlastní úschově je skvělé, ale používat vlastní kompletní uzel je ještě lepší! Zde se dozvíte, proč je pro zcela suverénní používání bitcoinu zásadní mít vlastní uzel:
- Odpor proti cenzuře**: Vaše transakce nemůže nikdo zablokovat;
- Nezávislost na třetích stranách**: Při ověřování dat v blockchainu již nejste závislí na žádné externí službě;
- Aktivní účast**: Můžete definovat vlastní pravidla validace a přímo se podílet na konsensu;
- Příspěvek sítě**: Tím, že provozujete uzel, pomáháte posilovat a šířit síť Bitcoin;
- Technické vzdělání**: Správa kompletního uzlu je skvělý způsob, jak prohloubit své technické znalosti o Bitcoinu.
Kromě těchto výhod zvyšuje používání kompletního uzlu také důvěrnost při vysílání transakcí. Když vydáváte transakci, je nejprve vytvořena a podepsána prostřednictvím vaší peněženky. Aby ji bylo možné vysílat v síti Bitcoin, musí ji znát alespoň jeden uzel. Používáním vlastního uzlu máte nad touto distribucí přímou kontrolu, čímž posilujete svou důvěrnost a omezujete riziko úniku dat.
Pokud nemáte vlastní uzel Bitcoin, budete nuceni použít uzel třetí strany, například ten, který nabízí poskytovatel softwaru pro peněženku. Kromě vysílání transakcí vyžaduje peněženka přístup k různým informacím, jako jsou čekající transakce, zůstatky spojené s vašimi adresami a počet potvrzení vašich transakcí. Pro přístup ke všem těmto údajům je třeba se dotázat uzlu.
Hlavním rizikem v případě, že nepoužíváte svůj vlastní uzel Bitcoin, je, že provozovatel cizího uzlu může sledovat vaše aktivity v blockchainu, nebo dokonce tyto informace sdílet s jinými subjekty. Chcete-li toto riziko omezit, je přechodným řešením použití softwaru peněženky, který maskuje vaše připojení přes Tor. To může snížit odhalení vašich údajů. Optimálním řešením je však mít vlastní uzel Bitcoin a používat jej k vysílání svých transakcí. Samozřejmě si také musíte dát pozor, aby prostřednictvím vašeho uzlu neunikly žádné informace, ale to je další téma, kterému se budeme věnovat v dalších částech.
Kromě zjevné výhody pro vaše soukromí vám vlastní kompletní uzel také zaručuje pravdivost dat v blockchainu, chrání vás před cenzurou a umožňuje vám aktivně se podílet na správě Bitcoinu. Používáním vlastního uzlu přispíváte svou ekonomickou vahou do vámi zvoleného řetězce, což je důležité během konfliktů uvnitř komunity, jako například během války o velikost bloku v letech 2015 až 2017. V případě forku by vás používání cizího uzlu mohlo vést k podpoře řetězce, který nechcete upřednostňovat, protože provozovatel uzlu rozhoduje za vás.
Jak vidíte, v zájmu zachování důvěrnosti a individuální suverenity je nezbytné spustit a používat vlastní kompletní uzel!
Klamavá heuristika analýzy
Obecněji řečeno, je důležité porozumět heuristikám, o kterých jsme hovořili v předchozí části, abychom se jim mohli lépe vyhnout nebo je oklamat. Přijetí řady osvědčených postupů může být přínosné, i když nejsou nezbytné. Nabízejí další vrstvu ochrany, která může být důležitá pro zachování důvěrnosti při používání Bitcoinu.
První rada, kterou bych vám mohl dát, je splynout s nejhustším davem. U Bitcoinu to znamená používat nejrozšířenější šablony skriptů. Například skripty P2WSH, které se často používají pro multisig konfigurace SegWit V0, jsou velmi neobvyklé. Neumožňují skrýt se ve velké sadě anonymity. Totéž platí pro starší modely, jako jsou P2PKH nebo P2SH. Ačkoli jsou v sadě UTXO hojně zastoupeny, pro nové transakce se používají stále méně.
Obecně platí, že je rozumnější zvolit nejnovější standard skriptování, pokud byl dostatečně přijat. Takže pokud bych v roce 2022 nedoporučoval používat P2TR (Taproot) kvůli jeho nízkému přijetí, v roce 2024 bych doporučil zvolit místo něj tento typ skriptu, nebo v opačném případě skript SegWit V0, protože počet transakcí využívajících P2TR začíná představovat velmi významný podíl.
Zdroj: txstats.com
Dalším tipem pro zachování důvěrnosti je snaha obejít interní heuristiku transakcí. Například při provádění platby se můžete pokusit vyhnout vytvoření výstupu s kulatou částkou, protože by to mohlo signalizovat, že jiný výstup představuje cizí měnu. Pokud potřebujete poslat 100 k sátů příteli, zvažte převod o něco vyšší částky, abyste se této heuristice vyhnuli. Stejně tak se snažte nevytvářet devizové výstupy, které jsou neúměrně vysoké vzhledem k provedené platbě, protože by to také mohlo prozradit, který z výstupů představuje devizu.
A konečně, pokud provádíte transakce s bitcoiny pravidelně, ujistěte se, že je nevysíláte vždy ve stejnou dobu. Rozložením vysílání vašich transakcí v průběhu dne a týdne zabráníte tomu, aby vnější pozorovatelé měli možnost odhalit časový vzorec založený na časovém pásmu, který by mohl posílit jejich analýzu.
Kromě všech těchto osvědčených postupů, které je třeba používat každý den, existují ještě účinnější metody, jak zcela přerušit sledovatelnost vašich bitcoinů. Mezi ně patří samozřejmě transakce coinjoin, na které se podrobně podíváme v následující části.
Porozumění transakcím coinjoin
Co je to transakce coinjoin?
Po prostudování základů ochrany soukromí se nyní podíváme na sofistikovanější techniky zaměřené na aktivní ochranu důvěrnosti, zejména na rozdělení historie bitcoinů. V příští části se budeme zabývat celou řadou drobných technik, ale nejprve bych vám rád pověděl o coinjoinu.
Coinjoin je často považován za nejúčinnější metodu ochrany soukromí uživatelů Bitcoinu. Ale co přesně je coinjoin transakce? Pojďme to zjistit.
Základní principy funkce coinjoin
Coinjoin je technika pro prolomení sledování bitcoinů v blockchainu. Je založena na kolaborativní transakci se specifickou strukturou stejného jména: coinjoin transakce.
Jak jsme viděli v prvních částech tohoto kurzu, transakce Bitcoinu jsou všem uživatelům známy prostřednictvím jejich uzlu. Je proto snadné zkontrolovat řetězec elektronického podpisu každé mince a sledovat její historii. To znamená, že všichni uživatelé se mohou pokusit analyzovat transakce ostatních uživatelů. V důsledku toho je anonymita na úrovni transakcí nemožná. Na úrovni individuální identifikace je však anonymita zachována. Na rozdíl od konvenčního bankovního systému, kde je každý účet spojen s osobní identitou, jsou v Bitcoinu finanční prostředky spojeny s páry kryptografických klíčů (nebo skriptů), což uživatelům nabízí určitou formu pseudonymity za kryptografickými identifikátory.
Důvěrnost bitcoinu je narušena, pokud jsou vnější pozorovatelé schopni spojit konkrétní UTXO s identifikovanými uživateli. Jakmile je toto spojení vytvořeno, je možné sledovat jejich transakce a analyzovat jejich bitcoinovou historii. Coinjoin je právě technika vyvinutá k prolomení sledovatelnosti UTXO, aby uživatelům Bitcoinu nabídla určitou vrstvu důvěrnosti na úrovni transakcí.
Coinjoins posilují důvěrnost uživatelů bitcoinu tím, že externím pozorovatelům komplikují analýzu řetězce. Jejich struktura umožňuje sloučit více mincí od různých uživatelů do jediné transakce, čímž se rozmazávají hranice a ztěžuje se určení vazeb mezi vstupními a výstupními adresami.
Je důležité si uvědomit, že cílem transakce coinjoin je přerušit historii mince. Na rozdíl od toho, co si možná myslíte, tato technika neposkytuje trvalou anonymitu ani definitivně neblokuje sledování bitcoinů. Cílem transakce coinjoin je pouze přerušit historii v okamžiku, kdy je transakce coinjoin provedena. Před touto operací i po ní však mince zůstává vystavena stejným rizikům z hlediska důvěrnosti.
Jak fungují koincidenční spoje?
Princip coinjoin je založen na kolaborativním přístupu: několik uživatelů, kteří chtějí smíchat své bitcoiny, vloží stejné částky jako vstupy do stejné transakce. Tyto částky jsou pak přerozděleny na výstupech stejné hodnoty každému uživateli.
Na konci transakce je nemožné přiřadit konkrétní výstup k uživateli známému jako vstup. Mezi vstupy a výstupy neexistuje žádná přímá vazba, čímž se přeruší vazba mezi uživateli a jejich UTXO a také historie jednotlivých částí.
Vezměme si příklad Alice. Chce poslat přibližně 100 000 sátů své sestře Evě k narozeninám. Alice však nechce, aby Eva mohla sledovat historii jejích transakcí, protože nechce prozradit, kolik bitcoinů má a jak je získala. Za tímto účelem se Alice rozhodne prolomit svou historii UTXO transakcí coinjoin. Domluví se s Bobem, Charlesem, Davidem a Frankem, že provedou společnou transakci:
- Alice, Bob, Charles, David a Frank odevzdají jako vstupy do transakce každý UTXO 105 000 sátů (s 5 000 sáty na poplatky za těžbu):
- Na oplátku za spotřebování těchto vstupů generuje každý z nich prázdnou adresu, aby vytvořil pět identických výstupů po 100 000 satech. Každý z nich načte jeden výstup:
- Alice se ocitne u UTXO o 100 000 satech, jehož historie je zpřeházená. Toto UTXO použije v nové transakci a pošle částku Evě k narozeninám:
- Pokud se Eva pokusí tuto transakci analyzovat a získat z ní informace, bude konfrontována s transakcí coinjoin, do které jsou zapojeni Alice, Bob, Charles, David a Frank. Protože není schopna rozlišit, který vstup patří komu kvůli jednotnosti částek, nemůže Eva dohledat Alicinu historii UTXO ani určit, kolik bitcoinů vlastní její sestra a jak je získala:
V tomto případě Alice použila techniku coinjoin ke zvýšení důvěrnosti s ohledem na retrospektivní analýzu. Alice se tak vlastně chrání před možnou analýzou Evy, která by začala od konkrétní transakce a postupovala zpětně přes historii UTXO. Tato ochrana proti analýze od současnosti do minulosti je známá jako retrospektivní anonset. Podrobněji se tímto konceptem budeme zabývat v závěrečných kapitolách této části.
Metoda coinjoin však nabízí také možnost posílení důvěrnosti při analýze z minulosti do současnosti, tzv. prospektivní anonset. Vraťme se k našemu příkladu, kdy Alice poslala Evě k narozeninám 98 000 sátů, ale s obrácenými rolemi. Nyní si představme, že je to Eva, kdo se obává o své soukromí. Alice by totiž mohla být v pokušení sledovat minci, kterou poslala Evě, aby z ní získala informace. Eve by klidně mohla konsolidovat tento UTXO, který právě obdržela, se všemi svými ostatními UTXO, což by Alici mohlo prozradit množství bitcoinů, které má ve své peněžence. Aby se tomu Eve vyhnula, může také prolomit historii mince, kterou právě obdržela:
- Eve, Grace, Mallory, Oscar a Victor vložili jako vstup do transakce s bitcoiny UTXO v hodnotě 98 000 sátů:
- Na oplátku za spotřebování těchto vstupů poskytne každý uživatel prázdnou adresu, která se použije k vytvoření 5 výstupů o 97 500 dokonale stejných satech. Každý uživatel dostane jeden výstup:
- Eve má nyní UTXO 97 500 satelitů, jejichž historie byla porušena. Může jej bez obav použít k provádění budoucích transakcí. Pokud se totiž Alice pokusí sledovat bitcoiny, které poslala Evě, bude konfrontována s transakcí coinjoin. Nebude schopna určit, které odchozí UTXO patří Evě. Analýza se stane nemožnou:
V prvním příkladu jsme viděli, jak může coinjoin chránit soukromí místnosti ve vztahu k její minulosti, a ve druhém příkladu, jak může také zabezpečit historii místnosti ve vztahu k její budoucnosti. Proto jsem zmínil, že coinjoin je třeba vnímat jako jednorázovou událost, která rozděluje část historie oběma směry:
Směšovač, spojka, směšovač... Jaký je v tom rozdíl?
Coinjoiny jsou někdy označovány jako "mixéry", což je termín, který někteří bitcoináři odmítají, protože se obávají, že by mohl být zaměňován s custodial mixéry. Domnívám se však, že tato obava je neopodstatněná, protože v matematickém kontextu coinjoin ztělesňuje právě pojem mixování.
V obecné matematice se mícháním rozumí vlastnost dynamického systému, kdy se po určité době mohou teoreticky všechny části počátečního prostoru smísit s jakoukoli jinou částí. Míchání znamená, že poloha částice nebo stav systému se vyvíjí tak, že jeho budoucí rozložení je nezávislé na jeho počátečním rozložení, a dosahuje tak stavu, kdy jsou vlastnosti počátečního stavu rovnoměrně rozloženy v celém prostoru systému. Přesně to se děje při spojení mincí s bitcoiny. Podle mého názoru je tedy coinjoin skutečně metodou míchání mincí.
Na druhou stranu je důležité odlišit coinjoin od shufflerů. Shuffler je služba, kam uživatelé posílají své bitcoiny k zamíchání. Tyto služby byly populární v průběhu roku 2010, ale jejich používání pokleslo kvůli dvěma hlavním nevýhodám ve srovnání s coinjoin:
- Vyžadují, aby se uživatelé během procesu směšování vzdali úschovy svých prostředků, což je vystavuje riziku krádeže;
- Neexistuje žádná záruka, že mixér nebude zaznamenávat podrobnosti o transakcích nebo dokonce tyto informace prodávat společnostem zabývajícím se analýzou řetězců.
Dnešní uživatelé proto dávají přednost coinjoinu, protože jim umožňuje zachovat si plnou kontrolu nad svými prostředky v průběhu celého procesu. Účastníkům coinjoinu nehrozí, že by jim ostatní zúčastněné strany odcizily jejich bitcoiny. V další kapitole se podíváme, jak je to všechno možné.
Zerolink a chaumian coinjoins
Soukromí, které poskytuje coinjoin, je dáno velikostí skupiny, v níž je náš kus skryt. To znamená najít co nejvíce účastníků. Je naprosto možné vytvořit coinjoin ručně, s uživateli, které jsme sami našli, ale je to složitý proces, který vám žádné velké anonce nepřinese.
To je důvod, proč se na Bitcoinu vyvinuli koordinátoři coinjoin. Jejich úkolem je zprostředkovat kontakt mezi jednotlivými uživateli a předávat informace potřebné k dokončení společné transakce.
Jak ale můžeme zajistit, aby koordinátor nikdy neměl v rukou bitcoiny uživatelů, a navzdory tomu, že je osobou, která vytváří transakci coinjoin, jak můžeme zajistit, aby nemohl propojit vstupy a výstupy uživatelů, což by mohlo představovat únik důvěrnosti?
Chaumovy slepé podpisy
Moderní implementace coinjoinu používají slepé podpisy Davida Chauma, aby se zabránilo úniku informací. Podívejme se, jak tyto slepé podpisy fungují.
Chaumovy slepé podpisy jsou formou digitálního podpisu, při níž vystavitel podpisu nezná obsah zprávy, kterou podepisuje. Podpis však lze následně ověřit na základě původní zprávy. Tuto techniku vyvinul v roce 1983 kryptograf David Chaum.
Vezměme si příklad společnosti, která chce ověřit důvěrný dokument, například smlouvu, aniž by prozradila jeho obsah. Společnost použije proces maskování, který kryptograficky transformuje původní dokument reverzibilním způsobem. Takto upravený dokument je zaslán certifikační autoritě, která jej opatří slepým podpisem, aniž by znala základní obsah. Po obdržení podepsaného dokumentu společnost podpis odmaskuje. Výsledkem je původní dokument ověřený podpisem autority, aniž by autorita kdy viděla původní obsah.
Chaumovy slepé podpisy tedy mohou osvědčit pravost dokumentu, aniž by byl znám jeho obsah, a zaručit tak důvěrnost dat uživatele i integritu podepsaného dokumentu.
Chaumian coinjoins
Takzvané "chaumovské" coinjoiny kombinují použití sítě Tor a slepých podpisů Davida Chauma, které zajišťují, že koordinátor nemůže zjistit, který výstup patří kterému uživateli.
Proces konstrukce transakce coinjoin zahrnuje tři hlavní fáze: registraci vstupu, registraci výstupu a podpis transakce. Podívejme se na tento proces na příkladu Alice, jednoho z účastníků coinjoinu. Všichni ostatní účastníci postupují stejně jako Alice, každý sám za sebe.
**Krok 1: Vstupní registrace
- Alice předá koordinátorovi adresu UTXO, kterou si přeje použít jako vstup pro transakci, a také maskovanou adresu pro příjem, kterou si přeje použít jako výstup pro příjem svých bitcoinů. Koordinátor tedy nemá možnost znát Alicinu adresu. Vidí pouze její maskovanou verzi:
- Koordinátor zkontroluje platnost vstupů a poté podepíše maskovanou adresu Alice svým soukromým klíčem. Slepý podpis vrátí Alici:
Krok 2: Registrace výstupů
- Alice může odmaskovat svou adresu, nyní podepsanou soukromým klíčem koordinátora. Naváže nové spojení pod jinou identitou Tor. Koordinátor nemůže identifikovat, že se pod touto novou identitou připojuje právě Alice:
- Alice pošle odmaskovanou adresu a podpis koordinátorovi (který stále neví, že je to Alice):
Krok 3: Podpis transakce
- Stejným způsobem koordinátor získává nezamaskované výstupy od všech účastníků. Díky přidruženým podpisům může zkontrolovat, zda byl každý anonymně zaslaný výstup předem podepsán jeho soukromým klíčem, a tím zaručit jejich legitimitu. Poté je připraven sestavit transakci coinjoin a odeslat ji účastníkům k podpisu:
- Alice, stejně jako ostatní účastníci, kontroluje, zda jsou její vstupy a výstupy správně zahrnuty do transakce sestavené koordinátorem. Pokud je vše vyhovující, odešle koordinátorovi podpis, který odemkne její vstupní skript:
- Po shromáždění podpisů od všech účastníků coinjoinu může koordinátor transakci odvysílat v síti Bitcoin, aby mohla být přidána do bloku.
V tomto systému není koordinátor schopen propojit vstup s konkrétním výstupem. Navíc si nemůže přivlastnit prostředky účastníků, protože nikdy nemá přístup k soukromým klíčům potřebným k odemčení jejich UTXO. Po celou dobu procesu, až do konce kroku 3, také nemá přístup k podpisům. Když Alice a ostatní účastníci podepíší globální transakci, po kontrole, že je vše v pořádku, koordinátor již nemůže transakci včetně výstupů měnit, aniž by ji zneplatnil. Tím je koordinátorovi zabráněno v krádeži bitcoinů.
Konečně, při registraci svého výstupu v transakci si uživatel coinjoinu přeje mít podobné záruky jako občan hlasující ve volbách. Mezi veřejným a soukromým aspektem těchto akcí existuje dualita. Na jedné straně je tu to, co chcete udržet soukromé: u voliče nechcete, aby byl jeho hlasovací lístek spojen s jeho identitou; u uživatele coinjoin nechcete, aby byl jeho výstup spojen s jeho vstupem. Pokud se totiž koordinátorovi nebo kterékoli jiné straně podaří vytvořit spojení mezi vstupem a výstupem, coinjoin ztrácí veškerý zájem. Jak bylo vysvětleno výše, coinjoin musí fungovat jako zlom v historii mince. K tomuto zastavení dochází právě z důvodu nemožnosti spojit konkrétní vstup s konkrétním výstupem v transakci coinjoin (prospektivní anonset) a naopak (retrospektivní anonset).
Na druhou stranu je tu veřejný aspekt: volič si chce být jistý, že jeho hlasovací lístek je zahrnut do volební urny; podobně si chce být uživatel coinjoinu jistý, že jeho výstup je zahrnut do transakce coinjoinu. Účastníci coinjoinu totiž musí být bezpodmínečně schopni ověřit přítomnost svého výstupu před podpisem transakce, jinak by koordinátor mohl prostředky ukrást.
Právě tyto dva veřejné a soukromé aspekty, umožněné použitím slepých podpisů Davida Chauma, zaručují účastníkům Chaumových coinjoins, že jejich bitcoiny nebudou ukradeny a že jejich prostředky nebude možné vystopovat.
Kdo vymyslel koncept coinjoin?
Těžko s jistotou říci, kdo jako první představil myšlenku coinjoinu v Bitcoinu a kdo přišel s nápadem použít v této souvislosti slepé podpisy Davida Chauma. Často se má za to, že to byl Gregory Maxwell, kdo se o tom poprvé zmínil ve zprávě na BitcoinTalk v roce 2013 :
*"Použití Chaumových slepých podpisů: Uživatelé se přihlásí a poskytnou vstupy (a vymění si adresy), jakož i kryptograficky zaslepenou verzi adresy, na kterou chtějí poslat své soukromé části; server tokeny podepíše a pošle je zpět. Uživatelé se znovu anonymně připojí, odmaskují své výstupní adresy a pošlou je zpět serveru. Server vidí, že všechny výstupy byly jím podepsány a že tedy všechny výstupy pocházejí od platných účastníků. Později se lidé znovu připojí a přihlásí Maxwell, G. (2013, 22. srpna). CoinJoin: Bitcoin privacy for the real world (Soukromí bitcoinů pro reálný svět). Fórum BitcoinTalk. https://bitcointalk.org/index.php?topic=279249.0
Existují však i další dřívější zmínky, a to jak o Chaumových signaturách jako součásti míchání, tak i o coinjoinech. V červnu 2011 představil Duncan Townsend na BitcoinTalk mixér, který používá Chaumovy podpisy způsobem dosti podobným moderním chaumovským coinjoinům.
Ve stejném vlákně nalezneme zprávu od hashcoinu v reakci na Duncana Townsenda pro zlepšení jeho mixéru. Proces popsaný v této zprávě je přesně tím, o čem coinjoiny jsou. Zmínku o podobném systému najdeme také ve zprávě od Alexe Mizrahiho z roku 2012, kdy radil tvůrcům Tenebrixu, jednoho z prvních altcoinů, který posloužil jako základ pro pozdější vytvoření Litecoinu. Dokonce i samotný termín "coinjoin" prý nevymyslel Greg Maxwell, ale pochází z nápadu Petera Todda.
Zerolink
Zerolink je komplexní směšovací protokol, který zahrnuje Chaumianova spojení a různé strategie na ochranu anonymity uživatelů před několika formami analýzy řetězců, zejména minimalizací chyb spojených se správou portfolia. Tento protokol představili nopara73 a TDevD v roce 2017.
Jak už název napovídá, principem Zerolink je vytváření coinjoin transakcí, které zajišťují, že vazby mezi vstupy a výstupy nelze vysledovat. Toho je dosaženo tím, že je zajištěno, že všechny výstupy mají naprosto identické částky.
Důležitým preventivním opatřením společnosti Zerolink je udržovat nesmíšené UTXO zcela oddělené od smíšených UTXO pomocí samostatných sad kryptografických klíčů nebo dokonce samostatných portfolií. Tím se odlišuje peněženka "pre-mix", určená pro díly před smícháním, od peněženky "post-mix", vyhrazené pro díly, které byly smíchány.
Toto důsledné oddělení UTXO slouží především k tomu, aby se zabránilo náhodnému spojení smíšeného UTXO s nesmíšeným UTXO. Pokud totiž k takovému spojení dojde, účinnost coinjoinu na smíšeném UTXO se zruší, aniž by si toho byl uživatel vědom, čímž je ohrožena důvěrnost UTXO, o jehož historii si myslel, že ji porušil. K těmto vazbám může dojít buď opětovným použitím adresy při zajištění smíšeného UTXO nesmíšeným, nebo aplikací CIOH (Common-Input-Ownership Heuristic), pokud uživatel spotřebovává smíšené a nesmíšené UTXO jako vstupy téže transakce. Oddělením předsmíšených a smíšených portfolií se vyhneme takovým náhodným asociacím a ochráníme uživatele před neúmyslnými chybami.
Toto rozdělení také nabízí možnost uplatnit odlišná pravidla pro portfolia před smícháním a po smíšení na úrovni portfoliového softwaru. Například v postmixovém portfoliu může software zakázat slučování UTXO do vstupů, aby se zabránilo použití CIOH, které by ohrozilo anonset uživatele. Je také možné standardizovat používání skriptů a transakčních možností (jako je například hlášení RBF), aby se zabránilo identifikaci podle otisků peněženky.
V současné době je Whirlpool jedinou implementací coinjoinu, která důsledně uplatňuje protokol Zerolink. V příští kapitole se podíváme na různé existující implementace coinjoin a na výhody a nevýhody každé z nich.
Implementace funkce Coinjoin
*V roce 2024 jsme svědky velkých změn v nástrojích, které mají uživatelé, kteří chtějí provádět coinjoiny na Bitcoinu, k dispozici. V současné době se nacházíme v bodě zlomu a trh s coinjoiny prochází zásadní restrukturalizací. Tato kapitola bude jistě časem aktualizována
V současné době existují v Bitcoinu především 3 různé implementace coinjoinu:
- Whirlpool;
- Wabisabi;
- JoinMarket.
Každá z těchto implementací má za cíl prolomit historii UTXO prostřednictvím transakcí coinjoin. Jejich mechanismy se však značně liší. Je proto nezbytné pochopit, jak každá z nich funguje, abyste si mohli vybrat možnost, která nejlépe vyhovuje vašim potřebám.
JoinMarket
Společnost JoinMarket, kterou v roce 2015 založili Adam Gibson a Chris Belcher, se od ostatních implementací coinjoin jasně odlišuje svým jedinečným modelem propojování uživatelů. Systém je založen na P2P směnném trhu, kde někteří uživatelé, "tvůrci", dávají k dispozici své bitcoiny k míchání, zatímco jiní, "příjemci", tyto peníze využívají k coinjoinům výměnou za poplatek.
V tomto modelu "tvůrci" dávají své bitcoiny k dispozici "příjemcům" a za svou službu dostávají poplatek. "Takers" zase platí za použití bitcoinů "makers" k provádění svých vlastních transakcí coinjoin. Poplatky za služby se liší podle zastávané role: "Tvůrci" kumulují poplatky za nabízení likvidity, zatímco "příjemci" poplatky platí. Trh funguje volně, bez jakýchkoli podmínek používání.
Jednou z hlavních nevýhod JoinMarketu je složitost jeho používání, které vyžaduje určitou míru komfortu při práci s terminály. Zatímco pro zkušeného uživatele tato složitost nepředstavuje překážku, pro širokou veřejnost může omezovat přístup. Nedávné zavedení webového rozhraní s názvem JAM však jeho používání poněkud usnadnilo.
Zdroj: JAM
Hlavní překážkou však zůstává technická bariéra. V ekosystému coinjoin, kde je důvěrnost posílena počtem účastníků, má jakékoli omezení snižující dostupnost přímý vliv na dostupnou likviditu, která je rozhodujícím faktorem efektivity mixu. Bitcoin, který je již výklenkem v oblasti finančních transakcí, vnímá využití coinjoinů jako svůj podvýklenek a JoinMarket představuje jeho ještě specializovanější část, což tedy omezuje jeho potenciál zvyšovat anonsety uživatelů.
I přes svůj inovativní model propojení P2P pro coinjoinery má JoinMarket některé významné nevýhody, zejména pokud jde o transakční strukturu. Na rozdíl od jiných implementací, jako je Whirlpool, JoinMarket nezaručuje dokonalou rovnost mezi výstupy a je možné vysledovat deterministické vazby mezi vstupy a výstupy. Navíc nemá žádné nástroje, které by zabránily opětovnému smíchání již smíchaných částí, což by mohlo ohrozit důvěrnost, o kterou uživatelé usilují.
A konečně, i když je koncept JoinMarket zajímavý, zejména pro zájemce o dynamický trh s likviditou, jeho strukturální nedostatky a technická složitost jej podle mého názoru činí méně zajímavým jak pro nováčky, tak pro odborníky, kteří hledají implementaci coinjoinu.
Wabisabi
Wabisabi je další implementací coinjoinu s přístupem, který centralizuje koordinaci transakcí. Tento model vymysleli Ádám Ficsór (nopara73), Yuval Kogman, Lucas Ontivero a István András Seres v roce 2021 a následující rok byl začleněn do softwaru Wasabi 2.0. Wabisabi je právě evolucí modelu coinjoin softwaru Wasabi, který byl spuštěn v roce 2018.
Ke konci roku 2010 společnost Wasabi přijala radikálně odlišnou strukturu transakcí coinjoin než společnost Whirlpool. Společnost Wasabi používala velmi rozsáhlé transakce coinjoin zahrnující desítky účastníků, aby zvýšila anonsety svých účastníků. Naproti tomu Whirlpool se rozhodl pro více malých transakcí, což umožnilo exponenciální růst anonsetů s každým cyklem.
Metody správy výměny rovněž odlišovaly obě implementace. U Whirlpoolu byla cizí měna vyloučena a izolována od UTXO před cykly coinjoin díky TX0, což je koncept, který blíže vysvětlím v další kapitole. U Wasabi naopak devizové prostředky tvořily jeden z výstupů transakce coinjoin a udržovaly deterministické vazby mezi určitými vstupy a výstupy.
Wasabi ve verzi 2.0 přizpůsobilo svůj přístup k coinjoins přístupu společnosti Whirlpool. Přestože transakce coinjoin zůstávají velmi rozsáhlé, je nyní možné řetězit několik po sobě jdoucích cyklů podle modelu Whirlpool. Zvláštní pozornost byla věnována také řízení směnného kurzu: na rozdíl od verze Wasabi 1.0, kde byl směnný kurz přímo vázán na vstupy od uživatelů, se Wabisabi snaží rozdělit směnný kurz na několik malých částek, rozdělených na stejné nominální hodnoty pro všechny účastníky.
Ukažme si to na zjednodušeném příkladu, který zahrnuje pouze 2 uživatele: Alice si přeje smíchat 115 000 satelitů a Bob 210 000 satelitů. Pomineme-li poplatky, s Wasabi 1.0 by transakce coinjoin vygenerovala 3 výstupy po 100 000 satech plus 1 výměnu 15 000 satech pro Alici a 1 výměnu 10 000 satech pro Boba. Výstupy z výměny by byly stále propojeny se vstupy:
Podle Wabisabi by stejná transakce vytvořila 3 výstupy po 100 000 sázích a 5 výstupů po 5 000 sázích, čímž by se výměna rozptýlila, takže by ji nebylo možné přímo spojit s konkrétním vstupem:
Osobně se domnívám, že devizové řízení společnosti Wabisabi představuje několik rizik, která by mohla ohrozit jeho účinnost z hlediska důvěrnosti:
- Pokud uživatel přispěje částkou UTXO, která je výrazně vyšší než částky ostatních účastníků, nevyhnutelně skončí s výměnnou částkou, která bude spojena s jeho vstupem. To je v rozporu s původním cílem protokolu, kterým je eliminovat všechny identifikovatelné výměny;
- Zmnožení nominálních hodnot s cílem rozmělnit směnu může paradoxně poškodit účinnost směny. Tento proces může vést ke snížení počtu anoncí u některých výstupů, protože se stávají snadněji identifikovatelnými;
- Tato metoda také generuje UTXO s nízkou hodnotou, které pro uživatele představují problém při správě. Tyto malé UTXO, pokud se stanou příliš nákladnými na vydání v poměru k jejich hodnotě, se mohou stát "prachem". Tento jev vede uživatele ke sloučení několika UTXO do vstupů pro budoucí transakce nebo k jejich konsolidaci. V obou případech to kvůli CIOH může buď snížit získané anonce, nebo zcela zrušit výhody důvěrnosti získané počátečním spojením mincí.
Na rozdíl od společnosti Whirlpool, která používá protokol ZeroLink zajišťující přísné oddělení UTXO před smícháním a po smíšení, společnost Wabisabi toto přísné oddělení nedodržuje. U některých zákazníků společnosti Wasabi se také objevily problémy s opakovaným používáním adres, které jsou pro uživatele samozřejmě velmi škodlivé.
Ve verzi Wasabi 2.0 byla zavedena nová politika poplatků za připojení mincí. Od nynějška jsou koordinátorské poplatky stanoveny na 0,3 % pro UTXO nad 0,01 bitcoinu, zatímco pro menší UTXO jsou tyto poplatky nabízeny v plné výši. Kromě toho jsou remixy pro tyto menší UTXO zdarma, ačkoli poplatky za těžbu platí uživatel i nadále za všechny transakce, včetně remixů.
To je v kontrastu s politikou společnosti Whirlpool, kde poplatky zůstávají pevné bez ohledu na velikost získaných anonsetů. U Wasabi 2.0 jsou sice zrušeny poplatky koordinátora za malé UTXO, ale uživatel stále musí platit poplatky za těžbu všech transakcí, včetně remixů.
V době, kdy píšu tyto řádky, se používání Wabisabi v důsledku nedávných událostí výrazně zkomplikovalo. Po zatčení zakladatelů peněženky Samourai oznámila společnost zkSNACKs, která financuje a řídí vývoj Wasabi, že její služba coinjoin koordinátora bude k 1. červnu 2024 ukončena. Tento koordinátor, který byl na Wasabi nastaven jako výchozí, byl zodpovědný za drtivou většinu likvidity.
Po ukončení činnosti tohoto hlavního koordinátora se nyní uživatelé musí připojit k novým, nezávislým koordinátorům. Tato změna vyvolává řadu obav: na jedné straně noví koordinátoři nemusí mít dostatečnou likviditu, což snižuje účinnost coinjoins z hlediska důvěrnosti. Na druhé straně existuje riziko, že narazíte na zlomyslného koordinátora. Tato situace přináší významná nová rizika pro ty, kteří chtějí používat Wabisabi.
Kromě technických problémů vyvolává rozhodnutí společnosti zkSNACKs, která stojí za projektem Wasabi, využít k filtrování účastníků coinjoinu služeb společnosti zabývající se analýzou řetězců vážné etické a strategické otázky. Původní myšlenkou bylo zabránit používání coinjoinů na Wasabi zločinci, což se může zdát legitimní. Vyvolává však paradox: platit poplatky koordinátorovi, jehož hlavním posláním je posílit důvěrnost uživatelů, jen proto, aby financoval společnost, jejímž cílem je stejnou důvěrnost ohrozit.
Ještě více znepokojující je princip filtrování, který je v radikálním rozporu s filozofií Bitcoinu, který nabízí otevřený finanční systém bez cenzury. Ačkoli se může zdát oprávněné chtít vyloučit trestnou činnost, toto filtrování by mohlo postihnout i jednotlivce, jejichž jednání, ačkoli je v určitých souvislostech klasifikováno jako nezákonné, by mohlo být morálně ospravedlnitelné nebo společensky prospěšné. Tuto dichotomii dokonale ilustruje příklad Edwarda Snowdena: některé vlády ho za jeho odhalení považují za zločince, jiné ho vnímají jako whistleblowera, který jednal ve veřejném zájmu. Tato složitost podtrhuje potenciální nebezpečí filtrování, které, ačkoli má dobré úmysly, může v konečném důsledku ohrozit práva a bezpečnost oprávněných uživatelů. Mohl jsem také zmínit aktivisty a novináře, kteří jsou v některých autoritářských režimech pronásledováni.
Jak jste již jistě pochopili, u Bitcoinu dávám jednoznačně přednost modelu Whirlpool pro spojování mincí. Tento systém vyniká svou přísností a nabízí vynikající záruky důvěrnosti. Jako jediný také nabízí mix, který je v matematickém kontextu považován za dokonalý. Podle mého názoru představuje tento model budoucnost coinjoins na Bitcoinu. Vyzývám vás, abyste se tímto modelem podrobněji zabývali v následující kapitole.
Jak funguje společnost Whirlpool
Whirlpool se od ostatních metod coinjoin liší použitím transakcí "ZeroLink", které zajišťují, že mezi všemi vstupy a výstupy neexistuje žádné možné technické spojení. Této dokonalé kombinace je dosaženo díky struktuře, v níž každý účastník přispívá stejným množstvím vstupů (s výjimkou poplatků za těžbu) a generuje výstupy v naprosto stejné výši.
Tento restriktivní přístup ke vstupům dává transakcím coinjoin společnosti Whirlpool jedinečnou vlastnost: naprostou absenci deterministických vazeb mezi vstupy a výstupy. Jinými slovy, každý výstup má stejnou pravděpodobnost, že bude přiřazen kterémukoli účastníkovi, ve vztahu ke všem ostatním výstupům v transakci.
Jak funguje společnost Whirlpool
Zpočátku byl počet účastníků v každém coinjoinu Whirlpool omezen na 5, přičemž 2 účastníci byli noví a 3 remixéři (tyto pojmy vysvětlíme později). Nárůst transakčních poplatků na řetězci zaznamenaný v roce 2023 však přiměl Samouraiovy týmy k přehodnocení modelu s cílem zvýšit důvěrnost a zároveň snížit náklady. S ohledem na situaci na trhu s poplatky a počet účastníků tak nyní koordinátor může organizovat coinjoiny zahrnující 6, 7 nebo 8 účastníků. Tato vylepšená sezení jsou známá jako "Surge Cycles". Je důležité si uvědomit, že bez ohledu na konfiguraci se coinjoinů Whirlpool účastní vždy pouze 2 noví účastníci.
Transakce Whirlpool se tedy vyznačují stejným počtem vstupů a výstupů, které mohou být :
- 5 vstupů a 5 výstupů;
- 6 vstupů a 6 výstupů;
- 7 vstupů a 7 výstupů;
- 8 vstupů a 8 výstupů.
Model společnosti Whirlpool je založen na malých transakcích coinjoin. Na rozdíl od Wabisabi a JoinMarket, kde je robustnost anonsetů založena na objemu účastníků v jednom cyklu (nebo na několika málo cyklech), Whirlpool spoléhá na posloupnost několika malých cyklů.
V tomto modelu uživatelé platí poplatky pouze při prvním vstupu do fondu, což jim umožňuje účastnit se mnoha remixů bez dalších nákladů. Noví účastníci platí poplatky za těžbu remixérům.
S každým dalším spojením mincí, kterého se daný kus účastní, a s každým dalším spojením mincí, se kterými se setkal v minulosti, bude počet anonsetů exponenciálně růst. Cílem je využít těchto volných remixů, které při každém svém výskytu přispívají k posílení hustoty anonsetů spojených s každou smíšenou skladbou.
Whirlpool byl navržen s ohledem na dva důležité požadavky:
- Dostupnost implementace na mobilních zařízeních, protože Samourai Wallet je především aplikace pro chytré telefony;
- Rychlé remixovací cykly podporující výrazné zvýšení počtu anonsetů.
Těmito požadavky se řídili vývojáři peněženky Samourai při navrhování systému Whirlpool a omezili počet účastníků na jeden cyklus. Příliš malý počet by ohrozil efektivitu spojování mincí a drasticky snížil počet anonsetů vygenerovaných za cyklus, zatímco příliš velký počet by způsobil problémy se správou mobilních aplikací a ztížil by průběh cyklu.
A konečně, v systému Whirlpool není potřeba mít vysoký počet účastníků na jeden coinjoin, protože anonsety se provádějí na základě kumulace několika coinjoin cyklů. Nejdůležitější zásadou je zde homogenita UTXO všech účastníků, protože ta zajišťuje dokonalé promíchání, a tedy plný užitek z cyklů míchání a remixování.
Coinjoin pools a poplatky
Aby tyto vícenásobné cykly zvýšily anonce smíšených částí, je třeba určitý rámec pro omezení množství použitých UTXO. Whirlpool definuje různé pooly.
Pool představuje skupinu uživatelů, kteří se chtějí smíchat a kteří se dohodnou na množství UTXO, které se má použít k optimalizaci procesu spojování mincí při zachování dokonalé homogenity dílů. Každý pool určuje pevné množství UTXO, které musí uživatel dodržet, aby se mohl zúčastnit. Chcete-li tedy provádět coinjoiny s Whirlpoolem, musíte si vybrat pool. V současné době jsou k dispozici následující pooly:
- 0.5 bitcoinů ;
- 0.05 bitcoin ;
- 0.01 bitcoin ;
- 0.001 bitcoin (= 100 000 sats).
Když vstoupíte do poolu se svými bitcoiny, budou rozděleny tak, aby generovaly UTXO, které jsou dokonale homogenní s UTXO ostatních účastníků poolu. Každý pool má svůj maximální limit, takže v případě částek přesahujících tento limit budete muset buď provést dva samostatné vstupy do téhož poolu, nebo se přesunout do jiného poolu s vyšší částkou:
| Pool (bitcoin) | Maximální částka za položku (bitcoin) |
|----------------|--------------------------------------|
| 0,5 | 35 |
| 0,05 | 3,5 |
| 0,01 | 0,7 |
| 0,001 | 0,025 |
UTXO je považováno za součást fondu, když je připraveno k začlenění do coinjoinu. To však neznamená, že uživatel ztrácí jeho vlastnictví. Jak jsme viděli v prvních kapitolách této části, prostřednictvím různých cyklů míchání si zachováváte plnou kontrolu nad svými klíči a následně i nad svými bitcoiny. Tím se technika coinjoin liší od ostatních centralizovaných technik míchání.
Chcete-li se připojit k poolu coinjoin, musíte zaplatit poplatek za služby a poplatek za těžbu. Servisní poplatky jsou pro každý pool pevně stanoveny a jsou určeny k odměňování týmů zodpovědných za vývoj a údržbu Whirlpoolu.
Poplatek za službu Whirlpool se platí pouze jednou při vstupu do bazénu. Po připojení se můžete účastnit neomezeného počtu remixů bez dalších poplatků. Zde jsou uvedeny aktuální fixní poplatky za jednotlivé bazény:
| Pool (Bitcoin) | Vstupní poplatek (Bitcoin) |
|----------------|---------------------------------|
| 0,5 | 0,0175 |
| 0,05 | 0,00175 |
| 0,01 | 0,0005 (50 000 satelitů) |
| 0,001 | 0,00005 (5 000 satelitů) |
Tyto poplatky v podstatě fungují jako vstupenka do vybraného poolu bez ohledu na částku, kterou jste vložili do coinjoinu. Ať už tedy vstoupíte do poolu 0,01 s přesně 0,01 BTC nebo 0,5 BTC, poplatky zůstanou v absolutním vyjádření stejné.
Před zahájením spojování Whirlpool si uživatel může vybrat ze dvou strategií:
- Rozhodněte se pro menší fond, abyste minimalizovali náklady na služby, protože víte, že za to získá několik menších UTXO;
- Nebo se rozhodnout pro větší fond, který je ochoten platit vyšší poplatky, jen aby nakonec získal menší počet UTXO s vyšší hodnotou.
Obecně se nedoporučuje slučovat několik smíšených UTXO po cyklech coinjoin, protože by to mohlo ohrozit získanou důvěrnost, zejména kvůli heuristice společného vlastnictví vstupů (CIOH: Common-Input-Ownership-Heuristic). V důsledku toho může mít smysl zvolit větší pool, i když to znamená zaplatit více, aby se zabránilo tomu, že na výstupu bude příliš mnoho UTXO s malou hodnotou. Uživatel musí tyto kompromisy vyhodnotit, aby si vybral fond, kterému dává přednost.
Kromě poplatku za službu je třeba vzít v úvahu také poplatek za těžbu, který
je specifický pro každou transakci s bitcoiny. Jako uživatel Whirlpool
budete muset zaplatit poplatek za těžbu za přípravnou transakci (Tx0) a také za první připojení mince. Všechny další remixy budou díky modelu
Whirlpool založenému na placení nových účastníků zdarma.
Ve skutečnosti jsou v každém spojení Whirlpool 2 uživatelé mezi vstupy novými účastníky. Ostatní vstupy pocházejí od remixérů. V důsledku toho náklady na těžbu pro všechny účastníky transakce nesou tito 2 noví účastníci, kteří pak mohou těžit i z bezplatných remixů:
Díky tomuto systému poplatků se Whirlpool skutečně odlišuje od ostatních
implementací coinjoinu, protože anonce UTXO nejsou úměrné ceně zaplacené
uživatelem. Díky tomu je možné dosáhnout výrazně vyšší úrovně anonymity
zaplacením pouze vstupního poplatku do poolu a poplatku za těžbu 2 transakcí
(Tx0 a počáteční mix).
Je důležité si uvědomit, že uživatel bude muset také zaplatit poplatky za
těžbu, aby si mohl vybrat své UTXO z poolu po dokončení více coinjoinů,
pokud si nezvolil možnost mix to, která poskytuje externí
adresu, která obdrží prostředky přímo z coinjoinu, bez dalších transakcí.
Účty portfolia HD
Chcete-li vytvořit coinjoin přes Whirlpool, musí peněženka vygenerovat
několik samostatných účtů. Na tomto principu funguje protokol ZeroLink. Účet
v kontextu HD (Hierarchical Deterministic) portfolia představuje
část zcela izolovanou od ostatních, přičemž k tomuto oddělení dochází na
úrovni třetí hloubky hierarchie portfolia, tj. na úrovni xpub.
Z peněženky HD lze teoreticky odvodit až 2^(31) různých účtů.
Počáteční účet, který se ve výchozím nastavení používá ve všech bitcoinových
peněženkách, odpovídá indexu 0.
U portfolií přizpůsobených systému Whirlpool se pro potřeby procesu ZeroLink používají 4 účty:
- Účet vkladu označený indexem
0; - Účet špatné banky (neboli "doxxické změny"), označený
indexem
2 147 483 644'; - Účet premix označený indexem
2 147 483 645'; - Účet postmix označený indexem
2 147 483 646.
Každý z těchto účtů plní v procesu spojování mincí určitou funkci, kterou se budeme zabývat v následujících částech.
Všechny tyto účty jsou propojeny s jediným seedem, což uživateli umožňuje obnovit přístup ke všem svým bitcoinům pomocí jeho obnovovací fráze a případně jeho přístupové fráze. Během operace obnovy však musí být software informován o různých použitých indexech účtů.
Podívejme se na jednotlivé fáze spojení Whirlpool coinjoin v rámci těchto účtů.
TX0
Výchozím bodem každého připojení k účtu Whirlpool je vkladový účet. Jedná se o účet, který automaticky použijete při vytvoření nové bitcoinové peněženky. Na tento účet bude třeba připsat bitcoiny, které chcete smíchat.
Tx0" je prvním krokem v procesu míchání společnosti Whirlpool. Jeho účelem je připravit a vyrovnat UTXO pro coinjoin, rozdělit je na jednotky odpovídající množství vybraného poolu, aby bylo zajištěno homogenní míchání. Takto vyrovnané UTXO jsou poté odeslány na účet premix. Pokud jde o rozdíl, který nemůže vstoupit do poolu, je oddělen na zvláštní účet: špatný bank (neboli "doxxic change").
Tato počáteční transakce Tx0 slouží také k zaplacení poplatku za
službu koordinátorovi spojení mincí. Na rozdíl od následujících kroků tato transakce
není kooperativní, takže uživatel musí nést plné náklady na těžbu:
V tomto příkladu transakce Tx0 je vstupní částka 372 000 satelitů z našeho vkladového účtu rozdělena na několik výstupních UTXO,
které se rozdělí takto:
- Částka 5 000 sátů pro koordinátora za poplatky za služby, která odpovídá vstupní částce 100 000 sátů;
- 3 UTXO připravené k míchání, přesměrované na náš účet premix a zaregistrované u koordinátora. Tyto UTXO jsou vyrovnány na
108 000 sátůkaždý, aby se pokryly náklady na těžbu pro jejich budoucí počáteční mix; - Přebytek, který nemůže vstoupit do fondu, protože je příliš malý, se
považuje za toxickou devizu. Je odeslán na její specifický účet. Zde tato
směna činí
40 000 sats; - Nakonec zbývá
3 000 satelitů, které nepředstavují výstup, ale náklady na těžbu potřebné k potvrzeníTx0.
Například zde je skutečný model Whirlpool Tx0 (není můj): edef60744f539483d868caff49d4848e5cc6e805d6cdc8d0f9bdbbaedcb5fc46
Doxické změny
Přebytek, který se nepodařilo začlenit do fondu, zde odpovídající 40 000 sátů, je přesměrován na špatný bankovní účet, známý také jako "doxická výměna", aby bylo zajištěno přísné oddělení od ostatních UTXO v portfoliu.
Tento UTXO je nebezpečný pro důvěrnost uživatele, protože nejenže je stále spojen se svou minulostí, a tedy pravděpodobně s identitou svého vlastníka, ale je také zaznamenán jako patřící uživateli, který provedl coinjoin.
Pokud je tento UTXO sloučen se smíšenými výstupy, ztratí všechny důvěrnosti získané během cyklů coinjoin, zejména kvůli CIOH (Common-Input-Ownership-Heuristic). Pokud je sloučen s jinými doxxickými změnami, hrozí, že uživatel ztratí důvěrnost, protože propojí různé záznamy z coinjoin cyklů. Mělo by se s ní proto zacházet opatrně. Podrobněji se správě těchto doxxic UTXO budeme věnovat v poslední části této kapitoly.
Počáteční směs
Po Tx0 jsou vyrovnané UTXO odeslány na účet premix našeho portfolia, kde jsou připraveny k zavedení do prvního cyklu spojování
mincí, známého také jako "počáteční mix". Pokud, jako v našem příkladu, Tx0 vygeneruje několik UTXO určených ke smíchání, každý z nich bude
začleněn do samostatného počátečního mixu.
Na konci těchto prvních mixů bude účet premix prázdný,
zatímco naše mince, které zaplatily poplatky za těžbu za toto první spojení
mincí, budou upraveny přesně na částku definovanou zvoleným poolem. V našem
příkladu se naše počáteční UTXO ve výši 108 000 sátů sníží
přesně na 100 000 sátů.
Remixy
Po počátečním smíchání jsou prostředky UTXO převedeny na účet postmix. Tento účet shromažďuje již smíchané UTXO a ty, které čekají na remixování. Když je zákazník Whirlpool aktivní, UTXO nacházející se na účtu postmix jsou automaticky k dispozici pro remixy a budou náhodně vybrány pro účast v těchto nových cyklech.
Připomínáme, že remixy jsou pak 100% zdarma: nevyžadují se žádné další poplatky za služby nebo těžbu. Ponechání UTXO na účtu postmix tedy zachovává jejich hodnotu a zároveň zlepšuje jejich anonsety. Proto je důležité umožnit těmto mincím účast v několika cyklech coinjoinu. Nestojí vás to vůbec nic a zvyšuje to úroveň jejich anonymity.
Pokud se rozhodnete utratit smíšené jednotky UTXO, můžete tak učinit přímo z tohoto účtu postmix. Doporučujeme vám, abyste si na tomto účtu ponechávali smíšené UTXO, abyste mohli využívat bezplatných remixů a abyste zabránili jejich opuštění okruhu Whirlpool, což by mohlo snížit jejich důvěrnost.
Jak spravujete své postmixy?
Po spuštění cyklů coinjoin je nejlepší strategií ponechat UTXO na účtu postmix a čekat na jejich budoucí použití. Dokonce je vhodné nechat je remixovat po neomezenou dobu, dokud je nebudete potřebovat utratit.
Někteří uživatelé mohou zvážit převod svých smíšených bitcoinů do peněženky zabezpečené hardwarovou peněženkou. To je možné, ale je důležité důsledně dodržovat doporučení peněženky Samourai, aby nedošlo k ohrožení získané důvěrnosti.
Nejčastější chybou je slučování jednotek UTXO. Abyste se vyhnuli CIOH (Common-Input-Ownership-Heuristic), musíte se vyvarovat kombinování smíšených UTXO s nesmíšenými UTXO ve stejné transakci. To vyžaduje pečlivou správu UTXO v rámci vašeho portfolia, zejména pokud jde o označování.
Pozornost je třeba věnovat také konsolidaci smíšených UTXO. Mírná konsolidace je možná, pokud vaše smíšené UTXO mají významné anonsety, ale tím se nevyhnutelně sníží důvěrnost vašich dílů. Dbejte na to, aby konsolidace nebyly příliš rozsáhlé ani aby nebyly prováděny po nedostatečném počtu remixů s rizikem vytvoření odvoditelných vazeb mezi vašimi UTXO před a po cyklech coinjoin. V případě pochybností o těchto manipulacích je nejlepším postupem nekonsolidovat UTXO po mixu, ale převádět je po jednom do hardwarové peněženky a pokaždé vygenerovat novou prázdnou adresu. Opět nezapomeňte označit každé UTXO, které obdržíte.
Rovněž se nedoporučuje převádět postmixové UTXO do peněženky pomocí skriptů,
které nejsou běžně používány. Pokud například vstoupíte do Whirlpoolu z
multisig peněženky pomocí skriptů P2WSH, je malá šance, že se
smísíte s ostatními uživateli, kteří měli původně stejný typ peněženky.
Pokud své postmixy znovu smícháte do stejné multisig peněženky, úroveň
důvěrnosti vašich smíšených bitcoinů se výrazně sníží. Kromě skriptů
existuje mnoho dalších otisků peněženek, které vám mohou hrát do karet.
Stejně jako u každé transakce s bitcoiny je také důležité, abyste znovu nepoužívali adresu příjemce. Každá nová transakce musí být přijata na nové, prázdné adrese.
Nejjednodušším a nejbezpečnějším řešením je nechat smíšené UTXO v klidu na jejich postmixovém účtu, nechat je remixovat a sáhnout na ně pouze za účelem utrácení. Peněženky Samurai a Sparrow jsou vybaveny dalšími ochranami proti všem těmto rizikům analýzy řetězce. Tyto ochrany vám pomohou vyhnout se chybám.
Jak zvládáte toxické výměny?
Dále si musíte dát pozor na správu doxxic exchange, tedy burzy, která se nedostala do fondu coinjoin. Tyto toxické UTXO, které vznikly použitím Whirlpoolu, představují riziko pro vaše soukromí, protože vytvářejí spojení mezi vámi a uživatelem coinjoinu. Je proto nutné s nimi nakládat opatrně a nekombinovat je s jinými UTXO, zejména se smíšenými UTXO.
Zde je několik strategií, jak je používat:
- Smíchejte je do menších bazénků:** Pokud je váš toxický UTXO dostatečně velký na to, aby se sám vešel do menšího bazénku, zvažte jeho smíchání. To je často nejlepší volba. Nedoporučuje se však slučovat několik toxických UTXO, abyste měli přístup k jednomu poolu, protože by to mohlo propojit vaše různé položky;
- Označte je jako "neutratitelné":** Dalším přístupem je přestat je používat, označit je na vyhrazeném účtu jako "neutratitelné" a prostě je hodit. Tím zajistíte, že je omylem neutratíte. Pokud hodnota bitcoinu vzroste, mohou se objevit nové pooly vhodnější pro vaše toxické UTXO;
- Poskytování darů:** Zvažte poskytnutí darů, byť skromných, vývojářům pracujícím na Bitcoinu a souvisejícím softwaru. Můžete také přispět sdružením, která přijímají BTC. Pokud se vám zdá správa vašich toxických UTXO příliš složitá, můžete se jich jednoduše zbavit a přispět;
- Nákup dárkových karet:** Platformy jako Bitrefill umožňují směnit bitcoiny za dárkové karty, které lze použít u různých obchodníků. To může být způsob, jak se rozloučit s toxickými UTXO, aniž byste přišli o související hodnotu;
- Konsolidace na Monero:** Peněženka Samourai nabízí službu atomické výměny mezi BTC a XMR. To je ideální pro správu toxických UTXO jejich konsolidací na Monero, aniž by byla ohrožena důvěrnost prostřednictvím CIOH, před jejich odesláním zpět na Bitcoin. Tato možnost však může být nákladná z hlediska poplatků za těžbu a prémií kvůli omezení likvidity;
- Poslat je do Lightning Network:** Převedení těchto UTXO do Lightning Network a využití snížených transakčních poplatků může být atraktivní možností. Tato metoda však může odhalit určité informace v závislosti na způsobu používání Lightning, a proto by měla být používána s opatrností.
Jak mohu používat produkt Whirlpool?
Po zatčení zakladatelů peněženky Samourai a zabavení jejich serverů 24. dubna 2024 již nástroj Whirlpool nefunguje, a to ani pro ty, kteří mají vlastní Dojo. Dříve byl k dispozici v peněženkách Samourai Wallet a Sparrow Wallet.
Je však možné, že tento nástroj bude v nadcházejících týdnech v závislosti na výsledcích zkoušek znovu aktivován nebo bude spuštěn jiným způsobem. V každém případě si nemyslím, že trh s bitcoinovými mincemi bude dlouho bez nabídky, protože poptávka po nich existuje. A co víc, jelikož model společnosti Whirlpool je z hlediska důvěrnosti nejpokročilejší, bude v budoucnu jistě modelem volby pro další implementace.
Tento případ a vývoj souvisejících nástrojů bedlivě sledujeme. Můžete si být jisti, že tento vzdělávací kurz budeme aktualizovat, jakmile budou k dispozici nové informace.
V příští kapitole se dozvíme, co jsou to "anonsety", jak se tyto ukazatele počítají a jak nám mohou pomoci odhadnout efektivitu cyklů coinjoin.
https://planb.network/tutorials/privacy/on-chain/coinjoin-dojo-c4b20263-5b30-4c74-ae59-dc8d0f8715c2
Sady anonymity
Poté, co jsme si prostudovali, jak funguje spojování mincí a jaké jsou problémy spojené s efektivním mícháním, se nyní dozvíme, jak měřit jejich účinnost. Jak můžeme určit, zda byl proces coinjoiningu účinný a jaký stupeň anonymity část získala? To zjistíme v této kapitole pomocí sad anonymity neboli "anonsetů".
Připomenutí užitečnosti funkce coinjoin
Užitečnost funkce coinjoin spočívá ve schopnosti vytvořit věrohodnou popíratelnost tím, že svou část vložíte do skupiny nerozlišitelných částí. Cílem této akce je přerušit vazby sledovatelnosti, a to jak z minulosti do přítomnosti, tak z přítomnosti do minulosti.
Jinými slovy, analytik, který zná vaši počáteční transakci (Tx0) na vstupu do cyklů coinjoin, by neměl být schopen s jistotou
identifikovat vaše UTXO na výstupu z cyklů remix (analýza vstupu do cyklu na
výstupu z cyklu).
Naopak analytik, který zná vaše UTXO na výstupu z cyklů coinjoin, nesmí být schopen určit původní transakci na vstupu do cyklů (analýza výstupu z cyklu na vstup do cyklu).
Abychom mohli posoudit, jak obtížné je pro analytika propojit minulost se současností a naopak, musíme kvantifikovat velikost skupin homogenních částí, v nichž se vaše část skrývá. Tato míra nám říká, kolik analýz má stejnou pravděpodobnost. Pokud je tedy správná analýza utopena mezi 3 dalšími analýzami se stejnou pravděpodobností, je úroveň vašeho utajení velmi nízká. Na druhou stranu, pokud se správná analýza nachází v souboru 20 000 stejně pravděpodobných analýz, je vaše část velmi dobře skryta. Velikost těchto skupin představují ukazatele známé jako "anonce".
Porozumění anonsetům
Anonymy se používají jako indikátory pro posouzení stupně důvěrnosti konkrétního UTXO. Přesněji řečeno, měří počet nerozlišitelných UTXO v souboru, který zahrnuje zkoumanou část. Požadavek na homogenní soubor UTXO znamená, že anonsety se obvykle počítají na cyklech coinjoin. Použití těchto ukazatelů je zvláště důležité pro Whirlpool coinjointy, a to vzhledem k jejich homogenitě.
V případě potřeby lze k posouzení kvality koincidenčních spojů použít anonsety. Velký anonset znamená vysokou úroveň anonymity, protože je obtížné rozlišit konkrétní UTXO v homogenním souboru.
existují 2 typy anonsetů:
- Perspektivní anonset ;**
- Retrospektivní anonset.**
Perspektivní anonset
Výhledový anonset udává velikost skupiny, mezi kterou se skrývá UTXO zkoumaný na konci cyklu, vzhledem k UTXO na začátku, tj. počet nerozlišitelných částí přítomných v této skupině. Název tohoto ukazatele je "metrika zaměřená na budoucnost".
Tento ukazatel měří odolnost důvěrnosti místnosti vůči analýze minulosti a současnosti (vstup-výstup).
Tato metrika se používá k odhadu míry ochrany UTXO proti pokusům o rekonstrukci jeho historie od bodu vstupu do bodu výstupu v procesu spojování mincí.
Například pokud se vaše transakce zúčastnila prvního cyklu spojení mincí a
byly dokončeny další dva sestupné cykly, váš budoucí anonset mince bude 13 :
Představme si například, že naše mince má na začátku cyklu spojení mincí
hodnotu 86,871. V praxi to znamená, že je ukryta mezi 86 871 nerozlišitelnými částmi. Vnější pozorovatel, který zná tuto minci na začátku
cyklu coinjoin a snaží se vystopovat její výstup, bude konfrontován s 86 871 možnými UTXO, z nichž každá má stejnou pravděpodobnost, že
je hledanou mincí.
Retrospektivní anonset
Retrospektivní anonset udává počet možných zdrojů pro danou část, přičemž zná UTXO na konci cyklu. Tento ukazatel měří odolnost důvěrnosti dílu vůči analýze z přítomnosti do minulosti (z výstupu na vstup), tj. jak obtížné je pro analytika vysledovat váš díl zpět k jeho původu, před cykly coinjoin. Název tohoto ukazatele je "zpětná anonce" nebo "zpětně orientovaná metrika".
Na základě znalosti vašeho UTXO na výstupu z cyklů určí retrospektivní anonset počet potenciálních transakcí Tx0, které mohly představovat váš vstup do cyklů coinjoin. V níže uvedeném diagramu to odpovídá součtu všech oranžových bublin.
Představme si například, že naše část coinjoin má retrospektivní anonset 42,185. V praxi to znamená, že pro toto UTXO existuje 42 185 potenciálních zdrojů. Pokud vnější pozorovatel identifikuje tuto minci na
konci cyklů a snaží se vystopovat její původ, bude mít před sebou 42 185 možných zdrojů, přičemž všechny mají stejnou pravděpodobnost,
že jsou hledaným původem.
Jak vypočítáte anonsety?
U malých souborů je možné anonsety vypočítat ručně pomocí průzkumníka bloků. Pro větší anonsety je však použití specializovaného nástroje nezbytné. Pokud je mi známo, jediným softwarem, který je schopen tento úkol provést, je Whirlpool Stats Tool, nástroj v jazyce Python vyvinutý týmy Samourai a OXT. Tento nástroj je bohužel v současné době mimo provoz v důsledku zatčení zakladatelů společnosti Samourai a přerušení činnosti společnosti OXT, která byla používána k získávání dat z blockchainu.
Jak jsme viděli v této kapitole, anonsety lze vypočítat pouze v případě, že existuje určitá homogenita ve struktuře coinjoin. V příští kapitole zjistíme, jak tuto homogenitu kvantifikovat na bitcoinové transakci, ať už jde o coinjoin, nebo tradičnější transakci.
https://planb.network/tutorials/privacy/analysis/wst-anonsets-0354b793-c301-48af-af75-f87569756375
Entropie
Jak jsme viděli v této části o spojování mincí, homogenita UTXO na vstupu a výstupu hraje důležitou roli při zvyšování důvěrnosti bitcoinové transakce. Tento parametr vytváří věrohodnou popíratelnost tváří v tvář analýze blockchainu. K měření této homogenity lze použít několik metod, ale jednou z nejefektivnějších je podle mého názoru využití ukazatelů poskytovaných nástrojem Boltzmann, který vyvinuly týmy OXT a Samourai Wallet, a zejména entropie transakce. Právě na to se budeme v této kapitole podrobněji zaměřovat.
Na rozdíl od anonsetů, které se počítají na základě souboru transakcí, se zde prezentované ukazatele zaměřují na jednu transakci, ať už se jedná o coinjoin nebo tradičnější transakci.
Počet interpretací
Prvním ukazatelem, který lze na transakci bitcoinu pozorovat, je celkový počet možných interpretací, kterým čelí analýza vnějšího pozorovatele. S přihlédnutím k hodnotám UTXO zapojených do transakce tento ukazatel ukazuje počet způsobů, jakými lze vstupy přiřadit k výstupům. Jinými slovy, určuje počet možných interpretací, které může transakce vyvolat v tocích bitcoinů z pohledu vnějšího pozorovatele, který ji analyzuje.
Například jednoduchá platební transakce s 1 vstupem a 2 výstupy bude mít pouze jednu interpretaci, a to že vstup č. 0 financoval výstup č. 0 a výstup č. 1. Jiná interpretace není možná:
Naproti tomu rohová hra Whirlpool 5x5 má 1,496 možných kombinací:
Whirlpool Surge Cycle 8x8 coinjoin má 9\,934\,563 možných interpretací:
Entropie
Z počtu interpretací transakce bitcoinu můžeme vypočítat její entropii.
V obecném kontextu kryptografie a informací je entropie kvantitativní mírou nejistoty nebo nepředvídatelnosti spojené se zdrojem dat nebo náhodným procesem. Jinými slovy, entropie je způsob měření, jak obtížné je předvídat nebo odhadnout určitou informaci.
V konkrétním kontextu analýzy blockchainu je entropie také název ukazatele, odvozeného od Shannonovy entropie a vynalezeného LaurentemMT, který lze vypočítat na transakci Bitcoin.
Pokud transakce představuje velký počet možných interpretací, je často relevantnější odkazovat na její entropii. Tento ukazatel měří nedostatečné znalosti analytiků o přesné konfiguraci transakce. Jinými slovy, čím vyšší je entropie, tím obtížnější je pro analytiky identifikovat tok bitcoinů mezi vstupy a výstupy.
V praxi entropie odhaluje, zda transakce z pohledu vnějšího pozorovatele představuje více možných interpretací založených pouze na množství vstupů a výstupů bez zohlednění dalších vnějších nebo vnitřních vzorců a heuristik. Vysoká entropie je proto synonymem větší důvěrnosti transakce.
Entropie je definována jako binární logaritmus počtu možných kombinací. Zde
je použitý vzorec, kde E je
entropie transakce a C počet možných
interpretací:
E = \log_2(C) V matematice je binární logaritmus (logaritmus o základu 2) inverzní operací
exponencializace čísla 2. Jinými slovy, binární logaritmus čísla x je exponent, na který je třeba zvýšit číslo 2, abychom získali číslo x. Tento ukazatel se tedy
vyjadřuje v bitech.
Vezměme si příklad výpočtu entropie pro transakci coinjoin strukturovanou
podle modelu Whirlpool 5x5, která, jak bylo uvedeno v předchozí části, má
počet možných interpretací 1\,496 :
\begin{align*}
C &= 1\,496 \\
E &= \log_2(1\,496) \\
E &= 10.5469 \text{ bits}
\end{align*} Tato transakce coinjoin má tedy entropii 10,5469$ bitů, což je považováno za velmi uspokojivé. Čím vyšší je tato hodnota, tím více různých interpretací transakce připouští, čímž se posiluje úroveň její důvěrnosti.
Pro transakci coinjoin 8x8 s interpretacemi 9,934\,563 by entropie byla :
\begin{align*}
C &= 9\,934\,563 \\
E &= \log_2(9\,934\,563) \\
E &= 23.244 \text{ bits}
\end{align*} Uveďme další příklad klasické platební transakce s 1 vstupem a 2 výstupy: 1b1b0c3f0883a99f1161c64da19471841ed12a1f78e77fab128c69a5f578ccce
V případě této transakce je jediná možná interpretace: (In.0) > (Out.0 ; Out.1). V důsledku toho je její entropie 0 :
\begin{align*}
C &= 1 \\
E &= \log_2(1) \\
E &= 0 \text{ bits}
\end{align*} Účinnost
Na základě entropie transakce můžeme také vypočítat její účinnost z hlediska důvěrnosti. Tento ukazatel hodnotí účinnost transakce porovnáním s optimální transakcí, kterou lze předpokládat v identické konfiguraci.
To nás přivádí ke konceptu maximální entropie, která odpovídá nejvyšší entropii, jíž může určitá struktura transakcí teoreticky dosáhnout. Účinnost transakce se pak vypočítá porovnáním této maximální entropie se skutečnou entropií analyzované transakce.
Používá se následující vzorec s :
- e_R$: skutečná entropie transakce vyjádřená v bitech;
- e_M$: maximální možná entropie pro strukturu transakce, rovněž vyjádřená v bitech;
Ef: efektivita transakce v bitech :
Ef = E_R - E_M Například pro strukturu Whirlpool 5x5 coinjoin je maximální entropie 10,5469 :
\begin{align*}
E_R &= 10.5469 \\
E_M &= 10.5469 \\
Ef &= E_R - E_M \\
Ef &= 10.5469 - 10.5469 \\
Ef &= 0 \text{ bits}
\end{align*} Tento ukazatel je rovněž vyjádřen v procentech. Používá se následující vzorec: :
- c_R$ : počet možných reálných interpretací ;
- c_M$: maximální počet možných interpretací téže struktury;
Ef: účinnost vyjádřená v procentech:
\begin{align*}
E_f &= \frac{C_R}{C_M} \\
E_f &= \frac{1\,496}{1\,496} \\
E_f &= 100 \%
\end{align*} Efektivita 100 USD znamená, že transakce využívá svůj potenciál důvěrnosti v závislosti na své struktuře.
Hustota entropie
Entropie je dobrým ukazatelem pro měření důvěrnosti transakce, ale částečně závisí na počtu vstupů a výstupů v transakci. Pro porovnání entropie 2 různých transakcí s různým počtem vstupů a výstupů můžeme vypočítat hustotu entropie. Tento ukazatel poskytuje pohled na entropii vzhledem ke každému vstupu nebo výstupu transakce. Hustota je užitečná pro hodnocení a porovnávání efektivity transakcí různých velikostí.
Pro její výpočet jednoduše vydělíme celkovou entropii transakce celkovým počtem vstupů a výstupů zapojených do transakce:
- e_D$: hustota entropie vyjádřená v bitech;
- e$: entropie transakce vyjádřená v bitech;
- t$: celkový počet vstupů a výstupů v transakci:
E_D = \frac{E}{T} Vezměme si příklad spojení 5x5 Whirlpool:
\begin{align*}
T &= 5 + 5 = 10 \\
E &= 10.5469 \\
E_D &= \frac{E}{T} \\
E_D &= \frac{10.5469}{10} \\
E_D &= 1.054 \text{ bits}
\end{align*} Vypočítejme také hustotu entropie spojnice 8x8 Whirlpool:
\begin{align*}
T &= 8 + 8 = 16 \\
E &= 23.244 \\
E_D &= \frac{E}{T} \\
E_D &= \frac{23.244}{16} \\
E_D &= 1.453 \text{ bits}
\end{align*} Analýzou hustoty entropie těchto dvou typů spojení je zřejmé, že i při normalizaci entropie podle počtu prvků generuje spojení "Surge Cycle 8x8" větší nejistotu pro analýzu.
Boltzmannovo skóre
Další informací analyzovanou v transakci je Boltzmannovo skóre každého prvku vůči jinému. Jedná se o tabulku pravděpodobnosti shody mezi vstupy a výstupy. Tato tabulka udává prostřednictvím Boltzmannova skóre podmíněnou pravděpodobnost, že určitý vstup je spojen s daným výstupem. Jedná se tedy o kvantitativní míru podmíněné pravděpodobnosti, že dojde k asociaci mezi vstupem a výstupem v transakci, založenou na poměru počtu příznivých výskytů této události k celkovému počtu možných výskytů, v souboru interpretací.
Na příkladu spojení Whirlpool by tabulka podmíněné pravděpodobnosti zvýraznila šance na spojení mezi každým vstupem a výstupem a nabídla by kvantitativní míru nejednoznačnosti spojení v transakci:
| % | Výstup 0 | Výstup 1 | Výstup 2 | Výstup 3 | Výstup 4 |
| ------- | -------- | -------- | -------- | -------- | -------- |
| Vstup 0 | 34% | 34% | 34% | 34% | 34% | 34% | 34% |
| Vstup 1 | 34% | 34% | 34% | 34% | 34% | 34% | 34% | Vstup 1
| Vstup 2 | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34
| Vstup 3 | 34% | 34% | 34% | 34% | 34% | 34% | 34% | Vstup 3
| Vstup 4 | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34% | 34
Je zřejmé, že každý vstup má stejnou šanci být spojen s jakýmkoli výstupem, což posiluje důvěrnost transakce.
Boltzmannovo skóre se vypočítá vydělením počtu interpretací, v nichž se určitá událost vyskytne, celkovým počtem dostupných interpretací. Chceme-li tedy určit skóre spojující vstup č. 0 s výstupem č. 3 (událost se vyskytuje v 512$ interpretacích), postupujeme takto:
\begin{align*}
\text{Interpretations (IN.0 > OUT.3)} &= 512 \\
\text{Interpretations totales} &= 1496 \\
\text{Score} &= \frac{512}{1496} \\
\text{Score} &= 34 \%
\end{align*} Vezmeme-li si příklad spojení Whirlpool 8x8 Surge Cycle, bude Boltzmannova tabulka vypadat takto:
| OUT.0 | OUT.1 | OUT.2 | OUT.3 | OUT.4 | OUT.5 | OUT.6 | OUT.7 |
|-------|-------|-------|-------|-------|-------|-------|-------|-------|
| IN.0 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% |
| IN.1 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% |
| IN.2 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% |
| IN.3 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% |
| IN.4 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% |
| IN.5 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% |
| IN.6 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% |
| IN.7 | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% | 23% |
V případě jednoduché transakce s jedním vstupem a dvěma výstupy je však situace jiná:
| Výstup 0 | Výstup 1 |
|---------|----------|----------|
| Vstup 0 | 100% | 100% |
Zde vidíme, že pravděpodobnost každého výstupu pocházejícího ze vstupu č. 0 je 100 %. Nižší pravděpodobnost tedy odráží větší důvěrnost, která rozmělňuje přímé vazby mezi vstupy a výstupy.
Deterministické odkazy
Můžeme také vypočítat počet deterministických spojení v transakci. Tento ukazatel ukazuje, kolik spojení mezi vstupy a výstupy v analyzované transakci je nezpochybnitelných, a to se 100% pravděpodobností. Tento ukazatel pak můžeme doplnit výpočtem poměru deterministických vazeb. Poměr poskytuje pohled na váhu těchto deterministických vazeb v rámci celkových vazeb transakce.
Například transakce Whirlpool coinjoin nemá žádné deterministické vazby mezi vstupy a výstupy, a proto se u ní zobrazí indikátor 0 vazeb a poměr 0 %. Naopak v naší druhé zkoumané jednoduché platební transakci (s jedním vstupem a 2 výstupy) nám indikátor říká, že existují 2 deterministické vazby, a poměr dosahuje 100 %. Jinými slovy, nulový ukazatel svědčí o vynikající důvěrnosti díky absenci přímých a nesporných vazeb mezi vstupy a výstupy.
Jak tyto ukazatele vypočítáváte?
Ruční výpočet těchto ukazatelů pomocí rovnic, které jsem uvedl, je poměrně jednoduchý. Obtížnost spočívá především ve stanovení počtu možných interpretací transakce. U klasické transakce lze tento výpočet provést ručně. Pro coinjoin je však tento úkol mnohem složitější.
Dříve existoval nástroj v jazyce Python s názvem Boltzmann Calculator, vyvinutý týmy OXT a Samourai, který automaticky vypočítával všechny tyto ukazatele pro transakci Bitcoin :
Pro tyto analýzy bylo možné využít také webové stránky KYCP.org:
Bohužel po zatčení zakladatelů společnosti Samourai již tyto nástroje nejsou funkční.
Nyní, když jsme se podrobně věnovali coinjoins, se v závěrečné části našeho kurzu podíváme na další techniky ochrany soukromí dostupné v Bitcoinu. Budeme se zabývat payjoiny, specifickými typy pseudo-coinjoin transakcí, protokoly statických adres a také opatřeními k posílení důvěrnosti nikoli na úrovni samotných transakcí, ale na úrovni sítě uzlů.
Pochopení výzev dalších pokročilých technik utajení
Transakce Payjoin
Coinjoin je v současné době nejúčinnější metodou, jak vnést nejistotu do sledování částí v analýze řetězce. Jak jsme viděli v předchozích kapitolách, pro získání vysoce výkonného mixu musí být vstupy a výstupy co nejhomogennější. Kromě toho je důležité, aby byly součásti integrovány do co největší skupiny, aby se maximalizovaly anonsety. Aby tedy bylo coinjoins efektivní, musí zahrnovat velký počet stejnorodých částí. Toto množství požadavků znamená, že transakce coinjoin mají velmi pevnou strukturu: částky jsou předem pevně stanoveny a všichni účastníci je musí dodržovat, aby byla zaručena jednotnost procesu. Kromě toho coinjoiny vyžadují synchronizaci mezi všemi účastníky a koordinátorem během konstrukce transakce.
Kvůli těmto požadavkům je coinjoin pro přímé platby nevhodný. Například pokud máte v poolu coinjoin minci o hodnotě 1 milionu sats, bylo by její přímé použití jako platby složité. Vyžadovalo by to synchronizaci s ostatními účastníky a koordinátorem, který by sestavil společnou transakci přesně v okamžiku, kdy potřebujete provést platbu, a částka nákupu by musela přesně odpovídat hodnotě vaší mince, což je prakticky neproveditelné. Transakce coinjoin je tedy ze své podstaty kolaborativní sweep transakcí, tj. většinou se jedná o stejné vlastníky vstupů, které najdeme na výstupech.
Bylo by však zajímavé mít takové struktury transakcí, které by umožňovaly praktické provádění plateb a zároveň vnášely pochybnosti do analýzy řetězců. Právě tím se budeme zabývat v této a následující kapitole.
Co je to transakce payjoin?
Payjoin je specifická struktura transakce Bitcoin, která zvyšuje soukromí uživatele při utrácení tím, že spolupracuje s příjemcem platby.
Poprvé v roce 2015 LaurentMT popsal tuto metodu pod označením "steganographic transactions", jak je uvedeno v dokumentu dostupném zde. Tuto techniku následně převzala peněženka Samourai Wallet, která ji v roce 2018 jako první klient implementovala pomocí nástroje Stowaway. Koncept payjoinu lze rovněž nalézt v BIP79, BIP78 a BIP77. Pro označení payjoinu se tak používá několik různých termínů:
- Payjoin ;
- Černý pasažér;
- P2EP (Pay-to-End-Point) ;
- Steganografická transakce.
Zvláštnost payjoinu spočívá v tom, že dokáže vygenerovat transakci, která se na první pohled zdá být obyčejná, ale ve skutečnosti se jedná o mini coinjoin mezi dvěma lidmi. Aby toho bylo dosaženo, zahrnuje struktura transakce příjemce platby do vstupů vedle skutečného odesílatele. Příjemce tak doprostřed transakce zahrne platbu sobě samému, která mu sama o sobě umožňuje, aby mu bylo zaplaceno.
Pro lepší pochopení tohoto procesu si uveďme příklad. Alice si koupí bagetu za 4 000 sátů s využitím UTXO 10 000 sátů a rozhodne se pro payjoin. Její pekař Bob přidá jako vstup UTXO v hodnotě 15 000 sats, které mu patří, a které získá zpět v plné výši jako výstup, navíc k Aliciným 4 000 sats.
V tomto příkladu pekař Bob zadá na vstupu 15 000 satů a na výstupu 19 000 satů, přičemž rozdíl je přesně 4 000 satů, tj. cena bagety. Na straně Alice vstupuje 10 000 satů a na výstupu končí s 6 000 satů, což představuje zůstatek -4 000 satů, tj. cenu bagety. Pro zjednodušení příkladu jsem v této transakci záměrně vynechal náklady na těžbu.
K čemu je payjoin?
Transakce payjoin plní dva cíle a umožňuje uživatelům zvýšit důvěrnost jejich platby.
Za prvé, payjoin se snaží uvést vnějšího pozorovatele v omyl tím, že v analýze řetězce vytvoří návnadu. To umožňuje heuristika CIOH (Common Input Ownership Heuristic). Jak jsme viděli v části 3, obvykle, když má transakce v blockchainu několik vstupů, se předpokládá, že všechny tyto vstupy patří stejnému subjektu nebo uživateli.
Když tedy analytik zkoumá transakci payjoin, je přesvědčen, že všechny vstupy pocházejí od stejné osoby. Tento dojem je však mylný, protože na vstupech se vedle skutečného plátce podílí také příjemce. Analýza řetězce je proto odkloněna k interpretaci, která se ukáže jako nesprávná.
Vezměme si náš příklad transakce payjoin pro platbu bagety:
Při pohledu na tuto transakci v blockchainu by vnější pozorovatel, který by se řídil obvyklou heuristikou analýzy blockchainu, provedl následující interpretaci: "Alice sloučila 2 UTXO jako vstupy do transakce, aby zaplatila 19 000 sátů Bobovi".
Tento výklad je samozřejmě nesprávný, protože jak již víte, dvě UTXO na vstupech nepatří stejné osobě. Jeden pochází od Alice, kupující bagety, a druhý od Boba, pekaře.
Tímto způsobem je analýza externího pozorovatele nasměrována k chybnému závěru, čímž je zajištěno zachování důvěrnosti zúčastněných stran.
Steganografická transakce
Druhým účelem payjoin je uvést vnějšího pozorovatele v omyl ohledně skutečné výše provedené platby. Při zkoumání struktury transakce by se analytik mohl domnívat, že platba odpovídá částce jednoho z výstupů.
Vrátíme-li se k našemu příkladu nákupu bagety, bude si analytik myslet, že částka platby odpovídá buď UTXO 6 000 sátů, nebo UTXO 19 000 sátů. V tomto případě si analytik bude spíše myslet, že částka platby odpovídá 19 000 sats, protože ve výstupech jsou 2 UTXO, z nichž alespoň jedno je větší než 6 000 sats (není žádný logický důvod používat 2 UTXO k platbě 6 000 sats, když by k uspokojení této platby stačilo jediné UTXO).
Ve skutečnosti je však tato analýza chybná. Výše platby neodpovídá žádnému z výstupů. Ve skutečnosti je to rozdíl mezi UTXO příjemce na výstupu a UTXO příjemce na vstupu.
V tomto ohledu transakce payjoin spadá do oblasti steganografie. Umožňuje skrýt skutečnou částku transakce v rámci falešné transakce, která funguje jako návnada.
Steganografie je technika skrývání informací v jiných datech nebo objektech tak, aby přítomnost skrytých informací nebyla patrná. Tajnou zprávu lze například skrýt do tečky v nesouvisejícím textu, takže ji pouhým okem nelze odhalit (jedná se o techniku microdot).
Na rozdíl od šifrování, které bez dešifrovacího klíče činí informace nesrozumitelnými, steganografie informace nemění. Zůstává zobrazena v čistém textu. Jejím cílem je spíše utajit samotnou existenci tajné zprávy, zatímco šifrování jasně odhaluje přítomnost skryté informace, i když bez klíče nepřístupné. Proto byl původní název payjoin "steganografické transakce".
Lze najít analogii mezi kryptografií a coinjoin a mezi steganografií a payjoin. Coinjoin má podobné vlastnosti jako šifrování: metoda je rozpoznatelná, ale informace jsou nerozluštitelné. Naopak payjoin má podobné vlastnosti jako steganografie: informace je teoreticky přístupná, ale protože metoda utajení není rozpoznatelná, stává se nedostupnou.
Jak mohu používat službu payjoin?
Mezi známé programy, které podporují payjoin, patří Sparrow Wallet, Wasabi Wallet, Mutiny, BitMask, BlueWallet a JoinMarket, stejně jako platební procesor BTCPay.
Nejpokročilejší implementací payjoin byl pouze Stowaway na Samourai Wallet. Od zatčení zakladatelů softwaru je však tento nástroj nyní funkční jen částečně. Výhodou Stowaway je, že se jedná o komplexní, snadno použitelný protokol, který podporuje příjem i odesílání payjoinů. Částečně podepsané transakce lze vyměňovat ručně naskenováním několika QR kódů nebo automaticky pomocí Toru přes Soroban. Druhá možnost komunikace je v současné době mimo provoz.
Potíž při používání služby payjoin spočívá v její závislosti na účasti obchodníka. Jako zákazník nemůžete payjoin používat, pokud jej obchodník nepodporuje. To přidává k procesu nákupu další obtíže: nejenže je obtížné najít obchodníky, kteří přijímají bitcoiny, ale pokud hledáte i ty, kteří payjoin podporují, je to ještě složitější.
Jedním z řešení by bylo použití transakčních struktur, které do analýzy řetězce vnášejí nejednoznačnost, aniž by vyžadovaly spolupráci příjemce. To by nám umožnilo zvýšit důvěrnost našich plateb, aniž bychom se museli spoléhat na aktivní účast obchodníků. Právě na to se zaměříme v následující kapitole.
Platba mini-coinjoin
Pokud chcete provést platební transakci při zachování určitého stupně důvěrnosti, je payjoin dobrou volbou. Jak jsme si však právě ukázali, payjoin vyžaduje zapojení příjemce. Co tedy dělat, když se příjemce odmítne payjoin zúčastnit nebo když ho prostě raději nezapojíte? Jednou z alternativ je použití transakce Stonewall nebo Stonewall x2. Podívejme se na tyto dva typy transakcí blíže.
Transakce Stonewall
Stonewall je specifická forma transakce s bitcoiny, která má zvýšit důvěrnost uživatelů při utrácení tím, že imituje pseudo-coinjoin mezi dvěma lidmi, aniž by jím ve skutečnosti byl. Ve skutečnosti tato transakce není společná. Uživatel si ji může vytvořit sám a jako vstupy použít pouze UTXO, které vlastní. Můžete tedy vytvořit transakci Stonewall pro jakoukoli příležitost, aniž byste se museli synchronizovat s jiným uživatelem nebo příjemcem.
Transakce Stonewall funguje následovně: emitent použije jako vstup do transakce 2 UTXO, které mu patří. Na výstupu transakce vzniknou 4 UTXO, z nichž 2 jsou přesně ve stejné výši. Zbývající 2 UTXO budou tvořit cizí měnu. Ze 2 výstupů o stejné částce půjde příjemci skutečně pouze jeden.
V transakci Stonewall jsou tedy pouze 2 role:
- Vydavatel, který provádí platbu ;
- Příjemce, který si nemusí být vědom specifické povahy transakce a jednoduše očekává platbu od odesílatele.
Podívejme se na příklad, abychom tuto strukturu transakce pochopili. Alice si jde k pekaři Bobovi koupit bagetu, která stojí 4 000 satů. Chce zaplatit v bitcoinech, přičemž chce zachovat určitou formu důvěrnosti ohledně své platby. Rozhodne se tedy pro tuto platbu sestavit transakci Stonewall.
Analýzou této transakce zjistíme, že pekař Bob ve skutečnosti obdržel za bagetu 4 000 satů. Alice použila jako vstupy 2 UTXO: jeden za 10 000 sátů a druhý za 15 000 sátů. Na výstupech získala 3 UTXO: jeden za 4 000 sats, jeden za 6 000 sats a jeden za 11 000 sats. Alice má tedy z této transakce čistý zůstatek -4 000 sátů, což odpovídá ceně bagety.
V tomto příkladu jsem záměrně zanedbal poplatky za těžbu, aby byl příklad srozumitelnější. Ve skutečnosti nese transakční náklady výhradně emitent.
Jaké jsou cíle transakce Stonewall?
Struktura Stonewall přidává do transakce obrovské množství entropie a rozmazává linie řetězové analýzy. Při pohledu zvenčí by taková transakce mohla být interpretována jako minipřipojení mincí mezi dvěma lidmi. Ve skutečnosti se však jedná o platbu. Tato metoda proto vytváří nejistoty v analýze řetězce, nebo dokonce vede k falešným stopám.
Vezměme si příklad Alice u pekaře Boba. Transakce v blockchainu by vypadala takto:
Vnější pozorovatel, který se spoléhá na běžnou heuristiku analýzy řetězce, by mohl chybně dojít k závěru, že "dva lidé vytvořili malý coinjoin, každý s jedním UTXO na vstupu a dvěma UTXO na výstupu". Analýza této transakce zvenčí nevede k aplikaci CIOH, protože přítomnost dvou výstupů o stejné výši naznačuje vzor coinjoin. Z vnějšího pohledu se tedy CIOH v tomto konkrétním případě neuplatní.
Tato interpretace je nepřesná, protože, jak víte, jeden UTXO byl poslán pekaři Bobovi, 2 vstupy UTXO pocházely od Alice a ta získala 3 výměnné výstupy.
Na struktuře transakce Stonewall je zajímavé zejména to, že z pohledu vnějšího pozorovatele se ve všech ohledech podobá transakci Stonewall x2.
Transakce Stonewall x2
Stonewall x2 je další specifická forma transakce s bitcoiny, jejímž cílem je rovněž zvýšit důvěrnost uživatelů při utrácení, tentokrát však ve spolupráci s třetí osobou, která se na utrácení nepodílí. Tato metoda funguje jako pseudo-coinjoin mezi dvěma účastníky a zároveň provádí platbu třetí osobě.
Fungování transakce Stonewall x2 je poměrně jednoduché: k provedení platby použijeme UTXO, který vlastníme, a požádáme o pomoc třetí stranu, která rovněž přispěje UTXO, který jí patří. Transakce končí čtyřmi výstupy: dva z nich jsou ve stejné výši, jeden je určen pro adresu příjemce platby, druhý pro adresu patřící spolupracovníkovi. Třetí UTXO se vrací na jinou adresu patřící spolupracovníkovi, což mu umožňuje získat zpět počáteční částku (pro něj neutrální akce, modulovaná náklady na těžbu), a poslední UTXO se vrací na adresu patřící nám, což představuje platební výměnu.
V transakcích Stonewall x2 jsou tak definovány tři různé role:
- Vydavatel, který provádí skutečnou platbu ;
- Příjemce, který si nemusí být vědom specifické povahy transakce a jednoduše očekává platbu od odesílatele;
- Spolupracovník, který dává k dispozici bitcoiny, aby zpochybnil analýzu transakce, přičemž na konci získá zpět své prostředky v plné výši (což je pro něj neutrální akce, modulovaná náklady na těžbu).
Vraťme se k našemu příkladu s Alicí, která si jde k pekaři Bobovi koupit bagetu, která stojí 4 000 satů. Chce platit v bitcoinech, přičemž chce zachovat určitou úroveň důvěrnosti ohledně své platby. Zavolá tedy svého přítele Charlese, který jí v tomto procesu pomůže.
Analýzou této transakce zjistíme, že pekař Bob ve skutečnosti obdržel za bagetu 4 000 satů. Alice použila 10 000 satů na vstupu a získala zpět 6 000 satů na výstupu, tj. čistý zůstatek -4 000 satů, což odpovídá ceně bagety. Pokud jde o Charlese, ten poskytl 15 000 satů na vstupu a získal dva výstupy: jeden ve výši 4 000 satů a druhý ve výši 11 000 satů, což dává saldo 0.
V tomto příkladu jsem záměrně vynechal poplatky, aby to bylo srozumitelnější. Ve skutečnosti se poplatky za těžbu obecně dělí rovným dílem mezi vydavatele platby a přispěvatele.
Jaké jsou cíle transakce Stonewall x2?
Stejně jako struktura Stonewall přidává struktura Stonewall x2 do transakce velké množství entropie a mate řetězovou analýzu. Při pohledu zvenčí lze takovou transakci interpretovat jako malý coinjoin mezi dvěma lidmi. Ve skutečnosti se však jedná o platbu. Tato metoda proto vytváří nejistotu v analýze řetězce, nebo dokonce vede k falešným stopám.
Vezměme si příklad Alice, pekaře Boba a Charlese. Transakce v blockchainu by vypadala takto:
Vnější pozorovatel, který se spoléhá na běžnou heuristiku řetězové analýzy, by mohl chybně dojít k závěru, že "Alice a Charles provedli malé spojení s jedním UTXO na vstupu a dvěma UTXO na výstupu". Analýza této transakce zvenčí opět nevede k aplikaci ICOH, protože přítomnost dvou výstupů o stejné výši naznačuje vzor coinjoin. Z vnějšího pohledu se tedy CIOH v tomto konkrétním případě neuplatní.
Tato interpretace je nesprávná, protože, jak víte, pekaři Bobovi bylo odesláno jedno UTXO, Alice má pouze jeden výměnný výstup a Charles má dva.
A opět je na struktuře transakce Stonewall x2 obzvláště zajímavé to, že z pohledu vnějšího pozorovatele se v každém ohledu podobá transakci Stonewall.
Jaký je rozdíl mezi Stonewall a Stonewall x2?
Transakce StonewallX2 funguje úplně stejně jako transakce Stonewall s tím rozdílem, že první z nich je kolaborativní, zatímco druhá ne. Jak jsme viděli, transakce Stonewall x2 zahrnuje účast třetí strany (Charles), která je vůči platbě externí a která dá k dispozici své bitcoiny, aby zvýšila důvěrnost transakce. V klasické Stonewall transakci přebírá roli spolupracovníka odesílatel.
Z vnějšího pohledu je vzor transakce naprosto stejný.
Skutečnost, že tyto dvě transakční struktury mají přesně stejný vzor, znamená, že i když se vnějšímu pozorovateli podaří identifikovat vzor "Stonewall(x2)", nebude mít k dispozici všechny informace. Nebude schopen určit, kterému ze dvou UTXO stejných částek odpovídá platba. Navíc nebude schopen určit, zda obě UTXO se vstupy pocházejí od dvou různých osob (Stonewall x2), nebo zda patří jedné osobě, která je sloučila (Stonewall).
Tento poslední bod je způsoben skutečností, že transakce Stonewall x2 probíhají přesně podle stejného schématu jako transakce Stonewall. Při pohledu zvenčí a bez dalších kontextových informací není možné odlišit transakci Stonewall od transakce Stonewall x2. První z nich nejsou transakcemi spolupráce, zatímco druhé ano. To přidává analýze jedné z těchto transakcí ještě více pochybností.
Kdy se mají používat transakce Stonewall a Stonewall x2?
Pokud chcete použít nástroj pro utajení výdajů, měla by být logika následující:
- Přednostně můžeme zvolit možnost payjoin;
- Pokud obchodník nepodporuje payjoins, lze provést společnou transakci s jinou osobou mimo platbu pomocí struktury Stonewall x2;
- Pokud nemůžete najít nikoho, kdo by provedl transakci Stonewall x2, můžete provést pouze transakci Stonewall, která bude napodobovat chování transakce Stonewall x2.
Jak mohu používat transakce Stonewall a Stonewall x2?
Transakce Stonewall a Stonewall x2 jsou dostupné v aplikaci Samourai Wallet i v softwaru Sparrow Wallet.
Stejně jako v případě payjoins však po zatčení zakladatelů společnosti Samourai fungují transakce Stonewall x2 nyní pouze na základě ruční výměny PSBT mezi zúčastněnými stranami. Automatická výměna prostřednictvím Sorobanu již bohužel není k dispozici.
Tento typ transakce je možné provést také ručně z libovolného softwaru bitcoinové peněženky.
V příští kapitole se podíváme na další techniku utajení, která je poměrně neznámá, ale je velmi užitečná jako doplněk k tomu, co jsme již studovali.
https://planb.network/tutorials/privacy/on-chain/stonewall-033daa45-d42c-40e1-9511-cea89751c3d4
https://planb.network/tutorials/privacy/on-chain/stonewall-x2-05120280-f6f9-4e14-9fb8-c9e603f73e5b
Rikošky
Použití struktur transakcí bitcoinu, které přidávají nejednoznačnost analýze řetězce, jako je coinjoin, je obzvláště výhodné pro ochranu soukromí. Jak jsme však uvedli v kapitole o payjoin, transakce coinjoin jsou v řetězci přirozeně identifikovatelné. Vzpomeňte si na analogii, kterou jsme uvedli mezi šifrováním a coinjoiny: když je soubor zašifrován, třetí strana, která objeví zašifrovaný soubor, nemůže získat přístup k jeho obsahu, ale může jasně identifikovat, že soubor byl upraven tak, aby se jeho obsah skryl. Totéž platí pro coinjoin: když analytik zkoumá transakci coinjoin, nemůže sice zjistit přímé vazby mezi vstupy a výstupy (a naopak), nicméně může rozpoznat, že pozorovaná transakce je coinjoin.
V závislosti na tom, jak hodláte díl po cyklech coinjoin používat, může být skutečnost, že prošel tímto procesem, problematická. Pokud například plánujete prodat svou minci na regulované burzovní platformě, ale nedávno prošla coinjoinem, nástroj pro analýzu řetězce platformy tuto skutečnost zjistí. Platforma pak může odmítnout přijmout váš coinjoin UTXO, nebo po vás dokonce může požadovat vysvětlení, přičemž hrozí, že váš účet bude pozastaven nebo vaše prostředky zmrazeny. V některých případech může platforma vaše chování také nahlásit státním orgánům (to například vyžaduje TRACFIN od PSAN ve Francii).
Abychom tomu zabránili, potřebujeme nástroj, který by dokázal zahladit stopy minulosti bitcoinové mince a obnovit tak určitou formu zastupitelnosti. Právě k tomu slouží ricochet.
Co je to ricochet?
Rikošet je technika spočívající v provedení několika fiktivních transakcí vůči sobě (sweep), která simuluje převod vlastnictví bitcoinů. Tento nástroj se od ostatních transakčních struktur, o kterých jsme hovořili, liší tím, že nezískává prospektivní anonymitu, ale spíše formu retrospektivní anonymity. Ve skutečnosti ricochet rozmazává specifika, která mohou ohrozit zaměnitelnost bitcoinové mince vzhledem k její minulosti.
Aby se vyhladil otisk, který na minci zanechala minulá událost, například cykly spojování mincí, provede ricochet čtyři po sobě jdoucí transakce, při nichž si uživatel převede prostředky na různé adresy.
Po této sekvenci transakcí nástroj ricochet nakonec bitcoiny přesměruje na místo určení, například na výměnnou platformu.
Cílem je vytvořit odstup ovlivňující zaměnitelnost mince, například při transakci coinjoin, a konečný výdajový akt, který by mohl tuto minci odmítnout kvůli její minulosti. Nástroje řetězové analýzy by tak mohly dojít k závěru, že po této události pravděpodobně došlo ke změně vlastníka, a považovat tuto minci za zaměnitelnou. V případě transakce coinjoin by pak nástroje pro analýzu blockchainu mohly předpokládat, že se nejedná o stejnou osobu, která odeslala bitcoiny a provedla coinjoin, a že tedy nemá smysl podnikat kroky proti odesílateli.
Proč to funguje?
V souvislosti s touto metodou ricochetů si lze představit, že by software pro analýzu řetězců mohl prohloubit své zkoumání nad rámec čtyř odrazů. Tyto platformy však čelí dilematu při optimalizaci detekčního prahu. Musí stanovit limit počtu skoků, po kterém akceptují, že pravděpodobně došlo ke změně vlastnosti a že spojení s předchozí událostí (např. coinjoin) by mělo být ignorováno.
Nastavení tohoto prahu je však riskantní: každé rozšíření počtu pozorovaných skoků exponenciálně zvyšuje objem falešně pozitivních výsledků, tj. osob chybně označených za účastníky události, i když ve skutečnosti operaci provedl někdo jiný. Tento scénář představuje pro tyto společnosti velké riziko, protože falešně pozitivní výsledky vedou k nespokojenosti, která může postižené zákazníky přivést ke konkurenci. Z dlouhodobého hlediska vede příliš vysoký práh detekce k tomu, že platforma ztrácí více zákazníků než její konkurenti, což může ohrozit její životaschopnost. Pro tyto platformy je proto komplikované zvyšovat počet zjištěných odchylek, přičemž 4 je často dostatečný počet, aby bylo možné jejich analýzy vyvrátit.
Pozorovaný jev je do jisté míry analogický teorii šesti stupňů odloučení.
Teorie šesti stupňů odloučení předpokládá, že každý člověk na Zemi je spojen s jakýmkoli jiným člověkem řetězcem vztahů, který se skládá nejvýše ze šesti prostředníků. Stačilo by tedy projít řadou šesti lidí, z nichž každý osobně zná dalšího, abychom se dostali ke kterémukoli jednotlivci na světě.
V případě transakcí s bitcoiny se setkáváme s podobným jevem. Při sledování dostatečného počtu transakcí Bitcoinu nevyhnutelně narazíme na coinjoin. Metoda ricochet využívá tohoto principu tím, že používá větší počet skoků, než jsou směnné platformy schopny rozumně sledovat. Pokud se platformy rozhodnou sledovat více transakcí, je pak možné jednoduše přidat další hop a toto opatření obejít.
Kdy a jak používat ricochet?
Nejběžnější případ použití ricochetu nastává, když je třeba zakrýt předchozí účast v coinjoinu na UTXO, které vlastníte. V ideálním případě je nejlepší vyhnout se převodu bitcoinů, které prošly coinjoinem, na regulované subjekty. Nicméně v případě, že se ocitnete bez jiné možnosti, zejména při naléhavé potřebě likvidace bitcoinů ve státní měně, nabízí ricochet účinné řešení.
Tato metoda je účinná nejen pro koincidenční spoje, ale také pro jakoukoli jinou značku, která by mohla ohrozit zaměnitelnost dílu.
S nápadem na tuto metodu ricochet původně přišly týmy společnosti Samourai Wallet, které ji integrovaly do své aplikace, aby proces automatizovaly. Služba není na Samourai zdarma, protože ricochet zahrnuje poplatek za službu ve výši 100 000 sátů plus náklady na těžbu. Její použití se proto doporučuje pro převody významných částek.
Aplikace Samurai nabízí dvě varianty ricochetů:
- Posílený ricochet neboli "rozložené doručení", které nabízí výhodu rozložení servisního poplatku Samurai na pět po sobě jdoucích transakcí. Tato možnost také zajišťuje, že každá transakce je vysílána v samostatném čase a zaznamenána v jiném bloku, což co nejvěrněji napodobuje chování při změně vlastníka. Ačkoli je tato metoda pomalejší, je vhodnější pro ty, kteří nespěchají, protože maximalizuje účinnost ricochetu tím, že posiluje jeho odolnost vůči řetězové analýze;
- Klasický ricochet, který je určen k rychlému provedení operace, vysílá všechny transakce ve zkráceném časovém intervalu. Tato metoda tedy nabízí menší důvěrnost a menší odolnost vůči analýze než zesílená metoda. Měla by se používat pouze pro naléhavé zásilky.
Ricocheting jednoduše znamená, že si bitcoiny posíláte sami. Je naprosto možné ricochetovat bitcoiny ručně v jakémkoli softwaru peněženky, bez použití specializovaného nástroje. Stačí si postupně přeposílat stejné mince, pokaždé s použitím nové, prázdné adresy.
V další kapitole se podíváme na různé techniky tajných převodů vlastnictví. Tyto metody se zásadně liší od těch, které jsme zkoumali doposud, a to jak z hlediska fungování, tak z hlediska výsledků.
https://planb.network/tutorials/privacy/on-chain/ricochet-e0bb1afe-becd-44a6-a940-88a463756589
Tajné převody vlastnictví
Další z technik důvěrnosti bitcoinu je tajný převod vlastnictví. Cílem této metody je převést vlastnictví bitcoinů z jedné osoby na druhou a naopak, aniž by transakce byla explicitně viditelná v blockchainu. Podívejme se na různé dostupné techniky spolu s jejich výhodami a nevýhodami.
Výměna mincí
Coinwap je založen na poměrně jednoduchém konceptu: využívá chytré smlouvy k usnadnění převodu vlastnictví bitcoinů mezi dvěma uživateli, aniž by byla nutná důvěra a aniž by tento převod byl explicitně viditelný v blockchainu.
Představme si naivní příklad s Alicí a Bobem. Alice má 1 BTC zabezpečený
soukromým klíčem A a Bob má
také 1 BTC zabezpečený soukromým klíčem B. Teoreticky by si mohli
vyměnit své soukromé klíče prostřednictvím externího komunikačního kanálu a
provést tajný převod.
Tato naivní metoda však představuje vysoké riziko z hlediska důvěryhodnosti.
Nic nebrání tomu, aby si Alice po výměně ponechala kopii soukromého klíče A a později ji použila ke krádeži bitcoinů, jakmile se klíč dostane do Bobových
rukou.
Navíc není zaručeno, že Alice neobdrží Bobův soukromý klíč B a nepředá mu výměnou svůj soukromý klíč A. Tato výměna tedy závisí na
přílišné důvěře mezi stranami a je neúčinná při zajišťování bezpečného
tajného převodu vlastnictví.
Abychom tyto problémy vyřešili a umožnili výměnu mezi stranami, které si navzájem nedůvěřují, použijeme místo toho systémy chytrých smluv. Chytrá smlouva je program, který se automaticky spustí, když jsou splněny předem definované podmínky. V našem případě zajistí, že výměna majetku proběhne automaticky, bez nutnosti vzájemné důvěry.
Toho lze dosáhnout pomocí HTLC (Hash Time-Locked Contracts) nebo PTLC (Point Time-Locked Contracts). Tyto dva protokoly fungují podobným způsobem a používají systém časového zámku, který zajišťuje, že výměna bude buď úspěšně dokončena, nebo zcela zrušena, čímž je chráněna integrita prostředků obou stran. Hlavní rozdíl mezi HTLC a PTLC spočívá v tom, že HTLC používá k zabezpečení transakce hashe a předobrazy, zatímco PTLC používá podpisy adaptérů.
Ve scénáři výměny mincí pomocí HTLC nebo PTLC mezi Alicí a Bobem probíhá výměna bezpečně: buď se podaří a každý obdrží BTC toho druhého, nebo se nepodaří a každý si ponechá svůj vlastní BTC. Tím je znemožněno, aby kterákoli ze stran podváděla nebo ukradla BTC druhé strany.
HTLC je také mechanismus používaný k bezpečnému směrování plateb prostřednictvím obousměrných kanálů sítě Lightning Network V této souvislosti je obzvláště zajímavé použití signatur adaptérů, protože umožňuje obejít se bez tradičních skriptů (tento mechanismus se někdy označuje jako "scriptless scripts"). Tato funkce snižuje náklady spojené s výměnou. Další významnou výhodou Adaptor Signatures je, že nevyžadují použití společného hashe pro obě strany transakce, čímž se v určitých typech výměny vyhýbají nutnosti odhalit přímé spojení mezi nimi.
Podpisy adaptérů
Adaptační podpisy jsou kryptografickou metodou, která integruje platný podpis s dalším podpisem, nazývaným "adaptační podpis", a odhaluje tak tajná data. Tento mechanismus je navržen tak, že znalost dvou ze tří následujících prvků: platného podpisu, adaptorového podpisu a tajného údaje, umožňuje odvodit chybějící třetí prvek. Zajímavou vlastností této metody je, že pokud známe podpis adaptéru našeho kolegy a konkrétní bod na eliptické křivce spojený s tajemstvím použitým k výpočtu tohoto podpisu adaptéru, můžeme odvodit vlastní podpis adaptéru, který bude kompatibilní s týmž tajemstvím, aniž bychom měli přímý přístup k samotnému tajemství.
Při výměně mincí umožňuje použití Adaptor Signatures současné zveřejnění dvou citlivých informací mezi účastníky, čímž odpadá potřeba vzájemné důvěry. Uveďme příklad, který tento proces ilustruje na příkladu Alice a Boba, kteří si chtějí vyměnit vlastnictví 1 BTC každý, ale navzájem si nedůvěřují. Při této výměně použijí Adaptor Signatures, aby eliminovali potřebu vzájemné důvěry. Zde je uveden jejich postup:
- Alice zahájí výměnu vytvořením transakce
m_A, která odešle Bobovi 1 BTC. Pomocí svého soukromého klíčep_A(P_A = p_A \cdot G), noncen_A(N_A = n_A \cdot G) a tajemstvít(T = t \cdot G) vygeneruje podpiss_A, který tuto transakci potvrdí:
s_A = n_A + t + H(N_A + T \paralelní P_A \paralelní m_A) \cdot p_A
- Alice vypočítá podpis adaptéru
s_A'odečtením tajemstvítod svého skutečného podpisus_A:
s_A' = s_A - t
- Alice pošle Bobovi svůj podpisový adaptér
s'_A, svou nepodepsanou transakcim_A, bod odpovídající tajemství (T) a bod odpovídající nonce (N_A). Tyto prvky tvoří takzvaný "adaptér". Je důležité si uvědomit, že pouze s těmito informacemi nemůže Bob obnovit Aliciny BTC. - Bob si však může ověřit, že se ho Alice nesnaží okrást. Za tímto účelem
zkontroluje, zda Alicin podpis adaptéru
s_A'skutečně odpovídá navrhované transakcim_A. Pokud je následující rovnice správná, může si být jistý, že Alicin podpisový adaptér je platný:
s_A' \cdot G = N_A + H(N_A + T \paralelní P_A \paralelní m_A) \cdot P_A
- Toto ověření poskytuje Bobovi dostatečnou záruku, že může pokračovat ve
výměně s naprostou důvěrou. Poté vytvoří vlastní transakci
m_B, jejímž účelem je poslat Alici 1 BTC, a vygeneruje svůj podpis adaptérus_B', který bude rovněž spojen se stejným tajemstvímt. V této fázi zná hodnotutpouze Alice, Bob zná pouze odpovídající bodT, který mu Alice předala:
s_B' = n_B + H(N_B + T \paralelní P_B \paralelní m_B) \cdot p_B
- Bob pošle Alici svůj podpis adaptoru
s_B', svou nepodepsanou transakcim_B, jakož i bod odpovídající tajemství (T) a bod odpovídající nonce (N_B). Alice, která zná tajemstvít, může nyní zkombinovat Bobův podpis adaptérus_B's tímto tajemstvím a vygenerovat platný podpiss_Bpro transakcim_B, která jí převede Bobovy BTC:
s_B = s_B' + t
(s_B' + t) \cdot G = N_B + T + H(N_B + T \paralelní P_B \paralelní m_B)
\cdot P_B
- Alice odvysílá tuto podepsanou transakci
m_Bdo blockchainu Bitcoinu, aby získala BTC slíbené Bobem. Když Bob uvidí tuto transakci v blockchainu, může z ní vyčíst podpiss_B = s_B' + t. S touto informací je pak Bob schopen izolovat známé tajemstvít, které potřeboval:
t = (s_B' + t) - s_B' = s_B - s_B'
- A toto tajemství
tbylo jediným prvkem, který Bobovi chyběl k vygenerování platného podpisus_Az Alicina podpisu adaptérus_A'. Tímto podpisem je ověřena platnost transakcem_A, která posílá BTC od Alice Bobovi. Bob poté vypočítás_Aa transakcim_Aodvysílá v blockchainu:
s_A = s_A' + t
(s_A' + t) \cdot G = N_A + T + H(N_A + T \paralelní P_A \paralelní m_A)
\cdot P_A
Shrňme si, jak funguje podpis adaptéru při výměně mincí. Na začátku Alice pošle Bobovi nepodepsanou transakci doplněnou adaptérem, který Bobovi umožní ověřit, že později odhalené tajemství mu umožní přístup k bitcoinům. Bob na oplátku pošle Alici svou vlastní nepodepsanou transakci a adaptér. Alice pak může dokončit Bobovu transakci a získat bitcoiny odvysíláním platné transakce díky tajemství. Když je tato transakce zveřejněna v blockchainu, Bob má možnost získat tajemství a tím odemknout Alicinu transakci. V důsledku toho, pokud Alice iniciuje převod Bobových bitcoinů, může Bob naopak získat přístup k Aliciným bitcoinům bez nutnosti vzájemné důvěry.
Všimněte si, že výměnu mincí poprvé navrhl Gregory Maxwell v říjnu 2013 na BitcoinTalk.
Atomová výměna
Podobně jako u coinswapu a s využitím stejných typů chytrých smluv je možné provádět i atomické swapy. Atomický swap umožňuje přímou výměnu různých kryptoměn, například BTC a XMR, mezi dvěma uživateli bez nutnosti důvěry nebo zásahu zprostředkovatele. Tyto výměny se označují jako "atomické", protože mají pouze dva možné výsledky: buď je swap úspěšný a obě strany jsou spokojené, nebo se nezdaří a každá si ponechá své původní kryptoměny, čímž odpadá nutnost důvěřovat druhé straně.
Atomic swap a coinswap mají podobný způsob fungování a nabízejí stejné výhody i nevýhody z hlediska důvěrnosti. Z pohledu Bitcoinu je totiž atomický swap srovnatelný s coinswapem prováděným ve dvou fázích. Nejprve vyměníme svůj BTC za jinou kryptoměnu, poté lze tuto kryptoměnu směnit za jiné BTC. Nakonec získáme zpět BTC jiného uživatele. Proto v analýze otázek důvěrnosti řadím tyto dva protokoly do kategorie vlastních tajných výměn.
Pozor však na to, že na rozdíl od coinswapu může být atomový swap nerovnovážný, pokud jde o dostupnou likviditu, zejména na burzách BTC/XMR. Obecně je snazší vyměnit bitcoiny za altcoiny, protože po bitcoinech je silná poptávka, která udržuje prémie za tento směr konverze nízké. Výměna altcoinů za BTC však může být kvůli nižší poptávce složitější, což často vede k velmi vysokým prémiím.
A konečně, pokud atomická výměna zahrnuje bitcoiny v řetězci a bitcoiny v síti Lightning, hovoříme o "podmořské výměně".
Je to opravdu užitečné?
Tajné převody vlastnictví, jako je výměna mincí a výměna atomů, mají tu výhodu, že obelstí heuristiku řetězové analýzy. Tyto metody mohou naznačovat, že transakce se týkají stejného uživatele, zatímco skutečné vlastnictví změnilo majitele. Hlavní nevýhodou těchto metod však je, že jsou velmi riskantní bez použití další techniky k prolomení historie mince.
Když Alice provede výměnu mincí nebo atomickou výměnu s Bobem, vymění si své
bitcoiny za Bobovy. V případě atomického swapu výměna zahrnuje altcoin, ale
princip zůstává stejný. Alice tedy skončí s mincí B a Bob s mincí A. To přidává
pochybnosti do analýzy řetězce, ale historie mincí zůstává dohledatelná.
Pokud analytik prozkoumá část A, může dohledat předchozí
aktivity Alice a naopak u části B.
Z pohledu Alice hrozí, že historie mince B může být některými subjekty považována za podezřelou. Pokud by například Bob
získal minci B trestným činem,
například hackerským útokem, mince by zůstala spojena s jeho nelegální činností.
Alice by se pak mohla ocitnout v držení mince, kterou by nemohla převést na regulované
směnárenské platformy, aniž by riskovala zmrazení svých prostředků, nebo dokonce
obvinění z Bobových trestných činů, přestože s nimi nemá nic společného.
Zločinci, jejichž finanční prostředky jsou pod dohledem úřadů, nevyhnutelně upřednostňují metody utajení, jako je výměna mincí nebo atomová výměna. Tyto protokoly jim umožňují zbavit se sledovaných bitcoinů výměnou za dokonale zastupitelné bitcoiny. Umožňují jim také odvést pozornost tím, že úřady nasměrují na jiné uživatele. Tito lidé tak mají dvojí účel.
I když je vaše mince smíchána s monitorovanými bitcoiny, historie mince je přerušena, což poskytuje formu věrohodného popření, která neexistuje u protokolů tajného převodu vlastnictví, jako je coinswap nebo atomic swap.
Pokud se chce Alice vyhnout jakémukoli riziku, musí nutně použít metodu,
která přeruší historii mince B, například její předání přes coinjoins. To vyvolává otázku o užitečnosti
kombinace tajného převodu vlastnictví a coinjoinu. Coinjoin tím, že
prolamuje historii mince, již Alici poskytuje dostatečnou úroveň utajení.
Můj názor je tedy takový, že pokud chce Alice chránit své soukromí, bylo by
moudřejší přistoupit přímo k coinjoinu, než se zapojit do výměny mincí a
následně do coinjoinu.
Aby byly metody tajného převodu vlastnictví skutečně účinné a aby se
zabránilo riziku propojení historie uživatele A s uživatelem B, bylo by
paradoxně nutné, aby jejich použití bylo všeobecně známé. Pokud se coinswap
masově používá a úřady o této běžné praxi vědí, pak by bylo možné zavést
věrohodnou formu popírání. Dokud však bude používání těchto převodů
okrajové, myslím, že tyto metody budou pro uživatele příliš rizikové.
Doposud jsme se zabývali především metodami utajení na úrovni samotných transakcí. V příští kapitole se budeme zabývat otázkami na úrovni sítě a šířením transakcí.
Ochrana soukromí v síti P2P
V části 4 jsme se zabývali důležitostí používání kompletního uzlu pro ochranu důvěrnosti vašich transakcí. Je však důležité si uvědomit, že váš uzel může být sám předmětem útoků, které se snaží získat informace o vašich aktivitách. V této kapitole se proto podíváme na různá opatření, která můžete přijmout k ochraně svého soukromí, a to nikoli na úrovni samotných transakcí nebo toků bitcoinů, ale na úrovni sítě.
Pampeliška
Jedním ze způsobů, jak se vyhnout různým deanonymizačním útokům, je použití návrhu Dandelion. Tento vysílací protokol byl formalizován v BIP156, ale nikdy nebyl implementován v Bitcoinu.
Myšlenkou projektu Dandelion je zlepšit důvěrnost směrování transakcí v síti Bitcoin a čelit tak různým formám útoků. Jeho hlavním cílem je skrýt zdrojový uzel, který transakci v síti původně vysílal. Odhalení tohoto uzlu by mohlo umožnit spojit transakci v Bitcoinech s konkrétní IP adresou (pokud uzel funguje v síti clearnet), což by mohlo poskytnout vstupní bod pro analýzu řetězce.
Toto spojení mezi aktivitou na Bitcoinu a IP adresou představuje značné riziko pro důvěrnost informací o uživateli. Mnoho subjektů totiž může snadno spojit IP adresu s osobní identitou. Patří mezi ně vlády a poskytovatelé internetových služeb. Navíc se tyto informace mohou stát veřejně přístupnými, například pokud dojde k úniku IP adresy a osobních údajů při hackerském útoku do databáze webové stránky.
Při klasickém provozu Bitcoinu se transakce vytvořené uživatelem v jeho peněžence přenášejí do jeho osobního uzlu. Tento uzel novou transakci okamžitě rozešle všem peerům, ke kterým je připojen.
Tito kolegové pak transakci zkontrolují, aby se ujistili, že je v souladu s konsensem a místními pravidly standardizace. Jakmile je transakce ověřena, každý peer ji předá svým peerům a tak dále.
Toto rozložení transakcí čekajících na začlenění do bloku je poměrně vyvážené a statisticky předvídatelné. Tuto slabinu mohou zneužít komplicové špionážních uzlů, kteří spolupracují na monitorování a analýze sítě, aby identifikovali první uzel, který transakci odvysílal. Pokud se pozorovateli podaří lokalizovat zdrojový uzel, může předpokládat, že transakce pochází od operátora tohoto uzlu. Tento typ pozorování lze použít k propojení běžně anonymních transakcí s konkrétními IP adresami.
Cílem BIP156 je tento problém řešit. Za tímto účelem zavádí dodatečnou fázi šíření nové transakce, aby byla zachována anonymita před širokým veřejným šířením. Pampeliška nejprve používá "kmenovou" fázi, kdy je transakce odeslána náhodnou cestou uzlů.
Transakce je poté rozeslána celé síti ve fázi „Fluff“.
Stonek a fáze „Fluff“ odkazují na chování šíření transakce v síti, které připomíná tvar a vývoj pampelišky (v angličtině „Dandelion“).
Špionážní uzly tak potenciálně mohou sledovat transakci zpět k uzlu, který zahájil fázi „Fluff“ (hromadné šíření), ale tento uzel není tím, kdo transakci vyslal jako první, protože ji obdržel od posledního uzlu stonku. Pokud špionážní uzly nedokážou vystopovat stonek, nemohou identifikovat zdrojový uzel.
I v přítomnosti špionážních uzlů během kmenové fáze vždy zůstává pochybnost, protože jakmile se v difuzním grafu setkají s poctivým uzlem, nemohou špioni určit, zda je tento uzel původním zdrojem, nebo pouze prostředníkem.
Tato metoda směrování zamlžuje stopu vedoucí zpět ke zdrojovému uzlu, takže je obtížné vysledovat transakci v síti až k jejímu původu. Dandelion tak zlepšuje důvěrnost tím, že omezuje schopnost protivníků deanonymizovat síť. Tato metoda je o to účinnější, když transakce během fáze "stemming" prochází uzlem, který šifruje svou síťovou komunikaci, jako je tomu u Tor nebo P2P Transport V2.
BIP156 nebyl integrován do jádra bitcoinu a v současné době je klasifikován jako "zamítnutý". Jedním z hlavních problémů tohoto protokolu je, že během kmenové fáze musí být transakce před ověřením přenášeny přes zprostředkující uzly. Jak jsme viděli, v běžném modelu Bitcoinu každý uzel nejprve transakci ověří a teprve poté ji předá svým kolegům. Pokud transakce nevyhovuje pravidlům konsensu uzlu nebo pravidlům lokální standardizace, uzel ji ignoruje a nedistribuuje ji. Tento proces je důležitý pro boj s útoky DoS, protože do celé sítě jsou vysílány pouze platné transakce. Neplatné transakce, potenciálně hromadně generované za účelem přetížení sítě, jsou zastaveny v prvním uzlu, na který narazí, a dále se nešíří. Hlavním rizikem protokolu Dandelion je, že by tento nový protokol mohl zavést nové vektory pro útoky DoS tím, že by umožnil vysílání neplatných transakcí v části sítě.
Přeprava P2P V2
Dalším síťovým protokolem uvedeným v BIP324 je P2P transport V2. Jedná se o novou verzi transportního protokolu Bitcoin P2P, která obsahuje oportunistické šifrování pro zlepšení důvěrnosti a bezpečnosti komunikace mezi uzly.
Toto vylepšení má vyřešit několik problémů základní verze protokolu P2P. Na jedné straně činí vyměňovaná data pro pasivního pozorovatele nerozeznatelnými od jiných typů dat kolujících po internetu. Hlavním cílem je zabránit vládám, poskytovatelům internetových služeb a poskytovatelům VPN v masivním sledování uživatelů Bitcoinu. Pro tyto subjekty je také obtížnější zjistit, zda je uživatel internetu zároveň uživatelem Bitcoinu, tj. zda provozuje kompletní uzel.
P2P V2 také pomáhá snižovat riziko cenzury a útoků tím, že detekuje specifické vzory v datových paketech. To komplikuje a prodražuje provádění různých typů útoků Sybil na úrovni sítě. K útoku Sybil dochází, když aktér vytvoří více falešných identit, aby získal nekalou výhodu. V kontextu sítě Bitcoin se to často projevuje tak, že aktér ovládá velký počet kompletních uzlů a agresivně je využívá k násobení spojení. Útoky Sybil mohou být pasivní, s cílem shromažďovat informace a ohrozit důvěrnost uživatelů, nebo aktivní, v podobě útoků Eclipse. Ty izolují konkrétní uzel od zbytku sítě a buď cenzurují uživatele, nebo mění přijímaná data. A konečně, P2P V2 také umožňuje nákladnější a snadněji odhalitelné útoky typu Man-In-The-Middle (MITM).
Šifrování implementované P2P V2 nezahrnuje ověřování, aby nepřidávalo zbytečnou složitost a neohrožovalo skutečnost, že připojení k síti zůstává bez oprávnění. Přesto tento nový transportní protokol P2P nabízí lepší zabezpečení proti pasivním útokům a aktivní útoky činí podstatně nákladnějšími a odhalitelnějšími. Zavedení pseudonáhodného datového toku do síťových zpráv ztěžuje útočníkům cenzurování nebo manipulaci s komunikací.
Transport P2P V2 byl zahrnut jako volitelná možnost (ve výchozím nastavení
vypnutá) do jádra bitcoinu verze 26.0, které bylo nasazeno v prosinci 2023.
Ve verzi 27.0 z dubna 2024 byl pak ve výchozím nastavení povolen. V
konfiguračním souboru ji lze změnit pomocí volby v2transport=.
Tor
Dalším jednoduchým řešením, jak se vyhnout riziku ztráty důvěrnosti síťového uzlu, je spustit jej celý pod Tor.
Tor je síť přenosových serverů (uzlů), která anonymizuje původ připojení TCP na internetu. Funguje na základě zapouzdření dat v několika vrstvách šifrování. Každý relay uzel odstraní jednu vrstvu a odhalí tak adresu dalšího uzlu, dokud není dosaženo konečného cíle. Síť Tor zajišťuje anonymitu tím, že zprostředkujícím uzlům znemožňuje znát původ i cíl dat, takže pro pozorovatele je velmi obtížné vysledovat činnost uživatele.
Tor nejen šifruje data, ale také maskuje původ a cíl komunikace. Používáním Toru pro komunikaci z osobního uzlu posilujete důvěrnost svých transakcí: váš poskytovatel internetových služeb nemůže komunikaci dešifrovat a ostatní uzly v síti Bitcoin nemohou identifikovat IP adresu zdrojového uzlu. Tor navíc před poskytovatelem internetových služeb skrývá i samotné používání Bitcoinu.
Hlavní riziko této metody spočívá v tom, že Tor je protokol nezávislý na Bitcoinu. Pokud máte uzel Bitcoinu spuštěný pod Tor a Tor přestane fungovat, váš uzel Bitcoinu již nebude schopen komunikovat.
Je také důležité si uvědomit, že komunikace v síti Tor je pomalejší. Tato latence je nepříjemná zejména při počátečním spuštění uzlu, protože IBD (Initial Block Download) vyžaduje hodně komunikace. V důsledku toho může počáteční synchronizace se sítí Bitcoin trvat při použití Toru podstatně déle. Je také možné provést IBD na clearnetu a poté aktivovat Tor jako druhý krok. Tato metoda sice prozradí existenci vašeho uzlu Bitcoin vašemu poskytovateli internetových služeb, ale po přepnutí na Tor ochrání vaše osobní informace o transakcích.
Poté, co jsme prozkoumali různé metody utajení na úrovni sítě, bych vás v několika následujících kapitolách rád seznámil se dvěma elegantními řešeními, jak zabránit opakovanému použití adres: BIP47 a Tiché platby.
BIP47 a opakovaně použitelné platební kódy
Jak jsme viděli v části 3, opakované použití adres je vážnou překážkou důvěrnosti uživatelů v protokolu Bitcoin. Pro zmírnění těchto rizik se důrazně doporučuje generovat prázdnou přijímací adresu pro každou novou platbu přijatou do peněženky. Ačkoli je generování nové adresy v současné době zjednodušeno používáním moderního softwaru a hierarchických deterministických peněženek, může se tento postup zdát kontraintuitivní.
V tradičním bankovním systému jsme například zvyklí sdílet svůj IBAN, který zůstává stále stejný. Jakmile ho někomu sdělíme, může nám poslat více plateb, aniž by s námi musel znovu komunikovat. Neobanky nabízejí i modernější možnosti, například používání unikátních e-mailových adres u služby PayPal nebo RevTags u služby Revolut. I mimo finanční sféru jsou naše každodenní identifikátory, jako je poštovní adresa, telefonní číslo a e-mailová adresa, rovněž jedinečné a trvalé. Nemusíme je obnovovat při každé nové interakci.
Bitcoin však funguje jinak: pro každou příchozí transakci musí být vygenerována nová přijímací adresa. Tento kompromis mezi snadností použití a důvěrností sahá až k samotným počátkům Bílé knihy Bitcoinu. Již při zveřejnění první verze svého dokumentu na konci roku 2008 Satoshi Nakamoto na toto riziko upozorňoval:
**Jako další firewall by se pro každou transakci mohl použít nový pár klíčů, aby nebyly spojeny se společným vlastníkem
Existuje mnoho způsobů, jak přijímat více plateb na jeden identifikátor, aniž byste museli znovu používat adresu. Každý z nich má své vlastní kompromisy a nevýhody. Mezi tyto metody patří BIP47, návrh, který vypracoval Justus Ranvier a který byl zveřejněn v roce 2015. Cílem tohoto návrhu je vytvořit opakovaně použitelné platební kódy, které umožní provádět více transakcí vůči stejné osobě a zároveň zabrání opakovanému použití adresy. Stručně řečeno, cílem BIP47 je nabídnout platební systém stejně intuitivní jako jedinečný identifikátor a zároveň zachovat důvěrnost transakcí.
BIP47 přímo nezvyšuje důvěrnost uživatelů, protože platba BIP47 nabízí stejnou úroveň důvěrnosti jako klasická transakce Bitcoin s použitím prázdných adres. Umožňuje však pohodlnější a intuitivnější používání Bitcoinu, což je snadnost, která by za normálních okolností důvěrnost ohrozila. Díky BIP47 dosahuje toto snadné používání stejné úrovně důvěrnosti jako klasická transakce. Proto je BIP47 tak cenným nástrojem pro zachování soukromí.
Původně bylo navrženo začlenění BIP47 do jádra Bitcoinu, ale nikdy nebylo implementováno. Některé softwarové aplikace se jej však rozhodly implementovat samy. Například týmy peněženky Samourai vyvinuly vlastní implementaci BIP47 nazvanou "PayNym".
Obecný princip BIP47 a PayNym
Cílem BIP47 je umožnit přijímání velkého počtu plateb bez opakovaného používání adres. Je založen na použití opakovaně použitelného platebního kódu, který umožňuje různým vydavatelům zaslat několik plateb na jeden kód patřící jinému uživateli. Příjemce tak nemusí pro každou transakci uvádět novou, prázdnou adresu, což značně usnadňuje výměnu a zároveň zachovává důvěrnost.
Uživatel tak může zcela volně sdílet svůj platební kód, ať už na sociálních sítích nebo na svých webových stránkách, aniž by riskoval ztrátu důvěrnosti, na rozdíl od běžné adresy příjemce nebo veřejného klíče.
K provedení transakce potřebují obě strany peněženku Bitcoin s implementací BIP47, například PayNym na Samurai Wallet nebo Sparrow Wallet. Společné použití jejich platebních kódů mezi nimi vytvoří tajný kanál. Aby se tento kanál účinně vytvořil, musí vydavatel provést v bitcoinovém blockchainu určitou transakci, známou jako "notifikační transakce" (více o ní později).
Kombinací platebních kódů dvou uživatelů vznikne sdílené tajemství, které následně vytvoří velký počet jedinečných adres pro příjem bitcoinů (přesně 2^32, tedy asi 4 miliardy). Tímto způsobem nejsou platby provedené prostřednictvím BIP47 ve skutečnosti adresovány na samotný platební kód, ale spíše na klasické přijímací adresy odvozené z platebních kódů zúčastněných uživatelů.
Kód platby tak slouží jako virtuální identifikátor odvozený od osiva portfolia. V hierarchické odvozovací struktuře portfolia je kód platby umístěn na úrovni 3, tj. na úrovni účtu.
Cíl odvození pro BIP47 je označen indexem 47 (0x8000002F), který odkazuje na BIP47. Příklad odvozovací cesty pro opakovaně
použitelný platební kód je následující:
m/47'/0'/0'/
Abyste si mohli udělat představu o tom, jak vypadá kód platby, zde je ten můj:
PM8TJSBiQmNQDwTogMAbyqJe2PE2kQXjtgh88MRTxsrnHC8zpEtJ8j7Aj628oUFk8X6P5rJ7P5qDudE4Hwq9JXSRzGcZJbdJAjM9oVQ1UKU5j2nr7VR5
Tento kód může být také zakódován jako kód QR, aby se s ním dalo snadněji komunikovat, stejně jako s běžnou adresou pro příjem.
Pokud jde o PayNym Bots, roboty, které lze někdy vidět na Twitteru, jedná se
o vizuální reprezentaci platebního kódu vytvořenou společností Samourai
Wallet. Jsou generovány pomocí hashovací funkce, což jim dává téměř
jedinečnost. Mají podobu malého řetězce znaků začínajícího na + :
+throbbingpond8B1
+twilightresonance487
+billowingfire340
Tyto avatary lze také znázornit jako obrázky:
Ačkoli tito roboti nemají v rámci BIP47 žádnou specifickou technickou funkci, hrají roli při usnadňování interakce s uživateli tím, že nabízejí snadno rozpoznatelnou vizuální identitu.
V následujících částech této kapitoly věnovaných protokolu BIP47 se podrobně seznámíme s jeho fungováním, se zvláštním důrazem na použité kryptografické metody. Pro plné pochopení těchto poněkud technických vysvětlení je nezbytné nejprve porozumět struktuře peněženek HD, postupům odvozování klíčů a základům kryptografie eliptických křivek. Pokud byste se chtěli do těchto pojmů ponořit hlouběji, je na síti Plan ₿ k dispozici další bezplatný vzdělávací kurz :
https://planb.network/courses/46b0ced2-9028-4a61-8fbc-3b005ee8d70f
Přesto bych vám doporučil, abyste se jimi řídili, protože pochopení technického fungování BIP47 vám usnadní porozumění dalším podobným návrhům, o kterých budeme hovořit v následujících kapitolách
Opakovaně použitelný platební kód
Jak již bylo zmíněno, opakovaně použitelný platební kód se nachází v hloubce
3 peněženky HD, takže je srovnatelný s xpubem, a to jak z
hlediska jeho pozice ve struktuře peněženky, tak z hlediska jeho role.
80bajtový kód platby se rozděluje takto:
- Byte
0: Verze**. Pro první verzi BIP47 je tento bajt nastaven na0x01; - Byte
1: Bitové pole**. Tento prostor je vyhrazen pro integraci dalších údajů pro specifické použití. Pro klasické použití PayNym je tento bajt nastaven na0x00; - Byte
2: Paritay**. Tento bajt je0x02nebo0x03, což udává, zda je pořadí veřejného klíče sudé nebo liché, protože se používá komprimovaný veřejný klíč; - Od bajtu
3do bajtu34: Hodnotax**. Tyto bajty představují absenci veřejného klíče. Konkatenacexa parityytvoří kompletní komprimovaný veřejný klíč; - Od bajtu
35do bajtu66: Řetězcový kód**. Tento prostor obsahuje řetězcový kód spojený s veřejným klíčem; - Od bajtu
67do bajtu79: Výplň**. Tento prostor je určen pro případný budoucí vývoj. V současné verzi sem jednoduše umístíme nuly, abychom dosáhli 80bajtové velikosti požadované pro výstupOP_RETURN.
Zde je hexadecimální reprezentace mého opakovaně použitelného platebního kódu, který jsem již uvedl v předchozí části:
0x010002a0716529bae6b36c5c9aa518a52f9c828b46ad8d907747f0d09dcd4d9a39e97c3c5f37c470c390d842f364086362f6122f412e2b0c7e7fc6e32287e364a7a36a00000000000000000000000000
Dále musí být na začátek přidán předčíslí P, které jasně
označuje, že se jedná o kód platby. Tento bajt je reprezentován znakem 0x47 :
0x47010002a0716529bae6b36c5c9aa518a52f9c828b46ad8d907747f0d09dcd4d9a39e97c3c5f37c470c390d842f364086362f6122f412e2b0c7e7fc6e32287e364a7a36a00000000000000000000000000
Nakonec se pro zajištění integrity platebního kódu provede výpočet
kontrolního součtu pomocí HASH256, který se skládá z
dvojnásobného hashe pomocí funkce SHA256. První čtyři bajty
tohoto hashe jsou pak spojeny na konci platebního kódu:
0x47010002a0716529bae6b36c5c9aa518a52f9c828b46ad8d907747f0d09dcd4d9a39e97c3c5f37c470c390d842f364086362f6122f412e2b0c7e7fc6e32287e364a7a36a00000000000000000000000000567080c4
Po dokončení těchto kroků je platební kód připraven. Zbývá jej pouze převést do základu 58, abyste získali konečnou verzi:
PM8TJSBiQmNQDwTogMAbyqJe2PE2kQXjtgh88MRTxsrnHC8zpEtJ8j7Aj628oUFk8X6P5rJ7P5qDudE4Hwq9JXSRzGcZJbdJAjM9oVQ1UKU5j2nr7VR5
Při vytváření platebního kódu používáme komprimovaný veřejný klíč a řetězcový kód. Oba jsou odvozeny deterministicky a hierarchicky ze semínka peněženky. Odvozovací cesta, která se k tomu používá, je :
m/47'/0'/0'/
Konkrétně při generování komprimovaného veřejného klíče a řetězcového kódu
spojeného s opakovaně použitelným platebním kódem začneme výpočtem hlavního
soukromého klíče ze semínka peněženky. Poté přistoupíme k odvození dvojice
dceřiných klíčů pomocí indexu 47 + 2^31 (posílená derivace).
Poté následují další dvě po sobě jdoucí odvození dceřiných párů, vždy s
použitím indexu 2^31 (zesílené odvození).
Diffie-Hellmanova výměna klíčů na eliptických křivkách (ECDH)
Kryptografický protokol, který je základem protokolu BIP47, je znám pod zkratkou ECDH, což znamená Elliptic-Curve Diffie-Hellman. Tato metoda je variantou původní Diffie-Hellmanovy výměny klíčů.
Diffie-Hellmanův protokol byl představen v roce 1976 a umožňuje dvěma stranám, z nichž každá je vybavena párem klíčů (veřejným a soukromým), dohodnout se na společném tajemství, i když komunikují pouze veřejným, nezabezpečeným kanálem.
Toto sdílené tajemství (v tomto případě modrý klíč) lze pak použít pro další operace. Typicky lze toto sdílené tajemství použít k šifrování a dešifrování komunikace v nezabezpečené síti:
Diffie-Hellman k tomu používá modulární aritmetiku pro výpočet sdíleného tajemství. Zde je laicky řečeno, jak to funguje:
- Alice a Bob se dohodnou na společné barvě, v tomto případě žluté, která je veřejným údajem (útočníci tuto barvu znají);
- Alice si vybere tajnou barvu, v tomto případě červenou, a smícháním obou barev získá oranžovou;
- Bob si také vybere tajnou barvu, v tomto případě modrou, a smíchá ji se žlutou, aby získal zelenou;
- Poté si vymění výsledné barvy, oranžovou a zelenou. Tato výměna může probíhat v nezabezpečené síti a může být pozorována útočníky;
- Smícháním Bobovy zelené barvy s její vlastní tajnou barvou získá Alice hnědou;
- Bob, který provede totéž s Alicinou oranžovou a tajnou modrou, získá také hnědou.
V této popularizaci představuje hnědá barva tajemství sdílené Alicí a Bobem. Představte si, že ve skutečnosti je pro útočníka nemožné oddělit oranžovou a zelenou barvu, aby zjistil Alicino nebo Bobovo tajemství.
Nyní se podívejme, jak tento protokol skutečně funguje, a to nikoli pomocí analogií s barvami, ale pomocí reálných čísel a modulární aritmetiky!
Než se pustíme do Diffieho-Hellmanových mechanismů, dovolte mi, abych vám krátce připomněl dva základní matematické pojmy, které budeme potřebovat:
- Prvočíslo je přirozené číslo, které má pouze dva
dělitele:
1a sebe sama. Například7je prvočíslo, protože je dělitelné pouze čísly1a7. Na druhou stranu8není prvočíslo, protože je dělitelné1,2,4a8. Má tedy čtyři kladné celočíselné dělitele místo dvou; - modulo (označované
modnebo\%) je matematická operace, která mezi dvěma celými čísly vrací zbytek euklidovského dělení prvního číslem druhým. Například16\bmod 5 =1$.
Výměna Diffieho-Hellmanova klíče mezi Alicí a Bobem probíhá takto:
- Alice a Bob se dohodnou na dvou společných číslech:
pag.pje prvočíslo, a čím větší číslo, tím bezpečnější bude Diffie-Hellmanova šifra.gje primitivní kořenp. Tato dvě čísla lze v nezabezpečené síti komunikovat otevřeně. Představují ekvivalent žluté barvy v předchozí popularizaci. Je proto důležité, aby Alice a Bob používali přesně stejné hodnoty propag. - Po definování těchto parametrů si Alice a Bob zvolí tajné náhodné číslo.
Alice pojmenuje své tajné náhodné číslo
a(odpovídá červené barvě) a Bob pojmenuje svéb(odpovídá modré barvě). Tato čísla musí zůstat tajná. - Místo přímé výměny čísel
aabsi každá strana vypočítáAaBtakto:
A se rovná g zvýšenému na mocninu a modulo p :
A = g^a \bmod p B se rovná g zvýšenému na mocninu b modulo p :
B = g^b \bmod p - Mezi oběma stranami se vymění hodnoty
A(odpovídající oranžové barvě) aB(odpovídající zelené barvě). Tato výměna může probíhat v nezabezpečené síti v otevřeném textu; - Alice po obdržení
Bvypočítá hodnotuztakto:
z se rovná B zvýšenému na mocninu a modulo p :
z = B^a \bmod p Připomínka:
B = g^b \bmod p Výsledkem je :
z = B^a \bmod p z = (g^b)^a \bmod p Uplatněním pravidel výkonu :
(x^n)^m = x^{nm} Výsledkem je :
z = g^{ba} \bmod p - Bob po obdržení
Avypočítá hodnotuznásledujícím způsobem:
z se rovná A zvýšenému na mocninu b modulo p :
z = A^b \bmod p Výsledkem je :
z = (g^a)^b \bmod p z = g^{ab} \bmod p z = g^{ba} \bmod p Díky distributivitě operátoru modulo dostanou Alice a Bob přesně stejnou
hodnotu z. Toto číslo
představuje jejich společné tajemství, ekvivalentní hnědé barvě v předchozí popularizaci s plechovkami barvy. Toto
společné tajemství nyní mohou použít k symetrickému šifrování své komunikace
v nezabezpečené síti.
Útočník, i když bude mít k dispozici p, g, A a B (veřejné hodnoty), nebude
schopen vypočítat a, b nebo z (soukromé hodnoty). K tomu
by bylo nutné exponenciálu obrátit, což je operace, která je nemožná bez postupného
vyzkoušení všech možností, neboť se rovná výpočtu diskrétního logaritmu, tj.
reciproké hodnoty exponenciály v konečné cyklické grupě.
Pokud jsou tedy hodnoty a, b a p dostatečně velké, je
Diffie-Hellmanův protokol bezpečný. Při parametrech 2048 bitů (600místné
desítkové číslo) by testování všech možností pro a a b bylo obvykle nepraktické.
K dnešnímu dni je s takovými čísly tento algoritmus považován za bezpečný.
V tom spočívá hlavní nevýhoda Diffieho-Hellmanova protokolu. Aby byl algoritmus bezpečný, musí používat velká čísla. Proto se dnes raději používá algoritmus ECDH (Elliptic Curve Diffie-Hellman), varianta Diffie-Hellmanova protokolu založená na algebraické křivce, přesněji na eliptické křivce. Tento přístup umožňuje pracovat s mnohem menšími čísly při zachování rovnocenného zabezpečení, čímž se snižují prostředky potřebné pro výpočet a ukládání.
Obecný princip algoritmu zůstává stejný. Místo náhodného čísla a a čísla A vypočteného z a modulární exponencí však používáme
dvojici klíčů vytvořených na eliptické křivce. Namísto spoléhání na distributivitu
operátoru modulo využíváme skupinový zákon na eliptických křivkách, přesněji
asociativitu tohoto zákona.
Pro stručné vysvětlení principu kryptografie na eliptických křivkách je
soukromý klíč reprezentován náhodným číslem v rozmezí 1 až n-1, kde n představuje řád křivky. Veřejný
klíč je naproti tomu konkrétní bod na této křivce, získaný ze soukromého klíče
sčítáním a zdvojováním bodů z generujícího bodu podle rovnice :
K = k \cdot G V tomto vzorci K označuje
veřejný klíč, k soukromý klíč
a G bod generátoru.
Podstatnou vlastností těchto klíčů je snadnost, s jakou lze z k a G vypočítat K, zatímco z K a G je prakticky nemožné
zjistit k. Tato asymetrie
vytváří jednosměrnou funkci. Jinými slovy, je snadné vypočítat veřejný klíč,
pokud znáte soukromý klíč, ale získat soukromý klíč z veřejného klíče je
nemožné. Tato bezpečnost je dále podpořena výpočetní náročností diskrétního
logaritmu.
Tuto vlastnost využijeme k úpravě našeho Diffie-Hellmanova algoritmu. Princip fungování ECDH je následující:
- Alice a Bob se dohodnou na kryptograficky bezpečné eliptické křivce a jejích parametrech. Tyto informace jsou veřejné;
- Alice vygeneruje náhodné číslo
ka, které bude jejím soukromým klíčem. Tento soukromý klíč musí zůstat utajen. Svůj veřejný klíčKaurčuje sčítáním a zdvojováním bodů na zvolené eliptické křivce:
K_a = k_a \cdot G - Bob také vygeneruje náhodné číslo
kb, které bude jeho soukromým klíčem. Vypočítá související veřejný klíčKb:
K_b = k_b \cdot G - Alice a Bob si vymění své veřejné klíče
KaaKbv nezabezpečené veřejné síti. - Alice vypočítá bod
(x,y)na křivce použitím svého soukromého klíčekana Bobův veřejný klíčKb:
(x,y) = k_a \cdot K_b - Bob vypočítá bod
(x,y)na křivce použitím svého soukromého klíčekbna Alicin veřejný klíčKa:
(x,y) = k_b \cdot K_a - Alice a Bob získají stejný bod na eliptické křivce. Sdíleným tajemstvím
bude abscesa
xtohoto bodu.
Dostanou stejné sdílené tajemství, protože :
(x,y) = k_a \cdot K_b = k_a \cdot (k_b \cdot G) = (k_a \cdot k_b) \cdot G = (k_b \cdot k_a) \cdot G = k_b \cdot (k_a \cdot G) = k_b \cdot K_a Případný útočník, který sleduje nezabezpečenou veřejnou síť, bude moci získat pouze veřejné klíče jednotlivých osob a parametry zvolené eliptické křivky. Jak bylo vysvětleno výše, tyto informace samy o sobě k určení soukromých klíčů nestačí. Útočník proto nemůže zjistit tajemství sdílené mezi Alicí a Bobem.
ECDH je tedy algoritmus pro výměnu klíčů. Často se používá ve spojení s dalšími kryptografickými metodami k vytvoření kompletního protokolu. ECDH je například základem TLS (Transport Layer Security), šifrovacího a autentizačního protokolu používaného pro internetovou transportní vrstvu. TLS používá ECDHE pro výměnu klíčů, což je varianta ECDH, kde jsou klíče efemérní, aby byla zajištěna trvalá důvěrnost. Kromě toho protokol TLS používá autentizační algoritmy, jako je ECDSA, šifrovací algoritmy, jako je AES, a hašovací funkce, jako je SHA256.
Protokol TLS je zodpovědný za znak s ve slově https a visací zámek v adresním řádku prohlížeče - symboly šifrované
komunikace. Absolvováním tohoto kurzu budete používat ECDH a je velmi pravděpodobné,
že jej budete používat denně, aniž byste o tom věděli.
Transakce oznámení
Jak jsme viděli v předchozí části, ECDH je variantou Diffie-Hellmanovy výměny pomocí párů klíčů vytvořených na eliptické křivce. Je dobře, že v našich peněženkách Bitcoin již máme mnoho párů klíčů respektujících tento standard! Myšlenka BIP47 spočívá v použití párů klíčů hierarchických deterministických peněženek Bitcoin obou stran k vytvoření sdílených, efemérních tajemství mezi nimi. BIP47 místo toho používá ECDHE (Elliptic Curve Diffie-Hellman Ephemeral).
ECDHE se nejprve používá v BIP47 k přenosu platebního kódu od odesílatele k příjemci. Jedná se o známou notifikační transakci. Tento krok je nezbytný, protože pro efektivní fungování protokolu BIP47 musí obě zúčastněné strany (odesílatel i příjemce) znát své platební kódy. Tato znalost umožňuje odvození efemérních veřejných klíčů a následně i souvisejících prázdných adres příjemce.
Odesílatel logicky již před touto výměnou zná platební kód příjemce, protože jej získal mimo řetězec, například z jeho webových stránek, faktury nebo sociálních sítí. Příjemce však nemusí nutně znát platební kód odesílatele. Tento kód mu však musí být předán, jinak nebude schopen odvodit efemérní klíče potřebné k identifikaci adres, na kterých jsou uloženy jeho bitcoiny, nebo získat přístup ke svým prostředkům. Ačkoli tento přenos kódu odesílatele lze technicky provést mimo řetězec jinými komunikačními prostředky, představuje to problém, pokud má být peněženka získána pouze ze seedu.
Je to proto, že na rozdíl od běžných adres nejsou adresy BIP47 odvozeny
přímo ze seedu příjemce - v tomto případě by bylo jednodušší použít xpub - ale jsou výsledkem výpočtu kombinujícího dva platební kódy: kód odesílatele
a kód příjemce. Pokud tedy příjemce ztratí svou peněženku a pokusí se ji obnovit
ze svého seedu, obnoví svůj vlastní platební kód, který je přímo odvozen z jeho
seedu. K obnovení efemérních adres však bude potřebovat také platební kódy všech,
kteří mu bitcoiny prostřednictvím BIP47 poslali. Proto je důležitá notifikační
transakce, která umožňuje tyto informace uložit do bitcoinového blockchainu a
zároveň je velmi snadno najít, aniž by bylo nutné prohledávat miliardy transakcí
provedených od jeho spuštění v roce 2009.
Proto by bylo možné implementovat BIP47 bez použití oznamovací transakce za předpokladu, že si každý uživatel uchovává zálohu platebních kódů svých kolegů. Tento způsob se však ukazuje jako složitý na správu, dokud nebude vyvinuto jednoduché, robustní a účinné řešení pro vytváření, ukládání a aktualizaci těchto záloh. Za současného stavu je notifikační transakce téměř nevyhnutelná.
V následujících kapitolách se však budeme zabývat dalšími protokoly s podobnými cíli jako BIP47, které však nevyžadují oznamovací transakci. Tyto alternativy však přinášejí vlastní kompromisy.
Kromě úlohy ukládání platebních kódů má notifikační transakce také funkci oznámení pro příjemce, jak napovídá její název. Upozorňuje zákazníka příjemce na skutečnost, že byl vytvořen nový platební tunel, a navrhuje mu, aby sledoval výsledné efemerní adresy.
Model důvěrnosti BIP47
Před podrobným popisem technického fungování oznamovací transakce je důležité probrat model důvěrnosti spojený s BIP47, který odůvodňuje určitá opatření přijatá při vytváření této počáteční transakce.
Samotný platební kód nepředstavuje přímé riziko pro důvěrnost. Na rozdíl od tradičního modelu Bitcoinu, jehož cílem je přerušit spojení mezi identitou uživatele a jeho transakcemi (které jsou veřejné) zachováním anonymity klíčů a adres, může být platební kód otevřeně spojen s identitou, aniž by představoval hrozbu.
Důvodem je, že kód platby se nepoužívá k přímému odvození adres, na které jsou platby BIP47 zasílány. Místo toho jsou tyto adresy generovány prostřednictvím aplikace ECDH mezi klíči odvozenými z platebních kódů obou zúčastněných stran.
Kód platby tedy sám o sobě nevede přímo ke ztrátě důvěrnosti, protože se z něj odvozuje pouze adresa oznámení. Ačkoli tato adresa může odhalit určité informace, obvykle neodhaluje strany, s nimiž transakce probíhají, pokud není provedena důkladná analýza řetězce. Pokud totiž odesílatel používá k provedení notifikační transakce UTXO, které lze spojit s jeho identitou, pak je možné odvodit, že jeho identita je pravděpodobně spojena s platbami BIP47 s vaším platebním kódem. To neodhalí podkladové transakce, ale naznačí jejich pravděpodobnou existenci.
Proto je nezbytné zachovat toto přísné oddělení platebních kódů uživatelů. S ohledem na to je počáteční sdělení kódu kritickým okamžikem pro důvěrnost plateb, který je však nezbytný pro správné fungování protokolu. Pokud lze jeden z platebních kódů získat veřejně (například na webových stránkách), nesmí být druhý kód, kód odesílatele, v žádném případě spojen s prvním kódem.
Uveďme si konkrétní příklad: Chci přispět politickému hnutí prostřednictvím BIP47 :
- Organizace zveřejnila svůj platební kód na svých webových stránkách nebo na sociálních sítích;
- Tento kodex je tedy spojen s politickým hnutím;
- Dostanu tento kód platby ;
- Před odesláním se musím ujistit, že znají můj vlastní platební kód, který je také spojen s mou identitou, protože ho používám k přijímání transakcí na sociálních sítích.
Jak mohu předat svůj kód bez rizika? Použití běžných komunikačních prostředků by mohlo vést k úniku informací, a tím i ke spojení mé osoby s tímto politickým hnutím. Notifikační transakce nabízí řešení díky vrstvě šifrování, která právě takovému spojení dvou kódů brání. Není to sice jediná metoda tajného přenosu platebního kódu odesílatele, ale je velmi účinná.
V níže uvedeném diagramu jsou oranžovými čarami vyznačeny body, kde musí být tok informací přerušen, a černé šipky ukazují spojení potenciálně pozorovatelná třetími stranami:
Ve skutečnosti je v tradičním modelu důvěrnosti Bitcoinu často složité zcela oddělit tok informací mezi párem klíčů a uživatelem, zejména u vzdálených transakcí. Například v rámci dárcovské kampaně musí příjemce nevyhnutelně zveřejnit adresu nebo veřejný klíč prostřednictvím svých webových stránek nebo sociálních sítí. Správné použití BIP47, zejména u oznamovací transakce, umožňuje tento problém obejít díky ECDHE a šifrovací vrstvě, které se budeme věnovat později.
Klasický model důvěrnosti Bitcoinu samozřejmě stále platí pro efemérní veřejné klíče, které jsou odvozeny z kombinace dvou platebních kódů. Oba modely se ve skutečnosti doplňují. Chci zde zdůraznit, že na rozdíl od obvyklého použití veřejného klíče pro příjem Bitcoinů lze platební kód spojit s konkrétní identitou, protože informace "Alice provádí transakci s Bobem" je porušena v jiné fázi. Platební kód se používá k vygenerování platebních adres, ale pouze na základě pozorování blockchainu není možné spojit platební transakci BIP47 s platebními kódy použitými k jejímu provedení, ledaže by příslušné UTXO byly již dříve spojeny s identitou a uživatelé si své platební kódy spojili s příslušnými identitami.
Závěrem lze říci, že model důvěrnosti, který nabízí platby BIP47, lze považovat za lepší než základní model Bitcoinu, i když to neznamená, že je to kouzelné.
Vytvoření transakce oznámení
Nyní se podívejme, jak tato oznamovací transakce funguje. Představme si, že Alice chce poslat peníze Bobovi pomocí BIP47. V mém příkladu Alice vystupuje jako odesílatel a Bob jako příjemce. Bob zveřejnil svůj platební kód na svých webových stránkách. Alice tedy již zná Bobův platební kód.
1- Alice vypočítá sdílené tajemství pomocí ECDH :
- Zvolí si pár klíčů ze své peněženky HD na jiné větvi, než je její platební kód. Všimněte si, že tento pár nesmí být snadno spojitelný s Alicinou oznamovací adresou ani s Alicinou identitou (viz předchozí část);
- Alice vybere soukromý klíč pro tento pár. Nazýváme ho
a(malá písmena);
a - Alice získá veřejný klíč spojený s Bobovou oznamovací adresou. Tento klíč
je prvním dítětem odvozeným z Bobova platebního kódu (index
/0). Tento veřejný klíč nazývámeB(velká písmena). Soukromý klíč spojený s tímto veřejným klíčem se nazýváb(malá písmena).Bse určuje sčítáním a zdvojováním bodů na eliptické křivce odG(generující bod) sb(soukromý klíč):
B = b \cdot G
- Alice vypočítá tajný bod
S(velké písmeno) na eliptické křivce sčítáním a zdvojováním bodů, přičemž použije svůj soukromý klíčaz Bobova veřejného klíčeB.
S = a \cdot B
- Alice vypočítá zaslepující faktor
f, který bude použit k zašifrování jejího platebního kódu. K tomu použije funkci HMAC-SHA512, která určí pseudonáhodné číslo. Druhým vstupem této funkce je hodnota, kterou bude moci zjistit pouze Bob:x, což je abscessa výše vypočteného tajného bodu. Prvním vstupem jeo, což je UTXO spotřebované jako vstup do této transakce (outpoint).
f = \text{HMAC-SHA512}(o, x)
**2 - Alice převede svůj osobní platební kód do báze 2 (binární) **
3- Tento oslepující faktor používá jako klíč k symetrickému šifrování
užitečného zatížení svého platebního kódu. Použitý šifrovací algoritmus je jednoduše XOR. Prováděná
operace je srovnatelná s Vernamovou šifrou, známou také jako "One-Time Pad".
- Alice nejprve rozdělí svůj oslepující faktor na dvě části: prvních 32
bajtů pojmenuje
f1a posledních 32 bajtů pojmenujef2. Tím získáme :
f = f1 || f2
- Alice vypočítá zvlášť šifru
x'abscisy veřejného klíčexsvého platebního kódu a zvlášť šifruc'svého řetězcového kóduc. jako šifrovací klíče sloužíf1af2. Použitá operace jeXOR(neboli exkluzivní).
x' = x \oplus f1
c' = c \oplus f2
- Alice nahradí skutečné hodnoty abscesu veřejného klíče
xa řetězcového kóducve svém platebním kódu zašifrovanými hodnotamix'ac'.
4- Alice má tedy v současné době svůj platební kód se
zašifrovaným nákladem. Sestaví a odvysílá transakci zahrnující její veřejný
klíč A jako vstup, výstup na
Bobovu notifikační adresu a výstup OP_RETURN sestávající z
jejího platebního kódu se zašifrovaným nákladem. Tato transakce je oznamovací transakce.
OP_RETURN je opcode, který označuje výstup transakce Bitcoin jako
neplatný. Dnes se používá k vysílání nebo ukotvení informací v bitcoinovém blockchainu.
Může obsahovat až 80 bajtů dat, která jsou následně zapsána do řetězce a viditelná
pro všechny ostatní uživatele.
Jak jsme viděli v předchozích částech, ECDH se používá k vytvoření sdíleného tajemství mezi dvěma uživateli, kteří komunikují v nezabezpečené síti a mohou být pozorováni útočníky. V BIP47 se ECDH používá ke komunikaci v síti Bitcoin, která je ze své podstaty transparentní komunikační sítí a je pozorována mnoha útočníky. Sdílené tajemství vypočtené prostřednictvím výměny klíčů ECDH se pak použije k zašifrování tajné informace, která má být přenesena: platebního kódu odesílatele (Alice).
Shrnu kroky, které jsme právě společně viděli, a provedu transakci oznámení:
- Alice získá Bobův platební kód a adresu pro oznámení;
- Alice vybere UTXO ze svého portfolia HD s odpovídajícím párem klíčů;
- Vypočítá tajný bod na eliptické křivce pomocí ECDH ;
- Tento tajný bod použije k výpočtu HMAC, což je zaslepující faktor;
- Tento oslepující faktor používá k zašifrování nákladu svého osobního platebního kódu;
- Ke sdělení skrytého platebního kódu Bobovi používá výstup transakce
OP_RETURN.
Oznámení o transakci: praktická studie
Abychom podrobněji pochopili, jak to funguje, a zejména použití OP_RETURN, podívejme se na skutečnou notifikační transakci. Takovou transakci jsem
provedl na testnetu, který najdete kliknutím sem.
Při pohledu na tuto transakci již vidíme, že má jeden vstup a 4 výstupy:
- Prvním výstupem je
OP_RETURN, který obsahuje můj skrytý kód platby; - Druhý výstup 546 sats ukazuje na adresu oznámení mého příjemce;
- Třetí výstup ve výši 15 000 sátů představuje poplatek za službu, protože jsem k vytvoření této transakce použil peněženku Samourai;
- Čtvrtý výstup 2 miliony sátů představuje směnný kurz, tj. zbývající rozdíl mého vstupu, který se vrací na jinou adresu, která mi patří.
Nejzajímavější pro studium je zřejmě výstup 0 pomocí OP_RETURN.
Podívejme se blíže na to, co obsahuje. Zde je scriptPubKey v hexadecimálním
tvaru :
6a4c50010002b13b2911719409d704ecc69f74fa315a6cb20fdd6ee39bc9874667703d67b164927b0e88f89f3f8b963549eab2533b5d7ed481a3bea7e953b546b4e91b6f50d800000000000000000000000000
Tento skript má několik částí. Za prvé, :
6a4c
Mezi opcodes můžeme rozpoznat 0x6a, který označuje OP_RETURN a 0x4c, který označuje OP_PUSHDATA1.
Bajt následující za tímto posledním opkódem udává velikost následného
užitečného zatížení. Označuje 0x50, tedy 80 bajtů:
6a4c50
Dále máme metadata mého platebního kódu v čistém textu:
010002
Šifrovaná abscesa veřejného klíče mého platebního kódu :
b13b2911719409d704ecc69f74fa315a6cb20fdd6ee39bc9874667703d67b164
Šifrovaný řetězový kód mého platebního kódu :
927b0e88f89f3f8b963549eab2533b5d7ed481a3bea7e953b546b4e91b6f50d8
A nakonec padding na 80 bajtů, což je standardní velikost OP_RETURN :
00000000000000000000000000
Abych vám pomohl porozumět, zde je můj kód platby v prostém textu v základu 58 :
PM8TJQCyt6ovbozreUCBrfKqmSVmTzJ5vjqse58LnBzKFFZTwny3KfCDdwTqAEYVasn11tTMPc2FJsFygFd3YzsHvwNXLEQNADgxeGnMK8Ugmin62TZU
A v základu 16 :
4701000277507c9c17a89cfca2d3af554745d6c2db0e7f6b2721a3941a504933103cc42add94881210d6e752a9abc8a9fa0070e85184993c4f643f1121dd807dd556d1dc000000000000000000000000008604e4db
Porovnáme-li můj kód platby v prostém textu s kódem OP_RETURN,
zjistíme, že HRP (0x47) a kontrolní součet (0x8604e4db) nejsou přeneseny. To je normální, protože tyto informace jsou určeny pro
lidi.
Dále můžeme rozpoznat verzi (0x01), bitové pole (0x00) a paritu veřejného klíče (0x02). A na konci platebního kódu
jsou prázdné bajty (0x0000000000000000000000000000000000),
které umožňují vycpávku, aby celkový počet bajtů dosáhl 80. Všechna tato
metadata jsou přenášena nešifrovaně.
Nakonec si můžeme všimnout, že absces veřejného klíče (0x77507c9c17a89cfca2d3af554745d6c2db0e7f6b2721a3941a504933103cc42a) a řetězcový kód (0xdd94881210d6e752a9abc8a9fa0070e85184993c4f643f1121dd807dd556d1dc) byly zašifrovány. Jedná se o užitečné zatížení platebního kódu.
Co je XOR?
V předchozích částech jsme viděli, že platební kód je přenášen zašifrovaný pomocí operace XOR. Podívejme se blíže na to, jak tato operace funguje, protože je v kryptografii hojně využívána.
XOR je bitový logický operátor založený na Booleově algebře. Při zadání dvou
operandů v bitech vrací 1, pokud se bity stejného řádu liší, a
vrací 0, pokud se bity stejného řádu rovnají. Zde je
pravdivostní tabulka XOR podle hodnot operandů D a E :
| D | E | D XOR E |
| --- | --- | ------- |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Například:
0110 \oplus 1110 = 1000 Nebo :
010011 \oplus 110110 = 100101 U ECDH je použití XOR jako šifrovací vrstvy obzvláště důsledné. Za prvé, díky tomuto operátoru je šifrování symetrické. To znamená, že příjemce může dešifrovat platební kód stejným klíčem, který byl použit pro šifrování. Šifrovací a dešifrovací klíče se vypočítávají ze sdíleného tajemství pomocí ECDH. Tuto symetrii umožňují komutativní a asociativní vlastnosti operátoru XOR:
- Další vlastnosti :
D \oplus D = 0 D \oplus 0 = D - Komutativita :
D \oplus E = E \oplus D - Asociativita :
D \oplus (E \oplus Z) = (D \oplus E) \oplus Z = D \oplus E \oplus Z Pokud :
D \oplus E = L Pak :
D \oplus L = D \oplus (D \oplus E) = D \oplus D \oplus E = 0 \oplus E = E \\
\therefore D \oplus L = E Za druhé, tato šifrovací metoda je velmi podobná Vernamově šifře (One-Time Pad), jedinému dosud známému šifrovacímu algoritmu, který má bezpodmínečnou (nebo absolutní) bezpečnost. Aby Vernamova šifra měla tuto vlastnost, musí být šifrovací klíč dokonale náhodný, stejně velký jako zpráva a použitý pouze jednou. V šifrovací metodě použité zde pro BIP47 má klíč skutečně stejnou velikost jako zpráva a oslepující faktor má přesně stejnou velikost jako konkatenace abscesu veřejného klíče s řetězcovým kódem platebního kódu. Tento šifrovací klíč se použije pouze jednou. Na druhou stranu tento klíč není odvozen z dokonalé náhodnosti, protože se jedná o HMAC. Je spíše pseudonáhodný. Nejedná se tedy o Vernamovu šifru, ale metoda se jí blíží.
Přijetí oznamovací transakce
Nyní, když Alice odeslala oznamovací transakci Bobovi, podívejme se, jak ji Bob interpretuje. Připomínáme, že Bob musí mít přístup k Alicinu platebnímu kódu. Bez této informace, jak uvidíme v následující části, nebude schopen odvodit páry klíčů vytvořené Alicí, a nebude tedy schopen získat přístup ke svým bitcoinům přijatým prostřednictvím BIP47. Prozatím je Alicin platební kódový náklad zašifrován. Podívejme se, jak jej Bob dešifruje.
1- Bob sleduje transakce, které vytvářejí výstupy s jeho notifikační adresou.
2- Když má transakce na své oznamovací adrese výstup, Bob ji analyzuje, aby zjistil, zda obsahuje výstup OP_RETURN, který je v souladu se standardem BIP47.
3- Pokud je první bajt užitečného zatížení OP_RETURN 0x01, Bob začne hledat možné tajemství sdílené s ECDH :
- Bob vybere vstupní veřejný klíč pro transakci. To znamená, že veřejný klíč
Alice s názvem
As :
A = a \cdot G
- Bob si vybere soukromý klíč
bspojený s jeho osobní oznamovací adresou :
b
- Bob vypočítá tajný bod
S(sdílené tajemství ECDH) na eliptické křivce sčítáním a zdvojováním bodů, přičemž použije svůj soukromý klíčbna Alicin veřejný klíčA:
S = b \cdot A
- Bob určí zaslepující faktor
f, který umožní dešifrovat užitečné zatížení Alicina platebního kódu. Stejným způsobem, jakým jej předtím vypočítala Alice, Bob zjistífaplikací HMAC-SHA512 nax, abscesní hodnotu tajného boduS, a nao, UTXO spotřebované jako vstup této oznamovací transakce:
f = \text{HMAC-SHA512}(o, x)
4- Bob interpretuje údaje OP_RETURN v oznamovací transakci
jako kód platby. Jednoduše dešifruje užitečné zatížení tohoto potenciálního
platebního kódu pomocí zaslepovacího faktoru f:
- Bob rozdělí oslepující faktor
fna 2 části: prvních 32 bajtůfbudef1a posledních 32 bajtů budef2; - Bob dešifruje hodnotu zašifrované abscesy
x'z veřejného klíče Alicina platebního kódu:
x = x' \oplus f1
- Bob dešifruje hodnotu zašifrovaného řetězcového kódu
c'z Alicina platebního kódu:
c = c' \oplus f2
5- Bob zkontroluje, zda hodnota veřejného klíče Alicina platebního kódu patří do skupiny secp256k1. Pokud ano, interpretuje ji jako platný platební kód. Pokud ne, transakci ignoruje.
Nyní, když Bob zná Alicin platební kód, může mu Alice poslat až 2^32 plateb, aniž by musela opakovat notifikační transakci tohoto typu.
Proč to funguje? Jak může Bob určit stejný zaslepující faktor jako Alice, a tak rozluštit její platební kód? Podívejme se blíže na působení ECDH v tom, co jsme právě popsali.
Především se jedná o symetrické šifrování. To znamená, že šifrovací a dešifrovací klíč mají stejnou hodnotu. Tento klíč v oznamovací transakci představuje zaslepující faktor:
f = f1 || f2
Alice a Bob proto musí získat stejnou hodnotu f, aniž by ji předávali přímo, protože útočník by ji mohl ukrást a
dešifrovat tajnou informaci. Tento zaslepující faktor se získá použitím
HMAC-SHA512 na 2 hodnoty:
- abscisy tajného bodu ;
- a UTXO spotřebované na vstupu transakce.
Bob proto potřebuje obě tyto informace, aby mohl dešifrovat Alicin platební kód. Pokud jde o vstupní UTXO, Bob ji může jednoduše získat sledováním oznamovací transakce. Pro tajný bod bude Bob muset použít ECDH. Jak jsme viděli v předchozí části o Diffie-Hellmanovi, pouhou výměnou svých příslušných veřejných klíčů a tajným použitím svých soukromých klíčů na veřejný klíč toho druhého mohou Alice a Bob najít přesný tajný bod na eliptické křivce. Na tomto mechanismu je založena oznamovací transakce:
- Bobův pár klíčů :
B = b \cdot G
- Alicin pár klíčů :
A = a \cdot G
- Pro tajemství
S (x, y):
S = a \cdot B = a \cdot (b \cdot G) = (b \cdot a) \cdot G = b \cdot A
Nyní, když Bob zná Alicin platební kód, bude schopen zjistit její platby BIP47 a bude schopen odvodit soukromé klíče blokující přijaté bitcoiny.
Shrnu kroky, které jsme právě společně viděli, pro příjem a interpretaci transakce oznámení:
- Bob sleduje výstup transakcí na svou oznamovací adresu;
- Když ji zjistí, načte informace obsažené v OP_RETURN ;
- Bob zvolí jako vstup veřejný klíč a vypočítá tajný bod pomocí ECDH ;
- Tento tajný bod použije k výpočtu HMAC, což je zaslepující faktor;
- Tento oslepující faktor použije k dešifrování Alicina platebního kódu obsaženého v OP_RETURN.
Platební transakce BIP47
Podívejme se na proces platby pomocí služby BIP47. Pro připomenutí aktuální situace :
- Alice zná Bobův platební kód, který jednoduše získala z jeho webových stránek;
- Bob zná Alicin platební kód z oznamovací transakce;
- Alice provede první platbu Bobovi. Stejným způsobem jich může provést mnohem více.
Před vysvětlením tohoto postupu je podle mého názoru důležité připomenout,
na kterých indexech právě pracujeme. Cesta odvození kódu platby je popsána
následovně: m/47'/0'/0'. Následující hloubka rozděluje indexy
následovně:
- První normální (nevynucený) dceřiný pár je ten, který se používá k
vygenerování adresy oznámení, o níž byla řeč v předchozí části:
m/47'/0'/0'/0; - V rámci ECDH se ke generování adres pro příjem plateb BIP47 používají
běžné dvojice dceřiných klíčů, jak uvidíme v této části: od
m/47'/0'/0'/0dom/47'/0'/0'/2,147,483,647; - Zesílené dvojice dceřiných klíčů jsou efemérní platební kódy: od
m/47'/0'/0'/0'dom/47'/0'/0'/2 147 483 647'.
Pokaždé, když chce Alice poslat platbu Bobovi, vytvoří novou, jedinečnou, prázdnou adresu, opět pomocí protokolu ECDH:
- Alice si vybere první soukromý klíč odvozený z jejího osobního opakovaně použitelného platebního kódu :
a
- Alice vybere první nepoužitý veřejný klíč odvozený z Bobova platebního
kódu. Tento veřejný klíč budeme nazývat
B. Je spojen se soukromým klíčemb, který zná pouze Bob:
B = b \cdot G
- Alice vypočítá tajný bod
Sna eliptické křivce sčítáním a zdvojováním bodů pomocí svého soukromého klíčeaz Bobova veřejného klíčeB:
S = a \cdot B
- Z tohoto tajného bodu Alice vypočítá sdílený tajný kód
s(malá písmena). Za tímto účelem vybere abscesu tajného boduSs názvemSxa předá tuto hodnotu hashovací funkci SHA256:
S = (Sx, Sy)
s = \text{SHA256}(Sx)
- Alice použije toto sdílené tajemství
sk výpočtu adresy pro příjem platby Bitcoin. Nejprve zkontroluje, zda jesobsaženo v řádu křivky secp256k1. Pokud tomu tak není, zvýší index Bobova veřejného klíče, aby získala další sdílený sekret ; - Ve druhém kroku vypočítá veřejný klíč
K0sečtením bodůBas-Gna eliptické křivce. Jinými slovy, Alice přidá veřejný klíč odvozený z Bobova platebního kóduBk dalšímu bodu vypočtenému na eliptické křivce přidáním a zdvojením bodů se sdíleným tajemstvímsz bodu generátoru křivky secp256k1G. Tento nový bod představuje veřejný klíč a nazýváme hoK0:
K0 = B + s \cdot G
- S tímto veřejným klíčem
K0může Alice standardním způsobem (např. SegWit V0 v bech32) odvodit prázdnou adresu pro příjem.
Jakmile Alice získá Bobovu přijímací adresu K0, může provést transakci s bitcoiny standardním způsobem. Za tímto účelem
si vybere UTXO, které vlastní a které je zabezpečeno párem klíčů z jiné
větve její peněženky HD, a spotřebuje jej k uspokojení výstupu na Bobovu
adresu K0. Je důležité si
uvědomit, že tato platba po odvození adresy probíhá klasickým způsobem a již
nezávisí na klíčích spojených s BIP47.
Shrnu kroky, které jsme si právě společně ukázali, pro odeslání platby BIP47:
- Alice si vybere první dceřiný soukromý klíč odvozený z jejího osobního platebního kódu ;
- Z prvního nepoužitého dceřiného veřejného klíče odvozeného z Bobova platebního kódu vypočítá tajný bod na eliptické křivce pomocí ECDH;
- Tento tajný bod použije k výpočtu sdíleného tajemství pomocí SHA256 ;
- Toto sdílené tajemství použije k výpočtu nového tajného bodu na eliptické křivce;
- Tento nový tajný bod přidá k Bobovu veřejnému klíči;
- Získá nový efemérní veřejný klíč, ke kterému má přidružený soukromý klíč pouze Bob;
- Alice může provést klasickou transakci s Bobem s odvozenou efemérní adresou pro příjem.
Pokud chce Alice provést druhou platbu, bude postupovat stejně jako předtím,
tentokrát však zvolí druhý veřejný klíč odvozený z Bobova platebního kódu.
Konkrétně použije další nepoužitý klíč. Získá tak novou přijímací adresu
patřící Bobovi, označenou K1 :
Tímto způsobem lze pokračovat a získat až 2^32 prázdných adres patřících
Bobovi.
Z vnějšího pohledu, při pohledu na blockchain, je teoreticky nemožné odlišit platbu BIP47 od běžné platby. Zde je příklad platební transakce BIP47 v síti Testnet:
94b2e59510f2e1fa78411634c98a77bbb638e28fb2da00c9f359cd5fc8f87254
Vypadá jako klasická transakce se spotřebovaným vstupem, výstupem platby a směnným kurzem:
Přijetí platby BIP47 a odvození soukromého klíče
Alice právě provedla svou první platbu na prázdnou adresu BIP47 patřící Bobovi. Nyní se podívejme, jak Bob tuto platbu přijme. Uvidíme také, proč Alice nemá přístup k soukromému klíči adresy, kterou právě sama vygenerovala, a jak Bob tento klíč najde, aby mohl utratit právě obdržené bitcoiny.
Jakmile Bob obdrží notifikační transakci od Alice, získá veřejný klíč BIP47 K0 ještě předtím, než jeho korespondent odešle platbu. Pozoruje tedy každou
platbu na přidruženou adresu. Ve skutečnosti okamžitě odvodí několik adres,
které pozoruje (K0, K1, K2, K3...). Zde je uvedeno, jak
odvozuje tento veřejný klíč K0 :
- Bob vybere první dceřiný soukromý klíč odvozený z jeho platebního kódu.
Tento soukromý klíč se jmenuje
b. Je spojen s veřejným klíčemB, s nímž Alice provedla své výpočty v předchozím kroku:
b
- Bob vybere Alicin první veřejný klíč odvozený z jejího platebního kódu.
Tento klíč se jmenuje
A. Je spojen se soukromým klíčema, s nímž Alice provedla své výpočty a který zná pouze Alice. Bob může tento proces provést, protože zná Alicin platební kód, který mu byl zaslán s oznamovací transakcí:
A = a \cdot G
- Bob vypočítá tajný bod
Ssčítáním a zdvojováním bodů na eliptické křivce tak, že použije svůj soukromý klíčbna Alicin veřejný klíčA. I zde se používá ECDH, která zaručuje, že tento bodSbude pro Boba i Alici stejný:
S = b \cdot A
- Stejným způsobem jako Alice vyčlení Bob abscisu tohoto bodu
S. Tuto hodnotu jsme pojmenovaliSx. Tuto hodnotu předá funkci SHA256, aby zjistil sdílené tajemstvís(malé písmeno):
s = \text{SHA256}(Sx)
- Stejným způsobem jako Alice vypočítá Bob bod
s-Gna eliptické křivce. Tento tajný bod pak přidá ke svému veřejnému klíčiB. Poté získá nový bod na eliptické křivce, který interpretuje jako veřejný klíčK0:
K0 = B + s \cdot G
Jakmile Bob získá tento veřejný klíč K0, může odvodit související soukromý klíč a utratit své bitcoiny. Tento
soukromý klíč může vygenerovat pouze on:
- Bob sečte soukromý klíč své dcery
bodvozený z jeho osobního platebního kódu. Hodnotubmůže získat pouze on. Poté přičtebke sdílenému tajemstvísa získák0, soukromý klíčK0:
k0 = b + s
Díky skupinovému zákonu eliptické křivky získá Bob přesně soukromý klíč odpovídající veřejnému klíči, který použila Alice. Máme tedy :
K0 = k0 \cdot G
Shrnu kroky, které jsme si právě společně ukázali, pro přijetí platby BIP47 a výpočet odpovídajícího soukromého klíče:
- Bob vybere první dceřiný soukromý klíč odvozený z jeho osobního platebního kódu ;
- Tajný bod na eliptické křivce vypočítá pomocí ECDH z prvního dceřiného veřejného klíče odvozeného z Alicina řetězcového kódu;
- Tento tajný bod použije k výpočtu sdíleného tajemství pomocí SHA256 ;
- Toto sdílené tajemství použije k výpočtu nového tajného bodu na eliptické křivce;
- Tento nový tajný bod přidá ke svému osobnímu veřejnému klíči;
- Získá nový efemérní veřejný klíč, na který Alice pošle svou první platbu;
- Bob vypočítá soukromý klíč spojený s tímto efemérním veřejným klíčem tak, že přidá svůj dceřiný soukromý klíč odvozený z jeho platebního kódu a sdíleného tajemství.
Protože Alice nemůže získat b (Bobův soukromý klíč), není schopna určit k0 (soukromý klíč spojený s Bobovou přijímací adresou BIP47). Schematicky
můžeme výpočet sdíleného tajemství S znázornit takto:
Jakmile je sdílené tajemství nalezeno pomocí ECDH, Alice a Bob vypočítají
veřejný klíč platby BIP47 K0 a Bob také vypočítá související soukromý klíč k0 :
Vrácení platby BIP47
Protože Bob zná Alicin opakovaně použitelný platební kód, má již všechny
informace, které potřebuje, aby jí mohl poslat náhradu. Nebude muset Alici
znovu kontaktovat a žádat ji o jakékoli informace. Stačí, když ji upozorní
notifikační transakcí, aby mohla načíst své adresy BIP47 s jejím semenem, a
pak jí také může poslat až 2^32 plateb.
Funkce vrácení peněz je specifická pro BIP47 a je jednou z jeho výhod oproti jiným metodám, jako jsou tiché platby, kterým se budeme věnovat v dalších kapitolách.
Bob pak může Alici vrátit peníze stejným způsobem, jakým mu poslala platby. Role jsou obrácené:
*Děkujeme Fanisovi Michalakisovi za korektury a odborné rady k článku, který inspiroval napsání této kapitoly!
https://planb.network/tutorials/privacy/on-chain/paynym-bip47-a492a70b-50eb-4f95-a766-bae2c5535093
Tiché platby
BIP47 byl široce kritizován pro svou neúčinnost v řetězci. Jak bylo vysvětleno v předchozí kapitole, vyžaduje provedení oznamovací transakce pro každého nového příjemce. Toto omezení se stává zanedbatelným, pokud s tímto příjemcem plánujeme vytvořit udržitelný platební kanál. Jediná notifikační transakce totiž otevírá cestu k téměř nekonečnému počtu následných plateb BIP47.
V určitých situacích však může být transakce oznámení pro uživatele překážkou. Vezměme si příklad jednorázového daru příjemci: s klasickou bitcoinovou adresou stačí k dokončení daru jediná transakce. U BIP47 jsou však nutné dvě transakce: jedna pro oznámení a druhá pro samotnou platbu. Pokud je poptávka po blokovém prostoru nízká a transakční poplatky nízké, tento krok navíc obvykle nepředstavuje problém. V době přetížení se však transakční poplatky za jednu platbu mohou stát přehnaně vysokými a potenciálně zdvojnásobit náklady uživatele ve srovnání se standardní bitcoinovou transakcí, což se pro uživatele může ukázat jako nepřijatelné.
Pro situace, kdy uživatel plánuje provést pouze několik plateb na statický identifikátor, byla vyvinuta jiná řešení. Patří mezi ně tiché platby popsané v BIP352. Tento protokol umožňuje používat statický identifikátor k přijímání plateb, aniž by docházelo k opakovanému používání adres a aniž by bylo nutné používat oznamovací transakce. Podívejme se, jak tento protokol funguje.
Pro úplné pochopení této kapitoly je nezbytné zvládnout fungování ECDH (Elliptic Curve Diffie-Hellman) a odvozování kryptografických klíčů v peněžence HD. Tyto pojmy byly podrobně popsány v předchozí kapitole o BIP47. Nebudu je zde opakovat. Pokud tyto pojmy ještě neznáte, doporučuji vám, abyste si před pokračováním v této kapitole prostudovali předchozí kapitolu. Nebudu se vracet k rizikům spojeným s opakovaným používáním adres pro příjem, ani k důležitosti existence jedinečného identifikátoru pro příjem plateb. Zmíním se jen o několika bodech, které bych zde rád uvedl
Proč nepřesunout oznámení?
Jak je uvedeno v kapitole BIP47, notifikační transakce má dvě hlavní funkce:
- Upozorňuje příjemce ;
- Přenáší platební kód odesílatele.
Někdo by si mohl naivně myslet, že tento proces oznámení lze provést mimo řetězec. Teoreticky je to dokonale proveditelné: jediné, co by příjemce musel udělat, je uvést komunikační prostředek, který by přijímal platební kódy BIP47 od odesílatelů. Tento přístup však naráží na dva zásadní problémy:
- Zaprvé by se proces přenosu kódu přesunul na jiný komunikační protokol. Problémy týkající se nákladů a důvěrnosti výměny by zůstaly, ale jednoduše by se přenesly na tento nový protokol. Pokud jde o důvěrnost, mohlo by to také vytvořit spojení mezi identitou uživatele a aktivitou v řetězci, čemuž se snažíme vyhnout tím, že oznámení provádíme přímo v blockchainu. Provádění oznámení mimo blockchain by navíc přineslo rizika cenzury (například zablokování prostředků), která v Bitcoinu neexistují;
- Za druhé by to znamenalo problém s obnovou. V případě BIP47 musí příjemce znát platební kódy odesílatelů, aby měl přístup k finančním prostředkům. To platí při přijetí, ale také v případě, že by prostředky byly získány zpět prostřednictvím seedu, pokud by došlo ke ztrátě peněženky. S oznámeními na řetězci se tomuto riziku vyhneme, protože uživatel může získat a dešifrovat transakce s oznámeními jednoduše tím, že zná svůj seed. Pokud by však notifikace probíhala mimo blockchain, musel by uživatel udržovat dynamickou zálohu všech přijatých platebních kódů, což je pro běžného uživatele nepraktické.
Díky všem těmto omezením je použití oznámení v řetězci pro BIP47 nezbytné. Tiché platby se však snaží tomuto kroku oznámení v řetězci vyhnout právě kvůli jeho nákladům. Přijaté řešení proto nespočívá v přesunu notifikace, ale v jejím úplném odstranění. K dosažení tohoto cíle je třeba přijmout kompromis: skenování. Na rozdíl od BIP47, kde uživatel díky notifikačním transakcím přesně ví, kde najde své finanční prostředky, u Tichých plateb musí uživatel prozkoumat všechny existující bitcoinové transakce, aby odhalil všechny platby určené jemu. Aby se tato operační zátěž snížila, omezuje se vyhledávání Tichých plateb pouze na transakce, které takové platby pravděpodobně obsahují, tj. na transakce s alespoň jedním výstupem Taproot P2TR. Kontrola se také zaměřuje výhradně na transakce od data vytvoření peněženky (není třeba kontrolovat transakce z roku 2009, pokud byla peněženka vytvořena v roce 2024).
Je tedy zřejmé, proč BIP47 a tiché platby, ačkoli mají podobný cíl, zahrnují různé kompromisy, a proto ve skutečnosti odpovídají odlišným případům použití. Pro jednorázové platby, jako jsou jednorázové dary, jsou vhodnější Tiché platby, protože mají nižší náklady. Naopak pro pravidelné transakce stejnému příjemci, jako v případě směnných platforem nebo těžebních poolů, může být vhodnější BIP47.
Podívejme se na technické fungování tichých plateb, abychom lépe pochopili, co je v sázce. K tomu navrhuji zvolit stejný přístup jako u vysvětlujícího dokumentu BIP352. Postupně rozebereme výpočty, které je třeba provést, prvek po prvku a zdůvodníme každý nový přírůstek.
Několik pojmů, které je třeba pochopit
Než začneme, je důležité zdůraznit, že Tiché platby jsou založeny výhradně na použití typů skriptů P2TR (Pay to Taproot). Na rozdíl od BIP47 není nutné odvozovat přijímací adresy z veřejných klíčů dětí pomocí hashování. Ve standardu P2TR se vylepšený veřejný klíč používá přímo a nešifrovaně v adrese. Adresa příjmu Taproot je tedy v podstatě veřejný klíč s některými metadaty. Tento upravený veřejný klíč je agregací dvou dalších veřejných klíčů: jeden umožňuje přímé, tradiční utrácení prostřednictvím jednoduchého podpisu a druhý představuje Merklův kořen MAST, který opravňuje k utrácení za předpokladu splnění jedné z podmínek potenciálně zapsaných v Merklově stromu.
Rozhodnutí omezit tiché platby výhradně na společnost Taproot má dva hlavní důvody:
- Zaprvé výrazně usnadňuje implementaci a budoucí upgrady portfoliového softwaru, protože je třeba dodržovat pouze jednu normu;
- Za druhé, tento přístup pomáhá zlepšit anonset uživatelů tím, že je podporuje v tom, aby se nerozdělovali mezi různé typy skriptů, které vytvářejí odlišné otisky portfolia v řetězové analýze (více informací o tomto konceptu naleznete v kapitole 4 části 2).
Naivní odvození veřejného klíče tichých plateb
Začněme jednoduchým příkladem, který nám přiblíží fungování tichých plateb. Vezměme si Alici a Boba, dva uživatele Bitcoinu. Alice si přeje poslat Bitcoiny Bobovi na prázdnou přijímací adresu. Tento proces má tři cíle:
- Alice musí být schopna vygenerovat prázdnou adresu;
- Bob musí být schopen identifikovat platbu zaslanou na tuto konkrétní adresu;
- Bob musí být schopen získat soukromý klíč spojený s touto adresou, aby mohl utratit své prostředky.
Alice má ve své bezpečné peněžence Bitcoin UTXO s následujícím párem klíčů:
a: soukromý klíč ;A: veřejný klíč (A = a \cdot G)
Bob má adresu SP, kterou zveřejnil na internetu s :
b: soukromý klíč ;B: veřejný klíč (B = b \cdot G)
Získáním Bobovy adresy je Alice schopna vypočítat novou prázdnou adresu,
která patří Bobovi, pomocí ECDH. Nazvěme tuto adresu P :
P = B + \text{hash}(a \cdot B) \cdot G
V této rovnici Alice jednoduše vypočítala skalární součin svého soukromého
klíče a a Bobova veřejného
klíče B. Tento výsledek
předala do všem známé hashovací funkce. Výslednou hodnotu pak skalárně
vynásobila generujícím bodem G eliptické křivky secp256k1. Nakonec Alice přidá výsledný bod k
Bobovu veřejnému klíči B.
Jakmile Alice získá tuto adresu P, použije ji jako výstup v
transakci, tj. pošle na ni bitcoiny.
V kontextu tichých plateb odpovídá funkce "hash" hashovací funkci SHA256 speciálně označené
BIP0352/SharedSecret, která zajišťuje, že generované hashe jsou jedinečné pro tento protokol a nemohou být znovu použity v jiných kontextech, a zároveň nabízí další ochranu proti opakovanému použití nonces v podpisech. Tento standard odpovídá standardu uvedenému v BIP340 pro Schnorrovy podpisy nasecp256k1. Díky vlastnostem eliptické křivky, na které je ECDH založena, víme, že :
a \cdot B = b \cdot A
Bob tedy bude schopen vypočítat přijímací adresu, na kterou Alice poslala bitcoiny. Za tímto účelem sleduje všechny bitcoinové transakce, které splňují kritéria tichých plateb, a na každou z nich použije následující výpočet, aby zjistil, zda je platba adresována jemu (skenování):
P' = B + \text{hash}(b \cdot A) \cdot G
Když prohledá Alicinu transakci, zjistí, že P' se rovná P. Ví tedy, že
platba je určena jí:
P' = B + \text{hash}(b \cdot A) \cdot G = B +
\text{hash}(a \cdot B) \cdot G = P
Odtud bude Bob schopen vypočítat soukromý klíč p, který umožní utratit adresu P:
p = (b + \text{hash}(b \cdot A)) \bmod n
Jak vidíte, pro výpočet tohoto soukromého klíče p musíte mít soukromý klíč b.
Tento soukromý klíč b má pouze
Bob. Bude tedy jediným, kdo bude moci utratit bitcoiny zaslané na jeho adresu
Tiché platby.
Legenda:
B: Veřejný klíč/statická adresa zveřejněná Bobemb: Bobův soukromý klíčA: Alicin veřejný klíč UTXO použitý jako vstupní klíč transakcea: Alicin soukromý klíčG: Generační bod eliptické křivkysecp256k1\text{SHA256}: Hashovací funkce SHA256 s označenímBIP0352/SharedSecrets: Společné tajemství ECDHP: Veřejný klíč/jedinečná adresa pro platbu Bobovi
Zde je poněkud naivní počáteční přístup k použití Bobovy statické adresy,
označené B, k odvození
jedinečné adresy P, na kterou
lze posílat bitcoiny. Tato metoda je však příliš zjednodušená a má několik
nedostatků, které je třeba odstranit. Prvním problémem je, že v tomto
schématu nemůže Alice vytvořit více výstupů na Boba v rámci jedné transakce.
Jak vytvořím více výstupů?
V příkladu v předchozí části Alice vytvoří jeden výstup, který bude odeslán
Bobovi na jeho jedinečnou adresu P. Při zvolení stejného vstupu není možné, aby Alice vytvořila dvě
samostatné prázdné adresy pro Boba, protože použitá metoda by vedla vždy ke
stejnému výsledku pro P, tj.
ke stejné adrese. Může však nastat mnoho situací, kdy si Alice přeje
rozdělit svou platbu Bobovi na několik menších částek, a vytvořit tak
několik UTXO. Je proto nutné najít metodu, jak toho dosáhnout.
Abychom toho dosáhli, mírně upravíme výpočet, který Alice provádí k získání P, aby mohla pro Boba vygenerovat dvě různé adresy, a to P_0 a P_1.
Chcete-li výpočet upravit a získat 2 různé adresy, stačí přidat celé číslo,
které výsledek upraví. Alice tedy do svého výpočtu přidá 0, aby získala adresu P_0, a 1, aby získala adresu P_1. Nazvěme toto celé číslo i :
P_i = B + \text{hash}(a \cdot B \text{ ‖ } i) \cdot G
Postup výpočtu zůstává stejný jako u předchozí metody, jen tentokrát Alice
před provedením hashování spojí a \cdot B s i. Poté stačí upravit i a získat novou adresu patřící
Bobovi. Například:
P_0 = B + \text{hash}(a \cdot B \text{ ‖ } 0) \cdot G
P_1 = B + \text{hash}(a \cdot B \text{ ‖ } 1) \cdot G
Když Bob prohledává blockchain kvůli tichým platbám určeným pro něj, začne s
použitím i = 0 pro adresu P_0. Pokud na adrese P_0 nenajde žádné platby, dojde k závěru, že tato transakce neobsahuje žádné
Tiché platby určené pro něj, a skenování přeruší. Pokud je však P_0 platná a obsahuje platbu určenou pro něj, pokračuje v téže transakci s P_1, aby zkontroloval, zda
Alice provedla druhou platbu. Pokud se ukáže, že P_1 je neplatný, přestane tuto transakci prohledávat; v opačném případě
pokračuje v testování po sobě jdoucích hodnot i:
P_0 = B + \text{hash}(b \cdot A \text{ ‖ } 0) \cdot G
P_1 = B + \text{hash}(b \cdot A \text{ ‖ } 1) \cdot G
Vzhledem k tomu, že se Bob okamžitě zastaví na i = 0, pokud P_0 nefunguje, nepřidává
použití tohoto celého čísla Bobovi téměř žádnou další operační zátěž pro fázi
skenování transakcí.
Bob pak může stejným způsobem vypočítat soukromé klíče:
p_0 = (b + \text{hash}(b \cdot A \text{ ‖ } 0)) \bmod n p_1 = (b + \text{hash}(b \cdot A \text{ ‖ } 1)) \bmod n
Legenda:
B: Veřejný klíč/statická adresa zveřejněná Bobemb: Bobův soukromý klíčA: Alicin veřejný klíč UTXO použitý jako vstupní klíč transakcea: Alicin soukromý klíčG: Generační bod eliptické křivkysecp256k1\text{SHA256}: Hashovací funkce SHA256 s označenímBIP0352/SharedSecrets_0: První společná tajenka ECDHs_1: Druhé společné tajemství ECDHP_0: První veřejný klíč / jedinečná adresa pro platbu BoboviP_1: Druhý veřejný klíč / jedinečná adresa pro platbu Bobovi
Touto metodou začínáme získávat pěkný protokol, ale stále je třeba překonat několik problémů, v neposlední řadě zabránit opakovanému použití adresy.
Jak zabránit opakovanému použití adresy?
Jak jsme viděli v předchozích částech, Alice používá dvojici klíčů, která
zabezpečuje její UTXO, a kterou použije k výpočtu sdíleného tajemství ECDH s
Bobem. Toto tajemství jí umožní odvodit jedinečnou adresu P_0. Dvojice klíčů (a, A), kterou Alice používá,
však může zabezpečit několik UTXO, pokud tuto adresu použila několikrát. V
případě, že by Alice provedla dvě platby na Bobovu statickou adresu B pomocí dvou UTXO zabezpečených stejným klíčem A, došlo by u Boba k
opakovanému použití adresy.
Opakované použití adresy je z hlediska důvěrnosti uživatelů velmi špatná praxe. Chcete-li zjistit proč, doporučuji vám projít si první části tohoto školení. Jelikož je unikátní adresa
P_0odvozena zAaB, tak pokud Alice odvodí druhou adresu pro druhou platbu doBse stejným klíčemA, skončí na přesně stejné adreseP_0. Abychom se tomuto riziku vyhnuli a zabránili opakovanému používání adres v rámci tichých plateb, budeme muset naše výpočty trochu upravit.
Chceme, aby každý UTXO, který Alice spotřebuje jako vstup pro platbu, měl na
Bobově straně jedinečnou adresu, i když je několik UTXO zajištěno stejným
párem klíčů. Takže vše, co musíme udělat, je přidat odkaz na UTXO při
výpočtu jedinečné adresy P_0.
Tento odkaz bude jednoduše hash UTXO spotřebovaného jako vstup:
\text{inputHash} =
\text{hash}(\text{outpoint} \text{ ‖ } A)
A Alice přidá tento odkaz na vstup pro svůj výpočet jedinečné adresy P_0 :
P_0 = B + \text{hash}(\text{inputHash} \cdot a \cdot
B \text{ ‖ } 0) \cdot G
Při skenování může Bob také přidat \text{vstupníHash}, protože k odvození \text{výstupní bod} mu stačí sledovat transakci:
P_0 = B + \text{hash}(\text{inputHash} \cdot b \cdot
A \text{ ‖ } 0) \cdot G
Když najde platný klíč P_0,
může vypočítat odpovídající soukromý klíč p_0:
p_0 = (b + \text{hash}(\text{inputHash} \cdot b \cdot A \text{ ‖ } 0)) \bmod n
Legenda:
B: Veřejný klíč/statická adresa zveřejněná Bobemb: Bobův soukromý klíčA: Alicin veřejný klíč UTXO použitý jako vstupní klíč transakcea: Alicin soukromý klíčH: UTXO hash použitý jako vstupní údajG: Generační bod eliptické křivkysecp256k1\text{SHA256}: Hashovací funkce SHA256 s označenímBIP0352/SharedSecrets_0: První společné tajemství ECDHP_0: První veřejný klíč / jedinečná adresa pro platbu Bobovi
V tuto chvíli naše výpočty předpokládají, že Alice používá pro svou transakci jediný vstup. Měla by však být schopna použít více vstupů. V důsledku toho by měl Bob pro každou transakci zahrnující několik vstupů teoreticky vypočítat ECDH pro každý vstup, aby zjistil, zda je platba určena pro něj. Tento způsob je nevyhovující, proto je třeba najít řešení, jak snížit pracovní zátěž!
Tweakování veřejných klíčů do vstupů
Abychom tento problém vyřešili, použijeme místo páru klíčů zajišťujícího konkrétní vstup na straně Alice součet všech párů klíčů použitých na vstupech transakce. Tento součet pak budeme považovat za nový klíčový pár. Tato technika je známá jako "vylepšování".
Představme si například, že Alicina transakce má 3 vstupy, z nichž každý je zabezpečen jiným párem klíčů:
a_0se používá k zajištění vstupu #0 ;a_1slouží k zajištění vstupu č. 1;a_2zajišťuje vstup č. 2.
Podle dříve popsané metody by Alice musela vybrat jeden pár klíčů z a_0, a_1 a a_2 pro výpočet tajemství ECDH a vygenerovat jednu platební adresu P z Bobovy statické adresy B.
Tento přístup však vyžaduje, aby Bob testoval každou možnost postupně,
počínaje a_0, pak a_1 a tak dále, dokud neidentifikuje dvojici, která generuje platnou adresu P. Tento postup vyžaduje, aby
Bob provedl výpočet ECDH na všech vstupech všech transakcí, což značně
zvyšuje operační zátěž skenování.
Abychom se tomu vyhnuli, požádáme Alici, aby vypočítala P pomocí součtu všech vstupních klíčů. Na našem příkladu by se upravený
soukromý klíč a vypočítal takto:
a = a_0 + a_1 + a_2
Stejným způsobem mohou Alice a Bob vypočítat upravený veřejný klíč:
A = A_0 + A_1 + A_2
Při této metodě stačí Bobovi vypočítat pouze součet veřejných klíčů
transakce a poté vypočítat ECDH tajemství pouze z A, což výrazně snižuje počet výpočtů potřebných pro fázi skenování.
Nezapomeňte však na předchozí část. Do našeho výpočtu jsme přidali hash \text{inputHash}, který se používá jako nonce, aby se zabránilo opakovanému použití adresy:
\text{inputHash} =
\text{hash}(\text{outpoint} \text{ ‖ } A)
Pokud však máte v transakci více vstupů, musíte být schopni určit, který \text{výstupní bod} se při tomto výpočtu vybere. Podle BIP352 je kritériem výběru \text{outpoint},
které se má použít, výběr nejmenšího lexikograficky, což znamená výběr UTXO,
které se objeví jako první v abecedním pořadí. Tato metoda standardizuje
výběr UTXO v každé transakci. Pokud je například tento lexikograficky
nejmenší \text{outpoint} \text{outpoint}_L,
výpočet \text{inputHash} bude
:
\text{inputHash} =
\text{hash}(\text{outpoint}_L \text{ ‖ } A)
Výpočty pak zůstávají totožné s výpočty uvedenými v předchozí části, s tím
rozdílem, že soukromý klíč a a jemu odpovídající veřejný klíč A již nepředstavují dvojici použitou
k zabezpečení jednoho vstupu, ale nyní představují vylepšení pro všechny dvojice
klíčů na vstupech.
Oddělené klíče výdajů a skenování
Prozatím jsme statickou adresu tiché platby B označovali jako jedinečný veřejný klíč. Nezapomeňte, že právě tento veřejný
klíč B používá Alice k
vytvoření sdíleného tajemství ECDH, které následně vypočítá jedinečnou
platební adresu P. Bob
používá tento veřejný klíč B a odpovídající soukromý klíč b pro fázi skenování. Soukromý klíč b však použije také k výpočtu soukromého klíče p, který umožňuje utrácení z
adresy P.
Nevýhodou této metody je, že soukromý klíč b, který se používá k výpočtu všech soukromých klíčů adres, které obdržely
Tiché platby, používá Bob také ke skenování transakcí. Tento krok vyžaduje,
aby byl klíč b dostupný v
softwaru peněženky připojené k internetu, což jej vystavuje většímu riziku
krádeže než jeho uchovávání v chladné peněžence. V ideálním případě by bylo
výhodné mít možnost využívat Tiché platby a zároveň mít soukromý klíč b, který řídí přístup ke všem
ostatním soukromým klíčům, v bezpečí hardwarové peněženky. Naštěstí byl
protokol upraven tak, aby právě to umožňoval.
Za tímto účelem vyžaduje BIP352, aby přijímač použil 2 různé páry klíčů:
- b_{\text{spend}}$: výpočet soukromých klíčů jedinečných platebních adres;
- b_{\text{scan}}$: vyhledání jedinečných platebních adres.
Tímto způsobem může Bob uchovávat soukromý klíč b_{\text{spend}} v hardwarové peněžence a používat soukromý klíč b_{\text{scan}} v online softwaru k nalezení svých Tichých plateb, aniž by odhalil b_{\text{spend}}. Na druhou stranu jsou veřejné klíče B_{\text{scan}} a B_{\text{spend}} veřejně odhaleny, protože se nacházejí v Bobově statické adrese B :
B = B_{\text{scan}} \text{ ‖ }
B_{\text{výdaje}}
Pro výpočet jedinečné platební adresy P_0 patřící Bobovi provede Alice následující výpočet:
P_0 = B_{\text{výdaj}} +
\text{hash}(\text{inputHash} \cdot a \cdot
B_{\text{scan}} \text{ ‖ } 0) \cdot G
Aby Bob zjistil platby, které jsou mu určeny, provede následující výpočet:
P_0 = B_{\text{výdaj}} +
\text{hash}(\text{inputHash} \cdot
b_{\text{scan}} \cdot A \text{ ‖ } 0) \cdot
G
Jak vidíte, Bob zatím nepotřeboval použít b_{\text{spend}}, který je v jeho hardwarové peněžence. Když chce utratit P_0, může provést následující
výpočet, aby zjistil soukromý klíč p_0 :
p_0 = (b_{\text{výdaj}} +
\text{hash}(\text{inputHash} \cdot
b_{\text{scan}} \cdot A \text{ ‖ } 0)) \bmod
n
Legenda:
B_{\text{scan}}: Bobův veřejný skenovací klíč (statická adresa)b_{\text{scan}}: Bobův soukromý skenovací klíčB_{\text{spend}}: Bobův veřejný výdajový klíč (statická adresa)b_{\text{výdaje}}: Bobův soukromý klíč pro výdajeA: Součet vstupů veřejného klíče (tweak)a: Soukromý klíč odpovídající upravenému veřejnému klíčiH: Hash nejmenšího UTXO (lexikograficky) použitého jako vstupG: Generační bod eliptické křivkysecp256k1\text{SHA256}: Hashovací funkce SHA256 s označenímBIP0352/SharedSecrets_0: První společná tajenka ECDHP_0: První veřejný klíč / jedinečná adresa pro platbu Bobovi
Použití adres SP se štítkem
Bob má tedy statickou adresu B pro Tiché platby, např. :
B = B_{\text{scan}} \text{ ‖ }
B_{\text{výdaje}}
Problém této metody spočívá v tom, že neumožňuje oddělit různé platby zaslané na tuto adresu. Pokud má například Bob ve své firmě 2 různé zákazníky a chce rozlišovat platby pro každého z nich, bude potřebovat 2 různé statické adresy. Naivním řešením by při současném přístupu bylo, kdyby si Bob vytvořil dvě samostatné peněženky, každou s vlastní statickou adresou, nebo dokonce zřídil dvě různé statické adresy v rámci jedné peněženky. Toto řešení však vyžaduje skenování celého blockchainu dvakrát (jednou pro každou adresu), aby bylo možné detekovat platby určené pro každou adresu, resp. Toto dvojí skenování nepřiměřeně zvyšuje provozní zátěž Boba.
K vyřešení tohoto problému používá BIP352 systém štítků, který umožňuje
různé statické adresy, aniž by se nepřiměřeně zvýšila pracovní zátěž při
hledání tichých plateb v blockchainu. Za tímto účelem přidáváme k veřejnému
výdajovému klíči B_{\text{spend}} celé číslo m. Toto celé číslo
může nabývat hodnoty 1 pro
první statickou adresu, pak 2 pro druhou atd. Klíče výdajů B_{\text{výdaje}} se nyní budou nazývat B_m a budou
konstruovány tímto způsobem:
B_m = B_{\text{výdaj}} +
\text{hash}(b_{\text{scan}} \text{ ‖
} m) \cdot G
Například pro první klíč výdajů s označením 1 :
B_1 = B_{\text{výdaj}} +
\text{hash}(b_{\text{scan}} \text{ ‖
} 1) \cdot G
Statická adresa zveřejněná Bobem se nyní bude skládat z B_{\text{scan}} a B_m. Například první
statická adresa s označením 1 bude :
B = B_{\text{scan}} \text{ ‖ } B_1
Začínáme pouze od štítku 1, protože štítek 0 je vyhrazen pro změnu. Alice zase získá adresu jediné platby
Pstejným způsobem jako dříve, ale místoB_{\text{spend}}použije novýB_1:
P_0 = B_1 + \text{hash}(\text{inputHash} \cdot a
\cdot B_{\text{scan}} \text{ ‖ } 0) \cdot G
Ve skutečnosti Alice ani nemusí nutně vědět, že Bob má označenou adresu,
protože prostě používá druhou část statické adresy, kterou jí poskytl, a v
tomto případě je to hodnota B_1, nikoli B_{text{spend}}.
Pro skenování plateb bude Bob vždy používat hodnotu své počáteční statické
adresy s B_{\text{spend}} tímto způsobem:
P_0 = B_{\text{výdaj}} +
\text{hash}(\text{inputHash} \cdot
b_{\text{scan}} \cdot A \text{ ‖ } 0) \cdot
G
Pak jednoduše odečte zjištěnou hodnotu P_0 od každého výstupu po jedné. Poté zkontroluje, zda jeden z výsledků těchto
odečtů odpovídá hodnotě jednoho ze štítků, které používá ve svém portfoliu.
Pokud se například výstup č. 4 shoduje se štítkem 1, znamená to, že tento
výstup je Tichá platba spojená s jeho staticky označenou adresou B_1 :
Out_4 - P_0 = \text{hash}(b_{\text{scan}}
\text{ ‖ } 1) \cdot G
Funguje to, protože :
B_1 = B_{\text{výdaj}} +
\text{hash}(b_{\text{scan}} \text{ ‖
} 1) \cdot G
Díky této metodě může Bob používat množství statických adres (B_1, B_2, B_3...), které jsou odvozeny
od jeho základní statické adresy (B = B_{\text{sken}} \text{ ‖ }
B_{\text{výdaj}}), aby bylo možné oddělit jejich používání.
Upozorňujeme však, že toto oddělení statických adres platí pouze z hlediska
správy osobního portfolia, ale neodděluje identity. Protože všechny mají
stejný B_{\text{scan}}, je velmi snadné spojit všechny statické adresy dohromady a odvodit, že
patří jedné entitě.
Legenda:
B_{\text{scan}}: Bobův veřejný skenovací klíč (statická adresa)b_{\text{scan}}: Bobův soukromý skenovací klíčB_{\text{spend}}: Bobův veřejný výdajový klíč (počáteční adresa)B_m: Bobův veřejný výdajový klíč označený (statická adresa)b_m: Bobův soukromý výdajový klíč s označenímA: Součet vstupů veřejného klíče (tweak)a: Soukromý klíč odpovídající upravenému veřejnému klíčiH: Hash nejmenšího UTXO (lexikograficky) použitého jako vstupG: Generační bod eliptické křivkysecp256k1\text{SHA256}: Hashovací funkce SHA256 s označenímBIP0352/SharedSecrets_0: První společné tajemství ECDHP_0: První veřejný klíč / jedinečná adresa pro platbu Bobovip_0: Soukromý klíč první jedinečné platební adresy pro BobaX: Hash skenovaného soukromého klíče s označením
Jak vytvořím adresu Tiché platby?
Chcete-li vytvořit adresu určenou pro tiché platby, musíte nejprve získat 2 páry klíčů z peněženky Bitcoin HD:
- Dvojice
b_{\text{scan}},B_{\text{scan}}pro vyhledávání plateb, které jsou nám adresovány; - Dvojice
b_{\text{spend}},B_{\text{spend}}, která představuje bitcoiny, které jsme obdrželi.
Tyto páry jsou odvozeny pomocí následujících cest (Bitcoin Mainnet):
scan : m / 352' / 0' / 0' / 1' / 0
spend : m / 352' / 0' / 0' / 0' / 0
Jakmile máme tyto dva páry klíčů, jednoduše je spojíme (end-to-end) a vytvoříme tak užitečné zatížení statické adresy:
B = B_{\text{scan}} \text{ ‖ }
B_{\text{výdaje}}
Pokud chceme použít štítky, nahradíme B_{\text{výdaj}} za B_m :
B = B_{\text{scan}} \text{ ‖ } B_m
Se značkou m :
B_m = B_{\text{výdaj}} +
\text{hash}(b_{\text{scan}} \text{ ‖
} m) \cdot G
Jakmile máme tento náklad, přidáme HRP (Human-Readable Part) sp a verzi q (= verze 0). Přidáme také kontrolní součet a adresu naformátujeme
jako bech32m.
Například zde je moje statická adresa Silent Payments:
sp1qqvhjvsq2vz8zwrw372vuzle7472zup2ql3pz64yn5cpkw5ngv2n6jq4nl8cgm6zmu48yk3eq33ryc7aam6jrvrg0d0uuyzecfhx2wgsumcurv77e
Důležitým bodem týkajícím se statických adres, který jste možná pochopili v
předchozích částech, je, že tyto adresy nejsou v transakcích Bitcoinu
viditelné. V blockchainu se objevují pouze platební adresy P použité ve výstupech ve standardním formátu Taproot. Zvenčí tedy není možné
odlišit transakci zahrnující tichou platbu od běžné transakce využívající výstupy
P2TR.
Stejně jako v případě BIP47 nelze vytvořit spojení mezi statickou adresou B a platební adresou P odvozenou z B. Ve
skutečnosti, i když se potenciální útočník Eve pokusí prohledat blockchain s
Bobovou statickou adresou B,
nebude schopen provést výpočty potřebné k určení P. K tomu by potřebovala buď
Bobův soukromý klíč b_{\text{scan}}, nebo soukromé klíče odesílatele a, ale oba jsou samozřejmě
soukromé. Je tedy možné explicitně spojit svou statickou adresu s určitou
formou osobní identity.
Jak používat tiché platby?
Návrh tichých plateb je relativně nový a v současné době jej implementoval jen velmi omezený počet peněženek. Pokud je mi známo, existují pouze tři softwarové produkty, které je podporují:
Brzy vám poskytneme podrobný návod, jak si nastavit vlastní statickou adresu Silent Payments.
Vzhledem k tomu, že tato funkce je nová, doporučujeme vám, abyste byli opatrní a nepoužívali Tiché platby pro velké částky v mainnetu.
K vytvoření této kapitoly o tichých platbách jsem použil stránku s vysvětlením tichých plateb a dokument s vysvětlením BIP352.
Sekce finále
Recenze a hodnocení
true
Závěrečná zkouška
true
Závěr
true
