Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj

Ni daŭrigas nian serion pri la blokĉeno de Monero, kaj la hodiaŭa artikolo fokusiĝos pri la protokolo RingCT (Ring Confidential Transactions), kiu enkondukas konfidencajn transakciojn kaj novajn ringajn subskribojn. Bedaŭrinde, estas malmulte da informoj en la Interreto pri kiel ĝi funkcias, kaj ni provis plenigi ĉi tiun mankon.

Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj

Ni parolos pri kiel la reto kaŝas transigajn kvantojn uzante ĉi tiun protokolon, kial ili forlasis la klasikajn kriptajn ringajn subskribojn, kaj kiel ĉi tiu teknologio disvolviĝos plu.

Ĉar ĉi tiu protokolo estas unu el la plej kompleksaj teknologioj en Monero, la leganto bezonos bazan scion pri la dezajno de ĉi tiu blokĉeno kaj preterpasantan scion pri elipsa kurba kriptografio (por pliprofundigi ĉi tiun scion, vi povas legi la unuajn ĉapitrojn de nia). antaŭa artikolo pri multsubskriboj).

RingCT-protokolo

Unu el la eblaj atakoj kontraŭ kriptonotaj moneroj estas blokĉena analizo bazita sur scio pri la kvanto kaj tempo de la sendita transakcio. Ĉi tio permesas signife malvastigi la serĉareon por elirejoj de intereso por la atakanto. Por protekti kontraŭ tia analizo, Monero efektivigis anoniman transakcian protokolon, kiu tute kaŝas la kvantojn da translokigoj en la reto.

Indas rimarki, ke la ideo kaŝi kvantojn ne estas nova. Bitcoin Core programisto Greg Maxwell estis unu el la unuaj priskribi ĝin en sia artikolo Konfidencaj Transakcioj. La nuna efektivigo de RingCT estas ĝia modifo kun la ebleco uzi ringajn subskribojn (ĉu sen ili), kaj tiel ĝi ricevis sian nomon - Ring Confidential Transactions.

Interalie, la protokolo helpas forigi problemojn kun miksado de polvo-produktaĵoj - eliroj de malgranda kvanto (kutime ricevitaj en formo de ŝanĝo de transakcioj), kiuj kreis pli da problemoj ol ili valoris.

En januaro 2017, malmola forko de la reto Monero okazis, permesante la laŭvolan uzon de konfidencaj transakcioj. Kaj jam en septembro de la sama jaro, kun la versio 6 malmola forko, tiaj transakcioj fariĝis la solaj permesitaj en la reto.

RingCT uzas plurajn mekanismojn samtempe: plurtavolaj ligitaj spontaneaj anonimaj grupsubskriboj (Multilayered Linkable Spontaneous Anonymous Group Signature, ĉi-poste referite kiel MLSAG), devontigoskemo (Pedersen Commitments) kaj intervalpruvoj (tiu esprimo ne havas establitan tradukon en la rusan) .

La RingCT-protokolo enkondukas du specojn de anonimaj transakcioj: simplaj kaj plenaj. La monujo generas la unuan kiam transakcio uzas pli ol unu enigaĵon, la duan - en la kontraŭa situacio. Ili diferencas en la validumado de transakciaj kvantoj kaj la datumoj subskribitaj per MLSAG subskribo (ni parolos pli pri ĉi ĉi sube). Plie, transakcioj de tipo plena povas esti generitaj kun ajna nombro da enigaĵoj, ne ekzistas fundamenta diferenco. En la libro "Nul al Monero" Ĉi-rilate, oni diras, ke la decido limigi plenajn transakciojn al unu enigo estis farita en hasto kaj eble ŝanĝiĝos en la estonteco.

MLSAG subskribo

Ni memoru, kio estas subskribitaj transakciaj enigaĵoj. Ĉiu transakcio elspezas kaj generas iujn financojn. La generado de financoj okazas kreante transakciajn elirojn (rekta analogio estas fakturoj), kaj la eligo, kiun la transakcio elspezas (finfine, en la reala vivo ni elspezas monbiletojn) fariĝas la enigo (atentu, estas tre facile konfuziĝi). ĉi tie).

