Kontuan oinarritutako blockchainetan anonimotasunari buruz

Aspalditik interesatzen gara kriptografia-monetan anonimotasunaren gaia eta arlo honetako teknologien garapena jarraitzen saiatzen gara. Gure artikuluetan funtzionamenduaren printzipioak zehatz-mehatz eztabaidatu ditugu isilpeko transakzioak Moneroan, eta burutu ere berrikuspen konparatiboa arlo honetan dauden teknologiak. Hala ere, gaur egungo kriptomoneta anonimo guztiak Bitcoin - Unspent Transaction Output (aurrerantzean UTXO) proposatutako datu-ereduan eraikitzen dira. Ethereum bezalako kontuetan oinarritutako bloke-kateetarako, anonimotasuna eta konfidentzialtasuna ezartzeko dauden irtenbideak (adibidez, Mobius edo Aztec) UTXO eredua kontratu adimendunetan errepikatzen saiatu zen.

2019ko otsailean, Stanford Unibertsitateko eta Visa Researcheko ikertzaile talde bat askatu aurreinprimaketa "Zether: pribatutasunerantz kontratu adimendunen munduan". Egileak izan ziren kontuetan oinarritutako bloke-kateetan anonimotasuna bermatzeko planteamendu bat proposatzen lehenak eta kontratu adimendun baten bi bertsio aurkeztu zituzten: isilpeko (saldoak eta transferentziaren zenbatekoak ezkutatzea) eta anonimoak (hartzailea eta igorlea ezkutatuta) transakzioetarako. Proposatutako teknologia interesgarria iruditzen zaigu eta bere diseinua partekatu nahi dugu, baita kontuetan oinarritutako blockchains-en anonimotasunaren arazoa zergatik jotzen den oso zaila eta egileek guztiz konpontzea lortu duten ala ez.

Datu-eredu horien egiturari buruz

UTXO ereduan, transakzio bat "sarrerak" eta "irteerak" osatzen dute. "Irteeraren" analogo zuzena zure zorroko fakturak dira: "irteera" bakoitzak izendapen bat du. Norbaiti ordaintzen duzunean (transakzio bat osatzen) "irteera" bat edo gehiago gastatzen dituzu, kasu horretan transakzioaren "sarrera" bihurtzen dira, eta blockchain-ak gastatu gisa markatzen ditu. Kasu honetan, zure ordainketaren hartzaileak (edo zuk zeuk, aldaketa behar baduzu) sortu berri diren "irteerak" jasotzen ditu. Hau eskematikoki honela irudikatu daiteke:

Kontuan oinarritutako blockchainetan anonimotasunari buruz

Kontuan oinarritutako bloke-kateak zure banku-kontuaren antzera egituratzen dira. Zure kontuko zenbatekoarekin eta transferentziaren zenbatekoarekin bakarrik jorratzen dute. Zure kontutik zenbateko bat transferitzen duzunean, ez duzu "irteerarik" erretzen, sareak ez du gogoratu behar zein txanpon gastatu diren eta zein ez. Kasurik errazenean, transakzioaren egiaztapena igorlearen sinadura eta saldoaren zenbatekoa egiaztatzera datza:

Kontuan oinarritutako blockchainetan anonimotasunari buruz

Teknologiaren analisia

Ondoren, Zether-ek transakzioaren zenbatekoa, hartzailea eta igorlea nola ezkutatzen dituen hitz egingo dugu. Bere funtzionamenduaren printzipioak deskribatzen ditugun heinean, bertsio isilpeko eta anonimoetako desberdintasunak ohartuko dira. Kontuetan oinarritutako bloke-kateetan konfidentzialtasuna bermatzea askoz errazagoa denez, anonimizazioak ezarritako murrizketa batzuk ez dira garrantzitsuak izango teknologiaren isilpeko bertsiorako.

Saldoak eta transferentzien zenbatekoak ezkutatzea

Zifratze-eskema bat erabiltzen da saldoak enkriptatzeko eta zenbatekoak transferitzeko Zether-en El Gamal. Honela funtzionatzen du. Alicek Bob bidali nahi duenean b txanponak helbidearen arabera (gako publikoa) Y, ausazko zenbaki bat aukeratzen du r eta zenbatekoa enkriptatzen du:

Kontuan oinarritutako blockchainetan anonimotasunari buruz
non C - enkriptatutako zenbatekoa, D - kopuru hori deszifratzeko beharrezkoa den balio osagarria, G - Kurba eliptikoko puntu finko bat, gako sekretuarekin biderkatuta, gako publikoa lortzen da.

Bob-ek balio horiek jasotzen dituenean, bere balantze enkriptatuari gehitzen dizkio modu berean, eta horregatik komenigarria da eskema hau.

Era berean, Alicek bere balantzetik balio berdinak kentzen ditu, bakarrik Y zure gako publikoa erabiltzen du.

Hartzailea eta igorlea ezkutatzen

