Ass et méiglech zoufälleg Zuelen ze generéieren wa mir all aner net trauen? Deel 2

Ass et méiglech zoufälleg Zuelen ze generéieren wa mir all aner net trauen? Deel 2

Hey Habr!

В éischten Deel An dësem Artikel hu mir diskutéiert firwat et néideg ass zoufälleg Zuelen fir Participanten ze generéieren déi all aner net Vertrauen, wat Ufuerderunge fir esou zoufälleg Zuel Generatoren virgestallt ginn, a betruecht zwee Approche zu hirer Ëmsetzung.

An dësem Deel vum Artikel wäerte mir eng aner Approche méi no kucken, déi Schwell Ënnerschrëften benotzt.

E bësse Kryptografie

Fir ze verstoen wéi d'Schwell Ënnerschrëften funktionnéieren, musst Dir e bësse Basis Kryptografie verstoen. Mir benotzen zwee Konzepter: Skalaren, oder einfach Zuelen, déi mir mat klenge Buschtawen bezeechnen (x, y) a Punkten op der elliptesch Curve, déi mir mat grousse Buschtawen bezeechnen.

Fir d'Basis vun de Schwell Ënnerschrëften ze verstoen, musst Dir net verstoen wéi elliptesch Kéiren funktionnéieren, ausser e puer grondleeënd Saachen:

  1. Punkten op enger elliptesch Curve kënne mat enger Skalar bäigefüügt a multiplizéiert ginn (mir bezeechnen d'Multiplikatioun mat enger Skalar als xG, obwuel d'Notatioun Gx och dacks an der Literatur benotzt). D'Resultat vun Additioun a Multiplikatioun mat enger Skalar ass e Punkt op enger elliptescher Curve.

  2. Wëssen nëmmen de Punkt G a säi Produkt mat enger Skalar xG kann net berechent ginn x.

Mir wäerten och d'Konzept vun engem Polynom benotzen p(x) Grad k-1. Besonnesch wäerte mir déi folgend Eegeschafte vu Polynomen benotzen: wa mir de Wäert kennen p(x) fir all k verschiddene x (a mir hu keng méi Informatioun iwwer p(x)), kënne mir berechent ginn p(x) fir jiddereen aneren x.

Et ass interessant datt fir all Polynom p(x) an e puer Punkt op der Kéier Gd'Bedeitung kennen p(x)G fir all k verschidde Bedeitungen x, mir kënnen och berechnen p(x)G fir all x.

Dëst ass genuch Informatioun fir an d'Detailer ze gräifen wéi d'Schwell Ënnerschrëfte funktionnéieren a wéi se se benotze fir zoufälleg Zuelen ze generéieren.

Zoufälleg Zuel Generator op Schwell Ënnerschrëften

Loosst eis dat soen n Participanten wëllen eng zoufälleg Zuel ze Generéiere, a mir wëllen jiddereen matmaachen k et waren genuch vun hinnen eng Zuel ze generéieren, mä sou datt d'Ugräifer déi Kontroll k-1 oder manner Participanten konnten d'Zuel net viraussoen oder beaflossen.

Ass et méiglech zoufälleg Zuelen ze generéieren wa mir all aner net trauen? Deel 2

Ugeholl datt et esou e Polynom gëtt p(x) Grad k-1 wat den éischte Participant weess p (1), deen zweete weess p(2), a sou weider (n-t weess p(n)). Mir huelen och un, datt fir e puer virbestëmmten Punkt G jidderee weess p(x)G fir all Wäerter x. Mir ruffen p(i) "privat Komponent" iParticipant (well nëmmen ider th Participant kennt hir), an p(i)G "ëffentlech Komponent" i-th Participant (well all Participanten hir kennen). Wéi Dir Iech erënnert, Wëssen p(i)G net genuch fir ze restauréieren p(i).

Sou e Polynom ze kreéieren sou datt nëmmen i-Den éischte Participant a keen aneren wousst seng privat Komponent - dat ass dee komplexen an interessantsten Deel vum Protokoll, a mir analyséieren et hei ënnen. Fir elo, loosst eis unhuelen datt mir sou e Polynom hunn an all Participanten kennen hir privat Komponenten.

Wéi kënne mir sou e Polynom benotze fir eng zoufälleg Zuel ze generéieren? Fir unzefänken, brauche mir e String deen net virdru als Input zum Generator benotzt gouf. Am Fall vun engem Blockchain, den Hash vum leschte Block h ass e gudde Kandidat fir esou eng Linn. Loosst d'Participanten eng zoufälleg Zuel ze schafen benotzen h wéi Som. D'Participanten konvertéieren als éischt h op e Punkt op der Kurve mat enger virdefinéierter Funktioun:

H = scalarToPoint(h)

Dann all Participant i berechent a publizéiert Hi = p(i)H, wat kënne se maachen well se wëssen p(i) und H. Offenbarung HEch erlaben net aner Participanten de private Komponent ze restauréieren iParticipant, an dofir kann ee Set vu private Komponenten vu Block zu Block benotzt ginn. Also muss den deiere Polynom Generatioun Algorithmus hei ënnen beschriwwen nëmmen eemol ausgefouert ginn.

Wéini k Participanten goufen autopsied Hi = p(i)H, jidderee kann ausrechnen Hx = dir p(x)H fir jiddereen x merci fir d'Eegeschafte vu Polynomen, déi mir an der leschter Sektioun diskutéiert hunn. Zu dësem Moment berechnen all Participanten H0 = p(0)H, an dëst ass déi doraus resultéierend zoufälleg Zuel. Maacht weg datt kee weess p(0), an dofir déi eenzeg Manéier ze berechnen p(0)H - dëst ass Interpolatioun p(x)H, wat nëmme méiglech ass wann k Wäerter p(i)H bekannt. Ouverture all méi kleng Quantitéit p(i)H gëtt keng Informatioun iwwer p(0)H.

Ass et méiglech zoufälleg Zuelen ze generéieren wa mir all aner net trauen? Deel 2

De Generator uewendriwwer huet all d'Eegeschafte mir wëllen: Ugräifer kontrolléiert nëmmen k-1 Participanten oder manner hu keng Informatioun oder Afloss op d'Conclusioun, während all k Participanten kënnen déi doraus resultéierend Zuel Berechent, an all Ënnergrupp vun k d'Participanten kommen ëmmer op datselwecht Resultat fir déiselwecht Som.

Et gëtt ee Problem dee mir virsiichteg uewen vermeit hunn. Fir Interpolatioun ze schaffen, ass et wichteg datt de Wäert Hech déi vun all Participant publizéiert gouf i et war wierklech déi selwecht p(i)H. Well keen ausser i-th Participant weess net p(i), keen ausser i-Participant kann dat net verifizéieren Hi eigentlech richteg berechent, an ouni cryptographic Beweis vun Richtegkeet Hech en Ugräifer kann all Wäert publizéieren als Salut, an arbiträr Afloss op d'Ausgang vun der zoufälleg Zuel Generator:

Ass et méiglech zoufälleg Zuelen ze generéieren wa mir all aner net trauen? Deel 2Verschidde Wäerter vun H_1 geschéckt vum éischte Participant féieren zu verschiddene resultéierende H_0

Et ginn op d'mannst zwee Weeër fir Richtegkeet ze beweisen Hech, mir wäerten se betruecht nodeems mir d'Generatioun vun der polynomial analyséieren.

Polynom Generatioun

Am leschte Sektioun hu mir ugeholl datt mir esou e Polynom hunn p(x) Grad k-1 datt de Participant i weess p(i), a keen aneren huet all Informatiounen iwwert dëse Wäert. An der nächster Rubrik wäerte mir dat och fir e puer virbestëmmten Punkt brauchen G jidderee wousst p(x)G fir jiddereen x.

An dëser Rubrik wäerte mir dovun ausgoen, datt all Participant lokal e puer private Schlëssel huet xi, sou datt jiddereen deen entspriechende ëffentleche Schlëssel kennt Xi.

Ee méigleche Polynom Generatiounsprotokoll ass wéi follegt:

