Náhodný oracle na základe digitálneho podpisu v blockchaine

Od myšlienky k realizácii: modifikujeme existujúci systém digitálneho podpisu na eliptických krivkách, aby bol deterministický, a na jeho základe poskytujeme funkcie na získavanie overiteľných pseudo-náhodných čísel v rámci blockchainu.

Náhodný oracle na základe digitálneho podpisu v blockchaine

Myšlienka

Na jeseň 2018 boli v blockchaine Waves aktivované prvé smart kontrakty, okamžite sa objavila otázka o možnosti získania pseudo-náhodných čísel, ktorým môžeme dôverovať.

Keď som sa nad touto otázkou zamýšľal, konečne som dospel k záveru: každý blockchain je celok, získať dôveryhodný zdroj entropie v uzavretom systéme je nemožné.

Ale jedna myšlienka ma predsa oslovila: ak náhodný orákul bude robiť podpis používateľských údajov deterministickým algoritmom, potom si používateľ vždy bude môcť overiť takýto podpis pomocou verejného kľúča a bude si istý, že získaná hodnota je jedinečná. Orákul, akokoľvek sa snaží, nemôže nič zmeniť, algoritmus dáva jednoznačný výsledok. V podstate používateľ fixuje výsledok, ale nevie ho, pokým ho orákul nepublikuje. Ukazuje sa, že im môžete vôbec nedôverovať, ale overiť výsledok jeho práce. Potom, v prípade úspešného overenia, môže byť takýto podpis považovaný za zdroj entropie pre pseudo-náhodné číslo.

V blockchainovej platforme Waves sa používa schéma podpisu EdDSA variantu Ed25519. V tejto schéme podpis pozostáva z hodnôt R a S, kde R závisí od náhodnej hodnoty a S sa vypočíta na základe podpisovaných správ, súkromného kľúča a tej istej náhodnej hodnoty ako R. Ukazuje sa, že neexistuje jednoznačná závislosť, pre rovnakú používateľskú správu existuje množstvo platných podpisov.

Je zrejmé, že v čistej forme taký podpis nemožno použiť ako zdroj pseudo-náhodných čísel, pretože je nedeterministický a teda môže byť ľahko manipulovaný orákulom.

Ale, ako sa ukázalo, je možné ho skutočne spraviť deterministickým.

Veľké nádeje som mal na overiteľnú náhodnú funkciu (VRF), ale po preskúmaní technických detailov bolo nutné od tohto variantu upustiť. Hoci VRF ponúka deterministickú variantu podpisu a jeho dôkazov, v algoritme sa nachádza podivné miesto, ktoré otvára čiernu dieru pre manipulácie oracle. A konkrétne, pri výpočte hodnoty k (časť 5.1) sa používa tajný kľúč, ktorý zostáva neznámy používateľovi, čo znamená, že používateľ nemôže overiť správnosť výpočtu k, a teda oracle môže použiť akúkoľvek požadovanú hodnotu k a zároveň viesť databázu zhody hodnoty k a podpisovaných údajov, aby vždy mohol opätovne vypočítať správny výsledok z pohľadu VRF. Uvidíte žrebovanie na základe VRF bez odhalenia tajného kľúča, môžete rozumovať: naznačiť potrebu alebo odhaliť kľúč, alebo vylúčiť ho z výpočtu k, inak sa tajný kľúč automaticky odhalí pri objavení sa prvého podpisu. V každom prípade, ako už bolo povedané, podivný systém pre náhodného oracla.

Po chvíli premýšľania a získaní podpory od miestnych analytikov sa zrodila schéma fungovania VECRO.

VECRO je skratka pre Verifiable Elliptic Curve Random Oracle, čo v slovenčine znamená overiteľný náhodný oracle na eliptických krivkách.

Všetko sa ukázalo byť celkom jednoduché, na dosiahnutie determinističnosti je potrebné stanoviť hodnotu R pred objavením sa podpisovaného odkazu. Ak je R stanovené a je súčasťou podpisovaného odkazu, čo navyše zaručuje fixáciu R v samotnom podpisovanom odkaze, hodnota S je jednoznačne určená používateľským odkazom a teda môže byť použitá ako zdroj pre pseudonáhodné čísla.

V takejto schéme je jedno, akým spôsobom je R stanovené, to zostáva v zóne zodpovednosti oracla. Dôležité je, že S je jednoznačne určená používateľom, ale jej hodnota je neznáma, kým ju oracle nezverejní. Presne ako sme chceli!

Keď hovoríme o stanovenom R, venujte pozornosť tomu, že opakované použitie R Pri podpisovaní rôznych správ jednoznačne odhaľuje skrytý kľúč v schéme EdDSA. Pre vlastníka orákula je mimoriadne dôležité vylúčiť možnosť opätovného použitia R na podpisovanie rôznych správ používateľa. Inými slovami, pri akýchkoľvek manipuláciách alebo sprisahaní orákul vždy riskuje stratu svojho skrytého kľúča.