UTXOn "irteerak" nahastea kriptomoneten hasierako garaietatik dator eta igorlea ezkutatzen laguntzen du. Horretarako, igorleak berak, transferentzia bat egiterakoan, ausazko "irteerak" biltzen ditu bloke-katean eta berearekin nahasten ditu. Jarraian, "irteerak" eraztun sinadura batekin sinatzen ditu -mekanismo kriptografiko bat, egiaztatzaileari sinetsarazteko aukera ematen dion igorlearen txanponak dauden "irteeren" artean. Txanpon mistoak berak, noski, ez dira gastatzen.

Hala ere, ezin izango dugu irteera faltsurik sortu hartzailea ezkutatzeko. Hori dela eta, UTXOn, β€œirteera” bakoitzak bere helbide berezia du, eta kriptografikoki lotuta dago txanpon hauen hartzailearen helbidearekin. Momentuz, ez dago irteerako helbide esklusiboaren eta hartzailearen helbidearen arteko erlazioa identifikatzerik bere gako sekretuak ezagutu gabe.

Kontuan oinarritutako ereduan, ezin ditugu behin-behineko helbideak erabili (bestela jada "irteera" eredua izango da). Hori dela eta, hartzaileak eta igorleak blokeo-kateko beste kontu batzuen artean nahastu behar dira. Kasu honetan, enkriptatutako 0 txanponak zorduntzen dira kontu mistoetatik (edo 0 gehitzen dira hartzailea nahastuta badago), haien benetako saldoa aldatu gabe.

Bidaltzaileak zein hartzaileak beti helbide iraunkor bat dutenez, beharrezkoa da nahasketa egiteko talde berdinak erabiltzea helbide berdinetara transferitzean. Errazagoa da hori adibide batekin ikustea.

Demagun Alicek Bob-en ongintzarako ekarpena egitea erabakitzen duela, baina nahiago du transferentzia kanpo-behatzaile baten aurrean anonimoa geratzea. Orduan, igorlearen eremuan mozorrotzeko, Adam eta Adeleren kontuetan ere sartzen da. Eta Bob ezkutatzeko, gehitu Ben eta Bill-en kontuak hartzailearen eremuan. Hurrengo ekarpena eginez, Alicek Alex eta Amanda bere ondoan idaztea erabaki zuen, eta Bruce eta Benjenek Bob ondoan. Kasu honetan, blockchain-a aztertzean, bi transakzio hauetan parte-hartzaileen bikote gurutzatzaile bakarra dago - Alice eta Bob, transakzio horiek anonimizatu egiten dituena.

Kontuan oinarritutako blockchainetan anonimotasunari buruz

Transakzio lasterketak

Lehen aipatu dugun bezala, zure saldoa kontuetan oinarritutako sistemetan ezkutatzeko, erabiltzaileak bere saldoa eta transferentziaren zenbatekoa enkriptatzen ditu. Aldi berean, bere kontuko saldoa ez-negatiboa izaten jarraitzen duela frogatu beharko du. Arazoa da transakzio bat sortzean, erabiltzaileak bere uneko kontuaren egoerari buruzko froga bat eraikitzen duela. Zer gertatzen da Bob-ek transakzio bat Aliceri bidaltzen badio, eta Alicek bidalitakoaren aurretik onartzen bada? Orduan Aliceren transakzioa baliogabetzat hartuko da, saldoaren froga Bob-en transakzioa onartu aurretik eraiki baitzen.

Kontuan oinarritutako blockchainetan anonimotasunari buruz

Egoera horretan etortzen den lehen erabakia kontua izoztea da transakzioa egin arte. Baina ikuspegi hau ez da egokia, zeren eta sistema banatu batean halako arazo bat konpontzeko konplexutasunaz gain, eskema anonimo batean ez baita argituko noren kontua blokeatu behar den.

Arazo hori konpontzeko, teknologiak sarrerako eta irteerako eragiketak bereizten ditu: gastuak berehalako eragina du balantzean, kobratzeak, berriz, atzerapena. Horretarako, "garai" kontzeptua sartzen da - tamaina finkoko bloke talde bat. Uneko "garaia" blokearen altuera taldearen tamainaz zatituz zehazten da. Transakzio bat prozesatzen denean, sareak berehala eguneratzen du igorlearen saldoa eta hartzailearen fondoak biltegiratze depositu batean gordetzen ditu. Metatutako funtsak onuradunaren eskura jartzen dira "aro" berri bat hasten denean soilik.

Ondorioz, erabiltzaileak transakzioak bidal ditzake funtsak zenbateko maiztasuna jasotzen dituen (bere saldoak ahalbidetzen duen neurrian, noski). Aroaren tamaina blokeak sarean zehar zenbat azkar hedatzen diren eta transakzio bat bloke batean zenbat azkar sartzen den arabera zehazten da.

Irtenbide honek ondo funtzionatzen du isilpeko transferentziak egiteko, baina transakzio anonimoekin, aurrerago ikusiko dugunez, arazo larriak sortzen ditu.

Errepikatzeko erasoen aurkako babesa

