Slumptal och decentraliserade nÀtverk: implementationer

Introduktion

function getAbsolutelyRandomNumer() {
        return 4; // returns absolutely random number!
}

Precis som med konceptet för en absolut robust kryptografisk algoritm, försöker verkliga protokoll för "Publicly Verifiable Random Beacon" (nedan kallat PVRB) bara komma sÄ nÀra den perfekta schemat som möjligt, eftersom det i verkliga nÀtverk i ren form inte Àr tillÀmpligt: man mÄste strikt enas om en enda bit, antalet rundor mÄste vara mÄnga, och alla meddelanden mÄste vara perfekta snabba och alltid levererade. SjÀlvklart Àr detta inte fallet i verkliga nÀtverk. DÀrför, vid utformningen av PVRB för specifika uppgifter i moderna blockkedjor, uppstÄr det, utöver oförmÄgan att kontrollera det genererade slumpnumret och kryptografisk styrka, mÄnga rent arkitektoniska och tekniska problem.

SjĂ€lva blockkedjan fungerar i princip som en kommunikationsmiljö för PVRB, dĂ€r meddelandena=transaktionerna. Detta gör det möjligt att delvis abstrahera frĂ„n nĂ€tverksproblem, icke-levererade meddelanden, problem med mellanliggande mjukvara — alla dessa risker tar den decentraliserade nĂ€tverket pĂ„ sig, och dess huvudsakliga vĂ€rde för PVRB Ă€r oförmĂ„gan att Ă„terkalla eller förstöra en redan skickad transaktion — detta förhindrar deltagare frĂ„n att dra sig ur protokollet, sĂ„vida de inte har genomfört en framgĂ„ngsrik attack pĂ„ konsensus. En sĂ„dan sĂ€kerhetsnivĂ„ Ă€r acceptabel, varför PVRB mĂ„ste vara resistent mot sammansvĂ€rjningar mellan deltagarna i samma utstrĂ€ckning som den primĂ€ra blockkedjan. Detta antyder ocksĂ„ att PVRB bör vara en del av konsensus, om nĂ€tverket har kommit överens om den primĂ€ra kedjan av block, likvĂ€l borde det ocksĂ„ komma överens om en enda Ă€rlig resultatande slump. Alternativt kan PVRB vara ett fristĂ„ende protokoll, implementerat av ett smart kontrakt, som fungerar asynkront i förhĂ„llande till blockkedjan och blocken. BĂ„da metoderna har sina för- och nackdelar, och valet mellan dem Ă€r mycket komplext.

TvÄ sÀtt att implementera PVRB

LĂ„t oss titta nĂ€rmare pĂ„ tvĂ„ alternativ för implementering av PVRB — en fristĂ„ende version, som fungerar med hjĂ€lp av ett oberoende smart kontrakt utanför blockkedjan, och en konsensusintegrerad version — inbyggd i protokollet, enligt vilket nĂ€tverket kommer överens om blockkedjan och de inkluderade transaktionerna. I alla fall kommer jag att ha i Ă„tanke populĂ€ra blockkedjemotorer: Ethereum, EOS, och alla som liknar dem i hur smarta kontrakt placeras och bearbetas.

FristÄende kontrakt

I detta alternativ representerar PVRB ett smart kontrakt som accepterar transaktioner frÄn random-producer (RP), bearbetar dem, kombinerar resultaten och kommer dÀrmed fram till ett vÀrde som alla anvÀndare kan hÀmta frÄn detta kontrakt. Detta vÀrde behöver inte lagras direkt i kontraktet, utan kan endast representeras av data som deterministiskt kan ge ett och endast ett resultat av den slumpmÀssiga. I detta scenario Àr RP anvÀndare av blockkedjan, och vem som helst kan tillÄtas delta i processen för att generera.

Alternativet med fristÄende kontrakt Àr bra:

  • bĂ€rbarhet (kontrakten kan flyttas mellan blockkedjor)
  • enkelheten i implementation och testning (kontrakten Ă€r lĂ€tta att skriva och testa)
  • bekvĂ€mligheten att implementera ekonomiska scheman (det Ă€r lĂ€tt att skapa sin egen token vars logik tjĂ€nar syftet för PVRB)
  • möjligheten att köra i redan befintliga blockkedjor

Det har ocksÄ nackdelar:

  • strikta begrĂ€nsningar pĂ„ resurser under berĂ€kningar, transaktionsvolym och lagring (enklare sagt cpu/mem/io)
  • begrĂ€nsningar pĂ„ operationer inom kontraktet (inte alla instruktioner Ă€r tillgĂ€ngliga, det Ă€r svĂ„rt att koppla externa bibliotek)
  • omöjligheten att organisera meddelandeutbyte snabbare Ă€n transaktionerna inkluderas i blockkedjan

