{"id":33888,"date":"2019-10-31T21:55:15","date_gmt":"2019-10-31T18:55:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii\/"},"modified":"2019-10-31T21:55:15","modified_gmt":"2019-10-31T18:55:15","slug":"sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","title":{"rendered":"Willekeurige getallen en gedecentraliseerde netwerken: implementaties","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Inleiding<\/h1>\n<p><\/p>\n<pre><code class=\"plaintext\">functie getAbsoluutWillekeurigNummer() {\n        return 4; \/\/ retourneert absoluut willekeurig nummer!\n}<\/code><\/pre>\n<p><\/p>\n<p>Net als bij het concept van een absoluut veilig cipher in de cryptografie, proberen echte protocollen 'Publicly Verifiable Random Beacon' (hierna PVRB) slechts zo dicht mogelijk bij het ideale schema te komen, omdat het in echte netwerken in pure vorm niet toepasbaar is: men moet het strikt eens zijn over \u00e9\u00e9n bit, er moeten veel rondes zijn en alle berichten moeten ideaal snel zijn en altijd worden afgeleverd. Uiteraard is dit niet het geval in echte netwerken. Daarom, bij het ontwerpen van PVRB voor specifieke taken in moderne blockchains, nemen we naast de onmogelijkheid om de verkregen randomisatie en cryptografische veiligheid te controleren, ook veel puur architectonische en technische problemen in overweging.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>De blockchain zelf fungeert voor PVRB in wezen als een communicatiemiddel, waarbij berichten = transacties zijn. Dit maakt het mogelijk om gedeeltelijk abstract te zijn van netwerkproblemen, het niet afleveren van berichten en problemen met tussensoftware \u2014 al deze risico\u2019s worden gedragen door het gedecentraliseerde netwerk, en de belangrijkste waarde ervan voor PVRB is de onmogelijkheid om een al verzonden transactie in te trekken of te bederven \u2014 dit voorkomt dat deelnemers zich terugtrekken uit het protocol, tenzij ze een succesvolle aanval op de consensus hebben uitgevoerd. Dit niveau van veiligheid is aanvaardbaar, daarom moet PVRB bestand zijn tegen samenspanning van deelnemers in dezelfde mate als de hoofdblockchain. Dit suggereert ook dat PVRB een deel van de consensus moet zijn, als het netwerk het eens is over de hoofdblockchain, evenzo moet het een eerlijke resulterende randomisatie overeenkomen. Of, PVRB is gewoon een standalone protocol, uitgevoerd door een slimme contract, dat asynchroon werkt ten opzichte van de blockchain en de blokken. Beide manieren hebben hun eigen voor- en nadelen, en de keuze tussen hen is uiterst niet-triviaal. <\/p>\n<p><\/p>\n<h2 id=\"dva-sposoba-implementacii-pvrb\">Twee manieren om PVRB te implementeren<\/h2>\n<p><\/p>\n<p>Laten we dieper ingaan op de twee varianten van PVRB-implementatie: de standalone versie, die werkt met behulp van een onafhankelijk slim contract van de blockchain, en de consensus-ge\u00efntegreerde versie \u2014 ingebed in het protocol, volgens welk het netwerk overeenstemming bereikt over de blokketen en de inbegrepen transacties. In alle gevallen zal ik de populaire blockchain-engines in gedachten hebben: Ethereum, EOS, en alle gelijken met betrekking tot plaatsing en verwerking van slimme contracten. <\/p>\n<p><\/p>\n<h3 id=\"standalone-contract\">Standalone contract<\/h3>\n<p><\/p>\n<p>In deze variant is PVRB een slim contract dat transacties van random producers (hierna RP) accepteert, deze verwerkt, resultaten combineert en uiteindelijk tot een waarde komt die elke gebruiker uit dit contract kan verkrijgen. Deze waarde hoeft niet rechtstreeks in het contract te worden opgeslagen, maar kan alleen worden vertegenwoordigd door gegevens waaruit op deterministische wijze \u00e9\u00e9n en slechts \u00e9\u00e9n waarde van de resulterende random kan worden verkregen. In dit schema zijn RP gebruikers van de blockchain, en iedereen kan deelnemen aan het generatieproces.<\/p>\n<p><\/p>\n<p>De standalone-contract variant heeft voordelen:<\/p>\n<p><\/p>\n<ul>\n<li>portabiliteit (contracten kunnen van blockchain naar blockchain worden verplaatst)<\/li>\n<li>eenvoud in implementatie en testen (contracten zijn gemakkelijk te schrijven en te testen)<\/li>\n<li>gemak in de implementatie van economische schema's (het is eenvoudig om je eigen token te maken dat dient voor de doeleinden van PVRB)<\/li>\n<li>de mogelijkheid om te worden gestart binnen bestaande blockchains<\/li>\n<\/ul>\n<p><\/p>\n<p>Het heeft echter ook nadelen:<\/p>\n<p><\/p>\n<ul>\n<li>sterke beperkingen op middelen tijdens berekeningen, transacties en opslag (simpel gezegd cpu\/mem\/io)<\/li>\n<li>beperkingen op operaties binnen het contract (niet alle instructies zijn beschikbaar, moeilijk om externe bibliotheken aan te sluiten)<\/li>\n<li>onmogelijk om berichten sneller te organiseren dan transacties in de blockchain worden opgenomen<\/li>\n<\/ul>\n<p><\/p>\n<p>Deze variant is geschikt voor de implementatie van PVRB, dat moet worden gestart in een bestaande netwerk, zonder complexe cryptografie en zonder veel interacties te vereisen.<\/p>\n<p><\/p>\n<h3 id=\"consensus-integrated\">Consensus-integrated<\/h3>\n<p><\/p>\n<p>In deze variant is PVRB ge\u00efmplementeerd in de code van de blockchain-node, ingebouwd of werkt parallel met de berichtenuitwisseling tussen de blockchain-nodes. De resultaten van het protocol worden rechtstreeks in de geproduceerde blokken geschreven, en de protocolberichten worden via het p2p-netwerk tussen de nodes verzonden. Omdat het protocol resulteert in getallen die in de blokken moeten worden geschreven, moet het netwerk consensus bereiken over deze getallen. Dit betekent dat PVRB-berichten, net als transacties, door de nodes gevalideerd moeten worden en in blokken moeten worden opgenomen, zodat elke deelnemer aan het netwerk de naleving van het PVRB-protocol kan valideren. Dit leidt automatisch tot de voor de hand liggende oplossing: als het netwerk overeenstemming bereikt over een blok en de transacties daarin, dan moet PVRB een integraal onderdeel zijn van de consensus en geen afzonderlijk protocol. Anders kan het geval zich voordoen dat een blok geldig is vanuit het perspectief van de consensus, maar dat het PVRB-protocol niet is nageleefd, en vanuit het perspectief van PVRB kan het blok niet worden geaccepteerd. Dus als de 'consensus-integrated' optie wordt gekozen, wordt PVRB een belangrijk onderdeel van de consensus.<\/p>\n<p><\/p>\n<p>Bij het beschrijven van implementaties van PVRB op consensusniveau in het netwerk mogen de vragen van finaliteit in geen geval worden overgeslagen. Finaliteit is een mechanisme dat wordt gebruikt in deterministische consensus, dat een blok (en de keten die er naartoe leidt) fixeert dat definitief is en nooit zal worden weggegooid, ook niet als er een parallelle fork verschijnt. Bijvoorbeeld, Bitcoin heeft dit mechanisme niet \u2014 als een keten met een hogere moeilijkheidsgraad wordt gepubliceerd, vervangt deze elke minder moeilijke keten, ongeacht de lengte van de ketens. In EOS daarentegen zijn de zogenaamde Last Irreversible Blocks definitief, die gemiddeld elke 432 blokken verschijnen (12*21 + 12*15, pre-vote + pre-commit). Dit proces is in wezen het wachten op 2\/3 van de handtekeningen van block-producers (BP). Bij het verschijnen van forks die ouder zijn dan de laatste LIB, worden ze eenvoudigweg verworpen. Dit mechanisme garandeert dat een transactie is opgenomen in de blockchain en nooit zal worden teruggedraaid, ongeacht de middelen die de aanvaller heeft. Ook blokken die zijn ondertekend door 2\/3 van de BP in Hyperledger, Tendermint en andere pBFT-gebaseerde consensussen worden als definitief beschouwd. Daarnaast heeft de protocollen voor het waarborgen van finaliteit zin als een toevoeging aan de consensus, aangezien het asynchroon kan werken met de productie en publicatie van blokken. Hier is een goede <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/pdf\/1710.09437.pdf\">artikel<\/a><\/noindex> over finaliteit in Ethereum.<\/p>\n<p><\/p>\n<p>Finaliteit is uiterst belangrijk voor gebruikers, die zonder deze slachtoffer kunnen worden van een 'double spend'-aanval, wanneer de BP 'vasthoudt' aan blokken en deze publiceert nadat het netwerk een goede transactie 'heeft gezien'. Als er geen finaliteit is, vervangt de gepubliceerde fork het blok met de 'goede' transactie door een ander, uit de 'slechte' fork, waarin dezelfde middelen naar het adres van de aanvaller worden overgemaakt. In het geval van PVRB worden de eisen voor finaliteit nog strikter, omdat het bouwen van forks voor PVRB de mogelijkheid biedt voor de aanvaller om verschillende random varianten voor te bereiden om de meest voordelige te publiceren en de tijd voor de mogelijke aanval te beperken - een goede oplossing.<\/p>\n<p><\/p>\n<p>Daarom is de beste optie om PVRB en finaliteit in \u00e9\u00e9n protocol te combineren - dan is het gefinaliseerde blok = gefinaliseerde random, en dat is precies wat we moesten krijgen. Nu krijgen spelers gegarandeerde random binnen N seconden, en kunnen ze er zeker van zijn dat het onmogelijk is om het terug te draaien of opnieuw te spelen.<\/p>\n<p><\/p>\n<p>De optie met consensus-ge\u00efntegreerd is goed:<\/p>\n<p><\/p>\n<ul>\n<li>de mogelijkheid van asynchrone uitvoering ten opzichte van de productie van blokken - blokken worden normaal geproduceerd, maar parallel kan het PVRB-protocol werken, dat niet voor elk blok random produceert<\/li>\n<li>de mogelijkheid om zelfs zware cryptografie te implementeren, zonder beperkingen die door smart contracts worden opgelegd<\/li>\n<li>de mogelijkheid om snellere berichtenuitwisseling te organiseren dan transacties in de blockchain worden opgenomen, bijvoorbeeld een deel van het protocol kan tussen nodes werken zonder berichten door het netwerk te verspreiden<\/li>\n<\/ul>\n<p><\/p>\n<p>Het heeft echter ook nadelen:<\/p>\n<p><\/p>\n<ul>\n<li>moeilijkheden bij testen en ontwikkeling - netwerkrfouten, verdwijnende nodes, hard forks van het netwerk moeten worden nagebootst<\/li>\n<li>fouten in de implementatie vereisen een hard fork van het netwerk<\/li>\n<\/ul>\n<p><\/p>\n<p>Beide manieren van implementatie van PVRB hebben recht van bestaan, maar implementatie op smart contracts in moderne blockchains is toch behoorlijk beperkt in rekenkracht, en elke overstap naar serieuze cryptografie is vaak gewoonweg onmogelijk. Maar serieuze cryptografie hebben we nodig, zoals verder zal worden aangetoond. Hoewel dit probleem duidelijk tijdelijk van aard is, is serieuze cryptografie in contracten nodig om verschillende taken op te lossen, en geleidelijk komt het beschikbaar (bijvoorbeeld system contracts voor zkSNARKs in Ethereum).<\/p>\n<p><\/p>\n<p>De blockchain die een transparant en betrouwbaar kanaal voor protocolcommunicatie biedt, kost geld. Elke gedecentraliseerde protocol moet rekening houden met de mogelijkheid van een Sybil-aanval; elke handeling kan worden uitgevoerd door samenwerkende accounts. Daarom moet bij het ontwerpen rekening worden gehouden met de mogelijkheden van aanvallers om een willekeurig aantal protocollodeelnemers te cre\u00ebren die samenspannen. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-peremennye-bloka\">PVRB en blokvariabelen.<\/h2>\n<p><\/p>\n<p>Ik heb niet gelogen toen ik zei dat er nog geen goede PVRB, gevalideerd door talloze goktoepassingen, in blockchains is ge\u00efmplementeerd. Waar komt dan al die hoeveelheid goktoepassingen in Ethereum en EOS vandaan? Het verbaast me net zo veel als jou, hoe hebben ze in een volledig deterministische omgeving zoveel 'resistente' random nummers gekregen?<\/p>\n<p><\/p>\n<p>De favoriete manier om random nummers in de blockchain te genereren, is door bepaalde 'onvoorspelbare' informatie uit een blok te nemen en hierop random nummers te baseren \u2014 simpelweg door een of meerdere waarden te hash'en. Een goed artikel over de problemen met dergelijke schema's. <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.positive.com\/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620\">hier<\/a><\/noindex>Je kunt een van de 'onvoorspelbare' waarden in het blok nemen, zoals de blokhash, het aantal transacties, de netwerksnelheid en andere, die van tevoren onbekend zijn. Vervolgens hash je ze, een of meerdere, en in principe zou je dan echte random nummers moeten krijgen. Je kunt zelfs in de whitepaper toevoegen dat jouw schema 'post-quantum secure' is (aangezien er quantum-proof hashfuncties bestaan :)).<\/p>\n<p><\/p>\n<p>Maar zelfs post-quantum secure hashes zijn helaas niet genoeg. Het geheim ligt in de eisen aan PVRB, laat me deze herinneren uit het vorige artikel:<\/p>\n<p><\/p>\n<ol>\n<li>The result must have provably uniform distribution, i.e., it is based on provably secure cryptography.<\/li>\n<li>It is impossible to control any of the bits of the result. Consequently, the outcome cannot be predicted in advance.<\/li>\n<li>The protocol for generation cannot be sabotaged by not participating in the protocol or by overwhelming the network with attacking messages.<\/li>\n<li>All of the above must be resistant to collusion by an acceptable number of dishonest protocol participants (for example, 1\/3 of the participants).<\/li>\n<\/ol>\n<p><\/p>\n<p>In dit geval wordt enkel vereiste 1 nageleefd, en wordt 2 niet nageleefd. Door onvoorspelbare waarden van een block te hashen, krijgen we een gelijkmatige verdeling en goede randomisatie. Maar BP heeft in ieder geval de mogelijkheid om de block te 'publiceren of niet'. Hierdoor kan BP in ieder geval kiezen uit TWEE randomisatie-opties: de 'zijn' en degene die ontstaat als iemand anders de block maakt. BP kan van tevoren 'spieken' wat er zal gebeuren als hij de block publiceert en gewoon besluiten om dit al dan niet te doen. Zo kan hij, bijvoorbeeld, bij 'even-ongelijk' of 'rood\/Zwart' in roulette, de block alleen publiceren als hij een winst ziet. Dit maakt ook strategie\u00ebn zoals het gebruik van de hash van een 'toekomstige' block onwerkzaam. In dit geval wordt gezegd dat 'de randomisatie die voortkomt uit het hashen van actuele gegevens en de hash van de toekomstige block met hoogtes zoals, bijvoorbeeld, N + 42, waarbij N de huidige hoogte van de block is, zal worden gebruikt. Dit versterkt het schema een beetje, maar stelt BP nog steeds in staat, zij het in de toekomst, te kiezen om de block vast te houden of te publiceren.<\/p>\n<p><\/p>\n<p>De software van BP wordt in dit geval ingewikkelder, maar niet veel. Gewoonlijk is er tijdens de validatie en opname van de transactie in de block een snelle controle of er winst zal zijn, en mogelijk een afstemming van bepaalde transactieparameter om een hoge kans op winst te behalen. Hierbij is het vrijwel onmogelijk om een slimme BP te vangen voor dergelijke manipulaties; elke keer kunnen nieuwe adressen worden gebruikt en kan er in kleine hoeveelheden worden gewonnen, zonder argwaan te wekken.<\/p>\n<p><\/p>\n<p>Dus de methoden die gebruikmaken van informatie uit de block zijn niet geschikt als universele implementatie van PVRB. In een beperkte variant, met beperkingen op de inzetgrootte, beperking van het aantal spelers en\/of KYC-registratie (om te voorkomen dat \u00e9\u00e9n speler meerdere adressen gebruikt), kunnen deze schema's werken voor kleine spellen, maar niet meer dan dat.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-commit-reveal\">PVRB en commit-reveal.<\/h2>\n<p><\/p>\n<p>Ok\u00e9, dankzij hashing en de relatief onvoorspelbare hash van de block en andere variabelen. Als we het probleem van front-running door miners oplossen, moet er iets beters ontstaan. Laten we gebruikers aan dit schema toevoegen \u2014 laat ze ook invloed uitoefenen op de randomisatie: elke medewerker van de klantenservice zal je vertellen dat het meest willekeurige in IT-systemen de acties van gebruikers zijn \ud83d\ude42<\/p>\n<p><\/p>\n<p>Een na\u00efeve aanpak waarbij gebruikers gewoon willekeurige getallen sturen en het resultaat wordt berekend als bijvoorbeeld de hash van hun som, is ongeschikt. In dit geval kan de laatste speler die nog speelt, met zijn eigen willekeurige getal de uitkomst be\u00efnvloeden. Daarom wordt een veelgebruikte patroon, commit-reveal, toegepast. De deelnemers sturen eerst hashes van hun willekeurige getallen (commits) en onthullen daarna de willekeurige getallen (reveals). De fase van 'reveal' begint pas nadat de noodzakelijke commits zijn verzameld, zodat de deelnemers precies het willekeurige getal kunnen sturen waarvan ze eerder de hash hebben verzonden. Laten we dit nu combineren met de blokparameters, bij voorkeur genomen uit de toekomst (de willekeurige waarde kan pas in een van de toekomstig blokken worden bekendgemaakt), en voil\u00e0 \u2014 het willekeurige getal is gereed! Nu heeft elke speler invloed op het resulterende willekeurige getal en kan hij de kwaadaardige BP 'verslaan' door zijn eigen, vooraf onbekende, willekeurige getal te gebruiken... We kunnen ook een bescherming tegen sabotage van het protocol toevoegen door geen reveal in de reveal-fase toe te staan \u2014 gewoon vereisen dat bij het committen een bepaalde som aan de transactie wordt gehecht \u2014 een waarborgdie terugkomt tijdens de reveal-procedure. In dit geval zou het niet voordelig zijn om te committen zonder te reveal.<\/p>\n<p><\/p>\n<p>Dit was een goede poging en dergelijke schema's zijn ook te vinden in gaming DApp's, maar helaas is het opnieuw onvoldoende. Nu kan het resultaat niet alleen door de miner worden be\u00efnvloed, maar ook door elke deelnemer aan het protocol. De waarde kan nog steeds worden gecontroleerd, met minder variabiliteit en tegen betaling, maar net als in het geval van de miner, als de resultaatsuitkomst waardevoller is dan de deelnamekosten aan het PVRB-protocol, kan de random-producer (RP) besluiten of hij een reveal doet en kan hij nog steeds kiezen uit minimaal twee opties voor het willekeurige getal.<br \/>\nMaar er is een mogelijkheid ontstaan om degenen te straffen die committen maar niet reveal doen, en dit schema zal nog van pas komen. De eenvoud ervan is een groot voordeel \u2014 meer geavanceerde protocollen vereisen veel krachtigere berekeningen.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-determinirovannye-podpisi\">PVRB en deterministische handtekeningen.<\/h2>\n<p><\/p>\n<p>Er is nog een andere manier om RP een pseudowillekeurig getal te laten geven waar hij geen invloed op kan uitoefenen, als hem een \"prototype\" wordt gegeven \u2014 dit is een deterministische handtekening. Een voorbeeld van een dergelijke handtekening is RSA, terwijl ECS dat niet is. Als RP een sleutelpair heeft: RSA en E\u0421C, en hij ondertekent een bepaalde waarde met zijn priv\u00e9 sleutel, dan krijgt hij bij RSA \u00c9\u00c9N EN ENKELE handtekening, terwijl hij bij ECS meerdere geldige handtekeningen kan genereren. Dit komt doordat bij het cre\u00ebren van een ECS-handtekening een willekeurig getal wordt gebruikt dat door de ondertekenaar wordt gekozen, en dit kan op elke gewenste manier gekozen worden, waardoor de ondertekenaar de mogelijkheid heeft om een van de verschillende handtekeningen te kiezen. In het geval van RSA: \"\u00e9\u00e9n invoerwaarde\" + \"\u00e9\u00e9n sleutelpair\" = \"\u00e9\u00e9n handtekening\". Het is niet mogelijk te voorspellen welke handtekening een andere RP zal produceren, daarom kan PVRB met deterministische handtekeningen worden georganiseerd door het combineren van RSA-handtekeningen van verschillende deelnemers die dezelfde waarde hebben ondertekend. Bijvoorbeeld \u2014 het vorige willekeurige getal. In dit schema worden behoorlijk wat middelen bespaard, aangezien handtekeningen zowel een bevestiging van correct gedrag volgens het protocol zijn, als een bron van willekeurigheid.<\/p>\n<p><\/p>\n<p>Toch, zelfs met deterministische handtekeningen, blijft het schema kwetsbaar voor het \"laatste acteur\" probleem. De laatste deelnemer kan nog steeds beslissen of hij zijn handtekening publiceert of niet, waardoor hij de uitkomst controleert. Het schema kan verder worden ontwikkeld, hashes van blokken kunnen worden toegevoegd, rondes kunnen worden gemaakt, zodat de uitkomst van tevoren niet kan worden voorspeld, maar al deze technieken, zelfs met een aantal verbeteringen, laten nog steeds het probleem van de invloed van \u00e9\u00e9n deelnemer op het collectieve resultaat in een niet-vertrouwde omgeving onopgelost. Bovendien is de grootte van RSA-sleutels (1024 en 2048 bits) vrij groot, en de grootte voor blockchain-transacties is een uiterst belangrijke parameter. Blijkbaar kunnen we het probleem niet simpel oplossen, laten we verder gaan.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-secret-sharing-shemy\">PVRB en secret sharing schema's<\/h2>\n<p><\/p>\n<p>In de cryptografie zijn er schema's waarmee een netwerk kan afspreken over \u00e9\u00e9n en alleen \u00e9\u00e9n waarde PVRB, waarbij deze schema's bestand zijn tegen kwaadwillige acties van sommige deelnemers. Een van de nuttige protocollen om mee kennis te maken is het Shamir secret sharing schema. Dit schema dient om een geheim (bijvoorbeeld een geheime sleutel) op te splitsen in verschillende delen en deze delen aan N deelnemers uit te reiken. Het geheim wordt zo verdeeld dat voor de reconstructie M delen uit N voldoende zijn, waarbij dit elk willekeurig M deel kan zijn. Praktisch gezegd, als je een grafiek van een onbekende functie hebt, wisselen de deelnemers punten op de grafiek uit, en na het krijgen van M punten kan de hele functie worden hersteld.<br \/>\nEen goede uitleg is te vinden in <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Shamir%27s_Secret_Sharing\">wiki<\/a><\/noindex> en om er praktisch mee te spelen, is het nuttig om het protocol in je hoofd te doorlopen op <noindex><a rel=\"nofollow\" href=\"http:\/\/point-at-infinity.org\/ssss\/demo.html\">demo<\/a><\/noindex> pagina.<\/p>\n<p><\/p>\n<p>Als het FSSS (Fiat-Shamir Secret Sharing) schema in zijn puurste vorm toepasbaar zou zijn, zou dit een onverwoestbare PVRB zijn. In de eenvoudigste variant ziet het protocol er als volgt uit:<\/p>\n<p><\/p>\n<ul>\n<li>Elke deelnemer genereert zijn eigen random en verspreidt shares ervan naar de andere deelnemers.<\/li>\n<li>Elke deelnemer onthult zijn deel van de geheimen van de andere deelnemers.<\/li>\n<li>Als een deelnemer meer dan M shares heeft verzameld, kan het nummer van deze deelnemer worden berekend, en dit zal uniek zijn, ongeacht de set onthulde deelnemers.<\/li>\n<li>De combinatie van onthulde randoms is de gewenste PVRB.<\/li>\n<\/ul>\n<p><\/p>\n<p>Hier heeft een afzonderlijke deelnemer al geen invloed meer op de resultaten van het protocol, behalve in gevallen waar zijn deelname cruciaal is voor het bereiken van de threshold voor de onthulling van de random. Daarom werkt dit protocol, mits er een noodzakelijke fractie van de deelnemers die volgens het protocol werken en beschikbare RP zijn, en voldoet het aan de eisen voor cryptografische robuustheid en is het bestand tegen het 'last actor'-probleem.<\/p>\n<p><\/p>\n<p>Dit zou de ideale situatie kunnen zijn, dit PVRB-schema op basis van het secret sharing van Fiat-Shamir is bijvoorbeeld beschreven in <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2017\/216.pdf\">this<\/a><\/noindex> een artikel. Maar zoals eerder genoemd, als je probeert deze in zijn geheel in de blockchain toe te passen, komen er al technische beperkingen naar voren. Hier is een voorbeeld van een testimplementatie van het protocol in een EOS smart contract en het belangrijkste gedeelte ervan \u2014 de controle van de gepubliceerde share van een deelnemer: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/eoscraper\/blob\/master\/Proof.hh#L23\">code<\/a><\/noindex>De code toont aan dat de validatie van de proof meerdere scalare vermenigvuldigingen vereist, en de cijfers zijn zeer groot. Het is belangrijk te begrijpen dat de verificatie in blockchains plaatsvindt op het moment dat de block-producer de transactie verwerkt, en elke deelnemer moet eenvoudig de correctheid van het protocol kunnen controleren, daarom zijn de eisen aan de snelheid van de verificatiefunctie zeer streng. In deze variant bleek het niet werkbaar, omdat de verificatie niet voldeed aan de transactiebeperkingen (0,5 seconde).<\/p>\n<p><\/p>\n<p>De effici\u00ebntie van de verificatie is een van de belangrijkste vereisten voor het gebruik van vrijwel alle geavanceerde cryptografische schema's in de blockchain. Het cre\u00ebren van proofs en het voorbereiden van berichten - deze procedures kunnen off-chain worden uitgevoerd op hoogpresterende computers, maar de verificatie kan niet worden omzeild - dit is een andere belangrijke vereiste voor PVRB. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-threshold-signatures\">PVRB en threshold-handtekeningen<\/h2>\n<p><\/p>\n<p>Na kennisgemaakt te hebben met het schema van secret sharing, hebben we een hele klasse protocollen ontdekt die verbonden zijn door het sleutelwoord \u201cthreshold\u201d. Wanneer M eerlijke deelnemers uit N vereisten zijn om bepaalde informatie te onthullen, en de set van eerlijke deelnemers kan een willekeurige subset van N zijn, spreken we van \u201cthreshold\u201d-schema's. Deze stellen ons in staat om het probleem van de \u201claatste actor\u201d op te lossen; nu, als een aanvaller zijn deel van het geheim niet onthult, zal een andere eerlijke deelnemer dat doen. Deze schema's maken het mogelijk om overeenstemming te bereiken over \u00e9\u00e9n en slechts \u00e9\u00e9n waarde, zelfs als een deel van de deelnemers het protocol saboteert. <\/p>\n<p><\/p>\n<p>De combinatie van deterministische handtekeningen en threshold-schema's heeft geleid tot de ontwikkeling van een zeer handig en veelbelovend schema voor de implementatie van PVRB - dit zijn deterministische threshold-handtekeningen. Hier is <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2002\/081.pdf\">artikel<\/a><\/noindex> over verschillende toepassingen van threshold-handtekeningen, en hier is nog een goede <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.dash.org\/secret-sharing-and-threshold-signatures-with-bls-954d1587b5f\">longread<\/a><\/noindex> van Dash. <\/p>\n<p><\/p>\n<p>In het laatste artikel worden BLS-handtekeningen beschreven (BLS staat voor Boneh-Lynn-Shacham, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.iacr.org\/archive\/asiacrypt2001\/22480516.pdf\">hier is<\/a><\/noindex> artikelen ), die een zeer belangrijke en uiterst handige eigenschap voor programmeurs hebben \u2014 publieke, geheime, publieke sleutels en BLS-handtekeningen kunnen met elkaar worden gecombineerd door middel van eenvoudige wiskundige bewerkingen, waarbij hun combinaties valide sleutels en handtekeningen blijven, waardoor het gemakkelijk is om veel handtekeningen in \u00e9\u00e9n en veel publieke sleutels in \u00e9\u00e9n samen te voegen. Ze zijn ook deterministisch en leveren bij dezelfde invoer dezelfde uitkomst op. Dankzij deze eigenschap zijn de combinaties van BLS-handtekeningen zelf valide sleutels, wat een optie mogelijk maakt waarbij M van N deelnemers \u00e9\u00e9n en slechts \u00e9\u00e9n handtekening produceren, die gedetermineerd, openbaar verifieerbaar en onvoorspelbaar is totdat deze wordt onthuld door de M-de deelnemer.<\/p>\n<p><\/p>\n<p>In het schema met threshold BLS-handtekeningen ondertekent elke deelnemer iets (bijvoorbeeld de vorige random) met behulp van BLS, en de totale threshold-handtekening is de gevraagde random. De cryptografische eigenschappen van BLS-handtekeningen voldoen aan de eisen voor de kwaliteit van random, de threshold-deel beschermt tegen \u201clast-actor\u201d, en de unieke combineerbaarheid van sleutels maakt het mogelijk om nog veel interessante algoritmes te implementeren, die bijvoorbeeld in staat zijn om berichten in het protocol effici\u00ebnt te aggregeren.<\/p>\n<p><\/p>\n<p>Dus, als je PVRB in je blockchain bouwt, is de kans groot dat je bij het schema van BLS-threshold-handtekeningen uitkomt, dat al door verschillende projecten wordt gebruikt. Bijvoorbeeld, DFinity (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/random-beacon\">hier<\/a><\/noindex> benchmark die het schema implementeert, en <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/vss\/blob\/master\/docs\/index.md\">here<\/a><\/noindex> voorbeeld van de implementatie van verifiable secret sharing), of Keep.network (hier is hun random beacon <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-yellowpaper\">yellowpaper<\/a><\/noindex>, maar <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-box\">bijvoorbeeld<\/a><\/noindex> smart contract dat het protocol bedient).<\/p>\n<p><\/p>\n<h2 id=\"implementaciya-pvrb\">Implementatie van PVRB<\/h2>\n<p><\/p>\n<p>Helaas zien we nog steeds geen klaar, ge\u00efmplementeerd protocol in de PVRB-blockchains dat zijn veiligheid en robuustheid heeft bewezen. Hoewel de protocollen zelf er zijn, is het technisch gezien niet eenvoudig om ze toe te passen op bestaande oplossingen. Voor gecentraliseerde systemen heeft PVRB geen zin, en gedecentraliseerde systemen zijn strikt beperkt in alle rekenbronnen: CPU, geheugen, opslag, I\/O. Het ontwerpen van PVRB is het combineren van verschillende protocollen om iets te cre\u00ebren dat aan alle vereisten voldoet voor tenminste een levensvatbare blockchain. Het ene protocol rekent effici\u00ebnter, maar vereist meer berichten tussen RP, terwijl het andere extreem weinig berichten vereist, maar het cre\u00ebren van proof kan een taak zijn die tientallen minuten of zelfs uren kan duren.<\/p>\n<p><\/p>\n<p>Ik zal de factoren opsommen die u moet overwegen bij het kiezen van een kwalitatieve PVRB:<\/p>\n<p><\/p>\n<ul>\n<li><em>Cryptografische robuustheid<\/em>. Uw PVRB moet strikt onpartijdig zijn, zonder de mogelijkheid om \u00e9\u00e9n enkele bit te controleren. In sommige schema's is dit niet het geval, dus roep een cryptograaf erbij.<\/li>\n<li><em>Het probleem van de 'laatste actor'<\/em>. Uw PVRB moet bestand zijn tegen aanvallen waarbij een aanvaller die de controle heeft over een of meerdere RP \u00e9\u00e9n van de twee mogelijke uitkomsten kan kiezen.<\/li>\n<li><em>Het probleem van protocol-sabotage<\/em>. Uw PVRB moet bestand zijn tegen aanvallen waarbij een aanvaller die de controle heeft over een of meerdere RP kan beslissen of het toevallig is of niet, en gegarandeerd of met een bepaalde waarschijnlijkheid hierop kan be\u00efnvloeden.<\/li>\n<li><em>Het probleem van het aantal berichten<\/em>. Uw RP moeten minimaal berichten naar de blockchain verzenden en synchronisatiesituaties zoals 'ik heb bepaalde informatie verzonden, ik wacht op een antwoord van een specifieke deelnemer' zoveel mogelijk vermijden. In p2p-netwerken, vooral geografisch verspreid, kunt u niet rekenen op een snelle reactie.<\/li>\n<li><em>Het probleem van de rekenkundige complexiteit<\/em>. De verificatie van elke fase van PVRB on-chain moet extreem eenvoudig zijn, omdat deze wordt uitgevoerd door alle volledige klanten van het netwerk. Als de uitvoering plaatsvindt via een smart contract, zijn de eisen aan de snelheid zeer streng.<\/li>\n<li><em>Het probleem van beschikbaarheid en liveness<\/em>. Uw PVRB moet erop gericht zijn bestand te zijn tegen situaties waarin een deel van het netwerk tijdelijk niet beschikbaar is en een deel van de RP gewoon stopt met functioneren.<\/li>\n<li><em>Het probleem van de trusted setup en de initi\u00eble distributie van sleutels.<\/em>. Als uw PVRB het primaire setup-protocol gebruikt, is dat een aparte grote en serieuze zaak. Hier is <noindex><a rel=\"nofollow\" href=\"https:\/\/z.cash\/ru\/blog\/the-design-of-the-ceremony\/\">bijvoorbeeld<\/a><\/noindex>. Als deelnemers v\u00f3\u00f3r het begin van het protocol elkaar hun sleutels moeten doorgeven, is dat ook een probleem, vooral als de samenstelling van de deelnemers verandert.<\/li>\n<li><em>Ontwikkelingsproblemen<\/em>. De beschikbaarheid van bibliotheken in de juiste talen, hun veiligheid en prestaties, openbaarmaking, complexe tests, enzovoort.<\/li>\n<\/ul>\n<p><\/p>\n<p>Bijvoorbeeld, bij threshold BLS-handtekeningen is er een aanzienlijk probleem \u2014 voordat deelnemers kunnen beginnen met werken, moeten ze elkaar hun sleutels overhandigen en een groep organiseren waarin de threshold zal functioneren. Dit betekent dat er minimaal \u00e9\u00e9n ronde van uitwisseling in een gedecentraliseerd netwerk moet plaatsvinden, en gezien het feit dat de gegenereerde randomisatie, bijvoorbeeld, nodig is in games, praktischerwijs in real-time, betekent dit dat sabotage van het protocol op dit punt mogelijk is, en de voordelen van de threshold-structuur verloren gaan. Dit probleem is al eenvoudiger dan de vorige, maar vereist nog steeds de ontwikkeling van een aparte procedure voor het vormen van threshold-groepen, die economisch moet worden beschermd, bijvoorbeeld door middel van stortingen en het ontnemen van fondsen (slashing) van deelnemers die zich niet aan het protocol houden. Bovendien past de verificatie van BLS met een acceptabel niveau van veiligheid simpelweg niet binnen een standaardtransactie van EOS of Ethereum \u2014 er is simpelweg niet genoeg tijd voor verificatie. De contractcode is WebAssembly of EVM, uitgevoerd door een virtuele machine. Cryptografische functies zijn nog niet native ge\u00efmplementeerd (tot nu toe), en werken tientallen keren langzamer dan reguliere cryptografische bibliotheken. Veel protocollen voldoen niet aan de vereisten alleen al op basis van het volume van de sleutels, bijvoorbeeld 1024 en 2048 bit voor RSA, wat 4-8 keer groter is dan de standaardhandtekening in Bitcoin en Ethereum.<\/p>\n<p><\/p>\n<p>Ook de aanwezigheid van implementaties in verschillende programmeertalen speelt een rol \u2014 er zijn er niet veel, vooral voor nieuwe protocollen. De optie om te integreren in het consensus vereist dat het protocol in de taal van het platform wordt geschreven, dus er zal gezocht moeten worden naar code in Go voor geth, in Rust voor Parity, en in C++ voor EOS. Code in JavaScript moet door iedereen worden gezocht, en omdat JavaScript en cryptografie geen beste vrienden zijn, is WebAssembly, dat nu al duidelijk op weg is om de volgende belangrijke internetstandaard te worden, een hulp.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Conclusie<\/h2>\n<p><\/p>\n<p>Ik hoop dat de vorige <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/448330\/\">artikel<\/a><\/noindex> Ik kon je overtuigen dat het genereren van willekeurige getallen op de blockchain cruciaal is voor veel aspecten van het leven in gedecentraliseerde netwerken. In dit artikel heb ik aangetoond dat deze uitdaging extreem ambitieus en complex is, maar dat er al goede oplossingen bestaan. Over het algemeen kan het uiteindelijke ontwerp van het protocol pas worden vastgesteld na grootschalige tests die alle aspecten van de setup tot het emuleren van storingen in overweging nemen. Daarom zul je waarschijnlijk geen kant-en-klare recepten vinden in de whitepapers van de teams en in artikelen, en we zullen ons de komende een tot twee jaar zeker niet wagen aan uitspraken als 'doe dit, dat is zeker de juiste manier'. <\/p>\n<p><\/p>\n<p>Voor nu, voor onze PVRB in de ontwikkelende blockchain. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/haya\">Haya<\/a><\/noindex>, hebben we besloten om threshold BLS-signatures toe te passen. We zijn van plan om PVRB op consensusniveau te implementeren, aangezien verificatie in smart contracts met een acceptabel niveau van veiligheid momenteel onmogelijk is. Het is mogelijk dat we meteen twee schema\u2019s gebruiken: eerst een dure secret sharing voor het cre\u00ebren van een langdurig random_seed, dat we dan gebruiken als basis voor de hoge frequentie van willekeurige generaties met behulp van deterministische threshold BLS-handtekeningen. Mogelijk beperken we ons tot slechts \u00e9\u00e9n van deze schema\u2019s. Het vooraf kunnen zeggen hoe het protocol eruit komt te zien, is helaas onmogelijk. Wat ons echter geruststelt, is dat, net als in de wetenschap, in ingenieursvraagstukken een negatief resultaat ook een resultaat is, en elke nieuwe poging om een probleem op te lossen een stap verder is voor iedereen die zich met deze kwestie bezighoudt. Om aan de zakelijke eisen te voldoen, lossen we een specifieke praktische uitdaging op - het bieden van een betrouwbare bron van entropy voor gamingtoepassingen, wat betekent dat we ook aandacht moeten besteden aan de blockchain zelf, met name aan de finaliteit van de keten en het governance van het netwerk. <\/p>\n<p><\/p>\n<p>Ook al zien we tot nu toe nog geen bewezen robuuste PVRB in blockchains, die al een behoorlijke tijd is gebruikt om de tests van echte toepassingen, meerdere audits, belastingen en uiteraard echte aanvallen te doorstaan, het aantal mogelijke paden bevestigt dat er een oplossing bestaat en dat een van deze algoritmen uiteindelijk het probleem zal oplossen. We delen graag onze resultaten en bedanken andere teams die zich ook met deze kwestie bezighouden voor hun artikelen en code, die het voor ingenieurs mogelijk maken om niet twee keer in dezelfde valkuil te trappen. <\/p>\n<p><\/p>\n<p>Dus als je een programmeur ontmoet die een gedecentraliseerde random generator ontwerpt, wees dan voorzichtig en zorgzame; bied indien nodig psychologische hulp aan \ud83d\ude42<\/p>\n<p>Bron: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/452340\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 function getAbsolutelyRandomNumer() { return 4; \/\/ returns absolutely random number! } \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0442\u043e\u0439\u043a\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u0430 \u0438\u0437 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u201cPublicly Verifiable Random Beacon\u201d (\u0434\u0430\u043b\u0435\u0435 PVRB) \u043b\u0438\u0448\u044c \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435, \u0442.\u043a. \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d\u0430 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430: \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431 \u043e\u0434\u043d\u043e\u043c \u0431\u0438\u0442\u0435, \u0440\u0430\u0443\u043d\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33888","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 function getAbsolutelyRandomNumer() { return 4; \/\/ returns absolutely random number!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0438 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438: \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 function getAbsolutelyRandomNumer() { return 4; \/\/ returns absolutely random number!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:55:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:55:15+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Willekeurige getallen en gedecentraliseerde netwerken: implementaties | ProHoster","description":"Inleiding function getAbsolutelyRandomNumer() { return 4; \/\/ retourneert absoluut een willekeurig getal!","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0438 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438: \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 function getAbsolutelyRandomNumer() { return 4; \/\/ returns absolutely random number!","og:url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:55:15+00:00","article:modified_time":"2019-10-31T18:55:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33888","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 17:06:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:31:23","updated":"2026-01-21 17:06:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/33888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=33888"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/33888\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=33888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=33888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=33888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}