Slumptals-Oracle baserat pÄ digital signatur i blockchain

FrÄn idé till genomförande: vi modifierar det befintliga systemet för digitala signaturer baserat pÄ elliptiska kurvor sÄ att det blir deterministic, och erbjuder funktioner för att generera verifierbara pseudorandomnummer baserade pÄ detta.

Slumptals-Oracle baserat pÄ digital signatur i blockchain

Tanken

Hösten 2018 aktiverades de första smarta kontrakten i blockchainen Waves, och omedelbart uppstod frÄgan om möjligheten att fÄ tag pÄpseudorandomnummer , som man kan lita pÄ.NÀr jag funderade pÄ denna frÄga kom jag slutligen fram till slutsatsen: varje blockchain Àr en cell, det Àr omöjligt att fÄ en betrodd kÀlla till entropi i ett slutet system.

Men en idé gillade jag ÀndÄ: om en

slumptalsorekel anvÀnder en deterministisk algoritm för att signera anvÀndardata, kan anvÀndaren alltid verifiera en sÄdan signatur med hjÀlp av den offentliga nyckeln och vara sÀker pÄ att det erhÄllna vÀrdet Àr unikt. Orokeln kan mycket vÀl inte Àndra nÄgonting, algoritmen ger ett entydigt resultat. I sjÀlva verket registrerar anvÀndaren resultatet, men kÀnner inte till det förrÀn orakeln publicerar det. Det visar sig att man i sjÀlva verket inte behöver lita pÄ orakeln, utan istÀllet kan verifiera resultatet av dess arbete. Vid framgÄngsrik verifiering kan en sÄdan signatur betraktas som en kÀlla till entropi för ett pseudorandomnummer. I blockchain-plattformen Waves anvÀnds en signaturordning

EdDSA . I detta system bestÄr signaturen av vÀrdena R och S, dÀr R beror pÄ ett slumpmÀssigt vÀrde, medan S berÀknas utifrÄn det signerade meddelandet, den privata nyckeln och samma slumpmÀssiga nummer som R. Det visar sig att det inte finns nÄgon entydig beroende; för samma anvÀndarmeddelande finns det mÄnga giltiga signaturer. en variant Ed25519Det Àr uppenbart att en sÄdan signatur i sin rena form inte kan anvÀndas som en kÀlla till pseudorandomnummer, eftersom den Àr icke-deterministisk och dÀrför lÀtt kan manipuleras av orakeln.

Men det visade sig att det faktiskt Àr möjligt att göra den determinant.

Jag hade stora förhoppningar pÄ

verifierbar slumpfunktion (VRF) verifierad slumptal funktion (VRF), men efter att ha studerat materien var det nödvĂ€ndigt att ge upp denna variant. Även om VRF erbjuder en deterministisk variant av signaturen och dess bevis, finns det en konstig del i algoritmen som öppnar en svart mal för manipulationer av oraklet. Det vill sĂ€ga, vid berĂ€kningen av vĂ€rdet k (avsnitt 5.1) anvĂ€nds en privat nyckel som förblir okĂ€nd för anvĂ€ndaren, vilket innebĂ€r att anvĂ€ndaren inte kan verifiera korrektheten i berĂ€kningen av k, vilket gör att oraklet kan anvĂ€nda vilket vĂ€rde k som helst och samtidigt föra en databas med överensstĂ€mmelser mellan k och de signerade uppgifterna, sĂ„ att de alltid kan Ă„terberĂ€kna ett korrekt resultat ur VRF:s perspektiv. Ser ni en dragning baserad pĂ„ VRF utan att avslöja den privata nyckeln, kan ni gĂ€rna pĂ„peka: antingen mĂ„ste nyckeln avslöjas, eller sĂ„ mĂ„ste den uteslutas frĂ„n berĂ€kningen av k, dĂ„ kommer den privata nyckeln automatiskt att avslöjas vid den första signaturen. Sammanfattningsvis, som redan sagts, en underlig schema för ett slumpmĂ€ssigt orakel.

Efter lite överlÀggningar och med stöd frÄn lokala analytiker föddes ett arbetsschema för VECRO.

VECRO Àr en förkortning av Verifiable Elliptic Curve Random Oracle, vilket pÄ ryska betyder verifierbart slumpmÀssigt orakel baserat pÄ elliptiska kurvor.

Det visade sig vara ganska enkelt, för att uppnÄ determinism mÄste vÀrdet R faststÀllas innan det signerade meddelandet upptrÀder. Om R Àr faststÀllt och Àr en del av det signerade meddelandet, vilket dessutom garanterar att R Àr faststÀllt i sjÀlva det signerade meddelandet, sÄ bestÀms vÀrdet S entydigt av anvÀndarens meddelande och kan dÀrför anvÀndas som en kÀlla för pseudorandomnummer.

I ett sÄdant schema Àr det oviktigt hur R faststÀlls, det ligger inom oraklets ansvar. Viktigt Àr att S entydigt definieras av anvÀndaren, men dess vÀrde Àr okÀnt tills oraklet publicerar det. Precis som vi ville!

NÀr man talar om det faststÀllda R, observera att ÄteranvÀnda R Att skriva under olika meddelanden avslöjar entydigt den privata nyckeln i EdDSA-schemat. För Àgaren av oraklet blir det extremt viktigt att utesluta möjligheten till ÄteranvÀndning av R för att signera olika anvÀndarmeddelanden. Det vill sÀga, vid alla manipulationer eller samverkan riskerar oraklet alltid att förlora sin privata nyckel.

Sammanfattningsvis mÄste oraklet erbjuda anvÀndarna tvÄ funktioner: initialisering, som faststÀller vÀrdet R, och signatur, som returnerar vÀrdet S. Paret R, S utgör en vanlig verifierbar signatur av anvÀndarens meddelande som innehÄller det fasta vÀrdet R och slumpmÀssiga anvÀndardata.

Man kan invÀnda att detta schema för blockchain inte Àr annat Àn en vanlig commit-reveal-schema.. I stort sett, ja, det Àr det. Men det finns nÄgra nyanser. För det första arbetar oraklet alltid med samma nyckel i alla operationer, vilket Àr praktiskt att anvÀnda i kontrakt. För det andra finns det en risk att oraklet förlorar sin privata nyckel vid felaktigt beteende, till exempel om oraklet tillÄter resultatprovtagning, dÄ rÀcker det med att göra tvÄ prover för att ta reda pÄ den privata nyckeln och fÄ fullstÀndig tillgÄng till plÄnboken. För det tredje Àr den natively verifierbara signaturen i blockchain, som Àr kÀllan till slumpmÀssighet - det Àr vackert.

I ett halvÄr har idén om implementering mognat i huvudet, tills motivationen slutligen kom i form av en stipendium frÄn Waves Labs.. Med ett stort stipendium kommer ett stort ansvar, vilket innebÀr att projektet mÄste bli av!

Implementering

SÄ, i detta projekt genomfördes VECRO pÄ blockchain Waves i förfrÄgan-svar-lÀge genom överföringstransaktioner mellan anvÀndaren och oraklet. Samtidigt har oraklets konto ett skript som strikt reglerar arbetet i enlighet med den beskrivna logiken. Oraklets transaktioner genomgÄr en kontroll som ÄterstÀller hela kedjan av interaktioner med anvÀndaren. Vid kontroll av det slutliga vÀrdet deltar alla fyra transaktioner, smarta kontraktet trÀr dem pÄ en strikt verifierande trÄd, steg för steg kontrollerar alla vÀrden och lÀmnar inte utrymme för nÄgra manipulationer.

Än en gĂ„ng, för att det ska fastna och bli tydligare. Oraklet arbetar inte bara enligt det föreslagna schemat. Dess arbete kontrolleras helt pĂ„ blockchain-nivĂ„ av det installerade. fast med smartkontrakt. Ett steg Ă„t sidan och transaktionen gĂ„r helt enkelt inte igenom. SĂ„ om transaktionen har kommit in i blockkedjan behöver anvĂ€ndaren inte ens kontrollera nĂ„got, det har redan granskats av hundratals noder i nĂ€tverket.

För nÀrvarande Àr en VECRO lanserad i Waves huvudnÀt (du kan ocksÄ lansera din egen, det Àr inte svÄrt, bara kolla in exempelkonfigurationen). Nuvarande kod körs pÄ PHP (pÄ WavesKit, som jag nÀmnde tidigare För att anvÀnda oracle-tjÀnsten krÀvs:).

Att faststÀlla R;

  • Skicka minst 0.005 Waves till orakels alias init@vecr;
    • Mottaga R-kod i fĂ€ltet bilaga i överföringen av 1 R-vecr-token frĂ„n orakeln till anvĂ€ndaren;
    • FĂ„ en signatur;
  • Skicka minst 0.005 Waves till orakels alias random@vecr och vara ÅTAGANDE att ange den tidigare mottagna R-koden och ytterligare anvĂ€ndardata i bilagefĂ€ltet;
    • Mottaga S-kod i bilagefĂ€ltet i överföringen av 1 S-vecr-token frĂ„n orakeln till anvĂ€ndaren;
    • AnvĂ€nd S-koden som en kĂ€lla för pseudo-slumptal.
  • Nyckelpunkter om den aktuella implementationen:

Skickade Waves till orakeln anvÀnds som avgift för Ätertransaktionen till anvÀndaren, upp till maximala 1 Waves;

  • R-koden Ă€r en konkatenering av byte för symbolen 'R' och 32-byte vĂ€rdet R i base58 kodning;
  • R-koden i bilagan ska vara först, anvĂ€ndardata kommer efter R-koden;
  • S-koden Ă€r en konkatenering av byte för symbolen 'S' och 32-byte vĂ€rdet S i base58 kodning;
  • S Ă€r resultatet av moddivision, och dĂ€rför kan S inte anvĂ€ndas som ett fullt 256-bit pseudo-slumptal (detta tal kan anses vara maximalt ett 252-bit pseudo-slumptal);
  • Det enklaste alternativet Ă€r att anvĂ€nda hash frĂ„n S-koden som pseudo-slumptal.
  • Exempel pĂ„ hur man fĂ„r S-koden:

Initiering:

Jag ser fram emot att svara pÄ frÄgor och ta emot synpunkter, tack.

Jag ser fram emot att svara pÄ frÄgor och ta emot synpunkter, tack.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster