NejauÅ”s orākuls, kura pamatā ir digitālais paraksts blokķēdē

No idejas lÄ«dz realizācijai: modificējam esoÅ”o eliptiskās lÄ«knes digitālā paraksta shēmu, lai tā bÅ«tu deterministiska, un uz tās pamata nodroÅ”inām funkcijas blokķēdes ietvaros pārbaudāmu pseidogadÄ«juma skaitļu iegÅ«Å”anai.

NejauÅ”s orākuls, kura pamatā ir digitālais paraksts blokķēdē

Ideja

2018. gada rudenī iekļāva Waves blokķēdi aktivizēti pirmie viedie līgumi, uzreiz radās jautājums par iespēju iegūt pseidogadījuma skaitļikam var uzticēties.

Pārdomājot Å”o jautājumu, es beidzot nonācu pie secinājuma: jebkura blokķēde ir Ŕūna; slēgtā sistēmā nav iespējams iegÅ«t uzticamu entropijas avotu.

Bet viena ideja man tomēr patika: ja nejauÅ”s orākuls parakstÄ«s lietotāja datus ar deterministisku algoritmu, tad lietotājs vienmēr varēs pārbaudÄ«t Ŕādu parakstu, izmantojot publisko atslēgu, un bÅ«s pārliecināts, ka iegÅ«tā vērtÄ«ba ir unikāla. Orākuls, lai cik ļoti tas gribētos, neko mainÄ«t nespēj, algoritms rada nepārprotamu rezultātu. BÅ«tÄ«bā lietotājs ieraksta rezultātu, bet nezina to, kamēr orākuls to nepublicē. Izrādās, ka orākulam var neuzticēties nemaz, bet gan pārbaudÄ«t tā darba rezultātu. Tad veiksmÄ«gas verifikācijas gadÄ«jumā Ŕādu parakstu var uzskatÄ«t par pseidogadÄ«juma skaitļa entropijas avotu.

Waves blokķēdes platforma izmanto parakstu shēmu EdDSA iespēja Ed25519. Å ajā shēmā paraksts sastāv no vērtÄ«bām R un S, kur R ir atkarÄ«gs no nejauÅ”as vērtÄ«bas, un S tiek aprēķināts, pamatojoties uz parakstāmo ziņojumu, privāto atslēgu un to paÅ”u nejauÅ”o skaitli kā R. Izrādās, ka nav unikālas atkarÄ«bas vienam un tam paÅ”am Lietotāja ziņojumam ir daudz derÄ«gu parakstu.

AcÄ«mredzot tÄ«rā veidā Ŕādu parakstu nevar izmantot kā pseidogadÄ«juma skaitļu avotu, jo tas nav deterministisks un tāpēc orākuls ar to var viegli manipulēt.

Bet, kā izrādījās, to faktiski ir iespējams padarīt deterministisku.

Man bija lielas cerÄ«bas Pārbaudāma izlases funkcija (VRF), bet pēc aparatÅ«ras izpētes man nācās atteikties no Ŕīs iespējas. Lai gan VRF piedāvā deterministisku paraksta versiju un tā pierādÄ«jumu, algoritmā ir dÄ«vaina vieta, kas atver melno caurumu manipulācijām ar orākulu. Proti, aprēķinot k vērtÄ«bu (5.1. sadaļa) tiek izmantota privātā atslēga, kas lietotājam paliek nezināma, kas nozÄ«mē, ka lietotājs nevar pārbaudÄ«t k aprēķina pareizÄ«bu, kas nozÄ«mē, ka orākuls var izmantot jebkuru k vērtÄ«bu un tajā paŔā laikā uzturēt atbilstÄ«bas datu bāzi. no k un parakstÄ«tajiem datiem, lai vienmēr varētu pārrēķināt pareizo rezultātu no VRF viedokļa. Ja redzat zÄ«mējumu, kas balstÄ«ts uz VRF, neatklājot privāto atslēgu, varat bÅ«t gudrs: norādiet, ka atslēga ir jāatklāj, vai arÄ« izslēdz to no k aprēķina, tad privātā atslēga automātiski atklāsies, kad parādÄ«sies pirmais paraksts. . Vispār, kā jau minēts, dÄ«vaina shēma nejauÅ”am orākulam.