Detta alternativ Àr lÀmpligt för implementering av PVRB som behöver köras i ett redan existerande nÀtverk, utan komplex kryptografi och som inte krÀver mÄnga interaktioner.

Konsensus-integrerad

I den hĂ€r varianten Ă€r PVRB implementerat i koden för blockchain-noden, integrerat eller fungerar parallellt med meddelandeutbytet mellan blockchain-noderna. Resultaten frĂ„n protokollet registreras direkt i de producerade blocken, och protokollets meddelanden skickas via p2p-nĂ€tverket mellan noderna. Eftersom protokollet resulterar i siffror som mĂ„ste registreras i blocken, mĂ„ste nĂ€tverket nĂ„ konsensus kring dem. Det innebĂ€r att PVRB-meddelanden, liksom transaktioner, mĂ„ste valideras av noderna och inkluderas i blocken sĂ„ att varje deltagare i nĂ€tverket kan validera efterlevnaden av PVRB-protokollet. Detta leder oss automatiskt till den uppenbara lösningen — om nĂ€tverket kommer överens om konsensus kring block och transaktioner inom det, sĂ„ mĂ„ste PVRB vara en del av konsensus och inte ett fristĂ„ende protokoll. Annars kan det uppstĂ„ en situation dĂ€r blocket Ă€r giltigt ur konsensus synvinkel, men PVRB-protokollet har inte följts, vilket gör att blocket inte kan accepteras ur PVRB:s synvinkel. SĂ„ om det valda alternativet Ă€r "consensus-integrated" blir PVRB en viktig del av konsensus.

NĂ€r man beskriver implementationer av PVRB pĂ„ konsensusnivĂ„ i nĂ€tverket fĂ„r man under inga omstĂ€ndigheter hoppa över frĂ„gorna kring finalitet. Finalitet Ă€r en mekanism som anvĂ€nds i deterministiska konsensusförfaranden för att faststĂ€lla ett block (och kedjan som leder till det) som Ă€r slutgiltigt och aldrig kommer att raderas, Ă€ven om en parallell gaffel dyker upp. Till exempel finns det ingen sĂ„dan mekanism i Bitcoin — om man publicerar en kedja med större svĂ„righetsgrad, kommer den att ersĂ€tta vilken mindre svĂ„righetsgrad som helst, oavsett lĂ€ngd pĂ„ kedjorna. I EOS, Ă„ andra sidan, Ă€r de sĂ„ kallade Last Irreversible Blocks slutgiltiga, och de dyker upp i genomsnitt var 432:a block (12*21 + 12*15, pre-vote + pre-commit). Denna process Ă€r i grunden en vĂ€ntan pĂ„ 2/3 av underskrifterna frĂ„n blockproducenterna (BP). NĂ€r forkar dyker upp som Ă€r Ă€ldre Ă€n den senaste LIB, kasseras de helt enkelt. Denna mekanism gör det möjligt att garantera att en transaktion ingĂ„r i blockchainen och aldrig kommer att rullas tillbaka, oavsett vilka resurser angriparen har. Dessutom Ă€r slutgiltiga block Ă€ven de block som Ă€r signerade av 2/3 av BP i Hyperledger, Tendermint och andra pBFT-baserade konsensuslösningar. Även protokollet för att sĂ€kerstĂ€lla finalitet har meningsfullt att göra som en överbyggnad ovanpĂ„ konsensus, eftersom det kan fungera asynkront med produktionen och publiceringen av block. artikeln om slutgiltighet i Ethereum.

Slutgiltighet Àr extremt viktigt för anvÀndare som utan den kan bli offer för "double spend"-attacker, nÀr BP "hÄller tillbaka" blocken och publicerar dem efter att nÀtverket "sett" en bra transaktion. Om det inte finns nÄgon slutgiltighet, kommer det publicerade forken att ersÀtta blocket med den "bra" transaktionen med ett frÄn "dÄlig" forken, dÀr samma medelöverföringar görs till angriparens adress. I fallet med PVRB skÀrps kraven pÄ slutgiltighet ytterligare, eftersom byggandet av forkar för PVRB innebÀr att angriparen kan förbereda flera randomiseringsalternativ för att publicera det mest fördelaktiga för sig sjÀlv, och begrÀnsa tiden för en möjlig attack - en bra lösning.

DÀrför Àr det bÀsta alternativet att kombinera PVRB och slutgiltighet i ett enda protokoll - dÄ blir ett slutgiltigt block = slutgiltig randomisering, och det Àr precis vad som behövdes. Nu kommer spelarna att fÄ garanterad randomisering inom N sekunder, och kan vara sÀkra pÄ att det inte gÄr att rulla tillbaka eller spela om det.

