Oracle casuale basatu nantu à a firma digitale in blockchain

Da l'idea à l'implementazione: mudificà u schema di firma digitale di curva ellittica esistente in modu chì hè deterministicu, è basatu annantu à questu furnimu funzioni per ottene numeri pseudo-aleatori verificabili in a blockchain.

Oracle casuale basatu nantu à a firma digitale in blockchain

Idea

In a caduta di u 2018, u blockchain Waves inclusu i primi cuntratti intelligenti attivati, a quistione subitu subitu nantu à a pussibilità di ottene numeri pseudo-aleatoriuchì pudete fidà.

Puzzling over this question, finalmente ghjuntu à a cunclusione: ogni blockchain hè una cellula; hè impussibile di ottene una fonte di entropia di fiducia in un sistema chjusu.

Ma mi piacia sempre una idea: si oraculu casuale firmà i dati di l'utilizatori cù un algoritmu deterministicu, allora l'utilizatore serà sempre capace di verificà una tale firma cù a chjave publica, è serà sicuru chì u valore risultatu hè unicu. L'oraculu, ùn importa quant'ellu vole, ùn hè micca capaci di cambià nunda; l'algoritmu pruduce un risultatu senza ambiguità. Essenzialmente, l'utilizatore registra u risultatu, ma ùn u cunnosci micca finu à chì l'oraculu u publica. Ci hè chì ùn pudete micca fiducia in l'oraculu, ma verificate u risultatu di u so travagliu. Allora, in casu di verificazione riescita, una tale firma pò esse cunsiderata una fonte d'entropia per un numeru pseudoaleatoriu.

A piattaforma di blockchain Waves usa un schema di firma EdDSA opzione Ed 25519. In questu schema, a firma hè custituita da i valori R è S, induve R dipende da un valore aleatoriu, è S hè calculatu basatu annantu à u messagiu firmatu, a chjave privata è u listessu numeru aleatoriu cum'è R. Risulta chì ùn ci hè micca una dependenza unica per u listessu Ci hè parechje firme valide per un missaghju d'utilizatore.

Ovviamente, in a so forma pura, una tale firma ùn pò esse usata cum'è una fonte di numeri pseudo-aleatoriu, postu chì ùn hè micca deterministicu è, per quessa, pò esse facilmente manipulatu da l'oraculu.

Ma, cum'è s'hè risultatu, hè veramente pussibule di fà deterministicu.

Aghju avutu grandi speranze funzione aleatoria verificabile (VRF), ma dopu avè studiatu u hardware, aghju avutu abbandunà sta opzione. Ancu VRF offre una versione deterministica di a firma è a so prova, ci hè un locu stranu in l'algoritmu chì apre un pirtusu neru per a manipulazione di l'oraculu. À savoir, quand on calcule la valeur de k (sezione 5.1) una chjave privata hè aduprata, chì resta scunnisciutu per l'utilizatore, chì significa chì l'utilizatore ùn pò micca verificà a correttezza di u calculu di k, chì significa chì l'oraculu pò utilizà qualsiasi valore di k hà bisognu è à u stessu tempu mantene una basa di dati di currispundenza. di k è i dati firmati in ordine per esse sempre in gradu di re-compute u risultatu currettu da u puntu di vista di VRF . Se vi vede un disegnu basatu in VRF senza divulgà a chjave privata, pudete esse intelligente: indicà a necessità di revelà a chjave, o escludelu da u calculu di k, allora a chjave privata si revelà automaticamente quandu a prima firma pare. . In generale, cum'è digià dettu, un schema stranu per un oraculu aleatoriu.

Dopu à un pocu di pensamentu è accugliendu u sustegnu di l'analista lucali, u schema di travagliu VECRO hè natu.

VECRO hè l'abbreviazione di Verifiable Elliptic Curve Random Oracle, chì in russo significa oraculu aleatoriu verificabile nantu à curve ellittiche.

Tuttu hè diventatu abbastanza simplice; per ottene u determinismu, avete bisognu di riparà u valore di R prima chì u messagiu per esse firmatu apparisce. Se R hè impegnatu è face parte di u missaghju chì hè firmatu, chì assicura ancu chì R hè impegnatu in u missaghju firmatu, u valore di S hè unicu determinatu da u missaghju di l'utilizatore è pò dunque esse usatu cum'è fonte per numeri pseudoaleatoriu.

In un tali schema, ùn importa micca cumu R hè fissatu; questu ferma a rispunsabilità di l'oraculu. Hè impurtante chì S hè unicu determinatu da l'utilizatore, ma u so valore hè scunnisciutu finu à chì l'oraculu u publica. Tuttu ciò chì vulemu!

Parlendu di R fissu, nutate chì riusu R quandu firmate diversi messagi, revela in modu unicu a chjave privata in u schema EdDSA. Diventa estremamente impurtante per u pruprietariu di l'oraculu per eliminà a pussibilità di riutilizà R per firmà diversi messagi d'utilizatori. Questu hè, cù qualsiasi manipulazione o collusione, l'oraculu risicherà sempre di perde a so chjave privata.

In u tutale, l'oraculu deve furnisce l'utilizatori cù duie funzioni: inizializazione, chì fissa u valore R, è firma, chì rende u valore S. In questu casu, u paru R, S hè a firma verificable abituale di un missaghju d'utilizatore chì cuntene un fissu. valore R è dati di l'utilizatori arbitrarie.

Pò esse sustinutu chì stu schema per u blockchain ùn hè nunda più cà ordinariu schema commit-expand. Essenzialmente, sì, hè ella. Ma ci sò parechje sfumature. Prima, l'oraculu travaglia sempre cù a listessa chjave in tutte l'operazioni, per esempiu, questu hè cunvenutu per utilizà in cuntratti. Siconda, ci hè u risicu di l'oraculu perde a chjave privata s'ellu si cumporta in modu incorrectu, per esempiu, l'oraculu permette di fà mostre di u risultatu, allora hè abbastanza per fà solu duie teste per scopre a chjave privata è guadagnà piena. accessu à a billetera. In terzu, una firma chì hè verificabile nativamente nantu à u blockchain è hè una fonte di casualità hè bella.

Per sei mesi l'idea di implementazione simmered in a mo testa, finu à chì finalmente a motivazione apparsu in a forma cuncessione da Waves Labs. Cù una grande cuncessione vene una grande rispunsabilità, cusì u prughjettu serà quì!

Реализация

Cusì, in stu prughjettu VECRO hè stata implementata nantu à u blockchain Waves in modu di dumanda-risposta utilizendu transazzione di trasferimentu trà l'utilizatore è l'oraculu. À u listessu tempu, un script hè stallatu nantu à u cuntu di l'oraculu chì cuntrolla u travagliu strettamente in cunfurmità cù a logica descritta sopra. E transazzione Oracle sò verificate è tutta a catena di interazzione di l'utilizatori hè restaurata. Tutte e quattru transazzioni sò implicati in a verificazione di u valore finali; u cuntrattu intelligente li stringe cù un filu di verificazione strettu, cuntrollendu tutti i valori passu à passu è ùn lascianu spaziu per alcuna manipulazione.

Una volta di più, per mette da parte è rende più chjaru. L'oraculu ùn funziona micca solu secondu u schema prupostu. U so travagliu hè cumplettamente cuntrullatu à u livellu bluccatu da u stabilitu strettu cù un cuntrattu intelligente. Passà à manca è a transazzione simpricimenti ùn passerà. Allora, se una transazzione hè inclusa in u blockchain, l'utilizatore ùn hà mancu bisognu di verificà nunda; centinaie di nodi di rete anu digià verificatu tuttu per ellu.

Attualmente, ci hè un VECRO chì funziona nantu à a rete principale di Waves (pudete eseguisce u vostru propiu, ùn hè micca difficiule, solu fighjate à l'esempiu di cunfigurazione). U codice attuale funziona in PHP (on WavesKit, circa chì Vi dicu prima).

Per utilizà u serviziu di l'oraculu, duvete:

  • Fix R;
    • Mandate almenu 0.005 Waves à oracle alias init@vecr;
    • Riceve u codice R in u campu di l'attache in u trasferimentu di 1 R-vecr token da l'oraculu à l'utilizatore;
  • Pigliate una firma;
    • Mandate almenu 0.005 Waves à l'oraculu alias random@vecr, è ancu DEVE indicà u codice R prima ricevutu è dati di l'utilizatori supplementari in u campu di attache;
    • Riceve u codice S in u campu di l'attache in u trasferimentu di 1 S-vecr token da l'oraculu à l'utilizatore;
  • Aduprà u codice S cum'è una fonte di numeru pseudo-aleatoriu.

Sfumature di l'implementazione attuale:

  • Onde mandate à l'oraculu sò usati cum'è una cumissioni per a transazzione di ritornu à l'utilizatori, finu à un massimu di 1 Waves;
  • R-code hè a concatenazione di un byte di u caratteru "R" è un valore R di 32 byte codificati in base58;
  • R-code in attachment deve esse prima, dati utilizatori vene dopu R-code;
  • S-code hè a concatenazione di un byte di u caratteru "S" è un valore di 32 byte codificati in base58 di S;
  • S hè u risultatu di a divisione modulo, perchè ùn pudete micca aduprà S cum'è un numeru pseudo-aleatoriu cumpletu di 256-bit (stu numeru pò esse cunsideratu un massimu di 252-bit pseudorandom number);
  • L'opzione più simplice hè di utilizà l'hash S-code cum'è un numeru pseudo-aleatoriu.

Esempiu di riceve S-code:

Da un puntu di vista tecnicu, l'oraculu hè cumplettamente prontu per u travagliu, pudete aduprà in modu sicuru. Da u puntu di vista di l'usu da l'utilizatori mediu, ci hè una mancanza di una interfaccia grafica cunvene; questu duverà aspittà.

Seraghju felice di risponde à e dumande è accettà cumenti, grazie.

Source: www.habr.com

Add a comment