Bitcoin just nu är inte riktigt anonymt. Även om Bitcoin-adresser inte nödvändigtvis är kopplade till verkliga identiteter, kan de vara det. Övervakning av det okrypterade peer-to-peer-nätverket, analys av den offentliga blockchain och Know Your Customer (KYC) -policy eller AML-reglering (Anti-Money Laundering) kan avslöja mycket om vem som använder Bitcoin och för vad.
Detta är inte bra ur ett integritetsperspektiv. Bitcoin-användare vill inte nödvändigtvis att världen ska veta var de spenderar sina pengar, vad de tjänar eller hur mycket de äger, medan företag kanske inte vill läcka transaktionsinformation till konkurrenter – för att nämna några exempel.
Dessutom är bitcoins som kan spåras, eventuellt “fläckade” och potentiellt värda mindre än andra bitcoins i strid med fungibiliteten. Detta kan till och med utmana Bitcoins värdeproposition som pengar.
Men det finns potentiella lösningar för att öka integriteten och förbättra fungibiliteten.
En av dessa lösningar är “Konfidentiella transaktioner.”
Bakgrund
Till skillnad från de flesta digitala finansiella infrastrukturer registreras alla typiska Bitcoin-transaktioner på den offentliga blockchain, synlig för alla att se. Detta krävs för att validera transaktioner utan centraliserad auktoritet, men gör det också trivialt att spåra hur många bitcoins som skickas från vilka adresser till vilka adresser.
För att förbättra integriteten är det möjligt att dölja antalet transaktioner av bitcoins. En tidig version av detta koncept, som sedan kallades “bitcoins med homomorfiskt värde”, var först föreslagen 2013 av hashcash uppfinnare och nuvarande Blockstream president Dr. Adam Back. Idén plockades senare upp av Bitcoin Core och Blockstream-utvecklarna Gregory Maxwell och Dr. Pieter Wuille och Blockstream-matematikern Andrew Poelstra. Detta ledde så småningom till genomförandet av konfidentiella transaktioner i Blockstreams testnät-sidokedja, Alfa.
Hur det fungerar
Konfidentiella transaktioner kombinerar och använder flera kryptografiska knep, framför allt Borromeiska ringsignaturer och Pedersens åtagandesystem.
Utan att dyka för djupt in i de kryptografiska specifikationerna tillämpas dessa tricks så att endast avsändaren och mottagaren av en transaktion är medvetna om det transaktionsbelopp. Alla andra skulle bara se att bitcoins transaktioner, men vet inte hur många.
Det smarta är att medan vissa eller alla belopp maskeras för “åskådare”, kan dessa åskådare fortfarande använda de maskerade mängderna för vissa typer av beräkningar. Specifikt kan alla ingångar för en transaktion läggas till, alla utgångar kan läggas till och de två summorna kan jämföras för att säkerställa att de är lika – allt medan de aldrig avslöjar några av de maskerade beloppen eller summan. Som sådan kan noder verifiera att inga bitcoins skapades ur luften utan att veta hur många bitcoins som faktiskt skickades.
(På en sidoanteckning är ett av beloppen alltid synligt: gruvavgiften. Det är för att säkerställa att gruvarbetare inte kan tilldela sig för många avgifter och har inga ytterligare konsekvenser ur ett integritetsperspektiv. Andra belopp kan också synliggöras, om avsändaren eller mottagaren väljer det.)
Mjuk gaffel
Kanske överraskande skulle konfidentiella transaktioner vara mer eller mindre kompatibla med det nuvarande Bitcoin-protokollet. Medan specifikationerna måste utarbetas kan lösningen rullas ut som en mjuk gaffel – även om det kan vara lite “hackigt”.
Här är hur.
För att säkerställa att “gamla” (icke-uppgraderade) och “nya” (uppgraderade) noder förblir synkroniserade, måste bitcoins som används i en konfidentiell transaktion först “passera” en “vem som helst kan spendera” -adress. Detta är en Bitcoin-adress som alla kan spendera på, även utan motsvarande privat nyckel eller signatur.
Eller så verkar det för gamla noder.
Nya noder känner igen adressen som det första steget i en konfidentiell transaktion och accepterar endast transaktioner från den adressen som inkluderar rätt signatur. Så länge som en majoritet av hashkraften tillämpar dessa regler, kan bitcoins på den vem som helst kan spendera inte stjälas av någon som inte kontrollerar motsvarande privata nyckel. (Gamla noder kanske undrar varför ingen spenderar de fritt tillgängliga bitcoinsna. Men de skulle inte bry sig om att ingen gör det; ur deras perspektiv bryts inga protokollregler.)
Här blir det intressant.
Om en konfidentiell transaktion görs från den vem som helst kan spendera adressen ser både gamla noder och nya noder den transaktionen. Men de ser något annorlunda. Nya noder skulle känna igen transaktionen som en konfidentiell transaktion och till exempel kontrollera att det inte finns några bitcoins skapade ur luften. Gamla noder skulle under tiden luras att tro att det är en noll-bitcoin-transaktion: de skulle tro att inga bitcoins lämnade den som kan spendera adressen alls.
Denna logik gäller för varje efterföljande transaktion. Nya noder skulle se nya transaktioner och vet att en viss mängd bitcoin förmodligen flyttas från adress till adress – även om de inte hade någon aning om hur många. Gamla noder, hela tiden, ser “noll-bitcoin-transaktioner” och tror att alla bitcoins fortfarande sitter i vem som helst som kan spendera adressen. (Gamla noder kanske undrar varför människor skickar tomma transaktioner till varandra. Men igen skulle de inte bry sig.)
Anledningen till att detta inte kommer att orsaka kaos (speciellt på grund av inkompatibel UTXO-uppsättningar) är att bitcoins som tas emot genom en konfidentiell transaktion initialt endast kan användas som en konfidentiell transaktion. De är “låsta” i den vem som helst som kan spendera adressen för tillfället och kan inte synligt flytta över Bitcoin blockchain alls.
För att kunna spendera dessa bitcoins i en normal transaktion igen måste de först “passera” den ursprungliga vem som helst som kan spendera adressen. Mottagaren av en konfidentiell transaktion skulle behöva skicka dem tillbaka till vem som helst som kan spendera adressen och därifrån börja flytta mynten i tydlig syn på blockchain igen.
När de väl börjat röra sig tydligt igen skulle nya noder kontrollera att inte för många mynt flyttas, medan gamla noder helt enkelt antar att mynten rör sig för första gången sedan de var “låsta”.
Som sådan fungerar den vem som helst kan spendera effektivt som en mantel. Att passera genom den vem som helst kan spendera adressen gör mängden efterföljande transaktioner osynliga för alla noder. Bitcoins skulle “visas” först efter att de har gjort det tillbaka till den ursprungliga vem som helst som kan spendera adressen.
Nackdelar och kompromisser
Tyvärr är konfidentiella transaktioner ingen silverkula för integritet.
Det mest uppenbara är att medan konfidentiella transaktioner maskerar belopp, kan åskådare fortfarande se vilken adress som betalar vilken adress.
Men det finns också möjliga lösningar för att lösa detta.
För det första är det trivialt att skapa falska negativ och betala noll bitcoins till flera adresser för att fördunkla vart bitcoins verkligen gick. Dessutom kan konfidentiella transaktioner vara särskilt användbara i kombination med CoinJoin, som kombinerar att skicka och ta emot adresser från flera transaktioner till en enda, stor transaktion.
En annan potentiell svaghet med konfidentiella transaktioner är att maskerade belopp egentligen bara maskeras för just den transaktionen. Detta kan vara ganska meningslöst om en efterföljande transaktion inte är en konfidentiell transaktion. Informationen från senare transaktioner kan ibland användas för att retroaktivt beräkna hur många bitcoins som måste ha varit inblandade i den konfidentiella transaktionen.
(Till exempel: Om Alice skickar en okänd mängd bitcoins till Bob och Bob därefter skickar 5 bitcoins till Carol och 2 till sig själv som förändring betyder det självklart att Alice skickade 7 bitcoins till Bob.)
Detta betyder att konfidentiella transaktioner verkligen är användbara endast om sådan användning är utbredd. Men det leder oss till ett kanske ännu större problem: Konfidentiella transaktioner är ganska resurstunga. En konfidentiell transaktion är ungefär 20 gånger större än en normal transaktion, medan den till och med ökar beräkningen trettio gånger. Som sådan skulle kostnaden för varje konfidentiell transaktion vara betydligt högre jämfört med typiska transaktioner, vilket ger ett avskräckande för människor som faktiskt använder dem – vilket minskar deras användbarhet för alla andra också.
Utöver det sätter den stora storleken på konfidentiella transaktioner dem i strid med antingen skalbarhet (eftersom Bitcoin-nätverket skulle kunna hantera färre transaktioner) eller decentralisering (eftersom färre användare skulle kunna köra en fullständig nod och verifiera alla transaktioner ), eller båda.
Och sist men inte minst: Det är inte klart att alla är överens om att Bitcoin borde vara mer privat eller fungibelt, vilket ytterligare kan komplicera utrullning av potentiella mjuka gafflar som dessa.
Tack till Pieter Wuille, Adam Back och Monero ledande utvecklare Riccardo Spagni för information och tillagd feedback.