Alternativet med consensus-integrated Àr bra:

  • möjlighet till asynkron implementering i förhĂ„llande till blockproduktion - blocken produceras som vanligt, men samtidigt kan protokollet PVRB arbeta, vilket producerar randomiseringar inte varje block
  • möjlighet att implementera Ă€ven tung kryptografi, utan begrĂ€nsningar som finns pĂ„ smarta kontrakt
  • möjlighet att organisera meddelandeutbyte snabbare Ă€n transaktioner inkluderas i blockchain, till exempel kan en del av protokollet arbeta mellan noder utan att sprida meddelanden genom nĂ€tverket

Det har ocksÄ nackdelar:

  • svĂ„righeter vid testning och utveckling - man mĂ„ste emulera nĂ€tverksfel, bortfall av noder, hĂ€mta hĂ„rt-kotade nĂ€tverk
  • fel i implementeringen krĂ€ver en hĂ„rd gaffel av nĂ€tverket

BĂ„da implementeringsmetoderna för PVRB har rĂ€tt att existera, men implementeringen pĂ„ smarta kontrakt i moderna blockkedjor Ă€r Ă€ndĂ„ ganska kraftigt begrĂ€nsad av berĂ€kningsresurser, och varje övergĂ„ng till seriös kryptografi Ă€r ofta helt enkelt omöjlig. Och vi kommer att behöva seriös kryptografi, vilket kommer att demonstreras nedan. Även om detta problem har en tydligt temporĂ€r karaktĂ€r, behövs seriös kryptografi i kontrakt för att lösa mĂ„nga uppgifter, och den dyker gradvis upp (till exempel systemkontrakt för zkSNARKs i Ethereum).

Blockchain, som sÀkerstÀller en transparent och pÄlitlig kommunikationskanal för protokollet, kostar inte gratis. Alla decentraliserade protokoll mÄste beakta risken för Sybil-attacker, eftersom vilka handlingar som helst kan utföras av en överenskommen mÀngd konton, dÀrför mÄste man vid designen ta hÀnsyn till angriparnas möjligheter att skapa ett godtyckligt antal medlemmar i protokollet som agerar i samförstÄnd.

PVRB och blockvariabler.

Jag ljög inte nĂ€r jag sa att en bra PVRB, som testats av mĂ„nga gambling-appar, hittills inte har implementerats i blockkedjor. VarifrĂ„n kom dĂ„ alla dessa gambling-appar i Ethereum och EOS? Det förvĂ„nar mig lika mycket som er; hur fick man fram sĂ„ mĂ„nga ”bestĂ€ndiga” slumpmĂ€ssigheter i en helt deterministisk miljö?

Det vanligaste sĂ€ttet att fĂ„ fram slumpmĂ€ssighet i blockkedjan Ă€r att anvĂ€nda nĂ„gon form av ”oförutsĂ€gbar” information frĂ„n blocket och skapa slumpmĂ€ssighet utifrĂ„n detta genom att hash-a ett eller flera vĂ€rden. En bra artikel om problemen med sĂ„dana scheman. hĂ€rMan kan ta nĂ„got av de ”oförutsĂ€gbara” vĂ€rdena i blocket, som blockhash, antal transaktioner, nĂ€tverkets svĂ„righetsgrad och andra vĂ€rden som inte Ă€r kĂ€nda pĂ„ förhand. Sedan kan man hash-a dem, ett eller flera, och i teorin borde man fĂ„ riktig slumpmĂ€ssighet. Man kan till och med nĂ€mna i whitepaper att ens schema Ă€r ”post-quantum secure” (eftersom det finns kvantresistenta hash-funktioner :)).

Men Àven post-quantum resistenta hash-funktioner rÀcker tyvÀrr inte. Hemligheten ligger i kraven för PVRB, som jag pÄminner om frÄn den tidigare artikeln:

  1. Resultatet mÄste ha ett bevisligen jÀmnt fördelat resultat, dvs baserat pÄ bevisligen sÀker kryptografi.
  2. Ingen bit av resultatet kan kontrolleras. Som en följd kan resultatet inte förutsÀgas i förvÀg.
  3. Protokollet för generation fÄr inte saboteras genom att inte delta i protokollet eller genom att överbelasta nÀtverket med attackerande meddelanden.
  4. Allt ovanstÄende mÄste vara motstÄndskraftigt mot sammansvÀrjningar av ett tillÄtet antal oÀrliga deltagare i protokollet (t.ex. 1/3 av deltagarna).