Enigaĵo referencas plurajn elirojn, sed elspezas nur unu, tiel kreante "fumŝirmilon" por malfaciligi analizi la tradukhistorion. Se transakcio havas pli ol unu enigaĵon, tiam tia strukturo povas esti reprezentita kiel matrico, kie la vicoj estas la enigaĵoj kaj la kolumnoj estas la miksitaj produktaĵoj. Por pruvi al la reto, ke la transakcio elspezas ĝuste siajn elirojn (konas iliajn sekretajn ŝlosilojn), la enigoj estas subskribitaj per ringa subskribo. Tia subskribo garantias, ke la subskribinto konis la sekretajn ŝlosilojn por ĉiuj elementoj de iu ajn el la kolumnoj.

Konfidencaj transakcioj ne plu uzas klasikajn kriptonoto ringsignaturoj, ili estis anstataŭigitaj per MLSAG - versio de similaj unutavolaj ringsignaturoj adaptitaj por multoblaj enigaĵoj, LSAG.

Ili nomiĝas plurtavolaj ĉar ili subskribas plurajn enigojn samtempe, ĉiu el kiuj estas miksita kun pluraj aliaj, t.e. matrico estas subskribita, kaj ne unu vico. Kiel ni vidos poste, ĉi tio helpas ŝpari je subskriba grandeco.

Ni rigardu kiel ringa subskribo estas formita, uzante la ekzemplon de transakcio, kiu elspezas 2 realajn elirojn kaj uzas m - 1 hazardajn el la blokĉeno por miksado. Ni indiku la publikajn ŝlosilojn de la eligoj, kiujn ni elspezas
Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj, kaj ŝlosilaj bildoj por ili laŭe: Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj Tiel, ni ricevas matricon de grandeco 2 x m. Unue, ni devas kalkuli la tielnomitajn defiojn por ĉiu paro da eliroj:
Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj
Ni komencas la kalkulojn per la eliroj, kiujn ni elspezas uzante iliajn publikajn ŝlosilojn:Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokojkaj hazardaj nombrojKonfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokojKiel rezulto, ni ricevas la sekvajn valorojn:
Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj, kiun ni uzas por kalkuli defion
Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokojla sekva paro da eliroj (por pli facile kompreni, kion ni anstataŭigas, kie, ni emfazis ĉi tiujn valorojn en malsamaj koloroj). Ĉiuj sekvaj valoroj estas kalkulitaj en cirklo per la formuloj donitaj en la unua ilustraĵo. La lasta afero por kalkuli estas la defio por paro da realaj eliroj.

Kiel ni povas vidi, ĉiuj kolumnoj krom tiu enhavanta realajn produktaĵojn uzas hazarde generitajn nombrojnKonfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj. por π- kolumno ni ankaŭ bezonos ilin. Ni transformuKonfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokojen s:Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj
La subskribo mem estas opo de ĉiuj ĉi tiuj valoroj:

Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj

Ĉi tiuj datumoj tiam estas skribitaj en transakcion.

Kiel ni povas vidi, MLSAG enhavas nur unu defion c0, kiu permesas ŝpari je subskriba grandeco (kiu jam postulas multan spacon). Plue, ajna inspektisto, uzante la datumojnKonfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj, restarigas la valorojn c1,..., cm kaj kontrolas tionKonfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj. Tiel, nia ringo estas fermita kaj la subskribo estis kontrolita.

Por RingCT-transakcioj de la plena tipo, unu plia linio estas aldonita al la matrico kun miksitaj eliroj, sed pri ĉi tio ni parolos sube.

Pedersen Engaĝiĝoj

Obligaj skemoj (la angla termino engagements estas pli ofte uzata) estas uzataj tiel ke unu partio povas pruvi ke ili konas certan sekreton (nombro) sen fakte malkaŝi ĝin. Ekzemple, vi ruliĝas certan nombron sur la ĵetkubon, pripensas sindevontigon kaj transdonas ĝin al la kontrolanta partio. Tiel, en la momento de malkaŝo de la sekreta numero, la kontrolisto sendepende kalkulas la devontigon, tiel certigante, ke vi ne trompis lin.

