Mēs jau sen esam ieinteresēti anonimitātes tēmā kriptovalūtās un cenšamies sekot tehnoloģiju attīstībai šajā jomā. Savos rakstos mēs jau detalizēti apskatījām darba principus Monero, kā arī veicām tehnoloģiju analīzi, kas pastāv šajā laukā. Tomēr visām anonīmajām kriptovalūtām mūsdienās ir tāda datu modeļa bāze, ko piedāvāja Bitcoin — Unspent Transaction Output (turpmāk UTXO). Akciju bāzes blokķēdēm, piemēram, Ethereum, esošās risinājumi anonimitātes un konfidencialitātes īstenošanai (piemēram, vai ) centās atkārtot UTXO modeli viedajos līgumos.
2019. gada februārī Stenfordas Universitātes un Visa Research pētnieku grupa izlaida «Zether: Ceļā uz privātumu viedo līgumu pasaulē». Autori pirmo reizi piedāvāja pieeju anonimitātes nodrošināšanai akciju bāzes blokķēdēs un prezentēja divus viedā līguma variantus: konfidenciālā (bilances un pārskaitījumu summu slēpšana) un anonīmā (sūtītāja un saņēmēja slēpšana) transakcijām. Mēs uzskatām, ka piedāvātā tehnoloģija ir interesanta un vēlamies dalīties ar tās darbību, kā arī runāt par to, kāpēc anonimitātes problēma akciju bāzes blokķēdēs tiek uzskatīta par ļoti sarežģītu un vai autoriem izdevās to atrisināt pilnībā.
Par šo datu modeļu struktūru
UTXO modelī transakcija sastāv no «ievadiem» un «izvadiem». Tieši analogs «izvadiem» — banknotes jūsu makā: katram «izvadem» ir kāda nominālvērtība. Kad jūs norēķināties ar kādu (veidojot transakciju), jūs iztērējat vienu vai vairākus «izvadus», kas kļūst par transakcijas «ievadiem», un blokķēde tos atzīmē kā iztērētus. Savukārt jūsu maksājuma saņēmējs (vai jūs pats, ja jums ir nepieciešama atlikums) saņem jauni radītus «izvadus». Schēmatiski to var attēlot tā:

Akciju bāzes blokķēdes ir iekārtotas līdzīgi kā jūsu bankas konts. Tās strādā tikai ar summu jūsu kontā un pārskaitījuma summu. Kad jūs pārsūtāt kādu summu no sava konta, jūs nesadedzināt nevienu «izvadu», un tīklam nav jāatceras, kuras monētas ir iztērētas, bet kuras nav. Visvienkāršākajā gadījumā transakcijas pārbaude samazinās līdz sūtītāja paraksta un summas uz viņa bilances pārbaudei:

Tehnoloģijas analīze
Tālāk mēs runāsim par to, kā Zether slēpj transakciju summu, saņēmēju un nosūtītāju. Aprakstot tā darbības principus, mēs atzīmēsim atšķirības starp konfidenciālo un anonīmo variantu. Tā kā konfidencialitātes nodrošināšana konta bāzētajos blokķēdēs ir daudz vienkāršāka, dažas no anonimizācijas noteikumiem šajā tehnoloģijas konfidenciālajā versijā būs nepietiekamas.
Bilances un pārskaitījumu summu slēpšana
Zether bilances un pārskaitījumu summu šifrēšanai tiek izmantota šifrēšanas shēma . Tā darbojas šādi. Kad Alise vēlas nosūtīt Bobam b monētas uz adresi (viņa publisko atslēgu) Y, viņa izvēlas nejaušu skaitli r un šifrē summu:

