Sākums
Raksti
Kriptovalūtu pārskatāmības veicināšana ar nulles zināšanu apliecinājumiem

Kriptovalūtu pārskatāmības veicināšana ar nulles zināšanu apliecinājumiem

Sarežģītākas tēmas
Publicēts Feb 10, 2023Atjaunināts Jan 5, 2024
10m

Īsumā

Izmantojot nulles zināšanu apliecinājumu, viena puse (verificētājs) var noteikt citas puses (apliecinātāja) apgalvojuma derīgumu, neko nezinot par šī apgalvojuma saturu. Piemēram, Binance varētu vēlēties, neatklājot informāciju par katra lietotāja konta atlikumu, pierādīt, ka tas glabā rezerves atbilstoši Binance lietotāju līdzekļu kopsummai.

Rezervju apliecinājumu var izveidot ar Merkles koku, kas nodrošina aizsardzību pret iekšējo datu (šajā gadījumā – klientu kontu kopējo neto atlikumu) viltošanu, tādējādi apliecinot biržas saistības pret tās lietotājiem. Pēc tam šo informāciju var apvienot ar zk-Snark tipa apliecinājumiem (nulles zināšanu apliecinājumu protokolu), sniedzot lietotājiem iespēju pārliecināties, ka to kontu atlikumi ir iekļauti kopējā lietotāju aktīvu neto atlikumā, nezinot katra atsevišķā konta atlikumu.

Ievads

Ņemot vērā tirgū notiekošo, trešās puses pārvaldībā glabāto kriptoaktīvu drošība ir kļuvusi īpaši aktuāla. Blokķēdes lietotājiem ļoti svarīga ir pārskatāmība un atklātība, taču tie atbalsta arī privātumu un konfidencialitāti. Tādējādi veidojas dilemma situācijā, kad ir jāapliecina līdzekļu pārvaldnieku glabāto līdzekļu rezerves. Bieži vien nākas samierināties ar kompromisu starp pārskatāmību, uzticēšanos un datu konfidencialitāti.

Taču tā tam nevajadzētu būt. Apvienojot nulles zināšanu apliecinājumu protokolus (piemēram, zk-Snark tipa apliecinājumus) ar Merkles kokiem, ir iespējams rast risinājumu, kas apmierina visas puses.

Kas ir nulles zināšanu apliecinājums?

Izmantojot nulles zināšanu apliecinājumu, viena puse (verificētājs) var noteikt citas puses (apliecinātāja) apgalvojuma derīgumu, neko nezinot par šī apgalvojuma saturu. Apskatīsim vienkāršu piemēru.

Tev ir slēgts seifs, kura kombināciju zini tikai tu. Šajā konkrētajā piemērā pieņemsim, ka seifu nevar aiznest, uzlauzt vai citādi atvērt, un vienīgais veids, kā piekļūt tā saturam, ir nospiest pareizo taustiņu kombināciju. Šo faktu konstatē, pārbauda un zina arī tavs draugs, kurš piedalās šajā eksperimentā.

Tu apgalvo savam draugam, ka tu zini seifa piekļuves kombināciju, taču tu nevēlies to atklāt vai atvērt seifu drauga klātbūtnē. Kastes augšpusē ir atvere, kurā tavs draugs var ievietot zīmīti. Lai tas būtu nulles zināšanu apliecinājums, tavam draugam nedrīkst būt nekādas citas informācijas par šo procesu, izņemot tavu izteikto apgalvojumu.

Tu vari pierādīt savam draugam, ka tu zini seifa kombināciju, atverot kasti, pasakot viņam, kas bija uzrakstīts uz zīmītes, un tad atkal kasti aizverot. Taču tev nevienā brīdī nebūtu jāatklāj seifa piekļuves kombinācija.

Sarežģītāks piemērs ir apskatīts rakstā Kas ir nulles zināšanu apliecinājums, un kā tas ietekmē blokķēdi?.

Kāpēc mēs izmantojam nulles zināšanu apliecinājumus?

Nulles zināšanu apliecinājumus var izmantot, lai kaut ko pierādītu, neatklājot sensitīvu informāciju vai nianses. Tu varētu vēlēties paturēt pie sevis savu finanšu informāciju vai personas datus, lai kāds tos neatbilstoši neizmantotu.

Kriptovalūtu pasaulē tu vari pierādīt, ka tev pieder privātā atslēga, nevienam šo atslēgu neatklājot un neko digitāli neparakstot. Kriptovalūtu birža varētu vēlēties pierādīt savu rezervju statusu, neatklājot konfidenciālu informāciju par saviem lietotājiem, piemēram, par to kontu atlikumiem. 

