Vad är Bulletproofs?

Bulletproofs är en typ av zero-knowledge range proof. I praktiken löser tekniken ett konkret problem i Monero: beloppshemligheten i RingCT krypterar transaktionsbelopp med Pedersen commitments, men krypteringen i sig garanterar inte att beloppet är positivt. Utan ett range proof kan en illvillig aktör skapa en transaktion med ett negativt belopp och på det sättet generera XMR ur tomma luften.

Bulletproofs bevisar att ett Pedersen commitment döljer ett tal i ett givet intervall, exempelvis 0 till 2 hoch 64, utan att avslöja det faktiska värdet. Beviset är icke-interaktivt: avsändaren skapar det ensidigt och bifogar det till transaktionen. Nätverksnoder verifierar beviset matematiskt innan transaktionen accepteras i ett block.

Tekniken skapades av Benedikt Bünz, Jonathan Bootle, Dan Boneh, Poelstra, Wuille och Maxwell vid Stanford 2017 och presenterades på IEEE Symposium on Security and Privacy 2018. Monero Research Lab följde arbetet tätt och koordinerade implementationen. Aktiveringen skedde i hardforken oktober 2018 efter en oberoende revision av OSTIF med teamen hos Kudelski Security och QuarksLab.

Bulletproofs är specifikt konstruerade för range proofs och är inte ett generellt beräkningssystem. Det skiljer dem från zk-SNARKs, som kan bevisa godtyckliga beräkningar. Avgränsningen är ett medvetet designval: ett smalt syfte ger en enklare och granskningsbar konstruktion med en reducerad attackyta.

Zero-knowledge proofs

Zero-knowledge proof är den grundläggande idén som Bulletproofs bygger på. Principen är att en part, bevisaren, övertalar en annan part, verifieraren, om att ett påstående är sant utan att läcka något om varför det är sant. Tre formella egenskaper definierar vad som räknas som ett korrekt zero-knowledge proof.

Completeness innebär att om påståendet är sant och bevisaren följer protokollet korrekt, accepterar verifieraren alltid beviset. Soundness innebär att om påståendet är falskt, kan bevisaren inte övertala verifieraren utom med försvinnande liten sannolikhet, oavsett hur bevisaren beter sig. Zero-knowledge innebär att verifieraren inte lär sig något om hemligheten utöver att påståendet är sant.

En klassisk analogi är kassaskåpet: du bevisar att du känner koden genom att öppna locket och visa innehållet, utan att säga koden högt. Verifieraren ser att skåpet öppnades och vet att du kände koden, men har inte lärt sig koden. I Moneros fall är hemligheten beloppet och påståendet är att beloppet ligger i det tillåtna intervallet.

Tre huvudkategorier av zero-knowledge-system används i kryptovalutor i dag. zk-SNARKs, Succinct Non-interactive Arguments of Knowledge, används av Zcash och möjliggör bevis för godtyckliga beräkningar med mycket korta bevisstorlekar. zk-STARKs, Scalable Transparent Arguments of Knowledge, behöver ingen trusted setup och är kvantresistenta men producerar större bevis. Bulletproofs, som används av Monero, är konstruerade specifikt för range proofs och kräver ingen trusted setup, men är inte avsedda för generell beräkningslogik. Jämförelsen mot Zcash och andra sekretessmynt fördjupas i guiden om privacy coins.

Effekten av Bulletproofs 2018

Aktiveringen av Bulletproofs i oktober 2018 var den enskilt mest påtagliga prestandaförbättringen i Moneros historia. Före uppgraderingen vägde en genomsnittlig tvåutgångstransaktion ungefär 13 kilobyte. Direkt efter aktivering sjönk storleken till runt 2 kilobyte, en minskning på nära 80 procent.

Mätvärde Före Bulletproofs Efter Bulletproofs
Transaktionsstorlek ~13 kB ~2 kB
Minskning i storlek ca 80 procent
Avgiftsminskning ca 97 procent
Verifieringstid Linjär med utdata Sublineär via batch

Avgifterna föll med cirka 97 procent direkt efter aktiveringen. Minskningen beror på att transaktionskostnaden i Monero är proportionell mot storleken i byte. När range proofsen krympte med 80 procent krympte avgifterna i motsvarande grad, och den förändrade avgiftspolicyn sedan tidigare hade utrymme att sänka ytterligare.

Nätverksbelastningen minskade drastiskt. Varje nod som propagerar och lagrar transaktioner hanterar nu en bråkdel av den tidigare datavolymen per transaktion. Det sänker kostnaderna för att driva en fullständig nod och bidrar till att nätverket förblir tillgängligt utan centralisering av infrastrukturen.

Bulletproofs introducerade också batchverifiering. I stället för att verifiera range proofs en i taget kan en nod verifiera ett helt block av transaktioner gemensamt, vilket ytterligare reducerar CPU-kostnaden per transaktion. Tekniken är matematiskt möjlig tack vare den algebraiska strukturen hos Bulletproofs och saknar direkt motsvarighet i de tidigare range proofsen.

Bulletproofs+ 2022

Bulletproofs+ aktiverades i Monero i augusti 2022 som en del av en sammansatt uppgradering tillsammans med view tags och obligatorisk ring size 16. Formatet är en vidareutveckling av originalet och publicerades av Chung, Han, Ho, Kim och Moon 2021 via IACR ePrint.

