Tungkol sa anonymity sa mga blockchain na nakabatay sa account

Kami ay interesado sa paksa ng hindi nagpapakilala sa mga cryptocurrencies sa loob ng mahabang panahon at subukang sundin ang pag-unlad ng mga teknolohiya sa lugar na ito. Sa aming mga artikulo ay napag-usapan na namin nang detalyado ang mga prinsipyo ng pagpapatakbo mga kumpidensyal na transaksyon sa Monero, at natupad din paghahambing na pagsusuri mga teknolohiyang umiiral sa larangang ito. Gayunpaman, ang lahat ng hindi kilalang cryptocurrencies ngayon ay binuo sa modelo ng data na iminungkahi ng Bitcoin - Unspent Transaction Output (simula dito ay UTXO). Para sa mga blockchain na nakabatay sa account tulad ng Ethereum, mga umiiral nang solusyon para sa pagpapatupad ng anonymity at confidentiality (halimbawa, Mobius o Aztec) sinubukang kopyahin ang modelo ng UTXO sa mga matalinong kontrata.

Noong Pebrero 2019, isang pangkat ng mga mananaliksik mula sa Stanford University at Visa Research pinakawalan preprint "Zether: Patungo sa privacy sa mundo ng mga matalinong kontrata." Ang mga may-akda ang unang nagmungkahi ng diskarte sa pagtiyak ng pagkawala ng lagda sa mga blockchain na nakabatay sa account at ipinakita ang dalawang bersyon ng isang matalinong kontrata: para sa mga kumpidensyal (nagtatago ng mga balanse at mga halaga ng paglilipat) at hindi nagpapakilalang (tinatago ang tatanggap at nagpadala) na mga transaksyon. Nakikita namin na ang iminungkahing teknolohiya ay kawili-wili at nais naming ibahagi ang disenyo nito, pati na rin ang pag-usapan kung bakit ang problema ng hindi nagpapakilala sa mga blockchain na nakabatay sa account ay itinuturing na napakahirap at kung ang mga may-akda ay nagawang lutasin ito nang buo.

Tungkol sa istruktura ng mga modelong ito ng data

Sa modelong UTXO, ang isang transaksyon ay binubuo ng "mga input" at "mga output". Ang isang direktang analogue ng "mga output" ay ang mga singil sa iyong wallet: bawat "output" ay may ilang denominasyon. Kapag nagbabayad ka sa isang tao (bumuo ng isang transaksyon) gumastos ka ng isa o higit pang "mga output", kung saan sila ay nagiging "mga input" ng transaksyon, at ang blockchain ay nagmamarka sa kanila bilang ginastos. Sa kasong ito, ang tatanggap ng iyong pagbabayad (o ikaw mismo, kung kailangan mo ng pagbabago) ay tumatanggap ng mga bagong nabuong "mga output". Ito ay maaaring ilarawan sa eskematiko tulad nito:

Tungkol sa anonymity sa mga blockchain na nakabatay sa account

Ang mga blockchain na nakabatay sa account ay nakaayos katulad ng iyong bank account. Nakikitungo lamang sila sa halaga sa iyong account at sa halaga ng paglilipat. Kapag naglipat ka ng ilang halaga mula sa iyong account, hindi ka magsusunog ng anumang "mga output", hindi kailangang tandaan ng network kung aling mga barya ang nagastos at alin ang hindi. Sa pinakasimpleng kaso, ang pag-verify ng transaksyon ay bumaba sa pagsuri sa pirma ng nagpadala at ang halaga sa kanyang balanse:

Tungkol sa anonymity sa mga blockchain na nakabatay sa account

Pagsusuri ng teknolohiya

Susunod, pag-uusapan natin kung paano itinatago ni Zether ang halaga ng transaksyon, tatanggap, at nagpadala. Habang inilalarawan namin ang mga prinsipyo ng pagpapatakbo nito, mapapansin namin ang mga pagkakaiba sa kumpidensyal at hindi kilalang mga bersyon. Dahil mas madaling tiyakin ang pagiging kumpidensyal sa mga blockchain na nakabatay sa account, ang ilan sa mga paghihigpit na ipinataw ng anonymization ay hindi magiging nauugnay para sa kumpidensyal na bersyon ng teknolohiya.