Šajos (un daudzos citos) gadījumos nulles zināšanu apliecinājumi izmantotu algoritmus, kas, izmantojot ievadītos datus, ģenerētu atbilstošu rezultātu – "pareizi" vai "nepareizi". 

Nulles zināšanu apliecinājumu definēšana, izmantojot tehniskus terminus

No tehniskā skatpunkta – nulles zināšanu apliecinājumi ievēro noteiktu struktūru ar konkrētiem kritērijiem. Mēs jau apskatījām apliecinātāja un verificētāja lomas, taču ir arī trīs kritēriji, kas ir jāaptver nulles zināšanu apliecinājumiem:

  1. Pilnīgums. Ja apgalvojums ir patiess, sniegtais apliecinājums pārliecinās verificētāju bez nepieciešamības iegūt jebkādu papildu informāciju vai verifikāciju.

  2. Uzticamība. Ja apgalvojums ir nepatiess, sniegtais apliecinājums nepārliecinās verificētāju par apgalvojuma patiesību.

  3. Nulles zināšanas. Ja apgalvojums ir patiess, verificētājam nav nepieciešama papildu informācija – pietiekami ir zināt, ka apgalvojums ir patiess.

Kas ir zk-Snark tipa apliecinājums?

zk-Snark tipa apliecinājums ("nulles zināšanu, īsi, neinteraktīvi zināšanu argumenti") ir apliecinājumu protokols, kas ievēro augstāk aprakstītos nulles zināšanu principus. Izmantojot zk-Snark tipa apliecinājumus, tu vari pierādīt, ka zini sākotnējo jaucējvērtību (tai pievērsīsimies pēc brīža), neatklājot, kāda tā ir. Tu varētu arī pierādīt darījuma derīgumu, neatklājot nekādu informāciju par konkrētām tajā iesaistītajām summām, vērtībām vai adresēm.

zk-Snark tipa apliecinājumi tiek plaši izmantoti un par tiem tiek plaši diskutēts blokķēžu un kriptovalūtu pasaulē. Taču tu, iespējams, prāto – kāpēc izmantot zk-Snark tipa apliecinājumus, ja informācijas aizsardzībai var izmantot vienkāršu publiskās un privātās atslēgas pāri. Tomēr tādā gadījumā nebūtu iespējams ieviest matemātisko pierādījumu, lai nodrošinātu, ka Merkles koka summā nav iekļauti negatīvi atlikumi. 

Attiecībā uz biržas rezervēm mēs vēlamies pierādīt, nepubliskojot katra konta identifikatoru un atlikumu, ka klientu kontu atlikumiem tiek glabātas rezerves pilnā apjomā. Turklāt zk-Snark tipa apliecinājumu tehnoloģija padara datu viltošanas iespējamību vēl mazāk ticamu.

Kas ir Merkles koks?

Lai uzrādītu Binance lietotāju līdzekļu kopsummu, ir jāapstrādā ļoti apjomīgi dati. Viens no veidiem, kā kriptogrāfiski attēlot lielu datu apjomu, ir izmantojot Merkles koku. Tajā var efektīvi glabāt milzīgu informācijas apjomu, un tā kriptogrāfiskais raksturs ļauj viegli pārbaudīt integritāti.

Jaucējfunkcijas

Lai īsi un kodolīgi šifrētu ievadītos datus, Merkles koks izmanto jaucējfunkcijas. Īsumā – jaukšana ir process, kurā tiek ģenerēts fiksēta izmēra rezultāts, izmantojot mainīga izmēra ievades datus. Citiem vārdiem sakot, ar algoritmu veicot jaukšanu jebkāda garuma ievades datiem, tiek iegūts nemainīga garuma šifrēts rezultāts.

Kamēr nemainīsies ievades dati, nemainīsies arī rezultāts. Tas nozīmē, ka var ievadīt milzīgu apjomu darījumu datu un sajaukt tos, iegūstot izmantojamu rezultātu. Mainot jebkādu informāciju ievades datos, rezultāts radikāli mainītos.

Piemēram, mēs SHA-256 jaucējfunkcijā varētu ievadīt 100 grāmatu saturu. Mēs varētu iegūt šim līdzīgu rezultātu:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

Mainot vienu rakstzīmi sākotnēji ievadītajos datos (šajās 100 grāmatās), jaucējkods būs pilnīgi atšķirīgs, piemēram:

abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410

Tā ir svarīga jaucējfunkciju īpašība, jo tā ļauj viegli pārbaudīt datu precizitāti. Ja kāds mēģinātu atkārtot šo pašu 100 grāmatu jaukšanas procesu, izmantojot SHA-256 algoritmu, tas iegūtu identisku jaucējkodu. Ja rezultāts atšķiras, var ar pārliecību apgalvot, ka ievades dati ir mainījušies. Tas nozīmē, ka nav nepieciešams manuāli vai atsevišķi pārbaudīt ievades datu atšķirības, kas var būt ļoti darbietilpīgi.

