{"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\/it\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","title":{"rendered":"Numeri casuali e reti decentralizzate: implementazioni","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Introduzione<\/h1>\n<p><\/p>\n<pre><code class=\"plaintext\">function getAbsolutelyRandomNumer() {\n        return 4; \/\/ returns absolutely random number!\n}<\/code><\/pre>\n<p><\/p>\n<p>Come nel caso del concetto di cifratura assolutamente resistente della crittografia, i protocolli reali \"Publicly Verifiable Random Beacon\" (di seguito PVRB) cercano solo di avvicinarsi il pi\u00f9 possibile a uno schema ideale, poich\u00e9 nelle reti reali non \u00e8 applicabile in modo puro: \u00e8 necessario accordarsi su un singolo bit, ci devono essere molti turni e tutti i messaggi devono essere estremamente veloci e sempre consegnati. Ovviamente, nelle reti reali non \u00e8 cos\u00ec. Pertanto, nella progettazione di PVRB per compiti specifici nei blockchain moderni, oltre all'impossibilit\u00e0 di controllare il random ottenuto e alla resistenza crittografica, emergono anche molti problemi puramente architettonici e tecnici.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Il blockchain stesso funge essentially da ambiente di comunicazione per PVRB, in cui i messaggi = transazioni. Questo consente di astraersi parzialmente dai problemi di rete, dalla mancata consegna dei messaggi e dai problemi del software intermedio: tutti questi rischi vengono assunti dalla rete decentralizzata, e il suo valore principale per PVRB \u00e8 l'impossibilit\u00e0 di revocare o danneggiare una transazione gi\u00e0 inviata, il che non consente ai partecipanti di ritirarsi dal protocollo, a meno che non abbiano effettuato un attacco di successo al consenso. Tale livello di sicurezza \u00e8 accettabile, quindi PVRB deve essere resistente ai collusioni dei partecipanti nella stessa misura della catena principale del blockchain. Inoltre, questo suggerisce che PVRB deve far parte del consenso, se la rete ha concordato sulla catena principale di blocchi, affinch\u00e9 possa concordare anche su un singolo random risultante onesto. Oppure, PVRB \u00e8 semplicemente un protocollo standalone, implementato tramite contratto intelligente, che opera in modo asincrono rispetto al blockchain e ai blocchi. Entrambi i metodi hanno i loro vantaggi e svantaggi, e la scelta tra di essi \u00e8 estremamente non banale. <\/p>\n<p><\/p>\n<h2 id=\"dva-sposoba-implementacii-pvrb\">Due modi di implementare PVRB<\/h2>\n<p><\/p>\n<p>Descriviamo in dettaglio due varianti di implementazione di PVRB: la versione standalone, che funziona utilizzando un contratto intelligente indipendente dal blockchain, e la versione integrata nel consenso, secondo la quale la rete concorda sulla catena di blocchi e sulle transazioni incluse. In tutti i casi, terr\u00f2 presente i popolari motori blockchain: Ethereum, EOS, e tutti quelli simili nel modo di ospitare e processare contratti intelligenti. <\/p>\n<p><\/p>\n<h3 id=\"standalone-contract\">Contratto autonomo<\/h3>\n<p><\/p>\n<p>In questa versione, PVRB rappresenta un contratto intelligente che accetta transazioni da random-producer (di seguito RP), le elabora, combina i risultati e, di conseguenza, giunge a un valore che pu\u00f2 essere ottenuto da qualsiasi utente di questo contratto. Questo valore potrebbe non essere memorizzato direttamente nel contratto, ma essere rappresentato solo da dati da cui si pu\u00f2 determinare in modo univoco un solo valore del risultato casuale. In questo schema, gli RP sono gli utenti della blockchain, e chiunque pu\u00f2 essere coinvolto nel processo di generazione.<\/p>\n<p><\/p>\n<p>Questa opzione del contratto autonomo ha vantaggi:<\/p>\n<p><\/p>\n<ul>\n<li>portabilit\u00e0 (i contratti possono essere trasferiti da una blockchain all'altra)<\/li>\n<li>semplicit\u00e0 di implementazione e test (\u00e8 facile scrivere e testare i contratti)<\/li>\n<li>comodit\u00e0 nell'implementazione di schemi economici (\u00e8 facile creare il proprio token, la cui logica serve agli scopi di PVRB)<\/li>\n<li>possibilit\u00e0 di avvio su blockchain gi\u00e0 esistenti<\/li>\n<\/ul>\n<p><\/p>\n<p>Tuttavia, presenta anche degli svantaggi:<\/p>\n<p><\/p>\n<ul>\n<li>severe limitazioni sulle risorse durante i calcoli, volume delle transazioni e storage (in parole povere cpu\/mem\/io)<\/li>\n<li>limitazioni sulle operazioni all'interno del contratto (non tutte le istruzioni sono disponibili, \u00e8 difficile collegare librerie esterne)<\/li>\n<li>impossibilit\u00e0 di organizzare la messaggistica pi\u00f9 velocemente di quanto le transazioni vengano incluse nella blockchain<\/li>\n<\/ul>\n<p><\/p>\n<p>Questa opzione \u00e8 adatta per implementare PVRB, che deve essere avviato in una rete esistente, senza contenere crittografia complessa e senza richiedere molte interazioni.<\/p>\n<p><\/p>\n<h3 id=\"consensus-integrated\">Consensus-integrato<\/h3>\n<p><\/p>\n<p>In questa variante, PVRB \u00e8 implementato nel codice del nodo blockchain, incorporato o funziona in parallelo con lo scambio di messaggi tra i nodi della blockchain. I risultati del protocollo vengono registrati direttamente nei blocchi generati e i messaggi del protocollo vengono inviati attraverso la rete p2p tra i nodi. Poich\u00e9 il protocollo produce numeri che devono essere registrati nei blocchi, la rete deve raggiungere un consenso su di essi. Ci\u00f2 significa che i messaggi PVRB, cos\u00ec come le transazioni, devono essere validati dai nodi e inclusi nei blocchi, affinch\u00e9 ogni partecipante alla rete possa validare il rispetto del protocollo PVRB. Questo ci porta automaticamente a una soluzione ovvia: se la rete concorda sul consenso riguardo al blocco e alle transazioni in esso, allora PVRB deve essere parte del consenso e non un protocollo separato. Altrimenti, si potrebbe verificare una situazione in cui un blocco \u00e8 valido dal punto di vista del consenso, ma il protocollo PVRB non \u00e8 rispettato, e dal punto di vista di PVRB il blocco non pu\u00f2 essere accettato. Pertanto, se viene scelto il tipo \"consensus-integrated\", PVRB diventa una parte importante del consenso.<\/p>\n<p><\/p>\n<p>Descrivendo le implementazioni di PVRB a livello di consenso nella rete, non si possono in alcun modo trascurare le questioni della finalit\u00e0. La finalit\u00e0 \u00e8 un meccanismo utilizzato nei consensi deterministici, fissando un blocco (e la catena che lo conduce) che \u00e8 finale e non sar\u00e0 mai scartato, anche se compare un fork parallelo. Ad esempio, in Bitcoin non esiste tale meccanismo: se viene pubblicata una catena di maggiore difficolt\u00e0, essa sostituir\u00e0 qualsiasi catena di minor complessit\u00e0, indipendentemente dalla lunghezza delle catene. In EOS, ad esempio, i blocchi finali sono i cosiddetti Last Irreversible Blocks, che compaiono in media ogni 432 blocchi (12*21 + 12*15, pre-vote + pre-commit). Questo processo \u00e8 essenzialmente una attesa di 2\/3 delle firme dai block-producers (BP). Quando appaiono fork che sono pi\u00f9 vecchi dell'ultimo LIB, vengono semplicemente scartati. Questo meccanismo consente di affermare con certezza che una transazione \u00e8 inclusa nella blockchain e non sar\u00e0 mai retrocessa, indipendentemente dalle risorse disponibili per un attaccante. Inoltre, i blocchi finali sono quelli firmati da 2\/3 dei BP in Hyperledger, Tendermint e altri consensi basati su pBFT. Inoltre, il protocollo per garantire la finalit\u00e0 ha senso farlo come sovrastruttura sopra il consenso, poich\u00e9 pu\u00f2 funzionare in modo asincrono con la produzione e la pubblicazione dei blocchi. <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/pdf\/1710.09437.pdf\">su Habr.<\/a><\/noindex> sulla finalit\u00e0 in Ethereum.<\/p>\n<p><\/p>\n<p>La finalit\u00e0 \u00e8 estremamente importante per gli utenti, che senza di essa possono diventare vittime di un attacco di \"double spend\", quando il BP \"ritiene\" i blocchi e li pubblica dopo che la rete ha \"visto\" una buona transazione. Se non c'\u00e8 finalit\u00e0, il fork pubblicato sostituisce il blocco con la transazione \"buona\" con un'altra, proveniente da un fork \"cattivo\", in cui gli stessi fondi vengono trasferiti all'indirizzo dell'attaccante. Nel caso del PVRB, i requisiti di finalit\u00e0 diventano ancora pi\u00f9 severi, poich\u00e9 la costruzione di fork per PVRB significa che l'attaccante pu\u00f2 preparare diverse versioni casuali per pubblicare quella pi\u00f9 vantaggiosa e limitare il tempo di possibile attacco \u2014 una buona soluzione.<\/p>\n<p><\/p>\n<p>Pertanto, la migliore opzione \u00e8 combinare PVRB e finalit\u00e0 in un unico protocollo \u2014 cos\u00ec il blocco finalizzato = casualit\u00e0 finalizzata, e questo \u00e8 esattamente ci\u00f2 che doveva essere ottenuto. Ora i giocatori riceveranno una casualit\u00e0 garantita in N secondi e possono stare certi che non pu\u00f2 essere annullata o ripetuta.<\/p>\n<p><\/p>\n<p>L'opzione con consenso integrato \u00e8 buona:<\/p>\n<p><\/p>\n<ul>\n<li>con la possibilit\u00e0 di attuazione asincrona rispetto alla produzione di blocchi \u2014 i blocchi vengono prodotti normalmente, ma parallelamente a questo pu\u00f2 funzionare il protocollo PVRB, che produce casualit\u00e0 non ad ogni blocco.<\/li>\n<li>con la possibilit\u00e0 di implementare anche crittografie pesanti, senza le limitazioni imposte dai contratti smart.<\/li>\n<li>con la possibilit\u00e0 di organizzare comunicazioni pi\u00f9 rapide rispetto all'inclusione delle transazioni nella blockchain, ad esempio parte del protocollo pu\u00f2 funzionare tra nodi senza diffondere messaggi in rete.<\/li>\n<\/ul>\n<p><\/p>\n<p>Tuttavia, presenta anche degli svantaggi:<\/p>\n<p><\/p>\n<ul>\n<li>difficolt\u00e0 nella testing e nello sviluppo \u2014 sar\u00e0 necessario emulare errori di rete, nodi disattivati, hard fork della rete.<\/li>\n<li>errori nell'implementazione richiedono un hard fork della rete.<\/li>\n<\/ul>\n<p><\/p>\n<p>Entrambi i metodi di implementazione del PVRB hanno diritto di esistere, ma l'implementazione nei contratti smart nelle blockchain moderne \u00e8 comunque piuttosto limitata nelle risorse computazionali, e qualsiasi passaggio a una crittografia seria \u00e8 spesso semplicemente impossibile. E una crittografia seria ci sar\u00e0 necessaria, come verr\u00e0 dimostrato in seguito. Sebbene questo problema sia chiaramente di natura temporanea, una crittografia seria nei contratti \u00e8 necessaria per risolvere molti compiti e, gradualmente, sta emergendo (ad esempio, contratti di sistema per zkSNARKs in Ethereum).<\/p>\n<p><\/p>\n<p>La blockchain che garantisce un canale di comunicazione trasparente e sicuro per il protocollo non lo fa gratuitamente. Qualsiasi protocollo decentralizzato deve considerare la possibilit\u00e0 di attacchi Sybil; qualsiasi azione pu\u00f2 essere realizzata da forze concordate di pi\u00f9 account, quindi nella progettazione \u00e8 necessario tener conto delle capacit\u00e0 degli attaccanti di creare un numero arbitrario di partecipanti al protocollo che agiscono in collusione. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-peremennye-bloka\">PVRB e variabili del blocco.<\/h2>\n<p><\/p>\n<p>Non mentivo quando dicevo che un buon PVRB, verificato da molte applicazioni di gioco, non \u00e8 ancora stato implementato nelle blockchain. Da dove viene allora un tale numero di applicazioni di gioco su Ethereum ed EOS? Questo mi sorprende tanto quanto voi; come hanno fatto a trovare cos\u00ec tanti \"random\" \"resistenti\" in un ambiente completamente deterministico?<\/p>\n<p><\/p>\n<p>Il modo preferito per ottenere casualit\u00e0 nella blockchain \u00e8 prendere qualche informazione \"imprevedibile\" dal blocco e basare su di essa la generazione di random, semplicemente hashando uno o pi\u00f9 valori. Un buon articolo sui problemi di tali schemi. <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.positive.com\/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620\">qui<\/a><\/noindex>. Si pu\u00f2 prendere uno dei valori \"imprevedibili\" nel blocco, come l'hash del blocco, il numero di transazioni, la difficolt\u00e0 della rete e altri valori sconosciuti in anticipo. Poi hashare questi, uno o pi\u00f9, e, in teoria, dovrebbe produrre una vera casualit\u00e0. Si potrebbe anche aggiungere nel whitepaper che il vostro schema \u00e8 \"post-quantum secure\" (dato che esistono funzioni di hash resistenti ai quanti :)).<\/p>\n<p><\/p>\n<p>Ma anche gli hash post-quantum secure non sono sufficienti, ahim\u00e8. Il segreto \u00e8 nei requisiti per il PVRB, ricordo i loro punti dalla precedente articolo:<\/p>\n<p><\/p>\n<ol>\n<li>Il risultato deve avere una distribuzione dimostrabilmente uniforme, cio\u00e8 basata su crittografia dimostrabilmente sicura.<\/li>\n<li>Non \u00e8 possibile controllare alcun bit del risultato. Di conseguenza, il risultato non pu\u00f2 essere previsto in anticipo.<\/li>\n<li>Non \u00e8 possibile sabotare il protocollo di generazione mediante l'astensione dal protocollo o sovraccaricando la rete con messaggi malevoli.<\/li>\n<li>Tutto quanto sopra deve essere resistente a cospirazioni di un numero consentito di partecipanti disonesti al protocollo (ad esempio 1\/3 dei partecipanti).<\/li>\n<\/ol>\n<p><\/p>\n<p>In questo caso viene rispettato solo il requisito 1 e non il 2. Hashando valori imprevedibili dal blocco, otteniamo una distribuzione uniforme e buoni risultati casuali. Ma il BP ha almeno la possibilit\u00e0 di \"pubblicare il blocco o meno\". In questo modo, il BP pu\u00f2 almeno scegliere tra DUE varianti di casualit\u00e0: \"propria\" e quella che si otterrebbe se il blocco fosse pubblicato da qualcuno altro. Il BP pu\u00f2 anticipare \"cosa succeder\u00e0\" se pubblica il blocco e semplicemente decide se farlo o meno. Ad esempio, giocando a \"pari-dispari\" o \"rosso\/nero\" alla roulette, pu\u00f2 pubblicare il blocco solo se vede un guadagno. Questo rende inefficace anche la strategia di utilizzo, come ad esempio l'hash del blocco \"del futuro\". In questo caso si dice che \"verr\u00e0 utilizzata la casualit\u00e0 ottenuta dall'hashing dei dati attuali e dall'hash del blocco futuro di altezza, ad esempio, N + 42, dove N \u00e8 l'altezza attuale del blocco. Questo un po' rinforza lo schema, ma consente comunque al BP, anche se in futuro, di scegliere se trattenere il blocco o pubblicarlo.<\/p>\n<p><\/p>\n<p>Il software del BP in questo caso si complica, ma non troppo. Durante la convalida e l'inclusione della transazione nel blocco viene effettuato un rapido controllo per vedere se ci sar\u00e0 un guadagno e, possibilmente, la regolazione di uno dei parametri della transazione per ottenere un'alta probabilit\u00e0 di vincita. Tuttavia, catturare un BP intelligente durante tali manovre \u00e8 praticamente impossibile, poich\u00e9 si possono utilizzare nuovi indirizzi ogni volta, vincendo poco alla volta senza suscitare sospetti.<\/p>\n<p><\/p>\n<p>Pertanto, i metodi che utilizzano informazioni dal blocco non sono adatti come implementazione universale del PVRB. In una variante limitata, con restrizioni sulle dimensioni delle scommesse, limiti sul numero di giocatori e\/o registrazione KYC (per evitare che un singolo giocatore utilizzi pi\u00f9 indirizzi), questi schemi possono funzionare per piccoli giochi, ma non oltre.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-commit-reveal\">PVRB e commit-reveal.<\/h2>\n<p><\/p>\n<p>Bene, grazie all'hashing e almeno alla relativa imprevedibilit\u00e0 dell'hash del blocco e di altre variabili. Se risolviamo il problema del front-running dei miner, dovrebbe uscire qualcosa di pi\u00f9 efficace. Aggiungiamo a questo schema gli utenti \u2014 lasciamo che influenzino anche la casualit\u00e0: qualsiasi membro del supporto tecnico ti dir\u00e0 che la cosa pi\u00f9 casuale nei sistemi IT sono le azioni degli utenti \ud83d\ude42<\/p>\n<p><\/p>\n<p>Uno schema ingenuo, in cui gli utenti inviano semplicemente numeri casuali e il risultato viene calcolato come, ad esempio, l'hash della loro somma, non \u00e8 adatto. In questo caso, l'ultimo giocatore pu\u00f2 controllare il risultato scegliendo il proprio numero casuale. Pertanto, si utilizza un pattern ampiamente diffuso chiamato commit-reveal. I partecipanti inviano prima gli hash dei loro numeri casuali (commit) e poi rivelano i numeri stessi (reveal). La fase 'reveal' inizia solo dopo che sono stati raccolti i commit necessari, quindi i partecipanti possono inviare esattamente il numero casuale di cui hanno inviato in precedenza l'hash. Ora uniamo tutto ci\u00f2 con i parametri del blocco, meglio se presi dal futuro (il numero casuale potr\u00e0 essere conosciuto solo in uno dei blocchi futuri), ed ecco fatto: il numero casuale \u00e8 pronto! Ora ogni giocatore influisce sul numero casuale risultante e pu\u00f2 'sconfiggere' un BP malizioso, sovrapponendo il proprio numero casuale, scelto in anticipo, a quello dell'altro... Inoltre, si potrebbe aggiungere una protezione contro il sabotaggio del protocollo durante la fase di reveal, richiedendo semplicemente di allegare una certa somma alla transazione al momento del commit \u2014 un deposito di garanzia, che verr\u00e0 restituito solo durante la procedura di reveal. In questo caso, fare commit e non fare reveal non sarebbe vantaggioso.<\/p>\n<p><\/p>\n<p>\u00c8 stata una buona tentativa, e tali schemi esistono anche nelle DApp di gioco, ma purtroppo non basta. Ora il risultato pu\u00f2 essere influenzato non solo dal miner, ma anche da qualsiasi partecipante al protocollo. Si pu\u00f2 ancora controllare il valore in s\u00e9, con una minore variabilit\u00e0 e dietro compenso, ma, come nel caso del miner, se i risultati del sorteggio valgono pi\u00f9 della quota di partecipazione al protocollo PVRB, allora il random-producer (RP) pu\u00f2 decidere se fare reveal e pu\u00f2 comunque scegliere tra almeno due opzioni di numero casuale.<br \/>\nD'altro canto, \u00e8 emersa la possibilit\u00e0 di punire coloro che fanno commit e non fanno reveal, e questo schema sar\u00e0 comunque utile. La sua semplicit\u00e0 \u00e8 un vantaggio significativo: protocolli pi\u00f9 complessi richiedono calcoli molto pi\u00f9 potenti.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-determinirovannye-podpisi\">PVRB e firme determinate.<\/h2>\n<p><\/p>\n<p>C'\u00e8 un altro modo per costringere l'RP a fornire un numero pseudo-casuale su cui non pu\u00f2 influire, se gli viene fornito un \u201cmodello\u201d: si tratta di una firma deterministica. Una firma del genere \u00e8, ad esempio, RSA, e non \u00e8 ECS. Se l'RP ha una coppia di chiavi: RSA e ECC, e firma un certo valore con la sua chiave privata, in caso di RSA otterr\u00e0 UNA E SOLA FIRMA, mentre nel caso di ECS pu\u00f2 generare un numero qualsiasi di firme valide diverse. Questo succede perch\u00e9 nella creazione della firma ECS viene utilizzato un numero casuale scelto dal firmatario, e pu\u00f2 essere scelto in qualsiasi modo, dando al firmatario la possibilit\u00e0 di scegliere tra diverse firme. Nel caso di RSA: \u201cun valore di input\u201d + \u201cuna coppia di chiavi\u201d = \u201cuna firma\u201d. Non \u00e8 possibile prevedere quale sar\u00e0 la firma di un altro RP, quindi il PVRB con firme deterministiche pu\u00f2 essere organizzato combinando le firme RSA di pi\u00f9 partecipanti che hanno firmato lo stesso valore. Ad esempio: un precedente casuale. In questo schema, si risparmiano molte risorse, poich\u00e9 le firme sono al contempo una conferma del comportamento corretto secondo il protocollo e una fonte di casualit\u00e0.<\/p>\n<p><\/p>\n<p>Tuttavia, anche con le firme deterministiche, lo schema \u00e8 ancora vulnerabile al problema dell'\u201cultimo attore\u201d. L'ultimo partecipante pu\u00f2 comunque decidere se pubblicare la propria firma o meno, controllando cos\u00ec il risultato. Si pu\u00f2 migliorare lo schema, aggiungendo hash dei blocchi, creando turni, in modo che il risultato finale non possa essere previsto in anticipo, ma tutti questi accorgimenti, anche considerando molte modifiche, lasciano comunque irrisolto il problema dell'influenza di un partecipante sul risultato collettivo in un ambiente non fidato e possono funzionare solo in condizioni di limitazioni economiche e temporali. Inoltre, la dimensione delle chiavi RSA (1024 e 2048 bit) \u00e8 piuttosto grande, mentre la dimensione per le transazioni blockchain \u00e8 un parametro estremamente importante. Sembrerebbe che non sia possibile risolvere semplicemente il problema, andiamo avanti.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-secret-sharing-shemy\">PVRB e schemi di secret sharing<\/h2>\n<p><\/p>\n<p>Nella crittografia esistono schemi che consentono a una rete di concordare un unico valore PVRB, e tali schemi sono resistenti a qualsiasi azione malevola da parte di alcuni partecipanti. Uno dei protocolli utili da conoscere \u00e8 lo schema di condivisione del segreto di Shamir. Serve a suddividere un segreto (ad esempio una chiave segreta) in diverse parti e distribuirle a N partecipanti. Il segreto \u00e8 distribuito in modo tale che per ripristinarlo sia sufficiente avere M parti su N, e queste possono essere qualsiasi M parti. In parole povere, avendo un grafico di una funzione sconosciuta, i partecipanti scambiano punti sul grafico e dopo aver ricevuto M punti, l'intera funzione pu\u00f2 essere ricostruita.<br \/>\nUna buona spiegazione \u00e8 fornita in <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Shamir%27s_Secret_Sharing\">wiki<\/a><\/noindex> ed \u00e8 utile giocarci praticamente, per mettere a fuoco il protocollo nella mente <noindex><a rel=\"nofollow\" href=\"http:\/\/point-at-infinity.org\/ssss\/demo.html\">demo<\/a><\/noindex> pagina.<\/p>\n<p><\/p>\n<p>Se lo schema FSSS (Fiat-Shamir Secret Sharing) fosse applicabile in modo puro, sarebbe un PVRB inarrestabile. Nella sua forma pi\u00f9 semplice, il protocollo potrebbe apparire cos\u00ec:<\/p>\n<p><\/p>\n<ul>\n<li>Ogni partecipante genera un proprio random e distribuisce le shares agli altri partecipanti<\/li>\n<li>Ogni partecipante rivela la propria parte dei segreti degli altri partecipanti<\/li>\n<li>Se un partecipante accumula pi\u00f9 di M shares, il numero di quel partecipante pu\u00f2 essere calcolato ed sar\u00e0 unico, indipendentemente dal set di partecipanti che hanno rivelato i loro segreti<\/li>\n<li>La combinazione degli random rivelati \u00e8 il PVRB cercato<\/li>\n<\/ul>\n<p><\/p>\n<p>In questo caso, un partecipante non influisce sui risultati del protocollo, eccetto nei casi in cui il raggiungimento della soglia di rivelazione del random dipenda esclusivamente da lui. Pertanto, questo protocollo, con la necessaria quota di partecipanti che seguono il protocollo e con RP disponibili, funziona realizzando i requisiti di robustezza crittografica ed \u00e8 resistente al problema dell' \"ultimo attore\".<\/p>\n<p><\/p>\n<p>Questo potrebbe essere un'opzione ideale; questo schema PVRB basato sulla condivisione dei segreti di Fiat-Shamir \u00e8 descritto, ad esempio, in <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2017\/216.pdf\">questo<\/a><\/noindex> un articolo. Ma, come gi\u00e0 detto, tentare di applicarlo direttamente nella blockchain presenta gi\u00e0 limitazioni tecniche. Ecco un esempio di implementazione di prova del protocollo in un contratto intelligente EOS e la sua parte pi\u00f9 importante: la verifica della share pubblicata dal partecipante: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/eoscraper\/blob\/master\/Proof.hh#L23\">codice<\/a><\/noindex>Il codice mostra che la validazione del proof richiede diverse moltiplicazioni scalari, e i numeri utilizzati sono molto grandi. \u00c8 importante comprendere che nel blockchain la verifica avviene nel momento in cui il block-producer elabora la transazione, e qualsiasi partecipante deve poter verificare facilmente la correttezza del protocollo; pertanto, i requisiti per la velocit\u00e0 della funzione di verifica sono molto rigorosi. In questa variante, il metodo si \u00e8 rivelato non funzionante, poich\u00e9 la verifica non rientrava nel limite di tempo della transazione (0,5 secondi).<\/p>\n<p><\/p>\n<p>L'efficienza della verifica \u00e8 uno dei requisiti pi\u00f9 importanti per l'utilizzo di praticamente qualsiasi schema crittografico avanzato nel blockchain. La creazione di prove, la preparazione dei messaggi: queste procedure possono essere eseguite off-chain e su computer ad alte prestazioni, ma la verifica non pu\u00f2 essere evitata: questo \u00e8 un ulteriore importante requisito per il PVRB. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-threshold-signatures\">PVRB e firme threshold<\/h2>\n<p><\/p>\n<p>Familiarizzando con lo schema del secret sharing, abbiamo aperto un'intera classe di protocolli uniti dalla parola chiave \u201cthreshold\u201d. Quando per rivelare alcune informazioni \u00e8 richiesta la partecipazione di M partecipanti onesti su N, e il gruppo di partecipanti onesti pu\u00f2 essere un qualsiasi sottoinsieme di N, si parla di schemi \u201cthreshold\u201d. Questi schemi permettono di affrontare il problema del \u201clast actor\u201d; ora, se l'attaccante non rivela la propria parte del segreto, un altro partecipante onesto lo far\u00e0. Questi schemi consentono di concordare un unico valore, anche in caso di sabotaggio del protocollo da parte di alcuni partecipanti. <\/p>\n<p><\/p>\n<p>La combinazione di firme deterministiche e schemi threshold ha portato allo sviluppo di uno schema molto conveniente e promettente per l'attuazione del PVRB: le firme threshold deterministiche. Ecco <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2002\/081.pdf\">su Habr.<\/a><\/noindex> sui vari utilizzi delle firme threshold, ecco un altro buon <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.dash.org\/secret-sharing-and-threshold-signatures-with-bls-954d1587b5f\">longread<\/a><\/noindex> da Dash. <\/p>\n<p><\/p>\n<p>Nell'ultimo articolo si descrivono le firme BLS (BLS sta per Boneh-Lynn-Shacham, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.iacr.org\/archive\/asiacrypt2001\/22480516.pdf\">ecco<\/a><\/noindex> L'articolo ), che presenta una qualit\u00e0 estremamente importante e molto conveniente per i programmatori \u2014 i chiavi pubbliche, segrete e le firme BLS possono essere combinate tra loro tramite semplici operazioni matematiche, rimanendo valide come chiavi e firme, permettendo di aggregare facilmente molte firme in una sola e molte chiavi pubbliche in una sola. Possiedono inoltre deterministicit\u00e0 e, per gli stessi dati in input, producono sempre lo stesso risultato. Grazie a questa qualit\u00e0, le combinazioni delle firme BLS sono a loro volta chiavi valide, permettendo di realizzare un'opzione in cui M partecipanti su N producono una sola e unica firma, che \u00e8 deterministica, verificabile pubblicamente e imprevedibile fino a quando non viene rivelata dal M-esimo partecipante.<\/p>\n<p><\/p>\n<p>Nello schema delle firme BLS con soglia, ogni partecipante firma qualcosa (ad esempio il precedente random) tramite BLS, e la firma complessiva con soglia \u00e8 il random ricercato. Le propriet\u00e0 crittografiche delle firme BLS soddisfano i requisiti di qualit\u00e0 del random, la parte di soglia protegge contro il \u201clast-actor\u201d, mentre la combinabilit\u00e0 unica delle chiavi consente di realizzare molti algoritmi interessanti che permettono, ad esempio, di aggregare efficacemente i messaggi del protocollo.<\/p>\n<p><\/p>\n<p>Quindi, se stai costruendo un PVRB nel tuo blockchain, \u00e8 molto probabile che tu arrivi a uno schema di firme BLS con soglia, gi\u00e0 utilizzato da diversi progetti. Ad esempio, DFinity (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/random-beacon\">qui<\/a><\/noindex> benchmark che implementa lo schema, e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/vss\/blob\/master\/docs\/index.md\">qui<\/a><\/noindex> esempio di implementazione della condivisione segreta verificabile), oppure Keep.network (ecco il loro random beacon <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-yellowpaper\">yellowpaper<\/a><\/noindex>, ma ecco <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-box\">un esempio<\/a><\/noindex> smart contract che gestisce il protocollo).<\/p>\n<p><\/p>\n<h2 id=\"implementaciya-pvrb\">Implementazione del PVRB<\/h2>\n<p><\/p>\n<p>Sfortunatamente, finora non vediamo un protocollo PVRB implementato nelle blockchain che abbia dimostrato la sua sicurezza e robustezza. Anche se i protocolli stessi sono pronti, applicarli tecnicamente a soluzioni esistenti non \u00e8 semplice. Per i sistemi centralizzati, il PVRB non ha senso, mentre i sistemi decentralizzati sono rigorosamente limitati in tutte le risorse computazionali: CPU, memoria, archiviazione, I\/O. Progettare un PVRB significa combinare diversi protocolli per costruire qualcosa che soddisfi tutti i requisiti necessari a una qualsiasi blockchain praticabile. Un protocollo calcola in modo pi\u00f9 efficiente, ma richiede pi\u00f9 messaggi tra gli RP, mentre un altro ne richiede pochissimi, ma la creazione di una proof pu\u00f2 richiedere decine di minuti o addirittura ore.<\/p>\n<p><\/p>\n<p>Elenco i fattori che dovrete considerare nella scelta di un PVRB di qualit\u00e0:<\/p>\n<p><\/p>\n<ul>\n<li><em>Resistenza crittografica<\/em>. Il vostro PVRB deve essere rigorosamente unbiasable, senza possibilit\u00e0 di controllo di un singolo bit. In alcune configurazioni questo non \u00e8 cos\u00ec, quindi chiamate un crittografo.<\/li>\n<li><em>Problema del \u201clast actor\u201d<\/em>. Il vostro PVRB deve essere resistente ad attacchi in cui un attaccante, che controlla uno o pi\u00f9 RP, pu\u00f2 scegliere tra due possibili risultati.<\/li>\n<li><em>Problema di sabotaggio del protocollo<\/em>. Il vostro PVRB deve essere resistente ad attacchi in cui un attaccante, che controlla uno o pi\u00f9 RP, decide se essere casuale o meno e pu\u00f2 influenzare garantito, o con una certa probabilit\u00e0, questa decisione.<\/li>\n<li><em>Problema del numero di messaggi<\/em>. I vostri RP devono inviare al blockchain il minor numero possibile di messaggi e massimizzare la prevenzione di azioni sincrone come le situazioni \u201cho inviato alcune informazioni, attendo una risposta da un partecipante specifico\u201d. Nelle reti p2p, soprattutto quelle geograficamente distribuite, non si dovrebbe contare su una risposta veloce.<\/li>\n<li><em>Problema della complessit\u00e0 computazionale<\/em>. La verifica di qualsiasi fase del PVRB on-chain deve essere estremamente semplice, dato che viene eseguita da tutti i nodi completi della rete. Se l\u2019implementazione viene effettuata tramite smart contract, i requisiti di velocit\u00e0 sono molto rigorosi.<\/li>\n<li><em>Problema di disponibilit\u00e0 e liveness<\/em>. Il vostro PVRB deve tendere a essere resistente a situazioni in cui parte della rete diventa non disponibile per un certo periodo e parte degli RP smette semplicemente di funzionare.<\/li>\n<li><em>Problema del trusted setup e distribuzione iniziale delle chiavi<\/em>. Se il tuo PVRB utilizza un set-up primario del protocollo, si tratta di una storia diversa e seria. Ecco <noindex><a rel=\"nofollow\" href=\"https:\/\/z.cash\/ru\/blog\/the-design-of-the-ceremony\/\">un esempio<\/a><\/noindex>. Se i partecipanti devono comunicarsi le loro chiavi prima di iniziare il protocollo, \u00e8 anche un problema, specialmente se la composizione dei partecipanti cambia<\/li>\n<li><em>Problemi di sviluppo<\/em>. La disponibilit\u00e0 di librerie nelle lingue richieste, la loro sicurezza e prestazioni, la pubblicit\u00e0, test complessi, ecc.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ad esempio, il threshold delle firme BLS ha un problema sostanziale: prima di poter iniziare a lavorare, i partecipanti devono necessariamente scambiarsi le chiavi, organizzando un gruppo all'interno del quale lavorer\u00e0 il threshold. Questo significa che \u00e8 necessario attendere almeno un round di scambio in una rete decentralizzata e, considerando che il random generato, ad esempio, \u00e8 necessario nei giochi, praticamente in tempo reale, questo implica che il sabotaggio del protocollo \u00e8 possibile a questo punto, e i vantaggi del sistema threshold vengono persi. Questo problema \u00e8 gi\u00e0 pi\u00f9 semplice dei precedenti, ma richiede comunque lo sviluppo di una procedura separata per la formazione dei gruppi threshold, che dovr\u00e0 essere protetta economicamente, tramite depositi e il ritiro di fondi (slashing) dai partecipanti che non seguono il protocollo. Inoltre, la verifica BLS con un livello di sicurezza accettabile semplicemente non si adatta, ad esempio, a una transazione standard EOS o Ethereum \u2014 semplicemente non c'\u00e8 tempo per la verifica. Il codice dei contratti \u00e8 WebAssembly o EVM, eseguito da una macchina virtuale. Le funzioni crittografiche non sono implementate nativamente (per ora) e funzionano decine di volte pi\u00f9 lentamente delle librerie crittografiche standard. Molti protocolli non soddisfano i requisiti semplicemente in base al numero di chiavi, ad esempio 1024 e 2048 bit per RSA, 4-8 volte di pi\u00f9 rispetto alla firma standard di una transazione in Bitcoin ed Ethereum.<\/p>\n<p><\/p>\n<p>Gioca un ruolo anche la presenza di implementazioni in diversi linguaggi di programmazione, che sono poche, specialmente per i nuovi protocolli. L'opzione di integrazione nel consenso richiede di scrivere il protocollo nel linguaggio della piattaforma, quindi sar\u00e0 necessario cercare codice in Go per geth, in Rust per Parity, in C++ per EOS. Il codice in JavaScript dovr\u00e0 essere ricercato da tutti e, dato che JavaScript e crittografia non sono proprio amici, WebAssembly aiuter\u00e0, che ora ha sicuramente la pretesa di diventare il prossimo importante standard di internet.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Conclusione<\/h2>\n<p><\/p>\n<p>Spero che nella precedente <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/448330\/\">abbiamo chiarito il corretto completamento dei programmi che utilizzano il mediastreamer.<\/a><\/noindex> Sono riuscito a convincervi che la generazione di numeri casuali sulla blockchain \u00e8 fondamentale per molti aspetti della vita delle reti decentralizzate, e con questo articolo ho dimostrato che si tratta di un compito estremamente ambizioso e complesso, ma buone soluzioni esistono gi\u00e0. In generale, il design finale del protocollo \u00e8 possibile solo dopo aver condotto test massicci che considerino tutti gli aspetti, dall'impostazione all'emulazione dei guasti, quindi \u00e8 improbabile che troviate ricette pronte nei whitepaper dei team e negli articoli, e noi sinceramente non ci sentiamo di scrivere \"fate cos\u00ec, \u00e8 sicuramente corretto\" nei prossimi uno o due anni. <\/p>\n<p><\/p>\n<p>Fino ad ora, per il nostro PVRB nella blockchain in fase di sviluppo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mixbytes\/haya\">Haya<\/a><\/noindex>, ci siamo fermati all'applicazione delle threshold BLS signatures, pianifichiamo di implementare il PVRB a livello di consenso, poich\u00e9 la verifica nei contratti intelligenti con un livello di sicurezza accettabile non \u00e8 ancora possibile. \u00c8 possibile che utilizziamo due schemi: prima un costoso secret sharing per creare un random_seed a lungo termine, e lo utilizzeremo successivamente come base per la generazione ad alta frequenza di casualit\u00e0 tramite sigilli threshold BLS deterministici, potremmo limitarci a uno solo degli schemi. Dire in anticipo quale sar\u00e0 il protocollo, purtroppo, \u00e8 impossibile, ma l'unica cosa positiva \u00e8 che, come nella scienza, nei compiti ingegneristici un risultato negativo \u00e8 anch'esso un risultato, e ogni nuovo tentativo di risolvere il problema \u00e8 un ulteriore passo verso la ricerca di tutti coloro che si occupano di questo tema. Per garantire i requisiti aziendali stiamo affrontando un compito pratico specifico: fornire alle applicazioni ludiche una fonte affidabile di entropia, quindi dobbiamo prestare attenzione anche alla stessa blockchain, in particolare alle questioni di finalit\u00e0 della catena e governance della rete. <\/p>\n<p><\/p>\n<p>E sebbene al momento non vediamo blockchain con un PVRB provato e resistente, utilizzato gi\u00e0 da tempo sufficiente per affrontare le sfide di applicazioni reali, molteplici audit, carichi di lavoro e, naturalmente, attacchi reali, il numero delle possibili strade conferma che la soluzione esiste, e che uno di questi algoritmi alla fine risolver\u00e0 il problema. Siamo felici di condividere i risultati e ringraziamo le altre squadre che stanno affrontando questo problema per gli articoli e il codice che permettono agli ingegneri di non inciampare due volte sugli stessi ostacoli. <\/p>\n<p><\/p>\n<p>Quindi, quando incontrate un programmatore che progetta un random decentralizzato, siate attenti e premurosi, offrendo supporto psicologico se necessario \ud83d\ude42<\/p>\n<p>Fonte: <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.1.1 - 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\/it\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Numeri casuali e reti decentralizzate: implementazioni | ProHoster","description":"Introduzione function getAbsolutelyRandomNumer() { return 4; \/\/ restituisce un numero assolutamente casuale!","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/sluchajnye-chisla-i-detsentralizovannye-seti-implementatsii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/33888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=33888"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/33888\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=33888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=33888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=33888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}