I det hĂ€r fallet följs endast krav 1, och krav 2 följs inte. Genom att hashera oförutsĂ€gbara vĂ€rden frĂ„n blocket fĂ„r vi en jĂ€mn fördelning och bra slumpmĂ€ssighet. Men BP har Ă„tminstone möjligheten att "publicera blocket eller inte". SĂ„ledes kan BP Ă„tminstone vĂ€lja mellan TVÅ alternativ av slumpmĂ€ssighet: "sitt" och det som blir om blocket görs av nĂ„gon annan. BP kan pĂ„ förhand "tjuvkika" pĂ„ vad som kommer att hĂ€nda om han publicerar blocket och helt enkelt besluta att göra det eller inte. SĂ„ledes, genom att spela till exempel "jĂ€mnt-ojĂ€mnt" eller "röd/svart" i roulette, kan han publicera blocket endast om han ser att det blir en vinst. Detta gör ocksĂ„ strategin för att anvĂ€nda, till exempel, hash av blocket "frĂ„n framtiden" ineffektiv. I detta fall sĂ€gs det att "en slumpmĂ€ssighet kommer att anvĂ€ndas, som fĂ„s genom att hashera nuvarande data och hashen av det framtida blocket pĂ„ en höjd, till exempel N + 42, dĂ€r N Ă€r den nuvarande höjden av blocket. Detta förstĂ€rker schemat nĂ„got, men ger fortfarande BP, om Ă€n i framtiden, möjligheten att vĂ€lja att hĂ„lla tillbaka blocket eller publicera det.

BP:s mjukvara kompliceras i detta fall, men inte mycket. Vid validering och inkludering av transaktionen i blocket görs en snabb kontroll för att se om det blir en vinst, och möjligtvis justering av en parameter i transaktionen för att fÄ hög sannolikhet för vinst. Samtidigt Àr det nÀstan omöjligt att fÄnga en smart BP med sÄdana manipulationer, varje gÄng kan nya adresser anvÀndas, och vinna lite Ät gÄngen utan att vÀcka misstankar.

SÄ sÀtt som anvÀnder information frÄn blocket Àr inte lÀmpade som en universell implementation av PVRB. I en begrÀnsad version, med begrÀnsningar pÄ insatsstorlekar, begrÀnsningar pÄ antal spelare och/eller KYC-registrering (för att inte ge en spelare möjlighet att anvÀnda flera adresser), kan dessa scheman fungera för smÄ spel, men inte mer Àn sÄ.

PVRB och commit-reveal.

Okej, tack vare hashning och Ă„tminstone den relativa oförutsĂ€gbarheten av blockhash och andra variabler. Om vi kan lösa problemet med minerarnas front-running, borde vi fĂ„ nĂ„got mer solid. LĂ„t oss lĂ€gga till anvĂ€ndare i detta schema - lĂ„t dem ocksĂ„ pĂ„verka slumpen: vilken teknisk supportanstĂ€lld som helst kommer att sĂ€ga att det mest slumpmĂ€ssiga i IT-system Ă€r anvĂ€ndarnas beteende 🙂

En naiv plan dĂ€r anvĂ€ndare bara skickar slumpmĂ€ssiga nummer och resultatet berĂ€knas som till exempel hash av deras summa fungerar inte. I det hĂ€r fallet kan den sista spelaren, genom att vĂ€lja sin egen slumpmĂ€ssighet, kontrollera vilket resultat som blir. DĂ€rför anvĂ€nds ett mycket vĂ€lkĂ€nt mönster, commit-reveal. Deltagarna skickar först hash av sina slumpmĂ€ssigheter (commits), och sedan öppnar de sina slumpmĂ€ssigheter (reveal). Fasens "reveal" börjar först efter att nödvĂ€ndiga commits har samlats in, sĂ„ deltagarna kan skicka exakt den slumpmĂ€ssighet vars hash de skickade tidigare. Nu kan vi kombinera allt detta med blockparameterar, gĂ€rna hĂ€mtat frĂ„n framtiden (slumptalet kan endast kĂ€nnedom i ett av framtida block), och voilĂ  – slumptalet Ă€r klart! Nu pĂ„verkar varje spelare det resulterande slumptalet och kan "vinna" över den illvilliga BP genom att tĂ€cka hans slumpmĂ€ssighet med sin egen, som inte Ă€r kĂ€nd i förvĂ€g... Vi kan ocksĂ„ lĂ€gga till skydd mot sabotage av protokollet genom att inte avslöja i reveal-steget – bara krĂ€va att en viss summa bifogas transaktionen vid commit – en försĂ€kringsdeposition som endast Ă„terbetalas vid reveal-processen. I detta fall skulle det vara olönsamt att göra commit och inte göra reveal.

Det var ett bra försök, och sÄdana planer finns ocksÄ i spel-DApp:ar, men tyvÀrr Àr det Äterigen inte tillrÀckligt. Nu kan resultatet pÄverkas inte bara av miner, utan Àven av varje deltagare i protokollet. Att kontrollera vÀrdet i sig kan fortfarande göras, med en lÀgre grad av variation och för pengar, men, precis som i fallet med minern, om resultaten av utlottningen Àr mer vÀrdefulla Àn kostnaden för deltagande i PVRB-protokollet, kan random-producer (RP) besluta om han ska göra reveal och kan fortfarande vÀlja mellan minst tvÄ alternativ för slumpmÀssighet.
Men nu finns möjligheten att straffa de som gör commit och inte gör reveal, och detta mönster kommer fortfarande att vara anvĂ€ndbart. Dess enkelhet Ă€r en stor fördel – mer komplexa protokoll krĂ€ver mycket kraftigare berĂ€kningar.

