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.
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
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
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
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
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
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
, kaj ŝlosilaj bildoj por ili laŭe: Tiel, ni ricevas matricon de grandeco 2 x m. Unue, ni devas kalkuli la tielnomitajn defiojn por ĉiu paro da eliroj:
Ni komencas la kalkulojn per la eliroj, kiujn ni elspezas uzante iliajn publikajn ŝlosilojn:kaj hazardaj nombrojKiel rezulto, ni ricevas la sekvajn valorojn:
, kiun ni uzas por kalkuli defion
la 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 nombrojn. por π- kolumno ni ankaŭ bezonos ilin. Ni transformuen s:
La subskribo mem estas opo de ĉiuj ĉi tiuj valoroj:
Ĉ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 datumojn, restarigas la valorojn c1,..., cm kaj kontrolas tion. 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
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:
Kie 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:
Engaĝigaj komisionoj konsideras ĝin iomete malsame - sen masko:
kie 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):
Ĉ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:
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:
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:
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:
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
Kune, ĉ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.
Demandu viajn demandojn, sugestu temojn por novaj artikoloj pri teknologioj en la kampo de kripta monero, kaj ankaŭ abonu nian grupon en
fonto: www.habr.com