Pēc nelielas pārdomāŔanas un vietējo analÄ«tiÄ·u atbalsta saņemÅ”anas radās VECRO darba shēma.

VECRO ir saÄ«sinājums vārdam Verifificable Eliliptic Curve Random Oracle, kas krievu valodā nozÄ«mē pārbaudāms nejauÅ”s orākuls eliptiskajās lÄ«knēs.

Viss izrādÄ«jās diezgan vienkārÅ”i; lai panāktu determinismu, pirms parakstāmā ziņojuma parādÄ«Å”anās ir jāfiksē R vērtÄ«ba. Ja R ir piesaistÄ«ts un ir daļa no parakstÄ«tā ziņojuma, kas vēl vairāk nodroÅ”ina, ka R ir parakstÄ«ta ziņojumā, S vērtÄ«bu unikāli nosaka lietotāja ziņojums, un tāpēc to var izmantot kā pseidogadÄ«juma skaitļu avotu.

Šādā shēmā nav nozīmes tam, kā R tiek fiksēts; tas paliek orākula atbildība. Ir svarīgi, lai S būtu unikāli noteikts lietotājs, bet tā vērtība nav zināma, kamēr orākuls to nepublicē. Viss, ko gribējām!

Runājot par fiksēto R, ņemiet vērā to atkārtoti izmantots R parakstot dažādus ziņojumus, tas unikāli atklāj privāto atslēgu EdDSA shēmā. Orākula Ä«paÅ”niekam kļūst ārkārtÄ«gi svarÄ«gi novērst iespēju atkārtoti izmantot R dažādu lietotāju ziņojumu parakstÄ«Å”anai. Tas nozÄ«mē, ka ar jebkuru manipulāciju vai slepenu vienoÅ”anos orākuls vienmēr riskēs pazaudēt savu privāto atslēgu.

Kopumā orākulam ir jānodroÅ”ina lietotājiem divas funkcijas: inicializācija, kas fiksē vērtÄ«bu R, un paraksts, kas atgriež vērtÄ«bu S. Å ajā gadÄ«jumā pāris R, S ir parastais pārbaudāms lietotāja ziņojuma paraksts, kas satur fiksētu. vērtÄ«ba R un patvaļīgi lietotāja dati.

Var apgalvot, ka Ŕī blokķēdes shēma nav nekas vairāk kā parasta apņemÅ”anās-paplaÅ”ināŔanas shēma. BÅ«tÄ«bā jā, tā ir viņa. Bet ir vairākas nianses. Pirmkārt, orākuls vienmēr darbojas ar vienu un to paÅ”u atslēgu visās darbÄ«bās, piemēram, to ir ērti izmantot lÄ«gumos. Otrkārt, pastāv risks, ka orākuls pazaudēs privāto atslēgu, ja tas uzvedas nepareizi, piemēram, orākuls ļauj veikt rezultāta paraugus, tad pietiek veikt tikai divus testus, lai noskaidrotu privāto atslēgu un iegÅ«tu pilnu piekļuvi makam. TreÅ”kārt, paraksts, kas ir sākotnēji pārbaudāms blokķēdē un ir nejauŔības avots, ir skaists.

SeÅ”us mēneÅ”us galvā virmoja ideja par realizāciju, lÄ«dz beidzot formā parādÄ«jās motivācija dotācija no Waves Labs. Ar lielu dotāciju nāk liela atbildÄ«ba, tāpēc projekts bÅ«s klāt!

IevieŔana

