Satunnainen oraakkeli, joka perustuu digitaaliseen allekirjoitukseen lohkoketjussa

Ideasta toteutukseen: muokkaamme olemassa olevaa elliptisen käyrän digitaalisen allekirjoitusmallin deterministiseksi ja tarjoamme sen pohjalta toimintoja lohkoketjun sisällä todennettavissa olevien näennäissatunnaisten lukujen saamiseksi.

Satunnainen oraakkeli, joka perustuu digitaaliseen allekirjoitukseen lohkoketjussa

Ajatus

Syksyllä 2018 mukana Waves-lohkoketju ensimmäiset älykkäät sopimukset aktivoitu, heräsi heti kysymys saamismahdollisuudesta näennäissatunnaisia ​​lukujavoit luottaa.

Tätä kysymystä ihmetellen päädyin lopulta siihen tulokseen: mikä tahansa lohkoketju on solu; suljetussa järjestelmässä on mahdotonta saada luotettavaa entropialähdettä.

Mutta pidin silti yhdestä ajatuksesta: jos satunnainen oraakkeli allekirjoittaa käyttäjätiedot deterministisellä algoritmilla, niin käyttäjä voi aina varmistaa tällaisen allekirjoituksen julkisella avaimella ja on varma, että tuloksena oleva arvo on ainutlaatuinen. Oraakkeli, vaikka kuinka kovasti haluaa, ei pysty muuttamaan mitään; algoritmi tuottaa yksiselitteisen tuloksen. Pohjimmiltaan käyttäjä tallentaa tuloksen, mutta ei tiedä sitä ennen kuin oraakkeli julkaisee sen. Osoittautuu, että et voi luottaa oraakkeliin ollenkaan, mutta tarkista sen työn tulos. Sitten, jos varmennus onnistuu, tällaista allekirjoitusta voidaan pitää näennäissatunnaisen luvun entropian lähteenä.

Waves-lohkoketjualusta käyttää allekirjoitusjärjestelmää EdDSA вариант Ed25519. Tässä mallissa allekirjoitus koostuu arvoista R ja S, joissa R riippuu satunnaisesta arvosta ja S lasketaan allekirjoitettavan viestin, yksityisen avaimen ja saman satunnaisluvun perusteella kuin R. Osoittautuu, että samalle ei ole ainutlaatuista riippuvuutta Käyttäjäviestillä on monia kelvollisia allekirjoituksia.

On selvää, että puhtaassa muodossaan tällaista allekirjoitusta ei voida käyttää näennäissatunnaisten lukujen lähteenä, koska se on ei-deterministinen ja siksi oraakkelin voi helposti manipuloida sitä.

Mutta kuten kävi ilmi, se on itse asiassa mahdollista tehdä deterministiseksi.

Minulla oli suuria toiveita verifable random function (VRF), mutta tutkittuani laitteistoa jouduin luopumaan tästä vaihtoehdosta. Vaikka VRF tarjoaa deterministisen version allekirjoituksesta ja sen todisteesta, algoritmissa on outo paikka, joka avaa mustan aukon oraakkelin manipulointia varten. Nimittäin kun lasketaan k:n arvoa (5.1-osio) käytetään yksityistä avainta, joka jää käyttäjälle tuntemattomaksi, mikä tarkoittaa, että käyttäjä ei voi varmistaa k:n laskennan oikeellisuutta, mikä tarkoittaa, että oraakkeli voi käyttää mitä tahansa tarvitsemaansa k:n arvoa ja samalla ylläpitää vastaavuustietokantaa k:stä ja allekirjoitetuista tiedoista, jotta VRF:n näkökulmasta oikea tulos voidaan aina laskea uudelleen. Jos näet VRF-pohjaisen piirustuksen paljastamatta yksityistä avainta, voit olla fiksu: ilmoittaa tarve joko paljastaa avain tai jättää se pois k:n laskennasta, niin yksityinen avain paljastaa itsensä automaattisesti, kun ensimmäinen allekirjoitus ilmestyy . Yleensä, kuten jo mainittiin, outo järjestelmä satunnaiselle oraakkelille.

Pienen pohdinnan ja paikallisten analyytikoiden tuen saamisen jälkeen VECRO-työsuunnitelma syntyi.

VECRO on lyhenne sanoista Verifiable Elliptic Curve Random Oracle, joka venäjäksi tarkoittaa todennettavissa olevaa satunnaista oraakkelia elliptisillä käyrillä.

Kaikki osoittautui melko yksinkertaiseksi; determinismin saavuttamiseksi sinun on korjattava R:n arvo ennen kuin allekirjoitettava viesti tulee näkyviin. Jos R on sitoutunut ja on osa allekirjoitettavaa viestiä, mikä edelleen varmistaa, että R on sitoutunut allekirjoitettavassa viestissä, S:n arvo määräytyy yksiselitteisesti käyttäjän viestillä ja sitä voidaan siksi käyttää näennäissatunnaisten numeroiden lähteenä.

Tällaisessa järjestelmässä ei ole väliä kuinka R on kiinnitetty; tämä on edelleen oraakkelin vastuulla. On tärkeää, että käyttäjä määrittää S:n yksiselitteisesti, mutta sen arvoa ei tunneta ennen kuin oraakkeli julkaisee sen. Kaikki mitä halusimme!

Kiinteästä R:stä puhuttaessa, huomioi se uudelleen käytetty R Allekirjoittaessaan erilaisia ​​viestejä, se paljastaa yksilöllisesti yksityisen avaimen EdDSA-järjestelmässä. Oraakkelin omistajan kannalta on erittäin tärkeää poistaa mahdollisuus käyttää R:tä uudelleen erilaisten käyttäjäviestien allekirjoittamiseen. Toisin sanoen minkä tahansa manipuloinnin tai yhteistoiminnan yhteydessä oraakkeli on aina vaarassa menettää yksityisen avaimensa.

Kaiken kaikkiaan oraakkelin on tarjottava käyttäjille kaksi toimintoa: alustus, joka kiinnittää arvon R, ja allekirjoitus, joka palauttaa arvon S. Tässä tapauksessa pari R, S on tavallinen tarkistettava allekirjoitus käyttäjäsanomassa, joka sisältää kiinteän viestin. arvo R ja mielivaltaiset käyttäjätiedot.

Voidaan väittää, että tämä lohkoketjun järjestelmä ei ole muuta kuin tavallinen commit-expand -järjestelmä. Pohjimmiltaan kyllä, se on hän. Mutta on useita vivahteita. Ensinnäkin, oraakkeli toimii aina samalla avaimella kaikissa toiminnoissa, esimerkiksi tätä on kätevä käyttää sopimuksissa. Toiseksi on olemassa riski, että oraakkeli menettää yksityisen avaimen, jos se käyttäytyy väärin, esimerkiksi oraakkelin avulla voit tehdä näytteitä tuloksesta, jolloin riittää, että teet vain kaksi testiä saadaksesi selville yksityisen avaimen ja saada täyden pääsy lompakkoon. Kolmanneksi allekirjoitus, joka on natiivisti todennettavissa lohkoketjussa ja joka on satunnaisuuden lähde, on kaunis.

Päässäni pyöri kuusi kuukautta ideaa toteuttamisesta, kunnes lopulta motivaatio ilmestyi muotoon Waves Labsin apuraha. Suuri apuraha tuo mukanaan suuren vastuun, joten projekti on siellä!

Реализация

Eli tässä projektissa VECRO otettiin käyttöön Waves-lohkoketjussa pyyntö-vastaustilassa käyttämällä siirtotapahtumia käyttäjän ja oraakkelin välillä. Samanaikaisesti oracle-tilille asennetaan komentosarja, joka ohjaa työtä tiukasti yllä kuvatun logiikan mukaisesti. Oracle-tapahtumat tarkistetaan ja koko käyttäjän vuorovaikutusketju palautetaan. Kaikki neljä tapahtumaa ovat mukana lopullisen arvon varmentamisessa; älykäs sopimus yhdistää ne tiukan varmistussäikeen avulla, joka tarkistaa kaikki arvot askel askeleelta eikä jätä tilaa millekään manipuloinnille.

Jälleen kerran, laittaa se sivuun ja selventää sitä. Oraakkeli ei toimi vain ehdotetun järjestelmän mukaisesti. Sen työtä hallitsevat täysin lohkoketjutasolla vakiintuneet tiukasti älykkäällä sopimuksella. Astu vasemmalle ja kauppa ei yksinkertaisesti mene läpi. Joten jos tapahtuma sisältyy lohkoketjuun, käyttäjän ei tarvitse edes tarkistaa mitään; sadat verkkosolmut ovat jo tarkistaneet kaiken hänen puolestaan.

Tällä hetkellä Wavesin pääverkossa on käynnissä yksi VECRO (voit ajaa omaa, se ei ole vaikeaa, vain katso konfigurointiesimerkkiä). Nykyinen koodi toimii PHP:ssä (on WavesKit, josta Kerroin sinulle aiemmin).

Jotta voit käyttää oraakkelipalvelua, sinun on:

  • Korjaa R;
    • Lähetä vähintään 0.005 Waves osoitteeseen oracle alias init@vecr;
    • Vastaanota R-koodi liitekenttään siirrettäessä 1 R-vecr-tunnus oraakkelilta käyttäjälle;
  • Hanki allekirjoitus;
    • Lähetä vähintään 0.005 Waves oraakkelin aliakseen random@vecr ja TÄYTYY ilmoittaa liitekenttään aiemmin vastaanotettu R-koodi ja muut käyttäjätiedot;
    • Vastaanota S-koodi liitekenttään siirrettäessä 1 S-vecr token oraakkelilta käyttäjälle;
  • Käytä S-koodia pseudosatunnaislukujen lähteenä.

Nykyisen toteutuksen vivahteet:

  • Oraakkelille lähetettyjä aaltoja käytetään palkkiona käyttäjälle palautuksesta, enintään 1 Waveen;
  • R-koodi on 'R'-merkin tavun ja 32-tavuisen base58-koodatun R-arvon ketjutus;
  • Liitteen R-koodin tulee olla ensimmäinen, käyttäjätiedot tulevat R-koodin jälkeen;
  • S-koodi on S-merkin tavun ja S:n 32-tavuisen base58-koodatun arvon ketjutus;
  • S on modulo-jaon tulos, joten et voi käyttää S:tä täydellisenä 256-bittisenä näennäissatunnaisena numerona (tätä lukua voidaan pitää enintään 252-bittisenä näennäissatunnaisena numerona);
  • Yksinkertaisin vaihtoehto on käyttää S-koodin tiivistettä pseudosatunnaislukuna.

Esimerkki S-koodin vastaanottamisesta:

Teknisestä näkökulmasta oraakkeli on täysin valmis työhön, voit käyttää sitä turvallisesti. Keskivertokäyttäjän käytön kannalta kätevä graafinen käyttöliittymä puuttuu, tämä joutuu odottamaan.

Vastaan ​​mielelläni kysymyksiin ja otan vastaan ​​kommentteja, kiitos.

Lähde: will.com

Lisää kommentti