kur C — šifrēta summa, D — papildus vērtība, kas nepieciešama šīs summas atšifrēšanai, G — fiksēta punkts uz eliptiskās līknes, reizinot slepeno atslēgu, kas dod publisko atslēgu.
Kad Bobs saņem šīs vērtības, viņš vienkārši pievieno tās savai šādā veidā šifrētajai bilancei, kas ir šīs shēmas ērtība.
Līdzīgi Alise izskaita no savas bilances tādas pašas vērtības, tikai izmantojot savu publisko atslēgu. Y Saņēmēja un nosūtītāja slēpšana
Izmantošana "izeju" sajaukšanai UTXO parādījās jau kriptovalūtu sākumā un palīdz slēpt nosūtītāju. Šim nolūkam pats nosūtītājs, veicot pārskaitījumu, izvēlas nejaušas "izejas" blokķēdē un sajauc tās ar savām. Pēc tam viņš paraksta "izejas" ar gredzenveida parakstu — kriptogrāfisku mehānismu, kas ļauj pārliecināt pārbaudītāju, ka starp sajauktajām "izejām" ir nosūtītāja monētas. Sajauktās monētas, protams, netiek iztērētas.
Tomēr, lai noslēptu saņēmēju, mums neizdosies ģenerēt viltus "izejas". Tāpēc UTXO katrai "izejai" ir sava unikāla adrese, kas kriptogrāfiski ir saistīta ar šo monētu saņēmēja adresi. Šobrīd nav veida, kā noteikt saikni starp unikālo "izejas" adresi un saņēmēja adresi, nezinot viņa slepenās atslēgas.
Tomēr, lai noslēptu saņēmēju, mēs nevarēsim ģenerēt viltus "izejas". Tāpēc UTXO katrai "izejai" ir sava unikālā adrese, un tā ir kriptogrāfiski saistīta ar šo monētu saņēmēja adresi. Pašlaik nav veida, kā noteikt saistību starp unikālo "izejas" adresi un saņēmēja adresi, nezinot viņa slepenos atslēgas.
Account-based modelī mēs nevaram izmantot vienreizējās adreses (citādi tas jau būs modelis "izejām"). Tāpēc saņēmēju un nosūtītāju nākas sajaukt starp citiem kontiem blokķēdē. Šajā procesā no sajauktajiem kontiem tiek atskaitīti šifrēti 0 monētu (vai pievienoti 0 — sajaucot saņēmēju), faktiski nemainot viņu reālo bilanci.
Tā kā gan nosūtītājam, gan saņēmējam vienmēr ir pastāvīga adrese, šeit rodas nepieciešamība, veicot pārvedumus uz vienām un tām pašām adresēm, izmantot vienas un tās pašas grupas sajaukšanai. Vieglāk to apskatīt, izmantojot piemēru.
Pieņemsim, ka Alise nolēma veikt ziedojumu Boba labdarības fondam, taču dod priekšroku, lai šis pārvedums paliktu anonīms ārēja novērotāja acīs. Tādēļ, lai noslēptu sevi nosūtītāja laukā, viņa pievieno vēl Ādama un Adelīnas kontus. Lai slēptu Bobu — saņēmēja laukā viņa papildus pievieno Bena un Bili. Veicot nākamo ziedojumu, Alise nolēma blakus sev pievienot Aleksu un Amandu, bet blakus Bobam — Brūsu un Benženu. Šajā gadījumā, analizējot blokķēdi, šajās divās darījumu darījumos atradīsies tikai viena krustojuma dalībnieku pāra — Alise un Bobs, kas deanonimizē šos darījumus.

Darījumu sacensības
Kā jau mēs minējām, lai slēptu savu bilanci account-based sistēmās, lietotājs šifrē savu bilanci un pārskaita summu. Tajā pašā laikā viņam jānodrošina, ka atlikums viņa kontā paliek nenegatīvs. Problēma ir tā, ka, izveidojot darījumu, lietotājs veido pierādījumu par savu pašreizējo konta stāvokli. Ko darīt, ja Bobs nosūta Alisei darījumu, un tas tiek pieņemts pirms Alices nosūtītā? Tad Alices darījums tiks uzskatīts par nederīgu, jo bilances pierādījums bija izveidots pirms Boba darījuma pieņemšanas.

