Vitalik Buterin kaudu Vitalik Buterini ajaveeb
See on postituse peegel aadressil https://medium.com/@VitalikButerin/exploring-elliptic-curve-pairings-c73c1864e627
Päästikuhoiatus: matemaatika.
Üks peamisi krüptograafilisi primitiive erinevate konstruktsioonide taga, sealhulgas deterministlikud lävisignatuurid, zk-SNARK-id ja muud lihtsamad nullteadmiste tõestused, on elliptilise kõvera sidumine. Elliptiliste kõverate paarid (ehk bilineaarsed kaardid) on hiljutine täiendus 30-aastasele elliptiliste kõverate kasutamisele krüptograafilistes rakendustes, sealhulgas krüptimises ja digitaalallkirjades. paarid tutvustavad "krüpteeritud korrutamist", laiendades oluliselt elliptilisel kõveral põhinevate protokollide võimalusi. Selle artikli eesmärk on üksikasjalikult käsitleda elliptiliste kõverate sidumist ja selgitada nende toimimise üldist ülevaadet.
Eeldatakse, et te ei mõista kõike siin esimesel lugemisel ega isegi kümnendal korral; see värk on tõesti raske. Kuid loodetavasti annab see artikkel teile vähemalt natuke aimu kapoti all toimuvast.
Elliptilised kõverad ise on väga ebatriviaalne teema, millest tuleb aru saada, ja see artikkel eeldab üldiselt, et teate, kuidas need töötavad; Kui te seda ei tee, soovitan seda artiklit siin aabitsana: https://blog.cloudflare.com/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/. Kiire kokkuvõttena võib öelda, et elliptilise kõvera krüptograafia hõlmab matemaatilisi objekte, mida nimetatakse "punktideks" (need on sõna otseses mõttes kahemõõtmelised punktid (�,�) koordinaatidega) ja spetsiaalsete valemitega nende liitmiseks ja lahutamiseks (st �= koordinaatide arvutamiseks). �+�) ja saate ka punkti korrutada täisarvuga (st �⋅�=�+�+…+�, kuigi on palju kiirem viis selle arvutamiseks, kui � on suur).
Siit saate teada, kuidas punktide liitmine graafiliselt välja näeb.
On olemas spetsiaalne punkt, mida nimetatakse lõpmatuse punktiks (�), mis võrdub punktiaritmeetikas nulliga; alati on nii, et �+�=�. Samuti on kõveral "et“; on olemas arv �, nii et �⋅�=� mis tahes � jaoks (ja loomulikult �⋅(�+1)=�,�⋅(7⋅�+5)=�⋅5 jne). Samuti on mõned ühiselt kokku lepitud "generaatoripunkt" �, mis mõnes mõttes tähistab arvu 1. Teoreetiliselt võib kõvera mis tahes punkt (välja arvatud �) olla �; Tähtis on vaid see, et � on standardiseeritud.
Paarid lähevad sammu kaugemale, kuna need võimaldavad teil elliptilise kõvera punktides kontrollida teatud tüüpi keerukamaid võrrandeid – näiteks kui �=�⋅�,�=�⋅� ja �=�⋅�, saate kontrollida, kas või mitte �⋅�=�, mille sisenditeks on ainult �,� ja �. See võib tunduda, et elliptiliste kõverate põhilised turvagarantiid on rikutud, kuna teave � kohta lekib lihtsalt P teadmisest, kuid selgub, et leke on väga piiratud – täpsemalt otsustav Diffie Hellmani probleem on lihtne, kuid arvutuslik Diffie Hellmani probleem (teades � ja � ülaltoodud näites, arvutustehnika �=�⋅�⋅�) ja diskreetse logaritmi ülesanne (taastamine �-st �) jäävad arvutuslikult teostamatuks (vähemalt, kui need olid varem).
Kolmas viis paaristamise toimimise uurimiseks ja üks, mis on enamiku meie kasutusjuhtude puhul ehk kõige valgustavam, on see, et kui vaadelda elliptilisi kõvera punkte ühesuunaliste krüptitud numbritena (st ���� ���(�)=�⋅�=�), siis traditsioonilise elliptilise kõvera matemaatika võimaldab kontrollida sirgjooneline arvude piirangud (nt kui �=�⋅�,�=�⋅� ja �=�⋅�, kontrollimine 5⋅�+7⋅�=11⋅� on tõesti kontrollides, et 5⋅�+7⋅�=11⋅�), võimaldavad paarid kontrollida kvadraatiline piirangud (nt kontrollimine �(�,�)⋅�(�,�⋅5)=1 on tõesti kontrollides, et �⋅�+5=0). Ja ruutarvu suurendamisest piisab, et saaksime töötada deterministlike lävesignatuuride, ruutarvuliste aritmeetikaprogrammide ja kõige muu hea kraamiga.
Mis on nüüd see naljakas �(�,�) operaator, mida me eespool tutvustasime? See on sidumine. Matemaatikud nimetavad seda mõnikord ka a bilineaarne kaart; sõna "bilineaarne" tähendab siin põhimõtteliselt seda, et see vastab piirangutele:
�(�,�+�)=�(�,�)⋅�(�,�)
�(�+�,�)=�(�,�)⋅�(�,�)
Pange tähele, et + ja ⋅ võivad olla suvalised operaatorid; kui loote väljamõeldud uut tüüpi matemaatilisi objekte, ei huvita abstraktset algebrat, kuidas + ja ⋅ on määratletud, kui need on tavapärastel viisidel järjepidevad, nt. �+�=�+�,(�⋅�)⋅�=�⋅(�⋅�) ja (�⋅�)+(�⋅�)=(�+�)⋅�.
Kui �, �, � ja � oleksid lihtsad numbrid, siis on lihtsa sidumise loomine lihtne: saame teha �(�,�)=2��. Siis näeme:
�(3,4+5)=23⋅9=227
�(3,4)⋅�(3,5)=23⋅4⋅23⋅5=212⋅215=227
See on bilineaarne!
Sellised lihtsad sidumised aga krüptograafia jaoks ei sobi, kuna objektid, millega nad töötavad, on lihtsad täisarvud ja neid on liiga lihtne analüüsida; täisarvud muudavad jagamise, logaritmide arvutamise ja mitmesuguste muude arvutuste tegemise lihtsaks; lihtsatel täisarvudel pole mõistet "avalik võti" või "ühesuunaline funktsioon". Lisaks saate ülalkirjeldatud sidumisega minna tagasi – teades � ja teades �(�,�), saate � määramiseks lihtsalt arvutada jaotuse ja logaritmi. Soovime matemaatilisi objekte, mis on võimalikult lähedal "mustadele kastidele", kus saate liita, lahutada, korrutada ja jagada, aga muud ei tee. Siin tulevadki sisse elliptilised kõverad ja elliptiliste kõverate paarid.
Selgub, et on võimalik koostada bilineaarne kaart elliptiliste kõvera punktide kohta – see tähendab, et leia funktsioon �(�,�), kus sisendid � ja � on elliptilised kõvera punktid ja kus väljund on nn. (��)12 element (vähemalt konkreetsel juhul, mida me siin käsitleme; kõvera üksikasjadest olenevad erisused, sellest lähemalt hiljem), kuid selle matemaatika on üsna keeruline.
Esmalt käsitleme algvälju ja laiendusvälju. Selle postituse varasemal pildil olev päris elliptiline kõver näeb selline välja ainult siis, kui eeldate, et kõvera võrrand on defineeritud tavaliste reaalarvude abil. Kui aga tegelikult kasutame krüptograafias tavalisi reaalarve, siis saab logaritmidega “tagasi minna” ja kõik läheb katki; lisaks võib arvude tegelikuks salvestamiseks ja esitamiseks vajalik ruumi hulk meelevaldselt kasvada. Seetõttu kasutame a-s hoopis numbreid peamine väli.
Algväli koosneb arvude hulgast 0,1,2…�−1, kus � on algarv, ja erinevad toimingud on määratletud järgmiselt:
�+�:(�+�) % �
�⋅�:(�⋅�) % �
�−�:(�−�) % �
�/�:(�⋅��−2) % �
Põhimõtteliselt tehakse kogu matemaatika modulo � (vt siin moodulmatemaatika sissejuhatuseks). Jagamine on erijuhtum; tavaliselt ei ole 32 täisarv ja siin tahame käsitleda ainult täisarve, seega proovime selle asemel leida arvu � nii, et �⋅2=3, kus ⋅ viitab loomulikult modulaarsele korrutamisele, nagu eespool defineeritud. Tänu Fermat' väike teoreem, teeb ülal näidatud astendamise trikk oma töö ära, kuid selleks on ka kiirem viis, kasutades Laiendatud eukleidiline algoritm. Oletame, et �=7; siin on mõned näited:
2+3=5 % 7=5
4+6=10 % 7=3
2−5=−3 % 7=4
6⋅3=18 % 7=4
3/2=(3⋅25) % 7=5
5⋅2=10 % 7=3
Kui mängite sellise matemaatikaga ringi, märkate, et see on täiesti ühtlane ja vastab kõigile tavapärastele reeglitele. Kaks viimast ülaltoodud näidet näitavad, kuidas (�/�)⋅�=�; näete ka, et (�+�)+�=�+(�+�),(�+�)⋅�=�⋅�+�⋅� ja kõik teised keskkooli algebralised identiteedid, mida tunnete ja armastate, jätkuvad ka tõele vastama. Elliptiliste kõverate korral arvutatakse punktid ja võrrandid tavaliselt algväljadel.
Nüüd räägime laiendusväljad. Tõenäoliselt olete laiendusvälja juba varem näinud; kõige levinum näide matemaatikaõpikutes on kompleksarvude väli, kus reaalarvude väli on “laiendatud” lisaelemendiga −1=�. Põhimõtteliselt toimivad laiendusväljad, võttes olemasoleva välja, seejärel "leiutades" uue elemendi ja määratledes selle elemendi ja olemasolevate elementide vahelise suhte (antud juhul �2+1=0), tagades, et see võrrand ei kehtiks mis tahes numbri jaoks, mis on algsel väljal, ja vaadates kõiki algvälja ja äsja loodud uue elemendi elementide lineaarseid kombinatsioone.
Saame teha ka põhiväljade laiendusi; Näiteks saame laiendada algvälja mod7, mida me eespool kirjeldasime, kasutades � ja seejärel saame teha:
(2+3�)+(4+2�)=6+5�
(5+2�)+3=1+2�
(6+2�)⋅2=5+4�
4�⋅(2+�)=3+�
Seda viimast tulemust võib olla natuke raske välja mõelda; seal juhtus see, et me jagame korruti esmalt 4�⋅2+4�⋅�, mis annab 8�−4, ja siis, kuna töötame mod7 matemaatikas, millest saab �+3. Jagamiseks teeme:
�/�:(�⋅�(�2−2)) % �
Pange tähele, et Fermat' väikese teoreemi eksponent on nüüd � 2 asemel �, kuigi veel kord, kui tahame olla tõhusamad, võime selle töö tegemiseks laiendada ka laiendatud eukleidilist algoritmi. Pange tähele, et ��2-1 = 1 iga � jaoks sellel väljal, seega nimetame �2-1 "välja multiplikatiivse rühma järjekorraks".
Reaalarvudega Algebra põhiteoreem tagab, et ruutlaiend, mida me nimetame kompleksarvudeks, on "täielik" – te ei saa seda edasi laiendada, sest iga matemaatilise seose (vähemalt iga algebralise valemiga määratletud matemaatilise seose) korral, mille saate mõne uue elemendi vahel välja mõelda � ja olemasolevate kompleksarvude põhjal on võimalik leida vähemalt üks kompleksarv, mis seda seost juba rahuldab. Algväljadega meil aga seda probleemi ei ole ja seega saame minna kaugemale ja teha kuuplaiendeid (kus mõne uue elemendi � ja olemasolevate väljaelementide matemaatiline seos on kuupvõrrand, seega 1,� ja �2 on kõik üksteisest lineaarselt sõltumatud), kõrgemat järku laiendused, laienduste laiendid jne. Ja just sellistele ülelaaditud modulaarsetele kompleksarvudele ehitatakse elliptiliste kõverate paarid.
Neile, kes on huvitatud kõigi nende toimingute koodis väljakirjutamise täpsest matemaatikast, on siin rakendatud algväljad ja väljalaiendid: https://github.com/ethereum/py_pairing/blob/master/py_ecc/bn128/bn128_field_elements.py
Nüüd elliptiliste kõverate paaride juurde. Elliptilise kõvera sidumine (või õigemini spetsiifiline sidumise vorm, mida me siin uurime; on ka teist tüüpi sidumisi, kuigi nende loogika on üsna sarnane) on kaart �2×�1→��, kus:
- �1 on elliptiline kõver, kus punktid vastavad võrrandile kujul �2=�3+� ja kus mõlemad koordinaadid on �� elemendid (st need on lihtarvud, välja arvatud see, et aritmeetikat tehakse mõne algarvu mooduli järgi)
- �2 on elliptiline kõver, kus punktid vastavad samale võrrandile kui �1, välja arvatud juhul, kui koordinaadid on (��)12 elemendid (st need on ülelaetud kompleksarvud, millest me eespool rääkisime; me määratleme uue "maagilise arvu". ” �, mis on määratletud 12. astme polünoomiga nagu �12–18⋅�6+82=0)
- �� on objekti tüüp, millesse elliptilise kõvera tulemus läheb. Vaadeldavatel kõveratel on �� (��)12 (sama ülelaetud kompleksarv, mida kasutatakse �2-s)
Peamine omadus, millele see peab vastama, on bilineaarsus, mis antud kontekstis tähendab järgmist:
- �(�,�+�)=�(�,�)⋅�(�,�)
- �(�+�,�)=�(�,�)⋅�(�,�)
On veel kaks olulist kriteeriumi:
- Tõhus arvutatavus (nt saame teha lihtsa sidumise, võttes lihtsalt kõigi punktide diskreetsed logaritmid ja korrutades need kokku, kuid see on arvutuslikult sama raske kui elliptilise kõvera krüptograafia katkestamine, nii et see ei lähe arvesse)
- Mitte-degeneratsioon (Muidugi, võite lihtsalt defineerida �(�,�)=1, kuid see pole eriti kasulik sidumine)
Kuidas me siis seda teeme?
Matemaatika, miks sidumisfunktsioonid töötavad, on üsna keeruline ja hõlmab üsna palju arenenud algebrat, mis ulatub isegi kaugemale sellest, mida oleme seni näinud, kuid ma annan ülevaate. Kõigepealt peame defineerima a mõiste splitter, põhimõtteliselt alternatiivne viis funktsioonide esitamiseks elliptiliste kõverate punktides. Funktsiooni jagaja loeb põhimõtteliselt funktsiooni nullid ja lõpmatused. Et näha, mida see tähendab, vaatame läbi mõned näited. Parandame mõne punkti �=(��,��) ja kaalume järgmist funktsiooni:
�(�,�)=�−��
Jagaja on [�]+[−�]−2⋅[�] (nurksulgudes kasutatakse fakti, et me viitame punkti � olemasolu funktsiooni nullide ja lõpmatuste hulgas, mitte punkt P ise; [�]+[�] on mitte sama mis [�+�]). Põhjendus on järgmine:
- Funktsioon on � juures võrdne nulliga, kuna � is ��, seega �−��=0
- Funktsioon on punktis −� võrdne nulliga, kuna −� ja � jagavad sama koordinaati
- Funktsioon läheb lõpmatusse nagu � läheb lõpmatusse, seega ütleme, et funktsioon on võrdne lõpmatusega punktis �. Sellel on tehniline põhjus, miks seda lõpmatust tuleb lugeda kaks korda, nii et � liidetakse “kordsusega” –2 (negatiivne, kuna see on lõpmatus, mitte null, kaks selle topeltloendamise tõttu).
Tehniline põhjus on ligikaudu järgmine: kuna kõvera võrrand on �3=�2+�,� läheb lõpmatuseni "1.5 korda kiiremini" kui �, et �2 püsiks �3-ga sammus; seega, kui lineaarfunktsioon sisaldab ainult �, siis esitatakse see kordsuse 2 lõpmatusena, aga kui see sisaldab �, siis esitatakse see kordsuse 3 lõpmatusena.
Nüüd kaaluge "joonfunktsiooni":
��+��+�=0
Kus �, � ja � on hoolikalt valitud nii, et joon läbiks punkte � ja �. Elliptilise kõvera liitmise toimimise tõttu (vt diagrammi ülaosas) tähendab see ka seda, et see läbib −�−�. Ja see tõuseb lõpmatuseni, olenevalt nii �-st kui ka �-st, nii et jagaja muutub [�]+[�]+[−�−�]−3⋅[�].
Teame, et iga "ratsionaalne funktsioon" (st funktsioon, mis on defineeritud ainult lõpliku arvu +,−,⋅ ja / punkti koordinaatidega tehtavate toimingutega) vastab üheselt mingile jagajale kuni konstandiga korrutamiseni (st. kui kahel funktsioonil � ja � on sama jagaja, siis �=�⋅� mõne konstandi korral �).
Mis tahes kahe funktsiooni � ja � korral võrdub funktsiooni �⋅� jagaja � pluss � jagajaga (matemaatikaõpikutes näete (�⋅�)=(�)+(�)), nii näiteks kui �(�,�)=��−�, siis (�3)=3⋅[�]+3⋅[−�]−6⋅[�]; � ja −� on "kolmikloendatud", et võtta arvesse asjaolu, et �3 läheneb neis punktides nullile teatud matemaatilises mõttes "kolm korda kiiremini".
Pange tähele, et on olemas teoreem, mis ütleb, et kui "eemaldate nurksulud" funktsiooni jagajalt, peavad punktid liitma �([�]+[�]+[−�−�]−3⋅[ �] sobib selgelt nagu �+�−�−�−3⋅�=�) ja iga jagaja, millel on see omadus, on funktsiooni jagaja.
Nüüd oleme valmis Tate'i paaride vaatamiseks. Mõelge järgmistele funktsioonidele, mis on määratletud nende jagajate kaudu:
- (��)=�⋅[�]−�⋅[�], kus � on �1 järjekord, st. �⋅�=� mis tahes � jaoks
- (��)=�⋅[�]−�⋅[�]
- (�)=[�+�]−[�]−[�]+[�]
Nüüd vaatame toodet ��⋅��⋅��. Jagaja on:
�⋅[�]−�⋅[�]+�⋅[�]−�⋅[�]+�⋅[�+�]−�⋅[�]−�⋅[�]+�]⋅[�]
Mis lihtsustab kenasti:
�⋅[�+�]−�⋅[�]
Pange tähele, et see jagaja on täpselt samas vormingus kui ülaltoodud �� ja �� jagaja. Seega ��⋅��⋅��=��+�.
Nüüd tutvustame protseduuri, mida nimetatakse "lõplikuks astendamiseks", kus me võtame ülaltoodud funktsioonide tulemuse (��,�� jne) ja tõstame selle astmeni �=(�12−1)/�, kus �12−1 on (��)12 korduva rühma järjekord (st. mistahes �∈(��)12,�(�12−1)=1). Pange tähele, et kui rakendate seda eksponentsi mis tahes tulemusele, millel on juba kui on tõstetud astmeni �, saad astenduse astmele �12−1, nii et tulemus muutub 1-ks. Seega pärast lõplikku astendamist �� tühistatakse ja saame ���⋅���=( ��+�)�. Teie jaoks on teatud bilineaarsus.
Nüüd, kui soovite luua funktsiooni, mis on mõlemas argumendis bilineaarne, peate minema õudsema matemaatika juurde, kus väärtuse �� otsese võtmise asemel võtate �� splitter, ja sealt pärineb täielik "Tate'i sidumine". Veel mõningate tulemuste tõestamiseks peate tegelema selliste mõistetega nagu "lineaarne ekvivalentsus" ja "Weili vastastikkus" ning jäneseauk läheb sealt edasi. Selle kõige kohta leiate rohkem lugemismaterjali siin ja siin.
Tate'i sidumise modifitseeritud versiooni, mida nimetatakse optimaalseks Ate-paringiks, rakendamiseks vaata siin. Kood rakendab Milleri algoritm, mida on vaja �� tegelikuks arvutamiseks.
Pange tähele, et tõsiasi, et sellised paarid on võimalikud, on mõnevõrra vastuoluline: ühelt poolt tähendab see, et kõik protokollid, mida saame sidumisega teha, saavad võimalikuks, kuid tähendab ka seda, et peame olema ettevaatlikumad elliptiliste kõverate suhtes. me kasutame.
Igal elliptilisel kõveral on väärtus, mida nimetatakse an kinnistamisaste; sisuliselt väikseim �, nii et ��−1 on � kordne (kus � on välja jaoks kasutatav algarv ja � on kõvera järjekord). Ülaltoodud väljadel �=12 ja traditsioonilise ECC jaoks kasutatavatel väljadel (st kus me paaridest ei hooli) on manustamisaste sageli äärmiselt suur, kuni selleni, et paaride arvutamine on arvutuslikult võimatu; aga kui me ei ole ettevaatlikud, saame genereerida väljad, kus �=4 või isegi 1.
Kui � = 1, siis saab elliptiliste kõverate diskreetse logaritmi probleemi (sisuliselt taastada � teades ainult punkti �=�⋅�, probleemi, mille peate lahendama elliptilise kõvera privaatvõtme "murdmiseks") sarnasesse matemaatikaülesandesse üle ��, kus ülesanne muutub palju lihtsamaks (seda nimetatakse MOV rünnak); 12 või kõrgema manustamisastmega kõverate kasutamine tagab, et see vähendamine pole saadaval või et sidumistulemuste diskreetse logiprobleemi lahendamine on vähemalt sama raske kui privaatvõtme taastamine avalikust võtmest "tavaliselt" (st. arvutuslikult teostamatu). Ära muretse; kõiki standardkõvera parameetreid on selle probleemi jaoks põhjalikult kontrollitud.
Püsige lainel, et saada matemaatilist selgitust zk-SNARKide toimimise kohta, mis on peagi saadaval.
Eriline tänu Christian Reitwiessnerile, Ariel Gabizonile (Zcashist) ja Alfred Menezesele ülevaatamise ja paranduste tegemise eest.
- SEO-põhise sisu ja PR-levi. Võimenduge juba täna.
- PlatoData.Network Vertikaalne generatiivne Ai. Jõustage ennast. Juurdepääs siia.
- PlatoAiStream. Web3 luure. Täiustatud teadmised. Juurdepääs siia.
- PlatoESG. Süsinik, CleanTech, Energia, Keskkond päikeseenergia, Jäätmekäitluse. Juurdepääs siia.
- PlatoTervis. Biotehnoloogia ja kliiniliste uuringute luureandmed. Juurdepääs siia.
- BlockOffsets. Keskkonnakompensatsiooni omandi ajakohastamine. Juurdepääs siia.
- Allikas: Platoni andmete intelligentsus.