Pagtatago ng mga balanse at halaga ng paglilipat

Ang isang encryption scheme ay ginagamit upang i-encrypt ang mga balanse at maglipat ng mga halaga sa Zether El Gamal. Gumagana ito bilang mga sumusunod. Kapag gustong ipadala ni Alice si Bob b mga barya ayon sa address (public key nito) Y, pumili siya ng random na numero r at ine-encrypt ang halaga:

Tungkol sa anonymity sa mga blockchain na nakabatay sa account
saan C - naka-encrypt na halaga, D - pandiwang pantulong na halaga na kinakailangan upang maintindihan ang halagang ito, G - isang nakapirming punto sa elliptic curve, kapag pinarami ng lihim na susi, ang pampublikong susi ay nakuha.

Kapag natanggap ni Bob ang mga halagang ito, idinaragdag lang niya ang mga ito sa kanyang naka-encrypt na balanse sa parehong paraan, kaya naman maginhawa ang scheme na ito.

Katulad nito, binabawasan ni Alice ang parehong mga halaga mula sa kanyang balanse, bilang lamang Y ginagamit ang iyong pampublikong susi.

Itinatago ang tatanggap at nagpadala

Ang pag-shuffle ng "mga output" sa UTXO ay nagsimula sa mga unang araw ng cryptocurrencies at nakakatulong na itago ang nagpadala. Upang gawin ito, ang nagpadala mismo, kapag gumagawa ng paglipat, ay nangongolekta ng mga random na "output" sa blockchain at hinahalo ang mga ito sa kanyang sarili. Susunod, nilagdaan niya ang "mga output" gamit ang isang ring signatureβ€”isang mekanismo ng cryptographic na nagbibigay-daan sa kanya na kumbinsihin ang verifier na ang mga barya ng nagpadala ay naroroon sa mga "output" na kasangkot. Ang pinaghalong mga barya mismo, siyempre, ay hindi ginagastos.

Gayunpaman, hindi kami makakabuo ng mga pekeng output para itago ang tatanggap. Samakatuwid, sa UTXO, ang bawat "output" ay may sariling natatanging address, at ito ay cryptographically na naka-link sa address ng tatanggap ng mga coin na ito. Sa ngayon, walang paraan upang matukoy ang kaugnayan sa pagitan ng natatanging output address at address ng tatanggap nang hindi nalalaman ang mga sikretong key nito.

Sa modelong nakabatay sa account, hindi kami makakagamit ng mga minsanang address (kung hindi, isa na itong modelong "paglabas"). Samakatuwid, ang tatanggap at nagpadala ay kailangang ihalo sa iba pang mga account sa blockchain. Sa kasong ito, ang isang naka-encrypt na 0 na barya ay na-debit mula sa magkahalong mga account (o 0 ay idinaragdag kung ang tatanggap ay halo-halong), nang hindi aktwal na binabago ang kanilang tunay na balanse.

Dahil ang nagpadala at ang tatanggap ay palaging may permanenteng address, kinakailangan na gumamit ng parehong mga grupo para sa paghahalo kapag naglilipat sa parehong mga address. Mas madaling tingnan ito gamit ang isang halimbawa.

Sabihin nating nagpasya si Alice na magbigay ng kontribusyon sa kawanggawa ni Bob, ngunit mas gusto na ang paglipat ay manatiling hindi nagpapakilala sa isang tagamasid sa labas. Pagkatapos, upang itago ang sarili sa field ng nagpadala, ipinasok din niya ang mga account nina Adam at Adele. At para itago si Bob, idagdag ang mga account nina Ben at Bill sa field ng tatanggap. Sa paggawa ng susunod na kontribusyon, nagpasya si Alice na isulat sina Alex at Amanda sa tabi niya, at sina Bruce at Benjen sa tabi ni Bob. Sa kasong ito, kapag pinag-aaralan ang blockchain, sa dalawang transaksyong ito ay mayroon lamang isang intersecting na pares ng mga kalahok - sina Alice at Bob, na nag-de-anonymize sa mga transaksyong ito.

Tungkol sa anonymity sa mga blockchain na nakabatay sa account

Mga karera sa transaksyon