Monero-devontigoj estas uzataj por kaŝi la kvantojn de translokigoj kaj uzi la plej oftan opcion - Pedersen-devontigoj. Cetere, interesa fakto - komence la programistoj proponis kaŝi la kvantojn per ordinara miksado, tio estas, aldoni elirojn por arbitraj kvantoj por enkonduki necertecon, sed poste ili ŝanĝis al devontigoj (ne estas fakto, ke ili ŝparis sur la transakcia grandeco, kiel ni vidos sube).
Ĝenerale, engaĝiĝo aspektas jene:
Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokojKie C - la signifo de engaĝiĝo mem, a - kaŝita kvanto, H estas fiksa punkto sur la elipsa kurbo (aldona generatoro), kaj x — ia arbitra masko, kaŝa faktoro generita hazarde. La masko estas necesa ĉi tie, por ke tria partio ne simple diveni la valoron de engaĝiĝo.

Kiam nova eligo estas generita, la monujo kalkulas devontigon por ĝi, kaj kiam elspezita, ĝi prenas aŭ la valoron kalkulitan dum generacio aŭ rekalkulas ĝin, depende de la speco de transakcio.

RingCT simpla

En la kazo de simplaj RingCT-transakcioj, por certigi, ke la transakcio kreis produktaĵojn egalajn al la kvanto de enigaĵoj (ne produktis monon el la aero), necesas, ke la sumo de engaĝiĝoj de la unua kaj dua estu la sama, tio estas:
Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj
Engaĝigaj komisionoj konsideras ĝin iomete malsame - sen masko:
Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokojkie a — la kvanto de la komisiono, ĝi estas publike havebla.

Ĉi tiu aliro permesas al ni pruvi al la fidanta partio, ke ni uzas la samajn kvantojn sen malkaŝi ilin.

Por pliklarigi la aferojn, ni rigardu ekzemplon. Ni diru, ke transakcio elspezas du elirojn (tio signifas, ke ili fariĝas enigaĵoj) de 10 kaj 5 XMR kaj generas tri elirojn valorantajn 12 XMR: 3, 4 kaj 5 XMR. Samtempe, li pagas komisionon de 3 XMR. Tiel, la kvanto de mono elspezita plus la kvanto generita kaj la komisiono estas egala al 15 XMR. Ni provu kalkuli devontigojn kaj rigardu la diferencon en iliaj kvantoj (memoru la matematikon):

Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj
Ĉi tie ni vidas ke por la ekvacio konverĝi, ni bezonas la sumojn de la enigo kaj eligo maskoj esti la sama. Por fari tion, la monujo generas hazarde x1, y1, y2 kaj y3, kaj la ceteraj x2 kalkulas jene:
Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj
Uzante ĉi tiujn maskojn, ni povas pruvi al iu ajn kontrolisto, ke ni ne generas pli da financo ol ni elspezas, sen malkaŝi la kvanton. Originala, ĉu ne?

RingCT plena

En plenaj RingCT-transakcioj, kontroli la transigajn kvantojn estas iom pli komplika. En ĉi tiuj transakcioj, la monujo ne rekalkulas devontigojn por enigaĵoj, sed uzas tiujn kalkulitajn kiam ili estis generitaj. En ĉi tiu kazo, ni devas supozi, ke ni ne plu ricevos la diferencon en la sumoj egalaj al nulo, sed anstataŭe:
Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj
estas z — diferenco inter eniga kaj eligo maskoj. Se ni konsideras zG kiel publika ŝlosilo (kiu ĝi fakte estas), do z estas la privata ŝlosilo. Tiel, ni konas la publikajn kaj respondajn privatajn ŝlosilojn. Kun ĉi tiuj datumoj en la mano, ni povas uzi ĝin en la MLSAG ringsignaturo kune kun la publikaj ŝlosiloj de la produktaĵoj miksitaj:
Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj
Tiel, valida ringa subskribo certigos, ke ni konas ĉiujn privatajn ŝlosilojn de unu el la kolumnoj, kaj ni povas nur scii la privatan ŝlosilon en la lasta vico se la transakcio ne generas pli da financo ol ĝi elspezas. Cetere, jen la respondo al la demando "kial la diferenco en la kvantoj de devontigoj ne kondukas al nulo" - se zG = 0, tiam ni vastigos la kolumnon kun realaj eliroj.