Kontuan oinarritutako bloke-kateetan, transakzio bakoitza igorlearen gako pribatuak sinatzen du, eta horrek egiaztatzailea konbentzitzen du transakzioa ez dela aldatu eta gako honen jabeak sortu duela. Baina zer gertatzen da transmisio-kanala entzuten ari zen erasotzaile batek mezu hau atzematen eta bigarrena zehazki bidaltzen badu? Egiaztatzaileak transakzioaren sinadura egiaztatuko du eta bere egiletasunaz konbentzituko du, eta sareak igorlearen saldotik zenbateko bera kenduko du berriro.

Eraso horri errepikapen erasoa deitzen zaio. UTXO ereduan horrelako erasoak ez dira garrantzitsuak, erasotzailea agortutako irteerak erabiltzen saiatuko baita, berez balio ez duena eta sareak baztertzen duena.

Hori gerta ez dadin, ausazko datuak dituen eremu bat eraikitzen da transakzioan, nonce edo "gatza" deitzen dena. Gatz batekin transakzio bat berriro bidaltzean, egiaztatzaileak nonce aurretik erabili ote den ikusten du eta, hala ez bada, transakzioa baliozkotzat jotzen du. Erabiltzaileen nonceen historia osoa bloke-katean ez gordetzeko, normalean lehenengo transakzioan zero berdina ezartzen da, eta gero bat handitzen da. Sareak soilik egiaztatu dezake transakzio berriaren nonce-a aurrekoarekiko desberdina dela.

Transferentzia eskem anonimoan, transakzio noncek baliozkotzearen arazoa sortzen da. Ezin dugu esplizituki lotu nonce igorlearen helbidearekin, zeren, jakina, horrek transferentzia anonimizatu egiten du. Era berean, ezin dugu bat gehitu parte hartzen duten kontu guztien nonzei, prozesatzen ari diren beste transferentziekin gatazkan egon daitekeelako.

Zether-en egileek nonce kriptografikoki sortzea proposatzen dute, "garaiaren" arabera. Adibidez:

Kontuan oinarritutako blockchainetan anonimotasunari buruz
Hemen x igorlearen gako sekretua da, eta Gepoch β€” Garairako sorgailu gehigarri bat, 'Zether + ' formako katea hash eginez lortua. Orain arazoa konponduta dagoela dirudi - ez dugu bidaltzailearen nonce-a agerian uzten eta ez dugu parte hartzen ez duten parte-hartzaileen nonce-ak oztopatzen. Baina ikuspegi honek muga larri bat ezartzen du: kontu batek ezin du transakzio bat baino gehiago bidali "garai" bakoitzeko. Arazo honek, zoritxarrez, konpondu gabe jarraitzen du, eta gaur egun Zether-en bertsio anonimoa, gure ustez, ez da ia erabiltzeko egokia.

Zero Ezagutza Frogaren konplexutasuna

UTXOn, igorleak sareari frogatu behar dio ez duela zenbateko negatiborik gastatzen ari, bestela posible bihurtzen da txanpon berriak sortzea (zergatik den posible, idatzi genuen aurreko batean. artikulu). Eta sinatu ere "sarrerak" eraztun sinadura batekin nahasten ari diren txanponen artean bereak diren funtsak daudela frogatzeko.

Kontuan oinarritutako bloke-katearen bertsio anonimoan, frogarako esamoldeak askoz konplexuagoak dira. Igorleak hau frogatzen du:

  1. Bidaltzen den zenbatekoa positiboa da;
  2. Balantzeak ez-negatiboa izaten jarraitzen du;
  3. Bidaltzaileak behar bezala enkriptatu ditu transferentziaren zenbatekoak (zero barne);
  4. Balantzaren saldoa igorlearentzat eta hartzailearentzat bakarrik aldatzen da;
  5. Bidaltzailea bere kontuaren gako pribatuaren jabea da eta benetan igorleen zerrendan dago (parte hartzen dutenen artean);
  6. Transakzioan erabilitako Nonce behar bezala osatuta dago.

Halako froga konplexu baterako, egileek nahasketa bat erabiltzen dute bulletproof (egileetako batek, bide batez, bere sorreran parte hartu zuen) eta Sigma protokoloa, Sigma-bulletak deitzen direnak. Adierazpen horren froga formala nahiko lan zaila da, eta teknologia ezartzeko prest dauden pertsonen kopurua asko mugatzen du.

Emaitza?

Gure ustez, kontuetan oinarritutako bloke-kateei pribatutasuna ematen dien Zether-en zatia erabil daiteke oraintxe bertan. Baina momentuz, teknologiaren bertsio anonimoak murrizketa larriak ezartzen ditu erabileran, eta konplexutasuna ezartzean. Dena den, ez da baztertu behar egileek duela hilabete batzuk kaleratu zutela, eta agian beste norbaitek topatuko du gaur egun dauden arazoei irtenbidea. Azken finean, horrela egiten da zientzia.

Iturria: www.habr.com

Gehitu iruzkin berria