Tulad ng nabanggit na namin, upang itago ang iyong balanse sa mga sistemang nakabatay sa account, ini-encrypt ng user ang kanyang balanse at ang halaga ng paglilipat. Kasabay nito, dapat niyang patunayan na ang balanse sa kanyang account ay nananatiling hindi negatibo. Ang problema ay kapag lumilikha ng isang transaksyon, ang gumagamit ay bumubuo ng isang patunay tungkol sa kanyang kasalukuyang katayuan ng account. Ano ang mangyayari kung magpadala si Bob ng transaksyon kay Alice, at tinanggap ito bago ang ipinadala ni Alice? Pagkatapos ang transaksyon ni Alice ay ituturing na hindi wasto, dahil ang patunay ng balanse ay binuo bago tinanggap ang transaksyon ni Bob.

Tungkol sa anonymity sa mga blockchain na nakabatay sa account

Ang unang desisyon na darating sa ganitong sitwasyon ay i-freeze ang account hanggang sa maisagawa ang transaksyon. Ngunit ang diskarte na ito ay hindi angkop, dahil bilang karagdagan sa pagiging kumplikado ng paglutas ng naturang problema sa isang distributed system, sa isang hindi kilalang pamamaraan ay hindi magiging malinaw kung kaninong account ang harangan.

Upang malutas ang problemang ito, pinaghihiwalay ng teknolohiya ang mga papasok at papalabas na transaksyon: ang paggasta ay may agarang epekto sa balanse, habang ang mga resibo ay may naantalang epekto. Upang gawin ito, ang konsepto ng "panahon" ay ipinakilala - isang pangkat ng mga bloke ng isang nakapirming laki. Ang kasalukuyang "panahon" ay tinutukoy sa pamamagitan ng paghahati sa taas ng bloke sa laki ng grupo. Kapag nagpoproseso ng transaksyon, agad na ina-update ng network ang balanse ng nagpadala at iniimbak ang mga pondo ng tatanggap sa isang storage tank. Ang mga naipon na pondo ay magagamit lamang sa nagbabayad kapag nagsimula ang isang bagong "panahon".