Kiel la ricevanto de la financo scias kiom da mono estis sendita al li? Ĉio estas simpla ĉi tie - la sendinto de la transakcio kaj la ricevanto interŝanĝas ŝlosilojn per la Diffie-Hellman-protokolo, uzante la transakcian ŝlosilon kaj la vidŝlosilon de la ricevanto kaj kalkulas la komunan sekreton. La sendinto skribas datumojn pri la eligkvantoj, ĉifritajn per ĉi tiu komuna ŝlosilo, en specialaj kampoj de la transakcio.

Gamaj pruvoj

Kio okazas se vi uzas negativan nombron kiel la kvanton en devontigoj? Ĉi tio povas konduki al la generacio de pliaj moneroj! Ĉi tiu rezulto estas neakceptebla, do ni devas garantii, ke la kvantoj kiujn ni uzas ne estas negativaj (sen malkaŝi ĉi tiujn kvantojn, kompreneble, alie estas tiom da laboro kaj ĉio vane). Alivorte, ni devas pruvi ke la sumo estas en la intervalo [0, 2n - 1].

Por fari tion, la sumo de ĉiu eligo estas dividita en binarajn ciferojn kaj la devontigo estas kalkulita por ĉiu cifero aparte. Estas pli bone vidi kiel ĉi tio okazas kun ekzemplo.

Ni supozu, ke niaj kvantoj estas malgrandaj kaj taŭgas en 4 bitoj (praktike ĉi tio estas 64 bitoj), kaj ni kreas eligon kun valoro de 5 XMR. Ni kalkulas devontigojn por ĉiu kategorio kaj la totalan devontigon por la tuta kvanto:Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokoj
Poste, ĉiu devontigo estas miksita kun anstataŭanto (Ci-2iH) kaj estas subskribita duope kun la Borromeo ringsignaturo (alia ringsignaturo), proponita de Greg Maxwell en 2015 (vi povas legi pli pri ĝi tie):
Konfidencaj transakcioj en Monero, aŭ kiel transdoni nekonatajn aferojn al nekonataj cellokojKune, ĉi tio nomiĝas pruvo de gamo kaj permesas vin certigi, ke engaĝiĝoj uzas kvantojn en la gamo [0, 2n - 1].

Kio sekvas?

En la nuna efektivigo, intervalpruvoj okupas multe da spaco - 6176 bajtoj per eligo. Ĉi tio kondukas al pli grandaj transakcioj kaj tial pli altaj kotizoj. Por redukti la grandecon de Monero-transakcio, programistoj enkondukas kuglorezistojn anstataŭ Borromeo-subskribojn - gamo-pruvmekanismon sen bidirektaj devontigoj. Laŭ kelkaj taksoj, ili kapablas redukti la grandecon de gamo-pruvo je ĝis 94%. Cetere, meze de julio la teknologio pasis revizio de Kudelski Security, kiu ne malkaŝis signifajn mankojn nek en la teknologio mem nek en ĝia efektivigo. La teknologio jam estas uzata en la testa reto, kaj per la nova malmola forko, ĝi verŝajne povas moviĝi al la ĉefa reto.

Demandu viajn demandojn, sugestu temojn por novaj artikoloj pri teknologioj en la kampo de kripta monero, kaj ankaŭ abonu nian grupon en Facebookpor resti ĝisdatigita pri niaj eventoj kaj publikaĵoj.

fonto: www.habr.com

Aldoni komenton