Anonüümsusest kontopõhistes plokiahelates

Oleme krüptovaluutade anonüümsuse teema vastu huvi tundnud juba pikemat aega ja püüame jälgida selle valdkonna tehnoloogiate arengut. Oma artiklites oleme juba üksikasjalikult arutanud tööpõhimõtteid konfidentsiaalsed tehingud aastal Moneros ja ka läbi viidud võrdlev ülevaade selles valdkonnas olemasolevaid tehnoloogiaid. Kõik tänapäeval anonüümsed krüptovaluutad on aga üles ehitatud Bitcoini pakutud andmemudelile – kulutamata tehinguväljundile (edaspidi UTXO). Kontopõhiste plokiahelate (nt Ethereum) jaoks on anonüümsuse ja konfidentsiaalsuse rakendamiseks olemasolevad lahendused (näiteks Mobius või Asteekide) püüdis nutilepingutes UTXO mudelit kopeerida.

2019. aasta veebruaris Stanfordi ülikooli ja Visa Researchi teadlaste rühm vabastati eeltrükk "Zether: privaatsuse poole nutikate lepingute maailmas." Autorid pakkusid esimestena välja lähenemisviisi anonüümsuse tagamiseks kontopõhistes plokiahelates ja esitasid nutika lepingu kaks versiooni: konfidentsiaalsete (saldode ja ülekandesummade peitmine) ja anonüümsete (saaja ja saatja peitmine) tehingute jaoks. Meie arvates on pakutud tehnoloogia huvitav ja soovime jagada selle disaini, samuti rääkida sellest, miks peetakse kontopõhiste plokiahelate anonüümsuse probleemi väga keeruliseks ja kas autoritel õnnestus see täielikult lahendada.

Nende andmemudelite struktuuri kohta

UTXO mudelis koosneb tehing "sisenditest" ja "väljunditest". “Väljundite” otsene analoog on rahakotis olevad arved: igal “väljundil” on mingi nimiväärtus. Kellelegi makstes (tehingu vormistamisel) kulutate ühe või mitu "väljundit", sel juhul muutuvad need tehingu "sisenditeks" ja plokiahel märgib need kulutatuks. Sel juhul saab teie makse saaja (või teie ise, kui vajate vahetust) vastloodud “väljundid”. Seda saab skemaatiliselt kujutada järgmiselt:

Anonüümsusest kontopõhistes plokiahelates

Kontopõhised plokiahelad on üles ehitatud sarnaselt teie pangakontole. Nad käsitlevad ainult teie kontol olevat summat ja ülekande summat. Kui kannate oma kontolt mingi summa, ei põleta te "väljundeid", võrk ei pea meeles pidama, millised mündid on kulutatud ja millised mitte. Lihtsamal juhul taandub tehingu kontrollimine saatja allkirja ja tema saldol oleva summa kontrollimisele:

Anonüümsusest kontopõhistes plokiahelates

Tehnoloogia analüüs

Järgmisena räägime sellest, kuidas Zether peidab tehingu summa, saaja ja saatja. Selle toimimise põhimõtete kirjeldamisel märgime erinevusi konfidentsiaalses ja anonüümses versioonis. Kuna kontopõhistes plokiahelates on konfidentsiaalsust palju lihtsam tagada, ei ole osa anonüümseks muutmisest tulenevaid piiranguid tehnoloogia konfidentsiaalse versiooni puhul asjakohased.

Saldode ja ülekandesummade peitmine

Saldode krüpteerimiseks ja summade ülekandmiseks Zetheris kasutatakse krüpteerimisskeemi El Gamal. See toimib järgmiselt. Kui Alice tahab Bobi saata b mündid aadressi järgi (selle avalik võti) Y, valib ta juhusliku arvu r ja krüpteerib summa:

Anonüümsusest kontopõhistes plokiahelates
kus C - krüpteeritud summa, D - selle summa dešifreerimiseks vajalik abiväärtus, G - fikseeritud punkt elliptilisel kõveral, kui korrutada salajase võtmega, saadakse avalik võti.

Kui Bob need väärtused kätte saab, lisab ta need lihtsalt samamoodi oma krüpteeritud saldole, mistõttu on see skeem mugav.

Samamoodi lahutab Alice oma saldost samad väärtused, ainult kui Y kasutab teie avalikku võtit.

Saaja ja saatja peitmine