Ass et méiglech zoufälleg Zuelen ze generéieren wa mir all aner net trauen? Deel 2

  1. All Participant i lokal schafft en arbiträr Polynom pi(x) Grad k-1. Si schécken dann all Participant j Bedeitung pi (j), verschlësselte mat ëffentleche Schlëssel Xj. Sou nëmmen i-y и j-y Participant wëssen pech (j). Participant i och ëffentlech annoncéiert pi(j)G fir jiddereen j от 1 ze k inklusiv.

  2. All Participanten benotzen e puer Konsens fir ze wielen k Participanten deenen hir Polynome benotzt ginn. Well e puer Participanten offline kënne sinn, kënne mir net waarden bis jiddereen n Participanten wäert polynomials publizéieren. D'Resultat vun dësem Schrëtt ass e Set Z besteet aus op d'mannst k Polynomen erstallt am Schrëtt (1).

  3. D'Participanten suergen datt d'Wäerter déi se kennen pi(j) entspriechen ëffentlech ugekënnegt pi(j)G. No dësem Schrëtt an Z nëmmen polynomials fir déi privat iwwerdroen pi(j) entspriechen ëffentlech ugekënnegt pi(j)G.

  4. All Participant j berechent seng privat Komponent p(j) als Zomm pi(j) fir all i в Z. All Participant berechent och all Wäerter p(x)G als Zomm pi(x)G fir all i в Z.

Ass et méiglech zoufälleg Zuelen ze generéieren wa mir all aner net trauen? Deel 2

notéiert dat p(x) - et ass wierklech e Polynom k-1, well et d'Zomm vum Individuum ass pi(x), déi jidderee e Polynom vu Grad ass k-1. Dann, Note, datt während all Participant j weess p(j), si hu keng Informatiounen iwwert p(x) fir x ≠ j. Tatsächlech, fir dëse Wäert ze berechnen, musse se alles wëssen pi(x), an soulaang de Participant j weess net op d'mannst ee vun de ausgewielt polynomials, si hunn net genuch Informatiounen iwwert p(x).

Dëst ass de ganze Polynomgeneratiounsprozess deen an der leschter Sektioun gebraucht gouf. D'Schrëtt 1, 2 a 4 hei uewen hunn eng zimlech offensichtlech Ëmsetzung. Awer Schrëtt 3 ass net sou trivial.

Speziell musse mir fäeg sinn dat verschlësselt ze beweisen pi(j) entspriechen wierklech de publizéierten pi(j)G. Wa mir et net beweise kënnen, den Ugräifer i kann Dreck schécken amplaz pi(j) zum Participant j, an Participant j wäert net fäeg sinn de richtege Wäert ze kréien pi(j), a wäert net fäheg sinn seng privat Komponent ze berechnen.

Et gëtt e kryptographesche Protokoll deen Iech erlaabt en zousätzleche Message ze kreéieren Beweisi(j), sou datt all Participant, e Wäert huet e, а также proofi (j) и pi(j)G, kann dat lokal verifizéieren e - et ass wierklech pi(j), verschlësselte mam Schlëssel vum Participant j. Leider ass d'Gréisst vun esou Beweiser onheemlech grouss, a well et néideg ass ze publizéieren O(nk) Esou Beweiser kënnen net fir dësen Zweck benotzt ginn.

Amplaz dat ze beweisen pi(j) entsprécht pi(j)G kënne mir eng ganz laang Zäit am Polynomial Generatiounsprotokoll allocéieren, wärend all Participanten déi erhalen verschlësselte kontrolléieren pi(j), a wann de entschlësselte Message net dem Public entsprécht pi(j)G, si publizéieren e kryptographesche Beweis datt de verschlësselte Message, deen se kritt hunn, falsch ass. Beweist datt de Message Net entsprécht pi(G) vill méi einfach wéi ze beweisen datt et passt. Et sollt bemierkt datt dëst erfuerdert datt all Participant op d'mannst eemol online erschéngt während der Zäit zougelooss fir sou Beweiser ze kreéieren, a baséiert op der Virgab datt wa se sou e Beweis publizéieren, et all aner Participanten an der selwechter Zäit erreechen.

Ass et méiglech zoufälleg Zuelen ze generéieren wa mir all aner net trauen? Deel 2