Den tekniska förbättringen är verifieringseffektivitet. Bulletproofs+ är ungefär 5 till 7 procent snabbare att verifiera än det ursprungliga Bulletproofs-formatet, tack vare en effektivare innerproduktsargumentstruktur. Bevisets storlek på kedjan är i paritet med originalet, men verifieringskostnaden i CPU-tid sjunker märkbart för noder som hanterar hög transaktionsvolym.

Den samlade augustiuppgraderingen visar hur Monero itererar på protokollet. Tre förbättringar aktiverades i en enda hardfork, var och en oberoende granskad, och resultatet var en kombination av förbättrad prestanda, starkare anonymity set och lägre resurskrav för plånböcker med view tags. Det är ett mönster som återupprepas sedan Moneros tidiga historia: täta hardforks där varje förändring är noggrant avgränsad.

Bulletproofs+ är det aktiva formatet i Monero och förväntas förbli det tills Seraphis-uppgraderingen aktiveras. Seraphis medför ett nytt transaktionsformat och ett nytt adressformat, Jamtis, som på sikt öppnar för ytterligare kryptografiska förbättringar. Tidplanen är planerad till 2026 till 2027 beroende på testresultat och revisioner.

Jämförelse med zk-SNARKs

zk-SNARKs och Bulletproofs representerar olika designfilosofier inom zero-knowledge-kryptografi. Zcash använder zk-SNARKs för sin shielded-transaktionstyp och kan med den tekniken bevisa godtyckliga beräkningar med mycket kompakta bevis. Monero använder Bulletproofs med det smalare syftet att bevisa att belopp ligger i rätt intervall.

Egenskap zk-SNARKs (Zcash) Bulletproofs (Monero)
Trusted setup Krävs Krävs inte
Bevisstorlek Mycket liten (konstant) Logaritmiskt växande
Verifieringstid Konstant, snabb Sublineär, batchbar
Syfte Generella beräkningar Range proofs
Kvantresistens Nej Nej

Den mest principiella skillnaden är trusted setup. zk-SNARKs av den typ som Zcash använde vid lanseringen kräver en parametergeneringsceremoni där ett hemligt värde, ibland kallat toxic waste, skapas och sedan ska förstöras. Om värdet inte förstörs korrekt kan en angripare skapa odetekterbara falska mynt. Zcash genomförde ceremonier 2016 och 2018 med multipla deltagare för att minimera risken, men säkerhetsantagandet kvarstår.

Bulletproofs kräver ingen trusted setup. Konstruktionen bygger enbart på diskret logaritm-problemets svårighet, ett välstuderat antagande utan dolda parametrar. Det innebär att det inte finns något hemligt värde att kompromissa med och ingen ceremoni som kräver tillit till deltagare.

zk-SNARKs producerar bevis med konstant storlek, vanligen under ett kilobyte, oavsett beräkningens komplexitet. Det är fördelaktigt för generella beräkningar. Bulletproofs-bevis växer logaritmiskt med antalet utdata i transaktionen, men i praktiken är skillnaden marginal för normala transaktionsstorlekar och Bulletproofs är tillräckligt effektiva för Moneros range proof-behov.

Varken zk-SNARKs eller Bulletproofs är kvantsäkra. Båda förlitar sig på matematiska problem som en tillräckligt kraftfull kvantdator teoretiskt kan lösa. zk-STARKs erbjuder kvantresistens men producerar väsentligt större bevis. Monero Research Lab följer utvecklingen av post-kvantkryptografi, men inget konkret uppgraderingsförslag för det området är aktivt under 2026.

En fördjupad teknisk jämförelse av Monero mot Zcash och övriga sekretessprotokoll finns i guiden om Moneros integritet.

Vanliga frågor om Bulletproofs

Vad är Bulletproofs i Monero?

Bulletproofs är en typ av zero-knowledge range proof som bevisar att ett krypterat belopp i en Monero-transaktion är ett positivt tal utan att avslöja det faktiska värdet. Tekniken skapades av Benedikt Bünz m.fl. vid Stanford 2017 och aktiverades i Monero i oktober 2018. Resultatet var att den genomsnittliga transaktionsstorleken minskade med cirka 80 procent och avgifterna sjönk med runt 97 procent direkt efter aktiveringen.

Vad är ett zero-knowledge proof?

Ett zero-knowledge proof är en kryptografisk metod där en part bevisar att den känner till en specifik information utan att avslöja informationen i sig. Det har tre grundegenskaper: Completeness, ett giltigt bevis accepteras alltid; Soundness, ett ogiltigt bevis avvisas alltid; Zero-knowledge, beviset läcker ingen information om hemligheten. I Monero används det för att bevisa att ett transaktionsbelopp är positivt utan att röja summan.

Vad förändrade Bulletproofs+ jämfört med originalet?

Bulletproofs+ aktiverades i Monero i augusti 2022 tillsammans med view tags och ring size 16. Uppgraderingen förbättrade verifieringstiden med ungefär 5 till 7 procent jämfört med det ursprungliga Bulletproofs-formatet, utan att kompromissa med säkerheten. Förändringen är teknisk och märks framför allt i lägre CPU-belastning på noder och plånböcker.

Varför kräver Bulletproofs ingen trusted setup till skillnad från zk-SNARKs?

Bulletproofs är konstruerade med ett transparent setup, vilket innebär att inga hemliga parametrar genereras under initialiseringen. zk-SNARKs, som används av Zcash, kräver en parametergeneringsceremoni där ett hemligt värde skapas och sedan måste förstöras. Om det hemliga värdet läcker kan systemets säkerhetsgarantier brytas. Bulletproofs undviker hela den problematiken genom sin algebraiska konstruktion baserad på diskret logaritm.