“Väljundite” segamine UTXO-s pärineb krüptovaluutade algusaegadest ja aitab saatjat varjata. Selleks kogub saatja ise ülekande tegemisel plokiahelasse juhuslikud “väljundid” ja segab need enda omadega kokku. Järgmisena allkirjastab ta "väljundid" ringsignatuuriga - krüptograafilise mehhanismiga, mis võimaldab tal veenda kontrollijat, et saatja mündid on kaasatud "väljundite" hulgas. Segatud münte endid muidugi ei kulutata.

Kuid me ei saa adressaadi peitmiseks võltsväljundeid genereerida. Seetõttu on UTXO-s igal “väljundil” oma kordumatu aadress ja see on krüptograafiliselt seotud nende müntide saaja aadressiga. Hetkel ei ole võimalik tuvastada unikaalse väljundaadressi ja saaja aadressi vahelist seost ilma selle salavõtmeid teadmata.

Kontopõhises mudelis ei saa me kasutada ühekordseid aadresse (muidu on see juba "väljapääsu" mudel). Seetõttu tuleb saaja ja saatja plokiahelas teiste kontode hulgas segada. Sel juhul debiteeritakse segakontodelt krüpteeritud 0 münti (või lisatakse 0, kui saaja on segatud), ilma et nende tegelikku saldot tegelikult muudetaks.

Kuna nii saatjal kui ka saajal on alati püsiaadress, tekib vajadus samadele aadressidele ülekandmisel kasutada segamisel samu gruppe. Seda on lihtsam vaadata näitega.

Oletame, et Alice otsustab anda panuse Bobi heategevusse, kuid eelistab, et ülekanne jääks anonüümseks välisvaatleja jaoks. Seejärel, et end saatjaväljale maskeerida, siseneb ta ka Aadama ja Adele'i kontodesse. Ja Bobi peitmiseks lisage Beni ja Billi kontod saaja väljale. Järgmise panuse andes otsustas Alice enda kõrvale kirjutada Alex ja Amanda ning Bobi kõrvale Bruce ja Benjen. Sellisel juhul on plokiahela analüüsimisel nendes kahes tehingus ainult üks ristuv osalejate paar - Alice ja Bob, mis muudab need tehingud anonüümseks.

Anonüümsusest kontopõhistes plokiahelates

Tehinguvõistlused

Nagu juba mainisime, krüpteerib kasutaja oma saldo peitmiseks kontopõhistes süsteemides oma saldo ja ülekandesumma. Samal ajal peab ta tõestama, et tema konto saldo ei ole negatiivne. Probleem on selles, et tehingu loomisel koostab kasutaja oma arvelduskonto oleku kohta tõendi. Mis juhtub, kui Bob saadab Alice'ile tehingu ja see võetakse vastu enne Alice'i saadetud tehingut? Siis loetakse Alice'i tehing kehtetuks, kuna tasakaalutõend koostati enne Bobi tehingu vastuvõtmist.

Anonüümsusest kontopõhistes plokiahelates

Esimene otsus, mis sellises olukorras tuleb, on konto külmutamine kuni tehingu sooritamiseni. Kuid see lähenemine ei sobi, sest lisaks sellise probleemi lahendamise keerukusele hajussüsteemis ei ole anonüümses skeemis selge, kelle konto blokeerida.

Selle probleemi lahendamiseks eraldab tehnoloogia sissetulevad ja väljaminevad tehingud: kulutused mõjutavad bilansi koheselt, laekumised aga viivitusega. Selleks tutvustatakse mõistet "ajastu" - kindla suurusega plokkide rühm. Praegune "ajastu" määratakse, jagades ploki kõrguse rühma suurusega. Tehingu töötlemisel värskendab võrk koheselt saatja saldot ja salvestab saaja raha hoiupaaki. Kogunenud raha antakse saaja käsutusse alles siis, kui algab uus “ajastu”.

Tänu sellele saab kasutaja tehinguid saata sõltumata raha laekumise sagedusest (muidugi nii palju kui tema saldo seda võimaldab). Epohhi suurus määratakse selle põhjal, kui kiiresti plokid võrgus levivad ja kui kiiresti tehing plokki siseneb.

See lahendus töötab hästi konfidentsiaalsete ülekannete puhul, kuid anonüümsete tehingutega, nagu hiljem näeme, tekitab see tõsiseid probleeme.

Kaitse kordusrünnakute eest