Wann e Participant während dëser Zäit net online erschéngt, an hien huet op d'mannst ee falsche Bestanddeel, da kann dee bestëmmte Participant net un der weiderer Zuelgeneratioun deelhuelen. De Protokoll funktionnéiert awer nach ëmmer wann et op d'mannst ass k Participanten, déi entweder just déi richteg Komponenten kruten oder et fäerdeg bruecht hunn de Beweis vun der Onkorrektheet bannent der zougewisener Zäit ze verloossen.

Beweis vun Richtegkeet vun H_i

Dee leschten Deel, dee bleift ze diskutéieren ass, wéi d'Korrektheet vun publizéiert ze beweisen Hech, nämlech dat Hi = p(i)H, ouni Ouverture p(i).

Loosst eis drun erënneren datt d'Wäerter H, G, p(i)G ëffentlech a fir jiddereen bekannt. Kréien Operatioun p(i) wëssen p(i)G и G diskrete Logarithmus genannt, oder dlog, a mir wëllen dat beweisen:

dlog(p(i)G, G) = dlog(Hi, H)

ouni Offenbarung p(i). Konstruktioune fir esou Beweiser existéieren zum Beispill Schnorr Protokoll.

Mat dësem Design, all Participant, zesumme mat Hi schéckt e Beweis vun der Richtegkeet no dem Design.

Wann eng zoufälleg Zuel generéiert ass, muss se dacks vun anere Participanten benotzt ginn wéi déi, déi se generéiert hunn. Esou Participanten, zesumme mat der Zuel, muss all schécken Hi an Zesummenhang Beweiser.

En virwëtzeg Lieser kann froen: well déi lescht zoufälleg Zuel ass H0,an an p(0)G - Dëst ass ëffentlech Informatioun, firwat brauche mir Beweiser fir all eenzel Hech, Firwat schécken net Beweis datt amplaz

dlog(p(0)G, G) = dlog(H0, H)

De Problem ass datt esou e Beweis net mam Schnorr Protokoll erstallt ka ginn, well kee weess de Wäert p (0), néideg de Beweis ze schafen, a wat d'méi, de ganzen zoufälleg Zuel Generator baséiert op der Tatsaach, datt keen weess dëse Wäert. Dofir ass et néideg all Wäerter ze hunn Hi an hir individuell Beweiser fir Richtegkeet ze beweisen H0.

Wéi och ëmmer, wann et e puer Operatioun op Punkten op elliptesch Kéiren wier, déi semantesch ähnlech wéi Multiplikatioun ass, ass de Beweis vu Richtegkeet H0 wier trivial, mir géingen dat einfach sécher stellen

H0 × G = p(0)G × H

Wann déi gewielte Curve ënnerstëtzt elliptesch Curve Pairen, Dëse Beweis funktionnéiert. An dësem Fall H0 ass net nëmmen d'Ausgab vun engem zoufälleg Zuelengenerator, dee vun all Participant verifizéiert ka ginn, dee weess G, H и p(0)G. H0 ass och eng Ënnerschrëft op de Message deen als Som benotzt gouf, dat bestätegt k и n Participanten hunn dëse Message ënnerschriwwen. Also, wann Som - ass den Hash vum Block am Blockchain Protokoll, dann H0 ass souwuel eng Multi-Ënnerschrëft op engem Block an eng ganz gutt zoufälleg Zuel.

Conclusioun

Dësen Artikel ass Deel vun enger technescher Blog Serie NËMMEN. NEAR ass e Blockchain Protokoll a Plattform fir dezentraliséiert Uwendungen z'entwéckelen mat engem Akzent op d'Liichtegkeet vun der Entwécklung an d'Benotzungsfäegkeet fir Endbenotzer.

De Protokollcode ass op, eis Ëmsetzung ass a Rust geschriwwen, et ka fonnt ginn hei.

Dir kënnt gesinn wéi d'Entwécklung fir NEAR ausgesäit an experimentéiert an der Online IDE hei.

Dir kënnt all Neiegkeeten op Russesch verfollegen um Telegram Grupp an a Grupp op VKontakte, an op Englesch am offiziellen twitter.

Bis geschwënn!

Source: will.com

Setzt e Commentaire