Bilang resulta, ang user ay maaaring magpadala ng mga transaksyon kahit gaano kadalas natatanggap ang mga pondo (hangga't pinapayagan ng kanyang balanse, siyempre). Ang laki ng panahon ay tinutukoy batay sa kung gaano kabilis kumakalat ang mga bloke sa network at kung gaano kabilis ang isang transaksyon na pumasok sa isang bloke.

Ang solusyon na ito ay mahusay na gumagana para sa mga kumpidensyal na paglilipat, ngunit sa mga hindi kilalang transaksyon, tulad ng makikita natin sa ibang pagkakataon, ito ay lumilikha ng mga seryosong problema.

Proteksyon laban sa pag-atake ng replay

Sa mga blockchain na nakabatay sa account, ang bawat transaksyon ay nilagdaan ng pribadong susi ng nagpadala, na kumukumbinsi sa verifier na ang transaksyon ay hindi nabago at nilikha ng may-ari ng susi na ito. Ngunit paano kung ang isang attacker na nakikinig sa transmission channel ay humarang sa mensaheng ito at nagpadala ng eksaktong parehong pangalawa? Ibe-verify ng verifier ang lagda ng transaksyon at kumbinsihin ang pagiging may-akda nito, at isusulat muli ng network ang parehong halaga mula sa balanse ng nagpadala.

Ang pag-atakeng ito ay tinatawag na replay attack. Sa modelo ng UTXO, ang mga naturang pag-atake ay hindi nauugnay, dahil susubukan ng umaatake na gumamit ng mga ginugol na output, na sa kanyang sarili ay hindi wasto at tinanggihan ng network.

Upang maiwasang mangyari ito, ang isang field na may random na data ay binuo sa transaksyon, na tinatawag na nonce o simpleng "asin". Kapag muling nagsusumite ng transaksyon na may asin, tinitingnan ng verifier kung nagamit na ang nonce at, kung hindi, itinuring na wasto ang transaksyon. Upang hindi maimbak ang buong kasaysayan ng mga nonces ng gumagamit sa blockchain, kadalasan sa pinakaunang transaksyon ito ay itinakda na katumbas ng zero, at pagkatapos ay tumaas ng isa. Maaari lamang suriin ng network na ang nonce ng bagong transaksyon ay naiiba sa nauna nang paisa-isa.

Sa anonymous na pamamaraan ng paglipat, ang problema sa pagpapatunay ng mga nonces ng transaksyon ay lumitaw. Hindi namin maaaring tahasang itali ang nonce sa address ng nagpadala, dahil, malinaw naman, inaalis nito ang pagkakakilanlan sa paglilipat. Hindi rin kami makakapagdagdag ng isa sa mga nonces ng lahat ng kalahok na account, dahil maaaring sumalungat ito sa ibang mga paglilipat na pinoproseso.

Ang mga may-akda ng Zether ay nagmumungkahi na bumuo ng nonce sa cryptographically, depende sa "panahon". Halimbawa:

Tungkol sa anonymity sa mga blockchain na nakabatay sa account
Dito x ay ang sikretong susi ng nagpadala, at Gepoch β€” isang karagdagang generator para sa epoch, na nakuha sa pamamagitan ng pag-hash ng isang string ng form na 'Zether + '. Ngayon ang problema ay tila nalutas - hindi namin ibinunyag ang nonce ng nagpadala at hindi nakikialam sa mga nonces ng mga hindi kasali na kalahok. Ngunit ang diskarte na ito ay nagpapataw ng isang seryosong limitasyon: ang isang account ay maaaring magpadala ng hindi hihigit sa isang transaksyon sa bawat "panahon". Ang problemang ito, sa kasamaang-palad, ay nananatiling hindi nalutas, at kasalukuyang ginagawa ang hindi kilalang bersyon ng Zether, sa aming opinyon, halos hindi angkop para sa paggamit.

Ang Kumplikado ng Zero Knowledge Proofs

Sa UTXO, dapat patunayan ng nagpadala sa network na hindi siya gumagastos ng negatibong halaga, kung hindi, posible na makabuo ng mga bagong barya mula sa manipis na hangin (bakit posible ito, isinulat namin sa isa sa naunang Artikulo). At pirmahan din ang mga β€œinputs” na may ring signature para patunayan na sa mga coin na pinaghalo ay may mga pondong pag-aari niya.

Sa hindi kilalang bersyon ng account-based blockchain, ang mga expression para sa patunay ay mas kumplikado. Ang nagpadala ay nagpapatunay na:

  1. Positibo ang halagang ipinadala;
  2. Ang balanse ay nananatiling hindi negatibo;
  3. Tamang na-encrypt ng nagpadala ang mga halaga ng paglilipat (kabilang ang zero);
  4. Ang balanse sa balanse ay nagbabago lamang para sa nagpadala at tatanggap;
  5. Ang nagpadala ay nagmamay-ari ng pribadong susi sa kanyang account at siya ay talagang nasa listahan ng mga nagpadala (kabilang sa mga kasangkot);
  6. Ang Nonce na ginamit sa transaksyon ay binubuo nang tama.

Para sa isang kumplikadong patunay, ang mga may-akda ay gumagamit ng isang halo Bulletproof (isa sa mga may-akda, sa pamamagitan ng paraan, ay nakibahagi sa paglikha nito) at Protocol ng Sigma, na tinatawag na Sigma-bullets. Ang pormal na patunay ng naturang pahayag ay medyo mahirap na gawain, at lubos nitong nililimitahan ang bilang ng mga taong gustong ipatupad ang teknolohiya.

Ang resulta?

Sa aming opinyon, ang bahagi ng Zether na nagdadala ng privacy sa mga blockchain na nakabatay sa account ay maaaring gamitin ngayon. Ngunit sa ngayon, ang hindi kilalang bersyon ng teknolohiya ay nagpapataw ng mga seryosong paghihigpit sa paggamit nito, at ang pagiging kumplikado nito sa pagpapatupad nito. Gayunpaman, hindi dapat balewalain na ang mga may-akda ay naglabas nito lamang ng ilang buwan ang nakalipas, at marahil ay may ibang makakahanap ng solusyon sa mga problemang umiiral ngayon. Pagkatapos ng lahat, ito ay kung paano ginagawa ang agham.

Pinagmulan: www.habr.com

Magdagdag ng komento