PVRB och deterministiska signaturer.

Det finns ett annat sĂ€tt att fĂ„ RP att ge ett pseudorandomnummer, som hen inte kan pĂ„verka, om hen ges en "prototyp" — det Ă€r en deterministisk signatur. Denna signatur kan till exempel vara RSA, men inte ECS. Om RP har ett nyckelpar: RSA och ECC, och hen signerar ett visst vĂ€rde med sin privata nyckel, sĂ„ fĂ„r hen med RSA ENDAST EN signatur, medan hen med ECS kan generera ett antal olika giltiga signaturer. Detta beror pĂ„ att vid skapandet av en ECS-signatur anvĂ€nds ett slumpmĂ€ssigt nummer som vĂ€ljs av signatĂ€ren, och det kan vĂ€ljas pĂ„ vilket sĂ€tt som helst, vilket ger signatĂ€ren möjlighet att vĂ€lja mellan flera signaturer. I fallet med RSA: "ett indata-vĂ€rde" + "ett nyckelpar" = "en signatur". Det Ă€r omöjligt att förutsĂ€ga vilken signatur en annan RP kommer att fĂ„, dĂ€rför kan PVRB med deterministiska signaturer organiseras genom att kombinera RSA-signaturer frĂ„n flera deltagare som signerat samma vĂ€rde. Till exempel — en tidigare slump. I ett sĂ„dant system sparas mĂ„nga resurser, eftersom signaturerna fungerar bĂ„de som bekrĂ€ftelse pĂ„ korrekt beteende enligt protokollet samt som en kĂ€lla till slumpen.

ÄndĂ„, Ă€ven med deterministiska signaturer Ă€r systemet fortfarande sĂ„rbart för problemet "last actor". Den sista deltagaren kan fortfarande bestĂ€mma om hen vill publicera sin signatur eller inte, vilket ger hen kontroll över resultatet. Det gĂ„r att vidareutveckla systemet, lĂ€gga till blockhashar, skapa rundor för att förutsĂ€ga resultatet i förvĂ€g, men alla dessa metoder, trots mĂ„nga förbĂ€ttringar, lĂ€mnar Ă€ndĂ„ problemet med pĂ„verkan frĂ„n en enskild deltagare pĂ„ det kollektiva resultatet i en osĂ€ker miljö olöst och kan endast fungera under ekonomiska och tidsmĂ€ssiga begrĂ€nsningar. Dessutom Ă€r storleken pĂ„ RSA-nycklar (1024 och 2048 bitar) ganska stor, och storleken för blockchain-transaktioner Ă€r en extremt viktig parameter. Det verkar som om vi inte enkelt kan lösa problemet, sĂ„ vi gĂ„r vidare.

PVRB och secret sharing-system

In kryptografi finns det scheman som kan lÄta nÀtverket komma överens om ett och endast ett vÀrde av PVRB, och dessa scheman Àr motstÄndskraftiga mot alla illvilliga handlingar frÄn vissa deltagare. En av de anvÀndbara protokollen som Àr vÀrt att bekanta sig med Àr Shamir's hemlighetsdelningsschema. Det anvÀnds för att dela en hemlighet (till exempel en hemlig nyckel) i flera delar och distribuera dessa delar till N deltagare. Hemligheten fördelas pÄ ett sÀtt som gör att för att ÄterstÀlla den rÀcker med M delar av N, och det kan vara vilka som helst av M delar. Om vi förenklar det, sÄ utbyter deltagarna punkter pÄ en graf av en okÀnd funktion, och efter att ha fÄtt M punkter kan hela funktionen ÄterstÀllas.
En bra förklaring ges i wiki och att faktiskt leka med det för att fÄ protokollet att fastna i huvudet Àr anvÀndbart pÄ demo sidan.

Om FSSS (Fiat-Shamir Secret Sharing) schemat skulle kunna tillĂ€mpas i sin renaste form – skulle det vara ett oövervinneligt PVRB. I sin mest grundlĂ€ggande form kan protokollet se ut sĂ„ hĂ€r:

  • Varje deltagare genererar sin egen slumpmĂ€ssiga och ger ut shares frĂ„n den till de övriga deltagarna
  • Varje deltagare avslöjar sin del av de andra deltagarnas hemligheter
  • Om det för en deltagare har samlats mer Ă€n M shares, kan den deltagarens nummer berĂ€knas och det kommer att vara unikt, oavsett uppsĂ€ttningen av avslöjade deltagare
  • Kombinationen av de avslöjade random-vĂ€rdena Ă€r den eftertraktade PVRB