Merkles koki kriptovalūtu pasaulē

Glabājot darījumu datus blokķēdē, katram jaunajam darījumam tiek piemērota jaucējfunkcija, ģenerējot unikālas jaucējvērtības. Pieņemsim, ka mums ir astoņi darījumi (A-H), un mēs katru no tiem atsevišķi jaucam, lai iegūtu jaucējkodus. Tos mēs saucam par Merkles lapu mezgliem. Zemāk attēlā ir redzama katra burta unikālā jaucējvērtība: hA burtam A, hB burtam B, hC burtam C utt.

Pēc tam varam ņemt jaucējvērtību pārus, apvienot tos un iegūt jaunu jaucējvērtību. Piemēram, sajaucot kopā hA un hB, tiktu iegūta jauna jaucējvērtība hAB jeb Merkles zars. Ņem vērā, ka katru reizi, kad tiek iegūts jauns rezultāts, tas atbilst nemainīgam garumam un izmēram saskaņā ar izmantoto jaucējfunkciju.

Tagad mums ir divu darījumu (piem., A un B) dati, kas apvienoti vienā jaucējkodā (hAB). Ņem vērā, ka, izmainot jebkādu A vai B darījumā iekļauto informāciju un atkārtojot procesu, tiktu iegūta pilnīgi atšķirīga hAB jaucējvērtība.

Šis process turpinās, apvienojot jaunus jaucējkodu pārus un atkal tos jaucot (skat. attēlu zemāk). Tiek jaukti hAB un hCD, iegūstot unikālu jaucējkodu hABCD, un tas pats process tiek atkārtots ar hEF un hGF, iegūstot hEFGH. Rezultātā mēs iegūstam vienu jaucējkodu, kas atbilst visu iepriekšējo darījumu jaucējkodu jaukšanas rezultātiem. Citiem vārdiem sakot, hABCDEFGH jaucējfunkcijas rezultāts ietver visu iepriekšējo informāciju.

Augstāk grafikā ir attēlots Merkles koks, un jaucējvērtība hABCDEFGH ir Merkles sakne. Merkles saknes izmanto bloku galvenēs, jo tās kodolīgi kriptogrāfiski apkopo visu blokā ietilpstošo darījumu datus. Ir iespējams arī ātri pārbaudīt, vai kādi no blokā ietilpstošajiem datiem ir mainīti.

Merkles koku ierobežojumi

Tagad atgriezīsimies pie piemēra ar CEX rezervēm. CEX birža vēlas pierādīt, ka tās glabātās rezerves atbilst visu klientu aktīvu kopējam apjomam, tāpēc tā izveido Merkles koku un veic jaukšanu biržas klientu UID un saviem neto aktīvu uzkrājumiem (pēc ieskaita starp aktīva un pasīva posteņiem) tokenu līmenī. Pēc tā laišanas klajā (un parakstīšanas, apliecinot īpašumtiesības uz sastādīto Merkles sakni) atsevišķam lietotājam nebūtu iespēju, nepiekļūstot visiem ievades datiem, pārbaudīt, vai Merkles koks ir derīgs.

Birža var nebūt iekļāvusi kādus ievades datus. Tā varētu arī izveidot viltus kontus ar negatīviem atlikumiem, lai tādējādi mainītu kopējo saistību apjomu. Piemēram, pieņemsim, ka klientu aktīvu kopsumma ir 1 000 000 $, bet ir pievienots viltus konts ar atlikumu -500 000 $. Tas nozīmē, ka biržai būtu jāglabā rezerves tikai 500 000 $ apmērā.

Rezervju apliecināšanas gadījums atšķiras no bloka Merkles saknes, jo blokķēdes pārlūkā lietotāji var redzēt visus blokā ietilpstošos darījumus. Turpretī CEX drošības un datu privātuma dēļ nevēlēsies atklāt katra konta atlikumu. Arī klienti nebūtu priecīgi, ja tiktu publiskots to kontu atlikums. Šajā gadījumā CEX nevar pierādīt, ka lietotāja kontu atlikumu kopsumma ir pareiza, neatklājot pārējo lietotāju kontu atlikumu.

Viens no iespējamajiem risinājumiem, ko birža varētu izmantot, ir uzticams trešās puses revidents. Revidents var pārbaudīt atsevišķos kontus un rezerves un tad apstiprināt iegūtās Merkles saknes derīgumu. Taču lietotājiem šī metode saistās ar nepieciešamību uzticēties revidentam un datiem, kas izmantoti revīzijā. Nav nepieciešams uzticēties trešajai pusei, ja var uzticēties datiem.

Zk-Snark tipa apliecinājumu apvienošana ar Merkles kokiem

Minētā problēma ir lielisks piemērs zk-Snark tipa apliecinājumu izmantošanai. Mēs vēlamies pierādīt, ka ar glabātajām rezervēm tiek pilnībā segtas lietotāju saistības un dati nav viltoti. Taču privātuma un drošības apsvērumu dēļ mēs nevēlamies uzrādīt verificētājam precīzas summas, kas veido lietotāju kontu atlikumus un rezerves. 

Izmantojot zk-Snark tipa apliecinājumus, kriptovalūtu birža var pierādīt, ka visas Merkles lapu mezglu atlikumu kopas (proti, lietotāju kontu atlikumi) kopā veido biržas ziņoto kopējo lietotāju aktīvu atlikumu. Katrs lietotājs var viegli piekļūt savam lapas mezglam, pārliecinoties, ka tā dati ir iekļauti procesā. zk-Snark tipa apliecinājumi arī nodrošina, ka neviens ģenerētais Merkles koks neietver lietotājus ar negatīvu kopējo aktīvu neto atlikumu (kas liecinātu par datu viltošanu, jo visu aizdevumu nodrošinājums pārsniedz aizdevuma summu). Tiek izmantots arī Binance vispārējā stāvokļa aprēķins, proti, saraksts ar katram Binance klientam piederošā katra aktīva kopējo neto atlikumu.

Apskatīsim, kā Binance risina šo situāciju. Vispirms Binance definē aprēķina ierobežojumus, ko vēlas pierādīt, un definē tos kā programmējamu shēmu. Tālāk ir norādīti trīs ierobežojumi, ko Binance izmanto savā modelī. 

Attiecībā uz katra lietotāja atlikumu kopu (Merkles koka lapu mezglu) mūsu shēma nodrošina, ka:

  1. Lietotāja aktīvu atlikumi ir iekļauti Binance lietotāju kontu neto atlikumu kopsummā.

  2. Lietotāju neto atlikumu kopsumma ir lielāka vai vienāda ar nulli.

  3. Merkles koka saknes izmaiņas ir derīgas (proti, netiek izmantota viltota informācija) pēc lietotāja informācijas atjaunināšanas lapas mezgla jaucējkodā.

Tad Binance var ģenerēt zk-Snark tipa apliecinājumu Merkles koka sastādīšanai saskaņā ar šo shēmu. Tas nozīmē, ka birža veic apjomīgu skaitļošanas darbu, jaucot lietotāju ID un atlikumu datus, vienlaikus nodrošinot, ka apliecinājums atbilst definētajiem ierobežojumiem.

Verificētājs pārbaudīs apliecinājumu (un tā publiskoto atvērto pirmkodu), lai pārliecinātos, ka skaitļošana ir veikta atbilstoši definētajām prasībām. Salīdzinot ar apliecinājuma sagatavošanai nepieciešamo laiku, verifikācijas skaitļošana aizņem pavisam īsu laiku.

Publiskojot rezervju apliecinājumu, birža ietver šādu informāciju:

1. Merkles apliecinājumu par katru lietotāju.

2. zk-Snark tipa apliecinājumu un visu lietotāju shēmas publiskos ievades datus (katra aktīva kopējo neto atlikumu saraksta un Merkles saknes jaucējkodu).

Interesenti var pārbaudīt Merkles apliecinājumu, pārliecinoties, ka to individuālie kontu atlikumi ir iekļauti Merkles koka saknes aprēķinos. Tāpat viņi var pārbaudīt zk-Snark tipa apliecinājumu, pārliecinoties, ka Merkles koka uzbūve atbilst shēmā definētajiem ierobežojumiem. Detalizētāku zk-Snark tipa apliecinājumu un to darbības skaidrojumu skati mūsu bloga rakstā Kā zk-Snark tipa apliecinājumi uzlabo Binance rezervju apliecinājumu sistēmu.

Noslēgumā

zk-Snark tipa apliecinājumi piedāvā tehnoloģiju datu integritātes un privātuma vienlaicīgai nodrošināšanai. Šī risinājuma izmantošana rezervju apliecināšanai un CEX pārskatāmības veicināšanai varētu veicināt uzticēšanos blokķēdes nozarei. Daudzi ir ar nepacietību gaidījuši šādu risinājumu, un tas ir kļuvis pieejams CEX biržām izšķirīgā brīdī.

Šī ir mūsu zk-Snark tipa apliecinājuma pirmā versija, un mēs ar nepacietību gaidām kopienas atsauksmes, lai varētu turpināt sistēmas pilnveidi.

Turpini lasīt