Pirmais risinājums, kas nāk prātā šādā situācijā, ir konta iesaldēšana līdz darījuma veikšanai. Bet šis pieejamais risinājums nav pieņemams, jo, papildus šādas uzdevuma risināšanai izplatītajā sistēmā sarežģītībai, anonīmā shēmā nebūs skaidrs, kuru kontu bloķēt.
Lai atrisinātu šo problēmu, tehnoloģija dalās ienākošajās un izejošajās transakcijās: izdevumi tūlītēji ietekmē bilances stāvokli, bet ieņēmumi – atlikti. Tādēļ tiek ieviests jēdziens "ēra" – fiksēta izmēra bloku grupa. Aktuālā "ēra" tiek noteikta, dalot bloku augstumu ar grupas izmēru. Apstrādājot transakciju, tīkls nekavējoties atjaunina sūtītāja bilanci, bet saņēmēja līdzekļi tiek uzkrāti. Uzkrātie līdzekļi nonāk saņēmēja rīcībā tikai jaunās "ēras" iestāšanās brīdī.
Tādējādi lietotājs var nosūtīt transakcijas neatkarīgi no tā, cik bieži viņš saņem līdzekļus (cik to atļauj viņa bilance, protams). Ēras lielumu nosaka atkarībā no tā, cik ātri bloki izplatās tīklā un cik ātri transakcija nonāk blokā.
Šis risinājums labi darbojas privātās pārskaitījumu gadījumā, taču ar anonīmām transakcijām, kā mēs redzēsim tālāk, tas rada nopietnas problēmas.
Aizsardzība pret replay uzbrukumiem
Account-based blokķēdēs katra transakcija tiek parakstīta ar sūtītāja privāto atslēgu, kas pārliecina pārbaudītāju par to, ka transakcija nav mainīta un to izveidojis šīs atslēgas īpašnieks. Bet ko darīt, ja uzbrucējs, kurš klausījās datu pārsūtīšanas kanālu, noķer šo ziņojumu un nosūta tādu pašu otro? Pārbaudītājs salīdzina transakcijas parakstu un ir pārliecināts par tās autorību, un tīkls atkārtoti noraksta tādu pašu summu no sūtītāja bilances.
Šo uzbrukumu sauc par replay uzbrukumu. UTXO modelī šādi uzbrukumi nav aktuāli, jo uzbrucējs mēģinās izmantot iztērētos izejas datus, kas pašā par sevi nav derīgi un tiek noraidīti no tīkla.
Lai izvairītos no tā, transakcijā tiek iebūvēts lauks ar nejaušiem datiem, ko sauc par nonce vai vienkārši "sāls". Atkārtoti nosūtot transakciju ar "sāli", pārbaudītājs skatās, vai šis nonce iepriekš tika izmantots, un, ja nē, uzskata šo transakciju par derīgu. Lai neturētu blokķēdē visu lietotāju nonce vēsturi, parasti pirmajā transakcijā to pieņem par nulli, bet pēc tam palielina par vienu. Tīklam tikai jānodrošina, ka jaunās transakcijas nonce atšķiras no iepriekšējā par vienu.
Anonīmās pārskaitījumu shēmā rodas nonce pārbaudīšanas problēma darījumiem. Mēs nevaram skaidri saistīt nonce ar nosūtītāja adresi, jo tas acīmredzot deanonimizē pārskaitījumu. Mēs arī nevaram pievienot vienību visiem iesaistīto kontu nonce, jo tas var radīt konfliktu ar citiem darījumiem, kas šobrīd tiek apstrādāti.
Zether autori piedāvā ģenerēt nonce kriptogrāfiski — atkarībā no "epohas". Piemēram:

Šeit x — nosūtītāja slepenais atslēga, un Gepoch — papildu ģenerators laikposmam, iegūts, hašējot virkni, kas izskatās šādi: 'Zether + '. Tagad šķiet, ka problēma tiek atrisināta — mēs neatklājam sūtītāja nonce un neiejaucamies nevainīgo dalībnieku nonce. Taču šāds pieejas veids uzliek nopietnus ierobežojumus: viens konts var nosūtīt ne vairāk kā vienu darījumu "laikposmā". Šī problēma, diemžēl, paliek neatrisināta, un šobrīd padara anonīmo Zether versiju, mūsuprāt, grūti lietojamu.
Nulles atklāšanas pierādījumu sarežģītība
UTXO nosūtītājam jāapliecina tīklam, ka viņš netērē negatīvu summu, citādi jaunu monētu ģenerēšana no gaisa kļūs iespējama (kāpēc tas ir iespējams, mēs rakstījām vienā no iepriekšējām ). Tāpat ir jāparaksta „ievadi” ar riņķa parakstu, lai pierādītu, ka starp sajauktajām monētām ir līdzekļi, kas pieder viņam.
Anonīmās kontu balstītās blokķēdes versijā pierādījumu izteiksmes kļūst ievērojami sarežģītākas. Nosūtītājs pierāda, ka:
- Nosūtītā summa ir pozitīva;
- Bilance paliek nenoliedzama;
- Nosūtītājs pareizi ir šifrējis pārskaitījumu summas (tostarp nulles);
- Bilance mainās tikai nosūtītājā un saņēmējā;
- Nosūtītājs pieder slepenai atslēgai no sava konta, un viņš patiešām ir iekļauts nosūtītāju sarakstā (starptautiskajā);
- Nonce, kas izmantots darījumā, ir sastādīts pareizi.
Šādam sarežģītam pierādījumam autori izmanto maisījumu (viens no autoriem, starp citu, piedalījās tās izveidē) un , kuras dēvē par Sigma-bullets. Formāla šādas apgalvojuma pierādīšana ir diezgan sarežģīta uzdevums, un tā ievērojami ierobežo vēlmi īstenot tehnoloģiju.
Ko mēs iegūstam?
Mūsuprāt, Zether daļa, kas nodrošina konfidencialitāti account-based blokķēdēs, jau tagad var tikt izmantota. Tomēr pašlaik anonīmā tehnoloģijas versija uzliek nopietnus ierobežojumus tās lietošanai, bet tās sarežģītība — realizācijai. Tomēr nevajadzētu aizmirst, ka autori to izlaida tikai pirms dažiem mēnešiem, un iespējams, ka kāds cits atradīs risinājumu šodien pastāvošajām problēmām. Tieši tādā veidā tiek veikta zinātne.
Avots: habr.com