HÀr pÄverkar enskilda deltagare inte protokollets resultat, utom i de fall dÀr det bara beror pÄ dem att uppnÄ tröskeln för avslöjandet av den slumpmÀssiga. DÀrför, om den erforderliga andelen som arbetar enligt protokollet och tillgÀngliga RP Àr uppfyllt, fungerar detta protokoll och uppfyller kraven för kryptografisk motstÄndskraft och Àr robust mot "last actor"-problemet.

Detta skulle kunna vara det perfekta alternativet, detta PVRB-schema baserat pĂ„ hemlighetsdelning av Fiat-Shamir beskrivs till exempel i denna artikeln. Men, som nĂ€mnts tidigare, om man försöker tillĂ€mpa det bokstavligt i blockchain, uppstĂ„r tekniska begrĂ€nsningar. HĂ€r Ă€r ett exempel pĂ„ en testimplementering av protokollet i smartkontraktet EOS och den mest viktiga delen av det — kontroll av den publicerade share frĂ„n deltagaren: kod. Koden visar att valideringen av proofet krĂ€ver flera skalĂ€ra multiplikationer, och siffrorna som anvĂ€nds Ă€r mycket stora. Det Ă€r viktigt att förstĂ„ att i blockkedjor sker verifieringen nĂ€r blockproducenten bearbetar transaktionen, och varje deltagare mĂ„ste enkelt kunna verifiera korrektheten av protokollet, sĂ„ kraven pĂ„ hastighet för verifieringsfunktionen Ă€r mycket strikta. I denna version visade sig alternativet vara ofunktionellt, eftersom verifieringen inte höll sig inom transaktionsgrĂ€nsen (0,5 sek).

Effektiviteten i verifieringen Ă€r ett av de viktigaste kraven för anvĂ€ndning av i huvudsak alla avancerade kryptografiska scheman i blockkedjan. Att skapa proofs, förbereda meddelanden — dessa procedurer kan utföras off-chain och pĂ„ högpresterande datorer, men att kringgĂ„ verifieringen Ă€r inte möjligt — det Ă€r ytterligare ett viktigt krav för PVRB.

PVRB och threshold-signaturer

Genom att bekanta oss med schemat för secret sharing har vi öppnat en hel klass av protokoll som förenas av nyckelordet "threshold". NÀr M Àr antalet Àrliga deltagare som krÀvs av N för att avslöja viss information, och uppsÀttningen av Àrliga deltagare kan vara vilken som helst delmÀngd av N, talar vi om "threshold"-scheman. Dessa gör det möjligt att lösa problemet med 'last actor', eftersom om en angripare inte avslöjar sin del av hemligheten, kommer en annan Àrlig deltagare att göra det. Dessa scheman möjliggör att man enas om ett och endast ett vÀrde, Àven vid sabotage av protokollet av en del av deltagarna.

Kombinationen av deterministiska signaturer och threshold-scheman har lett till utvecklingen av ett mycket praktiskt och lovande schema för att implementera PVRB — det Ă€r deterministiska threshold-signaturer. HĂ€r Ă€r artikeln om olika tillĂ€mpningar av threshold-signaturer, och hĂ€r Ă€r ytterligare en bra lĂ„nglĂ€sning frĂ„n Dash.

Den senaste artikeln beskriver BLS-signaturer (BLS stĂ„r för Boneh-Lynn-Shacham, hĂ€r artikel ), som har en mycket viktig och extremt bekvĂ€m egenskap för programmerare – publika, hemliga, publika nycklar och BLS-signaturer kan kombineras med varandra genom enkla matematiska operationer, och deras kombinationer förblir giltiga nycklar och signaturer, vilket möjliggör enkel aggregat av mĂ„nga signaturer till en och mĂ„nga publika nycklar till en. De har Ă€ven determinism och ger samma resultat vid samma ingĂ„ngsvĂ€rden. Tack vare denna egenskap Ă€r kombinationerna av BLS-signaturer sjĂ€lva giltiga nycklar, vilket möjliggör en variant dĂ€r M av N deltagare producerar en och endast en signatur, som Ă€r deterministisk, publikt verifierbar och oförutsĂ€gbar tills den avslöjas av den M:e deltagaren.

I systemet med threshold BLS-signaturer skriver varje deltagare under nÄgot med hjÀlp av BLS (till exempel den tidigare slumpen), och den totala threshold-signaturen Àr den eftertraktade slumptal. De kryptografiska egenskaperna hos BLS-signaturer uppfyller kraven för kvaliteten pÄ slump, threshold-delen skyddar mot "last-actor", och den unika kombinerbarheten av nycklar möjliggör implementeringen av mÄnga intressanta algoritmer som till exempel effektivt kan aggregera meddelanden frÄn protokollet.