Tātad Å”ajā projektā VECRO tika ieviests Waves blokķēdē pieprasÄ«juma-atbildes režīmā, izmantojot pārsÅ«tÄ«Å”anas darÄ«jumus starp lietotāju un orākulu. Tajā paŔā laikā oracle kontā tiek instalēts skripts, kas kontrolē darbu stingri saskaņā ar iepriekÅ” aprakstÄ«to loÄ£iku. Oracle darÄ«jumi tiek pārbaudÄ«ti un tiek atjaunota visa lietotāja mijiedarbÄ«bas ķēde. Visi četri darÄ«jumi ir iesaistÄ«ti galÄ«gās vērtÄ«bas pārbaudē; viedais lÄ«gums tos savieno ar stingru pārbaudes pavedienu, pārbaudot visas vērtÄ«bas soli pa solim un neatstājot vietu nekādām manipulācijām.

Kārtējo reizi nolikt malā un padarÄ«t skaidrāku. Orākuls nedarbojas tikai saskaņā ar piedāvāto shēmu. Tās darbu blokķēdes lÄ«menÄ« pilnÄ«bā kontrolē izveidotais cieÅ”i ar gudru lÄ«gumu. Pakāpieties pa kreisi, un darÄ«jums vienkārÅ”i nenotiks. Tātad, ja darÄ«jums ir iekļauts blokķēdē, lietotājam pat nekas nav jāpārbauda; simtiem tÄ«kla mezglu jau visu ir pārbaudÄ«juÅ”i viņa vietā.

PaÅ”laik Waves tÄ«klā darbojas viens VECRO (jÅ«s varat palaist savu, tas nav grÅ«ti, vienkārÅ”i apskatiet konfigurācijas piemēru). PaÅ”reizējais kods darbojas PHP (ieslēgts WavesKit, par kuru Es tev teicu agrāk).

Lai izmantotu orākla pakalpojumu, jums ir:

  • Labot R;
    • NosÅ«tiet vismaz 0.005 Waves uz oracle alias init@vecr;
    • Saņemiet R-kodu pielikuma laukā, pārsÅ«tot 1 R-vecr marÄ·ieri no orākula lietotājam;
  • IegÅ«stiet parakstu;
    • NosÅ«tiet vismaz 0.005 Waves uz orākula alias random@vecr, kā arÄ« OBLIGĀTI jānorāda iepriekÅ” saņemtais R-kods un papildus lietotāja dati pielikuma laukā;
    • Saņemt S-kodu pielikuma laukā, pārsÅ«tot 1 S-vecr marÄ·ieri no orākula lietotājam;
  • Izmantojiet S-kodu kā pseidogadÄ«juma skaitļa avotu.

PaÅ”reizējās ievieÅ”anas nianses:

  • Orākulam nosÅ«tÄ«tie viļņi tiek izmantoti kā komisijas maksa par atgrieÅ”anas darÄ«jumu lietotājam, maksimāli lÄ«dz 1 Wave;
  • R-kods ir 'R' rakstzÄ«mes baita un 32 baitu bāzes58 kodētas R vērtÄ«bas savienoÅ”ana;
  • R-kodam pielikumā jābÅ«t pirmajam, lietotāja dati nāk pēc R-koda;
  • S-kods ir rakstzÄ«mes "S" baita un 32 baitu bāzes58 kodētas S vērtÄ«bas savienoÅ”ana;
  • S ir modulo dalÄ«Å”anas rezultāts, tāpēc S nevar izmantot kā pilnu 256 bitu pseidogadÄ«juma skaitli (Å”o skaitli var uzskatÄ«t par maksimāli 252 bitu pseidogadÄ«juma skaitli);
  • VienkārŔākā iespēja ir izmantot S-koda hash kā pseidogadÄ«juma skaitli.

S-koda saņemÅ”anas piemērs:

No tehniskā viedokļa orākuls ir pilnÄ«bā gatavs darbam, to var droÅ”i lietot. No vidusmēra lietotāja lietoÅ”anas viedokļa trÅ«kst ērta grafiskā interfeisa, tas bÅ«s jāpagaida.

Es labprāt atbildÄ“Å”u uz jautājumiem un pieņemÅ”u komentārus, paldies.

Avots: www.habr.com

Pievieno komentāru