Celkovo, orákul musí používateľom poskytovať dve funkcie: inicializáciu, ktorá zaznamenáva hodnotu R, a podpis, ktorý vracia hodnotu S. Pri tom pár R, S predstavuje bežne overiteľný podpis používateľskej správy obsahujúcej fixnú hodnotu R a ľubovoľné dáta používateľa.

Môže byť námietka, že táto schéma pre blockchain nie je nič iné ako bežná schéma commit-odhalenie.V podstate, áno, je to ona. Ale sú tu niektoré nuansy. Po prvé, orákul stále pracuje s tým istým kľúčom vo všetkých operáciách, napríklad je to pohodlné na používanie v zmluvách. Po druhé, existuje riziko straty skrytého kľúča orákula pri nesprávnom správaní, napríklad orákul umožňuje robiť vzorky výsledku, potom stačí urobiť iba dve vzorky, aby sa zistil skrytý kľúč a získal sa úplný prístup k peňaženke. Po tretie, nátivne overiteľný v blockchaine podpis, ktorý je zdrojom náhodnosti - to je krásne.

Pol roka sa myšlienka realizácie v hlave objavovala, kým konečne nevznikla motivácia v podobe grantu od Waves Labs.S veľkým grantom prichádza veľká zodpovednosť, takže projekt má existovať!

Implementácia

Takže v tomto projekte VECRO bol implementovaný na blockchaine Waves v režime požiadavka-odpoveď pomocou transférov medzi používateľom a orákulom. Pri tom je na účte orákula nainštalovaný skript, ktorý prísne kontroluje prácu v súlade s vyššie popísanou logikou. Transakcie orákula prechádzajú kontrolou s obnovením celej reťaze interakcie s používateľom. Pri kontrole konečnej hodnoty sa zúčastňujú všetky štyri transakcie, smart kontrakt ich nanáša na prísne overovaciu niť, krok za krokom kontrolujúc všetky hodnoty a nezanecháva priestor na akékoľvek manipulácie.

Ešte raz, aby sa to uložilo a bolo jasnejšie. Orákul nepracuje jednoducho podľa navrhnutej schémy. Jeho práca je plne kontrolovaná na úrovni blockchainu. natrvalo smart kontraktom. Krok doľava a transakcia jednoducho neprejde. Takže ak transakcia bola zahrnutá v blockchaine, používateľ nemusí ani nič kontrolovať, za neho to už skontrolovalo stovky uzlov siete.

V súčasnosti je v hlavnej sieti Waves spustený jeden VECRO (môžete spustiť svoj vlastný, nie je to ťažké, stačí pozrieť sa na príklad konfigurácie). Aktuálny kód beží na PHP (na WavesKit, o ktorom som hovoril skôr).

Aby ste mohli využiť službu orácle, je potrebné:

  • Zafixovať R;
    • Poslať minimálne 0.005 Waves na alias orácle init@vecr;
    • Získať R-kód v poli priloženia pri transfere 1 R-vecr tokena od orácle používateľovi;
  • Získať podpis;
    • Poslať minimálne 0.005 Waves na alias orácle random@vecr, a navyše POVINNE uviesť v poli priloženia predtým získaný R-kód a ďalšie používateľské údaje;
    • Získať S-kód v poli priloženia pri transfere 1 S-vecr tokena od orácle používateľovi;
  • Použiť S-kód ako zdroj pseudonáhodného čísla.

Nuansy aktuálnej implementácie:

  • Odoslané orácle Waves sa používajú ako poplatok za spätnú transakciu používateľovi, až do maximálnych 1 Waves;
  • R-kód — je to zreťazenie bytu symbolu ‘R’ a 32-bytného hodnoty R v kódovaní base58;
  • R-kód v priložení musí byť prvý, používateľské údaje prichádzajú po R-kóde;
  • S-kód — je to zreťazenie bytu symbolu ‘S’ a 32-bytného hodnoty S v kódovaní base58;
  • S je výsledkom delenia podľa modulu, preto nie je možné použiť S ako plne funkčné 256-bitové pseudonáhodné číslo (toto číslo môže byť považované maximálne za 252-bitové pseudonáhodné číslo);
  • Najjednoduchšia varianta — použiť ako pseudonáhodné číslo hash od S-kódu.

Príklad získania S-kódu:

Z technického hľadiska je orácle úplne pripravené na prácu, môžete ho pokojne používať. Z pohľadu bežného používateľa chýba pohodlné grafické rozhranie, na to si budeme musieť počkať.

Rád odpoviem na otázky a prijmem pripomienky, ďakujem.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster