{"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 in crittografia, i veri protocolli di \"Publicly Verifiable Random Beacon\" (di seguito PVRB) cercano solo di avvicinarsi il pi\u00f9 possibile allo schema ideale, poich\u00e9 nelle reti reali non \u00e8 applicabile in forma pura: bisogna accordarsi su un solo bit, ci devono essere molti round 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 moderni blockchain, oltre all'impossibilit\u00e0 di controllare il random ottenuto e alla crittografia resistente, sorgono molte problematiche puramente architettoniche e tecniche.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>La blockchain rappresenta per PVRB essenzialmente un ambiente di comunicazione, in cui i messaggi corrispondono a transazioni. Questo consente di astrarsi parzialmente dai problemi di rete, dalla mancata consegna dei messaggi, dai problemi con il software intermedio: tutti questi rischi sono assunti da una rete decentralizzata, e il suo principale valore per PVRB \u00e8 l'impossibilit\u00e0 di revocare o alterare una transazione gi\u00e0 inviata. Questo impedisce ai partecipanti di disertare il protocollo, a meno che non abbiano condotto con successo un attacco al consenso. Tale livello di sicurezza \u00e8 accettabile, perci\u00f2 PVRB deve essere resiliente a collusioni tra partecipanti allo stesso modo della catena principale della blockchain. Inoltre, ci\u00f2 implica che PVRB debba essere parte del consenso, se la rete ha concordato sulla catena principale dei blocchi, deve anche convenire su un unico risultato randomico onesto. In alternativa, PVRB pu\u00f2 essere semplicemente un protocollo autonomo, implementato tramite smart contract, operante in modo asincrono rispetto alla blockchain e ai blocchi. Entrambi gli approcci presentano vantaggi e svantaggi, e la scelta tra essi \u00e8 estremamente non banale. <\/p>\n<p><\/p>\n<h2 id=\"dva-sposoba-implementacii-pvrb\">Due modi per implementare PVRB<\/h2>\n<p><\/p>\n<p>Descriviamo in dettaglio due varianti di implementazione del PVRB: la versione standalone, che funziona utilizzando un contratto intelligente indipendente dalla blockchain, e la versione integrata nel consenso, incorporata nel protocollo attraverso il quale la rete concorda sulla catena di blocchi e le transazioni incluse. In tutti i casi mi riferir\u00f2 ai motori blockchain popolari: Ethereum, EOS e altri simili per modalit\u00e0 di distribuzione e elaborazione dei contratti intelligenti. <\/p>\n<p><\/p>\n<h3 id=\"standalone-contract\">Contratto standalone<\/h3>\n<p><\/p>\n<p>In questa variante, il PVRB \u00e8 un contratto intelligente che accetta transazioni da random-producer (di seguito RP), le elabora, combina i risultati e, di conseguenza, arriva a un certo 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 dai quali \u00e8 possibile estrarre deterministicamente un unico valore di risultato casuale. In questo schema, RP sono gli utenti della blockchain, e chiunque pu\u00f2 partecipare al processo di generazione.<\/p>\n<p><\/p>\n<p>La variante con contratto standalone \u00e8 vantaggiosa per:<\/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 (i contratti sono facili da scrivere e testare)<\/li>\n<li>comodit\u00e0 nell'implementazione di schemi economici (facile creare il proprio token, la cui logica serve agli obiettivi di PVRB)<\/li>\n<li>possibilit\u00e0 di avvio in blockchain gi\u00e0 funzionanti<\/li>\n<\/ul>\n<p><\/p>\n<p>Ha anche dei difetti:<\/p>\n<p><\/p>\n<ul>\n<li>forti limitazioni sulle risorse durante i calcoli, volume delle transazioni e storage (in termini semplici cpu\/mem\/io)<\/li>\n<li>limitazioni sulle operazioni all'interno del contratto (non tutte le istruzioni sono disponibili, \u00e8 complicato collegare librerie esterne)<\/li>\n<li>impossibilit\u00e0 di organizzare scambi di messaggi pi\u00f9 velocemente dell'inclusione delle transazioni nella blockchain<\/li>\n<\/ul>\n<p><\/p>\n<p>Questa opzione \u00e8 adatta per l'implementazione di 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\">Integrato nel consenso<\/h3>\n<p><\/p>\n<p>In questa variante, PVRB \u00e8 implementato nel codice del nodo blockchain, integrato o funziona parallelamente allo scambio di messaggi tra i nodi della blockchain. I risultati del protocollo vengono registrati direttamente nei blocchi generati, mentre i messaggi del protocollo vengono inviati tramite una 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, proprio come le transazioni, devono essere convalidati dai nodi ed essere inclusi nei blocchi, in modo che ogni partecipante alla rete possa validare il rispetto del protocollo PVRB. Questo ci porta automaticamente a una soluzione ovvia: se la rete raggiunge un consenso riguardo ai blocchi e alle transazioni in essi, allora PVRB deve far parte del consenso, e non essere un protocollo autonomo. Altrimenti, potrebbe verificarsi una situazione in cui un blocco \u00e8 valido dal punto di vista del consenso, ma il protocollo PVRB non \u00e8 stato rispettato, e dal punto di vista di PVRB il blocco non pu\u00f2 essere accettato. Quindi, se viene scelto il modo \u201cconsensus-integrated\u201d, PVRB diventa una parte importante del consenso.<\/p>\n<p><\/p>\n<p>Nel descrivere le implementazioni PVRB a livello di consenso nella rete, non si possono trascurare le questioni di finalit\u00e0. La finalit\u00e0 \u00e8 un meccanismo utilizzato nei consensi deterministici che fissa un blocco (e la catena che lo porta) come definitivo, il quale non verr\u00e0 mai scartato, anche se compare un fork parallelo. Ad esempio, in Bitcoin questo meccanismo non esiste: se viene pubblicata una catena con una maggiore difficolt\u00e0, essa sostituir\u00e0 qualsiasi catena meno complessa, indipendentemente dalla lunghezza delle catene. In EOS, invece, i cosiddetti Last Irreversible Blocks sono considerati finali, e si verificano in media ogni 432 blocchi (12*21 + 12*15, pre-voto + pre-impegno). Questo processo consiste fondamentalmente nell'attendere 2\/3 delle firme dei produttori di blocchi (di seguito BP). Quando si presentano fork pi\u00f9 vecchi dell'ultimo LIB, essi vengono semplicemente scartati. Questo meccanismo consente di affermare con certezza che una transazione \u00e8 stata inclusa nella blockchain e non sar\u00e0 mai retrocessa, indipendentemente dalle risorse di cui dispone l'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 da realizzare come un'estensione del consenso, poich\u00e9 pu\u00f2 funzionare in modo asincrono con la produzione e la pubblicazione dei blocchi. Ecco un buon <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/pdf\/1710.09437.pdf\">articolo<\/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 \u201cdouble spend\u201d, quando il BP \u201critiene\u201d i blocchi e li pubblica dopo che la rete ha \u201cvisto\u201d una buona transazione. Se non c'\u00e8 finalit\u00e0, la fork pubblicata sostituisce il blocco con la transazione \u201cbuona\u201d con un altro, della \u201ccattiva\u201d fork, nella quale gli stessi fondi vengono trasferiti all'indirizzo dell'attaccante. Nel caso di PVRB, i requisiti per la finalit\u00e0 sono ulteriormente inaspriti, poich\u00e9 la costruzione di fork per il PVRB significa che l'attaccante pu\u00f2 preparare pi\u00f9 opzioni di casualit\u00e0 per pubblicare quella pi\u00f9 vantaggiosa per lui, limitando il tempo possibile per l'attacco \u2014 una buona soluzione.<\/p>\n<p><\/p>\n<p>Pertanto, la soluzione migliore \u00e8 combinare PVRB e finalit\u00e0 in un unico protocollo \u2014 cos\u00ec un blocco finalizzato = una casualit\u00e0 finalizzata, ed \u00e8 proprio ci\u00f2 che si doveva ottenere. Ora i giocatori riceveranno una casualit\u00e0 garantita in N secondi e possono essere certi che non sia possibile annullarla o ripetere il gioco.<\/p>\n<p><\/p>\n<p>L'opzione con il consensus-integrated \u00e8 buona:<\/p>\n<p><\/p>\n<ul>\n<li>la possibilit\u00e0 di implementazione asincrona rispetto alla produzione dei blocchi: i blocchi vengono prodotti come al solito, ma parallelamente pu\u00f2 funzionare il protocollo PVRB, che genera casualit\u00e0 non per ogni blocco<\/li>\n<li>la possibilit\u00e0 di implementare anche criptografia pesante, senza le restrizioni imposte dai contratti intelligenti<\/li>\n<li>la possibilit\u00e0 di organizzare scambi di messaggi pi\u00f9 velocemente di quanto le transazioni vengano incluse nella blockchain; ad esempio, parte del protocollo pu\u00f2 funzionare tra i nodi senza diffondere i messaggi attraverso la rete<\/li>\n<\/ul>\n<p><\/p>\n<p>Ha anche dei difetti:<\/p>\n<p><\/p>\n<ul>\n<li>difficolt\u00e0 durante il testing e lo sviluppo: sar\u00e0 necessario emulare errori di rete, nodi che scompaiono, 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 su smart contract nei blockchain moderni \u00e8 comunque piuttosto limitata nelle risorse computazionali, e qualsiasi passaggio a crittografie avanzate \u00e8 spesso semplicemente impossibile. E ci servir\u00e0 una crittografia solida, come dimostreremo pi\u00f9 avanti. Anche se questo problema \u00e8 chiaramente temporaneo, la crittografia robusta nei contratti \u00e8 necessaria per risolvere molteplici sfide, e gradualmente sta emergendo (ad esempio, i contratti sistemici per zkSNARKs in Ethereum).<\/p>\n<p><\/p>\n<p>Un blockchain che garantisce un canale di comunicazione trasparente e affidabile per il protocollo non lo fa gratuitamente. Qualsiasi protocollo decentralizzato deve considerare la possibilit\u00e0 di attacchi Sybil; qualsiasi azione pu\u00f2 essere effettuata congiuntamente da molti account, quindi \u00e8 fondamentale considerare le capacit\u00e0 degli attaccanti di creare un numero arbitrario di partecipanti al protocollo in collusione. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-peremennye-bloka\">PVRB e variabili di blocco.<\/h2>\n<p><\/p>\n<p>Non ho mentito quando ho detto che un buon PVRB, testato da molte applicazioni di gioco, non \u00e8 stato ancora implementato nelle blockchain. Ma com'\u00e8 possibile che ci siano cos\u00ec tante applicazioni di gioco su Ethereum ed EOS? Questo mi sorprende tanto quanto voi; ma da dove provengono cos\u00ec tanti \"random\" \"resistenti\" in un ambiente completamente deterministico?<\/p>\n<p><\/p>\n<p>Il modo preferito per generare casualit\u00e0 nella blockchain \u00e8 prendere qualche informazione \"imprevedibile\" da un blocco e basarla su di essa per creare casualit\u00e0; basta fare l'hash di uno o pi\u00f9 valori. \u00c8 un buon articolo che tratta i 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 qualsiasi dei valori \"imprevedibili\" nel blocco, ad esempio l'hash del blocco, il numero di transazioni, la difficolt\u00e0 di rete e altri valori ignoti in anticipo. Dopo, si fa l'hash di questi valori, uno o pi\u00f9, e, in teoria, dovrebbe risultare un vero casuale. Si potrebbe anche aggiungere nel whitepaper che il vostro schema \u00e8 \"post-quantum secure\" (dato che esistono funzioni hash resistenti ai quanti :)).<\/p>\n<p><\/p>\n<p>Ma purtroppo anche gli hash post-quantum secure non sono sufficienti. Il segreto risiede nei requisiti per il PVRB, che ricordo dalla precedente articolo:<\/p>\n<p><\/p>\n<ol>\n<li>Il risultato deve avere una distribuzione dimostrabilmente uniforme, basata su crittografia dimostrabilmente robusta.<\/li>\n<li>Nessuno dei bit del risultato pu\u00f2 essere controllato. Di conseguenza, il risultato non pu\u00f2 essere previsto in anticipo.<\/li>\n<li>Non \u00e8 possibile sabotare il protocollo di generazione non partecipando al protocollo o sovraccaricando la rete con messaggi malevoli.<\/li>\n<li>Tutto quanto sopra deve essere resistente a collusioni di un numero accettabile di partecipanti disonesti al protocollo (ad esempio, 1\/3 dei partecipanti).<\/li>\n<\/ol>\n<p><\/p>\n<p>In questo caso \u00e8 rispettato solo il requisito 1 e non il 2. Hashando valori imprevedibili dal blocco, otteniamo una distribuzione uniforme e buoni esiti casuali. Tuttavia, 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 casuali: 'la propria' e quella che risulterebbe se a pubblicare il blocco fosse qualcun altro. Il BP pu\u00f2 anticipare 'cosa accadrebbe' se pubblicasse il blocco e semplicemente decidere se farlo o meno. Cos\u00ec, giocando ad esempio a 'pari-dispari' o 'rosso\/nero' alla roulette, potrebbe pubblicare il blocco solo se vede una vincita. Questo rende anche non funzionale la strategia di utilizzo di un hash del blocco 'dal futuro'. In questo caso si dice che 'verr\u00e0 usato un random che deriva dall'hashing dei dati attuali e dall'hash del futuro blocco alla profondit\u00e0, ad esempio, N + 42, dove N \u00e8 l'altezza attuale del blocco. Questo rinforza leggermente 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 BP in questo caso si complica, ma non eccessivamente. Durante la validazione e l'inclusione delle transazioni nel blocco, viene effettuato un controllo rapido per vedere se ci sar\u00e0 una vincita e, forse, la selezione di alcuni parametri della transazione per ottenere un'alta probabilit\u00e0 di vincita. Tuttavia, catturare un BP intelligente con queste manovre \u00e8 praticamente impossibile, poich\u00e9 si possono utilizzare nuovi indirizzi ogni volta, vincendo poco a poco, senza destare sospetti.<\/p>\n<p><\/p>\n<p>Quindi, i metodi che utilizzano informazioni dal blocco non possono essere considerati una soluzione universale per l'implementazione del PVRB. In una versione limitata, con restrizioni sulle dimensioni delle scommesse, sul numero di giocatori e\/o registrazione KYC (per evitare che un solo giocatore possa utilizzare 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>Va bene, grazie all'hashing e almeno alla relativa imprevedibilit\u00e0 dell'hash del blocco e delle altre variabili. Se si riesce a risolvere il problema del front-running dei miner, dovrebbe risultare qualcosa di migliore. Aggiungiamo gli utenti a questo schema \u2014 cos\u00ec possono influenzare il random: qualsiasi operatore del supporto tecnico vi 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 na\u00eff in cui gli utenti inviano semplicemente numeri casuali e il risultato viene calcolato come, ad esempio, l'hash della loro somma, non \u00e8 utile. In questo caso, l'ultimo giocatore potrebbe controllare il risultato scegliendo il proprio numero casuale. Per questo motivo, si utilizza un patron molto comune chiamato commit-reveal. Gli partecipanti inviano prima gli hash dei loro numeri casuali (commits) e poi rivelano i numeri stessi (reveals). La fase di 'reveal' inizia solo dopo che gli hash necessari sono stati raccolti, quindi i partecipanti possono inviare esattamente il numero casuale di cui hanno precedentemente inviato l'hash. Adesso mettiamo insieme tutto questo con i parametri del blocco, preferibilmente presi dal futuro (il numero casuale potr\u00e0 essere conosciuto solo in uno dei futuri blocchi), ed ecco fatto \u2014 il numero casuale \u00e8 pronto! Ora ogni giocatore influisce sul numero casuale risultante e pu\u00f2 'vincere' contro un BP maligno, sovrapponendo il suo numero casuale sconosciuto in anticipo... Si pu\u00f2 anche aggiungere una protezione contro il sabotaggio del protocollo in fase di reveal \u2014 semplicemente richiedendo, al momento del commit, di allegare una certa somma alla transazione \u2014 un deposito a garanzia, che verr\u00e0 restituito solo durante la procedura di reveal. In questo caso, effettuare un commit senza poi fare un reveal non sarebbe vantaggioso.<\/p>\n<p><\/p>\n<p>\u00c8 stata una buona prova e schemi simili esistono anche nei DApp di gioco, ma purtroppo non \u00e8 ancora sufficiente. Ora il risultato pu\u00f2 essere influenzato non solo dal miner, ma anche da qualsiasi partecipante al protocollo. Il valore stesso pu\u00f2 ancora essere controllato, con una minore variabilit\u00e0 e a pagamento, ma, come nel caso del miner, se i risultati dell'estrazione sono pi\u00f9 preziosi della quota per partecipare al protocollo PVRB, allora il random-producer (RP) pu\u00f2 decidere se fare il reveal e pu\u00f2 ancora scegliere tra almeno due opzioni di casualit\u00e0.<br \/>\nIn compenso, \u00e8 stata introdotta la possibilit\u00e0 di punire coloro che fanno commit e non effettuano il reveal, e questo schema sar\u00e0 utile. La sua semplicit\u00e0 \u00e8 un grande vantaggio: protocolli pi\u00f9 complessi richiedono calcoli molto pi\u00f9 potenti.<\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-determinirovannye-podpisi\">PVRB e firme deterministiche.<\/h2>\n<p><\/p>\n<p>C'\u00e8 un altro modo per costringere RP a fornire un numero pseudo-casuale su cui non potr\u00e0 esercitare alcuna influenza, se gli si fornisce un \"modello\": questa \u00e8 una firma deterministica. Una firma come quella \u00e8, ad esempio, RSA, e non \u00e8 ECS. Se RP ha una coppia di chiavi: RSA ed E\u0421C, e firma un certo valore con la sua chiave privata, nel 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 accade perch\u00e9 nella creazione di una firma ECS viene utilizzato un numero casuale scelto dall'autore della firma, e pu\u00f2 essere scelto in qualsiasi modo, dando all'autore della firma la possibilit\u00e0 di scegliere tra diverse firme. Nel caso di RSA: \"un valore di input\" + \"una coppia di chiavi\" = \"una firma\". Non \u00e8 possibile prevedere quale sar\u00e0 la firma di un altro RP, quindi PVRB con firme deterministiche pu\u00f2 essere organizzato attraverso la combinazione delle firme RSA di pi\u00f9 partecipanti che hanno firmato lo stesso valore. Ad esempio, il precedente casuale. In questo schema si risparmiano molte risorse, poich\u00e9 le firme fungono sia da conferma del corretto comportamento secondo il protocollo, sia da fonte di casualit\u00e0.<\/p>\n<p><\/p>\n<p>Tuttavia, anche con le firme determinate, lo schema \u00e8 ancora vulnerabile al problema del 'last actor'. L'ultimo partecipante pu\u00f2 ancora decidere se pubblicare la propria firma o meno, controllando cos\u00ec il risultato. \u00c8 possibile migliorare lo schema, aggiungendo hash dei blocchi, effettuando turni in modo che il risultato non possa essere previsto in anticipo, ma tutte queste tecniche, anche considerando numerosi miglioramenti, lasciano comunque irrisolta la questione dell'influenza di un singolo partecipante sul risultato collettivo in un ambiente non fidato e possono funzionare solo in condizioni di vincoli economici e temporali. Inoltre, la dimensione delle chiavi RSA (1024 e 2048 bit) \u00e8 piuttosto grande, e la dimensione per le transazioni blockchain \u00e8 un parametro estremamente importante. Sembra che non sar\u00e0 facile risolvere il problema in modo semplice, andiamo oltre.<\/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 possono consentire a una rete di accordarsi su un unico valore PVRB, rimanendo al contempo resistenti a qualsiasi azione malevola da parte di alcuni partecipanti. Un protocollo utile da conoscere \u00e8 il piano di divisione del segreto di Shamir. Questo protocollo serve a dividere un segreto (ad esempio, una chiave segreta) in pi\u00f9 parti e distribuirle a N partecipanti. Il segreto \u00e8 distribuito in modo tale che per il suo recupero siano sufficienti M parti su N, e queste possono essere qualsiasi M parti. In modo semplice, immaginando un grafico di una funzione sconosciuta, i partecipanti si scambiano punti sul grafico e, dopo aver ottenuto 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 sperimentare praticamente per comprendere meglio il protocollo su <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 diretto, sarebbe un PVRB indistruttibile. Nella sua forma pi\u00f9 semplice, il protocollo potrebbe apparire cos\u00ec:<\/p>\n<p><\/p>\n<ul>\n<li>Ogni partecipante genera il proprio random e distribuisce le quote agli altri partecipanti.<\/li>\n<li>Ogni partecipante svela la propria parte dei segreti degli altri partecipanti<\/li>\n<li>Se per un partecipante si accumulano pi\u00f9 di M shares, \u00e8 possibile calcolare il numero di quel partecipante, e sar\u00e0 univoco, indipendentemente dal gruppo di partecipanti svelati<\/li>\n<li>La combinazione di random svelati \u00e8 il PVRB ricercato<\/li>\n<\/ul>\n<p><\/p>\n<p>Qui un singolo partecipante non influisce gi\u00e0 sui risultati del protocollo, tranne nei casi in cui il raggiungimento della soglia di svelamento del random dipende esclusivamente da lui. Pertanto, questo protocollo, con la giusta quota di partecipanti che seguono il protocollo e RP disponibili, funziona soddisfacendo i requisiti di resistenza crittografica, ed \u00e8 resistente al problema del \u201clast actor\u201d.<\/p>\n<p><\/p>\n<p>Questo potrebbe essere un'opzione ideale, questo schema PVRB basato sul secret sharing 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 detto sopra, se si cerca di applicarlo direttamente nella blockchain, emergono gi\u00e0 delle limitazioni tecniche. Ecco un esempio di implementazione del protocollo in un smart contract 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>. Dal codice si evince che la validazione della prova richiede diversi prodotti scalari e vengono utilizzati numeri molto grandi. \u00c8 importante comprendere che nei blockchain la verifica avviene nel momento in cui il produttore del blocco elabora la transazione, e ogni partecipante deve poter controllare facilmente la correttezza del protocollo; quindi, le esigenze di velocit\u00e0 della funzione di verifica sono molto rigorose. In questa versione, si \u00e8 rivelata non funzionante, poich\u00e9 la verifica non rientrava nel limite sulla transazione (0,5 secondi).<\/p>\n<p><\/p>\n<p>L'efficienza della verifica \u00e8 uno dei requisiti pi\u00f9 importanti per l'uso di qualsiasi schema crittografico avanzato nel blockchain. La creazione delle prove, la preparazione dei messaggi: queste procedure possono essere eseguite off-chain e realizzate su computer ad alta prestazione, ma non si potr\u00e0 eludere la verifica \u2014 questo \u00e8 un altro requisito fondamentale per il PVRB. <\/p>\n<p><\/p>\n<h2 id=\"pvrb-i-threshold-signatures\">PVRB e firme soglia<\/h2>\n<p><\/p>\n<p>Incontrando il schema del secret sharing, abbiamo scoperto una vera e propria classe di protocolli legati alla parola chiave \u201cthreshold\u201d. Quando per rivelare alcune informazioni \u00e8 necessaria la partecipazione di M partecipanti onesti su N, e l'insieme di partecipanti onesti pu\u00f2 essere un qualsiasi sottoinsieme di N, si parla di schemi \u201cthreshold\u201d. Questi permettono di affrontare il problema del \u201clast actor\u201d; ora, se un attaccante non rivela la sua parte del segreto, un altro partecipante onesto lo far\u00e0 al suo posto. Questi schemi consentono di concordare su 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 permesso di sviluppare uno schema molto pratico e promettente per l'implementazione del PVRB \u2014 le firme threshold deterministiche. Ecco <noindex><a rel=\"nofollow\" href=\"https:\/\/eprint.iacr.org\/2002\/081.pdf\">articolo<\/a><\/noindex> sugli usi vari 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>L'ultimo articolo descrive 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> Articolo ), che possiedono una qualit\u00e0 molto importante e estremamente utile per i programmatori: le chiavi pubbliche, segrete e le firme BLS possono essere combinate tra loro tramite semplici operazioni matematiche, mantenendo al contempo la validit\u00e0 delle combinazioni come chiavi e firme, consentendo di aggregare facilmente molte firme in una e molte chiavi pubbliche in una sola. Inoltre, sono deterministiche e producono lo stesso risultato per gli stessi dati di input. Grazie a questa caratteristica, le combinazioni delle firme BLS sono esse stesse chiavi valide, permettendo di realizzare una soluzione in cui M su N partecipanti generano una sola firma, che \u00e8 determinata, verificabile pubblicamente e imprevedibile fino a quando non viene rivelata dal M-esimo partecipante.<\/p>\n<p><\/p>\n<p>Nello schema delle firme threshold BLS, ogni partecipante firma qualcosa (ad esempio, il precedente random) utilizzando BLS, e la firma threshold totale \u00e8 il random ricercato. Le propriet\u00e0 crittografiche delle firme BLS soddisfano i requisiti di qualit\u00e0 del random, la parte threshold protegge da un attore finale 'last-actor', mentre la combinabilit\u00e0 unica delle chiavi consente di implementare molti altri 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 arriverai allo schema delle firme threshold BLS, gi\u00e0 utilizzato da diversi progetti. Ad esempio, DFinity (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/random-beacon\">qui<\/a><\/noindex> un benchmark che implementa lo schema, e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dfinity\/vss\/blob\/master\/docs\/index.md\">qui<\/a><\/noindex> un esempio di implementazione di verifiable secret sharing), oppure Keep.network (ecco il loro random beacon <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-yellowpaper\">yellowpaper<\/a><\/noindex>, ecco <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/keep-network\/random-beacon-box\">esempio<\/a><\/noindex> il contratto smart che supporta il protocollo).<\/p>\n<p><\/p>\n<h2 id=\"implementaciya-pvrb\">Implementazione del PVRB<\/h2>\n<p><\/p>\n<p>Purtroppo, non vediamo ancora un protocollo pronto, implementato nelle blockchain PVRB, che abbia dimostrato la sua sicurezza e robustezza. Anche se i protocolli sono pronti, applicarli tecnicamente alle soluzioni esistenti non \u00e8 semplice. Per i sistemi centralizzati, PVRB non ha senso, mentre i sistemi decentralizzati sono rigorosamente limitati in tutte le risorse computazionali: CPU, memoria, storage, I\/O. Progettare PVRB implica combinare diversi protocolli per forgiarne uno che soddisfi tutti i requisiti per essere utilizzato in almeno una blockchain funzionante. Un protocollo calcola in modo pi\u00f9 efficiente, ma richiede pi\u00f9 messaggi tra RP, mentre un altro ne richiede molto pochi, ma la creazione della prova pu\u00f2 richiedere decine di minuti o ore.<\/p>\n<p><\/p>\n<p>Elencher\u00f2 i fattori che \u00e8 necessario considerare nella scelta di un PVRB di alta qualit\u00e0:<\/p>\n<p><\/p>\n<ul>\n<li><em>Resistenza crittografica<\/em>. Il tuo PVRB deve essere assolutamente unbiasable, senza possibilit\u00e0 di controllare un singolo bit. In alcune configurazioni questo non \u00e8 il caso, quindi chiama un crittografo<\/li>\n<li><em>Problema del \"last actor\"<\/em>. Il tuo PVRB deve essere resistente agli attacchi, quando un attaccante che controlla uno o pi\u00f9 RP pu\u00f2 scegliere tra due possibili esiti.<\/li>\n<li><em>Problema di sabotaggio del protocollo<\/em>. Il tuo PVRB deve essere resistente agli attacchi, quando un attaccante che controlla uno o pi\u00f9 RP decide se essere casuale o meno e pu\u00f2 garantire, con certezza o con una certa probabilit\u00e0, di influenzare questo aspetto.<\/li>\n<li><em>Problema del numero di messaggi<\/em>. I tuoi RP devono inviare al blockchain il minimo indispensabile di messaggi e massimizzare l'evitamento di azioni sincrone come situazioni in cui \u201cho inviato alcune informazioni, attendo una risposta da un partecipante specifico\u201d. Nelle reti p2p, soprattutto quando geograficamente disperse, non ci si deve aspettare una risposta rapida.<\/li>\n<li><em>Problema della complessit\u00e0 computazionale<\/em>. La verifica di qualsiasi fase del PVRB on-chain deve essere estremamente semplice, poich\u00e9 viene eseguita da tutti i nodi completi della rete. Se l'implementazione avviene tramite un contratto intelligente, i requisiti di velocit\u00e0 sono molto severi.<\/li>\n<li><em>Problema di accessibilit\u00e0 e liveness<\/em>. Il tuo PVRB deve mirare a essere resistente a situazioni in cui parte della rete diventa inaccessibile per un certo periodo e alcuni RP smettono semplicemente di funzionare.<\/li>\n<li><em>Problemi di trusted setup e distribuzione iniziale delle chiavi<\/em>. Se il tuo PVRB utilizza il setup primario del protocollo, \u00e8 una questione separata, ampia e seria. Ecco <noindex><a rel=\"nofollow\" href=\"https:\/\/z.cash\/ru\/blog\/the-design-of-the-ceremony\/\">esempio<\/a><\/noindex>. Se i partecipanti devono comunicarsi le proprie chiavi prima dell'inizio del protocollo, pu\u00f2 essere problematico se la composizione dei partecipanti cambia<\/li>\n<li><em>Problemi di sviluppo<\/em>. La disponibilit\u00e0 di librerie nei linguaggi richiesti, la loro sicurezza e prestazioni, la loro pubblicit\u00e0, test complessi e cos\u00ec via.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ad esempio, il threshold BLS ha un problema significativo: prima di iniziare a lavorare, i partecipanti devono necessariamente scambiarsi le chiavi, organizzando un gruppo all'interno del quale operer\u00e0 il threshold. Ci\u00f2 significa che \u00e8 necessario attendere almeno un round di scambi in una rete decentralizzata e, considerando che il random generato, per esempio, \u00e8 necessario nei giochi praticamente in tempo reale, questo implica che il sabotaggio del protocollo \u00e8 possibile in questa fase, facendo cos\u00ec perdere i vantaggi dello schema threshold. Questo problema \u00e8 pi\u00f9 semplice rispetto ai precedenti, ma richiede comunque lo sviluppo di una procedura separata per la formazione dei gruppi threshold, che dovr\u00e0 essere economicamente protetta, attraverso depositi e il ritiro di fondi (slashing) ai partecipanti che non seguono il protocollo. Inoltre, la verifica BLS con un livello di sicurezza accettabile semplicemente non rientra, ad esempio, in una transazione standard su EOS o Ethereum \u2014 semplicemente non c'\u00e8 tempo sufficiente per la verifica. Il codice dei contratti \u00e8 WebAssembly o EVM, eseguito da una macchina virtuale. Le funzioni crittografiche non sono implementate nativamente (ancora) e funzionano decine di volte pi\u00f9 lentamente rispetto alle librerie crittografiche normali. Molti protocolli non soddisfano i requisiti semplicemente in base alla dimensione delle chiavi, ad esempio 1024 e 2048 bit per RSA, da 4 a 8 volte di pi\u00f9 rispetto alla firma standard di una transazione in Bitcoin ed Ethereum.<\/p>\n<p><\/p>\n<p>Il ruolo e la disponibilit\u00e0 di implementazioni in diversi linguaggi di programmazione \u00e8 cruciale \u2014 ce ne sono pochi, specialmente per i nuovi protocolli. L'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. Per quanto riguarda JavaScript, \u00e8 da ricercare da tutti, e poich\u00e9 JavaScript e crittografia non sono esattamente amici intimi, WebAssembly sar\u00e0 d'aiuto, poich\u00e9 ormai si propone sicuramente come il prossimo importante standard di Internet.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Conclusione<\/h2>\n<p><\/p>\n<p>Spero che in precedenza <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/448330\/\">articolo<\/a><\/noindex> sia riuscito a convincervi che la generazione di numeri casuali sulla blockchain \u00e8 critica per molti aspetti della vita delle reti decentralizzate, e con questo articolo ho mostrato che questo compito \u00e8 estremamente ambizioso e complesso, ma buone soluzioni gi\u00e0 esistono. In generale, il design finale del protocollo \u00e8 possibile solo dopo aver effettuato test massivi che considerano tutti gli aspetti, dalla fase di setup all'emulazione dei guasti, quindi \u00e8 improbabile che troviate ricette pronte nei whitepaper dei team e negli articoli, e noi nei prossimi uno o due anni sicuramente non ci avventureremo a scrivere \u201cfate cos\u00ec, \u00e8 sicuramente corretto\u201d. <\/p>\n<p><\/p>\n<p>Nel frattempo, 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 concentrati sull'implementazione delle firme threshold BLS, con l'intenzione di realizzare PVRB a livello di consenso, poich\u00e9 la verifica nei contratti smart con un livello di sicurezza accettabile \u00e8 attualmente impossibile. \u00c8 possibile che utilizziamo due schemi: inizialmente un costoso secret sharing per creare un random_seed a lungo termine, che utilizzeremo successivamente come base per una generazione casuale ad alta frequenza tramite firme threshold BLS determinate, ma potremmo limitarci a uno solo degli schemi. \u00c8 difficile prevedere in anticipo quale sar\u00e0 il protocollo, ma ci\u00f2 che consola \u00e8 che, come nella scienza, anche nelle sfide ingegneristiche un risultato negativo \u00e8 pur sempre un risultato, e ogni nuovo tentativo di risolvere il problema rappresenta un ulteriore passo avanti per tutti coloro che si occupano di questa questione. Per soddisfare le esigenze aziendali, affrontiamo un compito altamente pratico: garantire alle applicazioni di gioco una fonte affidabile di entropia, e quindi dobbiamo prestare attenzione anche alla blockchain stessa, in particolare alle questioni relative alla finalit\u00e0 della catena e alla governance della rete. <\/p>\n<p><\/p>\n<p>Sebbene al momento non osserviamo un PVRB prolungato e comprovato nei blockchain, utilizzato per un tempo sufficiente a superare i test con applicazioni reali, audit multipli, carichi e, naturalmente, attacchi reali, il numero dei possibili percorsi conferma che una soluzione esiste e che uno di questi algoritmi risolver\u00e0 finalmente il problema. Siamo felici di condividere i risultati e ringraziamo gli altri team che stanno affrontando questa questione per gli articoli e il codice che permettono agli ingegneri di non incappare due volte negli stessi errori. <\/p>\n<p><\/p>\n<p>Quindi, quando incontrate un programmatore che progetta un generatore di casualit\u00e0 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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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) 4.9.10\" \/>\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! } \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\" \/>\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 alla funzione getAbsolutelyRandomNumer() { return 4; \/\/ restituisce un numero assolutamente casuale! } Come nel caso del concetto di cifratura assolutamente resistente in 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 forma pura: \u00e8 necessario accordarsi rigorosamente su un solo bit, round dopo round.","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! } \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","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"},"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}]}}