SÄ om du bygger PVRB i din blockchain, kommer du med stor sannolikhet att landa pÄ en BLS threshold-signaturschema, och flera projekt anvÀnder den redan. Till exempel DFinity (hÀr benchmark som implementerar schemat, och ). Ett typiskt exempel pÄ anvÀndning: exempel pÄ implementering av verifierbar hemlig delning), eller Keep.network (hÀr Àr deras slumptal yellowpaper, och hÀr Àr exempel smartkontraktet som betjÀnar protokollet).

Implementering av PVRB

TyvĂ€rr ser vi fortfarande inte ett fĂ€rdigt protokoll, implementerat i blockchain PVRB, som har bevisats vara sĂ€kert och robust. Även om protokollen Ă€r klara Ă€r det tekniskt svĂ„rt att tillĂ€mpa dem pĂ„ befintliga lösningar. För centraliserade system Ă€r PVRB meningslöst, och decentraliserade system Ă€r strikt begrĂ€nsade i alla berĂ€kningsresurser: CPU, minne, lagring, I/O. Designen av PVRB handlar om att kombinera olika protokoll för att Ă„stadkomma nĂ„got som uppfyller alla krav för att kunna fungera som ett livskraftigt blockchain. Ett protokoll utför berĂ€kningar effektivare, men krĂ€ver fler meddelanden mellan RP, medan ett annat krĂ€ver mycket fĂ€rre meddelanden men skapandet av proof kan ta tiotals minuter, ibland timmar.

Jag kommer att nÀmna de faktorer som du mÄste ta hÀnsyn till nÀr du vÀljer en kvalitativ PVRB:

  • Kryptografisk styrka. Din PVRB mĂ„ste vara strikt obiaserbar, utan möjlighet att kontrollera en enda bit. I vissa upplĂ€gg Ă€r det inte sĂ„, sĂ„ kalla pĂ„ en kryptograf.
  • Problemet med "last actor". Din PVRB mĂ„ste vara motstĂ„ndskraftig mot attacker dĂ€r en angripare som kontrollerar en eller flera RP kan vĂ€lja mellan tvĂ„ resultatalternativ.
  • Problemet med sabotage av protokollet. Din PVRB mĂ„ste vara motstĂ„ndskraftig mot attacker dĂ€r en angripare som kontrollerar en eller flera RP beslutar om det ska vara slumpmĂ€ssigt eller inte och kan garantera, eller med en given sannolikhet pĂ„verka detta.
  • Problemet med antalet meddelanden. Dina RP mĂ„ste skicka sĂ„ fĂ„ meddelanden som möjligt till blockchain och maximalt undvika synkrona handlingar, som situationer dĂ€r "jag har skickat viss information, vĂ€ntar pĂ„ svar frĂ„n en specifik deltagare". I p2p-nĂ€tverk, sĂ€rskilt geografiskt spridda, bör man inte rĂ€kna med snabba svar.
  • Problemet med berĂ€kningskomplexitet. Verifiering av vilket steg som helst i PVRB on-chain mĂ„ste vara extremt lĂ€tt, eftersom det utförs av alla fullstĂ€ndiga noder i nĂ€tverket. Om implementeringen görs med hjĂ€lp av ett smart kontrakt Ă€r kraven pĂ„ hastighet mycket strikta.
  • Problemet med tillgĂ€nglighet och livslĂ€ngd. Din PVRB bör strĂ€va efter att vara motstĂ„ndskraftig mot situationer dĂ€r en del av nĂ€tverket blir otillgĂ€ngligt under en tid och en del RP helt enkelt slutar att fungera.
  • Problemet med trusted setup och den initiala distributionen av nycklar.. Om din PVRB anvĂ€nder primĂ€r setup-protokoll, Ă€r detta en helt separat och allvarlig historia. HĂ€r Ă€r exempel. Om deltagarna mĂ„ste meddela varandra sina nycklar innan protokollet börjar - Ă€r detta ocksĂ„ ett problem om deltagarna Ă€ndras
  • Utvecklingsproblem. Förekomsten av bibliotek pĂ„ rĂ€tt sprĂ„k, deras sĂ€kerhet och prestanda, offentlighet, komplexa tester, etc.