Kontopõhistes plokiahelates allkirjastatakse iga tehing saatja privaatvõtmega, mis veenab kontrollijat, et tehingut ei ole muudetud ja selle on loonud selle võtme omanik. Aga mis siis, kui edastuskanalit kuulanud ründaja püüab selle sõnumi pealt ja saadab täpselt sama teise? Kontrollija kontrollib tehingu allkirja ja veendub selle autorsuses ning võrk kannab sama summa uuesti saatja saldost maha.

Seda rünnakut nimetatakse kordusrünnakuks. UTXO mudelis pole sellised rünnakud asjakohased, kuna ründaja püüab kasutada kulutatud väljundeid, mis iseenesest ei kehti ja võrk lükkab selle tagasi.

Et seda ei juhtuks, on tehingusse sisse ehitatud juhuslike andmetega väli, mida nimetatakse nonce’iks ehk lihtsalt “soolaks”. Soolaga tehingu uuesti esitamisel vaatab kontrollija, kas nonce'i on varem kasutatud, ja kui mitte, loeb ta tehingu kehtivaks. Selleks, et mitte salvestada plokiahelasse kogu kasutajate mittevastavuste ajalugu, määratakse see tavaliselt esimeses tehingus nulliga ja suurendatakse seejärel ühe võrra. Võrk saab vaid kontrollida, kas uue tehingu nonce erineb eelmisest ükshaaval.

Anonüümses ülekandeskeemis kerkib probleem tehingute mittevastavuse valideerimisega. Me ei saa otsesõnu siduda nonce'i saatja aadressiga, kuna ilmselgelt muudab see ülekande anonüümseks. Samuti ei saa me seda lisada kõigi osalevate kontode mittevastavustele, kuna see võib olla vastuolus muude töödeldavate ülekannetega.

Zetheri autorid teevad ettepaneku genereerida nonce krüptograafiliselt, sõltuvalt "ajastust". Näiteks:

Anonüümsusest kontopõhistes plokiahelates
see on x on saatja salajane võti ja Gepoch — epohhi täiendav generaator, mis saadakse stringi kujul Zether + räsimisel. Nüüd näib probleem olevat lahendatud – me ei avalda saatja mittemidagiütlemist ega sekku asjasse mittepuutuvate osalejate mittemidagiütlemisse. Kuid selline lähenemine seab tõsise piirangu: üks konto ei saa saata rohkem kui ühe tehingu "ajastu kohta". See probleem jääb kahjuks lahendamata ja muudab Zetheri anonüümse versiooni meie arvates vaevalt kasutamiseks sobivaks.

Nullteadmiste tõendite keerukus

UTXO-s peab saatja võrgule tõestama, et ta ei kuluta negatiivset summat, vastasel juhul on võimalik tühjast õhust uusi münte genereerida (miks see võimalik on, kirjutasime ühes eelmises artiklid). Ja allkirjastage ka "sisendid" sõrmusallkirjaga, tõestamaks, et segatavate müntide hulgas on talle kuuluvaid rahalisi vahendeid.

Kontopõhise plokiahela anonüümses versioonis on tõestuse väljendid palju keerulisemad. Saatja tõendab, et:

  1. Saadetud summa on positiivne;
  2. Saldo jääb mittenegatiivseks;
  3. Saatja krüpteeris ülekandesummad õigesti (sh null);
  4. Saldo saldo muutub ainult saatja ja saaja jaoks;
  5. Saatjale kuulub tema konto privaatvõti ja ta on tegelikult saatjate nimekirjas (asjaosaliste hulgas);
  6. Tehingus kasutatud Nonce on õigesti koostatud.

Sellise keerulise tõestuse jaoks kasutavad autorid segu Bulletproof (üks autoritest, muide, osales selle loomises) ja Sigma protokoll, mida nimetatakse Sigma-kuulikesteks. Sellise väite ametlik tõendamine on üsna keeruline ülesanne ja piirab oluliselt inimeste arvu, kes soovivad tehnoloogiat rakendada.

Ja tulemus?

Meie arvates saab kohe kasutada Zetheri seda osa, mis toob kontopõhistesse plokiahelatesse privaatsuse. Kuid praegu seab tehnoloogia anonüümne versioon selle kasutamisele tõsised piirangud ja selle rakendamise keerukus. Siiski ei tasu maha arvata, et autorid andsid selle välja alles paar kuud tagasi ja ehk leiab keegi teine ​​täna eksisteerivatele probleemidele lahenduse. Nii tehakse ju teadust.

Allikas: www.habr.com

Lisa kommentaar