Till exempel har threshold BLS-signaturer ett betydande problem - innan de börjar arbeta mÄste deltagarna nödvÀndigtvis dela ut sina nycklar och organisera en grupp inom vilken threshold kommer att fungera. Detta innebÀr att minst en runda utbyte i ett decentraliserat nÀtverk mÄste vÀnta, och med tanke pÄ att det genererade slumpmÀssiga talet, till exempel, behövs i spel, praktiskt taget i realtid, innebÀr detta att sabotage av protokollet Àr möjligt vid detta stadium, och fördelarna med threshold-schemat förloras. Detta problem Àr redan enklare Àn det föregÄende, men det krÀver fortfarande utvecklingen av en separat procedur för att bilda threshold-grupper, som mÄste skyddas ekonomiskt genom insÀttningar och avskrÀckning av medel (slashing) frÄn deltagare som inte följer protokollet. Dessutom ryms verifiering av BLS med acceptabel sÀkerhetsnivÄ helt enkelt inte, till exempel, inom en standardtransaktion i EOS eller Ethereum - det finns helt enkelt inte tillrÀckligt med tid för verifiering. Koden för kontrakten Àr WebAssembly eller EVM, som körs av en virtuell maskin. Kryptografiska funktioner Àr inte implementerade pÄ ett nativt sÀtt (Àn), och arbetar tiotals gÄnger lÄngsammare Àn vanliga kryptografiska bibliotek. MÄnga protokoll passar inte kraven helt enkelt baserat pÄ volymen pÄ nycklar, som till exempel 1024 och 2048 bit för RSA, 4-8 gÄnger mer Àn standardsignaturen i Bitcoin och Ethereum.

Det spelar ocksÄ roll om det finns implementeringar pÄ olika programmeringssprÄk - vilket Àr fÄ, sÀrskilt för nya protokoll. Alternativet med integration i konsensus krÀver att protokollet skrivs pÄ plattformens sprÄk, sÄ man mÄste leta efter kod pÄ Go för geth, pÄ Rust för Parity, pÄ C++ för EOS. Koden pÄ JavaScript mÄste alla leta efter, och eftersom JavaScript och kryptografi inte Àr riktigt nÀra vÀnner, hjÀlper WebAssembly, som nu definitivt aspirerar pÄ att bli nÀsta viktiga internetstandard.

Slutsats

Jag hoppas, i det föregĂ„ende artikeln Jag har lyckats övertyga er om att generering av slumpmĂ€ssiga tal pĂ„ blockkedjan Ă€r kritiskt viktig för mĂ„nga aspekter av livet i decentraliserade nĂ€tverk. Denna artikel visar att denna uppgift Ă€r extremt ambitiös och svĂ„r, men bra lösningar finns redan. Generellt Ă€r den slutgiltiga designen av protokollet möjlig först efter omfattande tester som tar hĂ€nsyn till alla aspekter, frĂ„n setup till simulering av fel. DĂ€rför kommer ni knappast att hitta fĂ€rdiga recept i whitepapers frĂ„n team och artiklar, och inte heller kommer vi under det kommande Ă„ret eller tvĂ„ att vĂ„ga skriva “gör sĂ„ hĂ€r, sĂ„ Ă€r det helt korrekt.”

För vĂ„r PVRB i den under utveckling blockkedjan Haya, har vi stannat vid anvĂ€ndningen av threshold BLS-signaturer. Vi planerar att implementera PVRB pĂ„ konsensusnivĂ„, eftersom verifiering i smarta kontrakt med en acceptabel sĂ€kerhetsnivĂ„ för nĂ€rvarande Ă€r omöjlig. Det Ă€r möjligt att vi anvĂ€nder tvĂ„ system: först den kostsamma hemliga delningen för att skapa en lĂ„ngsiktig random_seed, och den anvĂ€nder vi sedan som grund för högfrekvent slumpgenerering med hjĂ€lp av deterministiska threshold BLS-signaturer, eller sĂ„ kan vi begrĂ€nsa oss till bara ett av systemen. Det Ă€r tyvĂ€rr omöjligt att sĂ€ga i förvĂ€g hur protokollet kommer att se ut, men det glĂ€der oss att liksom i vetenskap Ă€r ett negativt resultat ocksĂ„ ett resultat inom ingenjörsuppgifter, och varje nytt försök att lösa problemet Ă€r ett steg framĂ„t för alla som arbetar med denna frĂ„ga. För att uppfylla krav frĂ„n företaget löser vi en konkret praktisk uppgift — att förse spelapplikationer med en pĂ„litlig kĂ€lla till entropi, sĂ„ vi mĂ„ste ocksĂ„ Ă€gna uppmĂ€rksamhet Ă„t sjĂ€lva blockkedjan, sĂ€rskilt frĂ„gor om kedjans finalitet och nĂ€tverkets governance.

Och Àven om vi för nÀrvarande inte ser en bevisat robust PVRB i blockkedjor som har anvÀnts tillrÀckligt lÀnge för att klara tester av verkliga applikationer, flera revisioner, belastningar, och inte minst verkliga attacker, sÄ bekrÀftar antalet möjliga vÀgar att en lösning finns, och nÄgon av dessa algoritmer kommer till slut att lösa problemet. Vi ser fram emot att dela resultaten och tackar andra team som ocksÄ arbetar med denna frÄga för artiklar och kod som gör det möjligt för ingenjörer att inte snubbla över samma hinder tvÄ gÄnger.

SĂ„ nĂ€r du möter en programmerare som designar en decentraliserad slumpgenerator, var uppmĂ€rksam och omtĂ€nksam, ge psykologiskt stöd om det behövs 🙂

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