{"id":95846,"date":"2020-10-04T01:42:23","date_gmt":"2020-10-03T23:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2"},"modified":"2020-10-04T01:42:23","modified_gmt":"2020-10-03T23:42:23","slug":"mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","title":{"rendered":"\u00c8 possibile generare numeri casuali se non ci fidiamo l'uno dell'altro? Parte 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u00c8 possibile generare numeri casuali se non ci fidiamo l&#039;uno dell&#039;altro? Parte 2\" src=\"\/wp-content\/uploads\/2020\/10\/fc42fe5e99ce4412a0ce99eb63629a42.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ciao, Habr!<\/p>\n<p>In <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/near\/blog\/521090\/\">parte uno<\/a><\/noindex> In questo articolo abbiamo discusso perch\u00e9 potrebbe essere necessario generare numeri casuali per i partecipanti che non si fidano l'uno dell'altro, quali requisiti devono avere tali generatori di numeri casuali e abbiamo esaminato due approcci alla loro implementazione.<\/p>\n<p>In questa sezione dell'articolo esamineremo un altro approccio che utilizza le firme soglia.<\/p>\n<h3>Un po' di crittografia<\/h3>\n<p>Per comprendere come funzionano le firme soglia, \u00e8 necessario sapere un po' di crittografia di base. Useremo due concetti: scalari, o semplicemente numeri, che indicheremo con lettere minuscole (<em>x, y<\/em>) e punti su una curva ellittica, che indicheremo con lettere maiuscole.<\/p>\n<p>Per comprendere i fondamenti delle firme soglia non \u00e8 necessario sapere come funzionano le curve ellittiche, a parte alcune nozioni di base:<\/p>\n<ol>\n<li>\n<p>I punti su una curva ellittica possono essere sommati e moltiplicati per uno scalare (la moltiplicazione per uno scalare sar\u00e0 indicata come <em>xG<\/em>, anche se la notazione <em>Gx<\/em> \u00e8 anche spesso usato in letteratura). Il risultato dell'addizione e della moltiplicazione per uno scalare \u00e8 un punto sulla curva ellittica.<\/p>\n<\/li>\n<li>\n<p>Conoscendo solo un punto <em>G<\/em> e il suo prodotto con uno scalare <em>xG<\/em> non si pu\u00f2 calcolare <em>x<\/em>.<\/p>\n<\/li>\n<\/ol>\n<p>Utilizzeremo anche il concetto di polinomio <em>p(x)<\/em> di grado <em>k<\/em>-1. In particolare, useremo la seguente propriet\u00e0 dei polinomi: se conosciamo il valore <em>p(x) <\/em>per qualsiasi <em>k <\/em>diverso <em>x <\/em>(e non abbiamo ulteriori informazioni su <em>p(x)<\/em>), possiamo calcolare <em>p(x) <\/em>per qualsiasi altro <em>x<\/em>.<\/p>\n<p>\u00c8 interessante notare che per ogni polinomio <em>p(x)<\/em> e un certo punto sulla curva <em>G<\/em>, conoscendo il valore <em>p(x)G<\/em> per qualsiasi <em>k<\/em> di valori diversi <em>x<\/em>, si pu\u00f2 anche calcolare <em>p(x)G<\/em> per qualsiasi <em>x<\/em>.<\/p>\n<p>Queste informazioni sono sufficienti per approfondire i dettagli di come funzionano le firme soglia e come utilizzarle per generare numeri casuali.<\/p>\n<h3>Generatore di numeri casuali basato su firme soglia<\/h3>\n<p>Supponiamo che <em>n<\/em> i partecipanti vogliano generare un numero casuale, e vogliamo che la partecipazione di qualsiasi <em>k<\/em> di essi sia sufficiente per generare il numero, ma che gli attaccanti, che controllano <em>k<\/em>-1 o meno partecipanti, non possano prevedere o influenzare il numero generato.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c8 possibile generare numeri casuali se non ci fidiamo l&#039;uno dell&#039;altro? Parte 2\" src=\"\/wp-content\/uploads\/2020\/10\/00d54b3b0ca237a1551cdbdc35688099.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Supponiamo che esista un polinomio <em>p(x)<\/em> di grado <em>k<\/em>-1, tale che il primo partecipante conosca <em>p(1)<\/em>, il secondo conosca <em>p(2), <\/em>e cos\u00ec via (<em>n<\/em>-esimo conosce <em>p(n)<\/em>). Assume inoltre che, per un certo punto predeterminato <em>G<\/em> , tutti sappiano <em>p(x)G <\/em>per tutti i valori <em>x<\/em>. Noi ci riferiremo a <em>p(i)<\/em> come a \"componente privata\" <em>i<\/em>del partecipante - (perch\u00e9 solo <em>i<\/em>- il partecipante sa quale essa sia), e <em>p(i)G<\/em> come a \"componente pubblica\" <em>i<\/em>del partecipante - (perch\u00e9 tutti i partecipanti la conoscono). Come ricorderete, conoscere <em>p(i)G <\/em>non \u00e8 sufficiente per ricostruire <em>p(i).<\/em><\/p>\n<p>Creare un polinomio tale che solo <em>il partecipante i-<\/em>conosca la sua componente privata \u00e8 la parte pi\u00f9 complessa e interessante del protocollo, e la esamineremo di seguito. Supponiamo per ora che abbiamo un tale polinomio e che tutti i partecipanti conoscano le proprie componenti private.<\/p>\n<p>Come possiamo utilizzare questo polinomio per generare un numero casuale? Innanzitutto abbiamo bisogno di una stringa che non sia mai stata usata come input per il generatore. Nel caso della blockchain, l'hash dell'ultimo blocco <em>h<\/em> \u00e8 un buon candidato per una tale stringa. Se i partecipanti vogliono generare un numero casuale, utilizzando <em>h <\/em>come seme. Inizialmente, i partecipanti convertono <em>h<\/em> in un punto sulla curva usando qualsiasi funzione definita in anticipo:<\/p>\n<p><em>H = scalarToPoint(h)<\/em><\/p>\n<p>Dopodich\u00e9, ogni partecipante <em>i<\/em> calcola e pubblica <em>Hi = p(i)H, <\/em>cosa che possono fare, poich\u00e9 conoscono<em> p(i) e H. <\/em>Rivelazione<em> H<\/em>non consente ad altri partecipanti di ripristinare il componente privato <em>i<\/em>-o partecipante, e quindi un insieme di componenti privati pu\u00f2 essere utilizzato da blocco a blocco. Pertanto, il costoso algoritmo di generazione del polinomio, descritto di seguito, deve essere eseguito solo una volta.<\/p>\n<p>Quando <em>k<\/em> i partecipanti hanno rivelato <em>Hi = p(i)H, <\/em>tutti possono calcolare<em> H<\/em>x = <em>p(x)H<\/em> per tutti <em>x<\/em> grazie alla propriet\u00e0 dei polinomi che abbiamo discusso nel capitolo precedente. A questo punto, tutti i partecipanti calcolano <em>H0 = p(0)H, <\/em>e questo \u00e8 il numero casuale risultante. Si noti che nessuno conosce<em> p(0), <\/em>e quindi l'unico modo per calcolare<em> p(0)H \u2013 <\/em>\u00e8 l'interpolazione<em> p(x)H, <\/em>che \u00e8 possibile solo quando<em> k <\/em>i valori<em> p(i)H <\/em>sono noti. Rivelare un numero inferiore<em> p(i)H <\/em>non fornisce alcuna informazione su<em> p(0)H.<\/em><\/p>\n<p><img decoding=\"async\" alt=\"\u00c8 possibile generare numeri casuali se non ci fidiamo l&#039;uno dell&#039;altro? Parte 2\" src=\"\/wp-content\/uploads\/2020\/10\/a91219381018f90f73b0a92976c92c79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Il generatore sopra ha tutte le propriet\u00e0 che desideriamo: i malintenzionati che controllano solo <em>k-<\/em>1 partecipanti, o meno, non hanno alcuna informazione e influenza sull'output, mentre qualsiasi <em>k<\/em> partecipanti possono calcolare il numero risultante, e qualsiasi sottoinsieme di <em>k<\/em> partecipanti arriver\u00e0 sempre allo stesso risultato per lo stesso seed.<\/p>\n<p>C'\u00e8 un problema che abbiamo gentilmente eluso nel paragrafo precedente. Affinch\u00e9 l'interpolazione funzioni, \u00e8 fondamentale che il valore<em> H<\/em>i pubblicato da ogni partecipante <em>i<\/em> sia realmente uguale a <em>p(i)H.<\/em> Poich\u00e9 nessuno, tranne il <em>i<\/em>-esimo partecipante, sa <em>p(i), <\/em>nessuno, tranne il <em>il partecipante i-<\/em>-esimo partecipante, pu\u00f2 verificare che <em>Ciao <\/em>sia effettivamente calcolato correttamente e senza una prova crittografica della correttezza<em> H<\/em>i un avversario pu\u00f2 pubblicare qualsiasi valore come <em>Ciao, <\/em>e influenzare arbitrariamente l'output del generatore di numeri casuali<em>:<\/em><\/p>\n<p><img decoding=\"async\" alt=\"\u00c8 possibile generare numeri casuali se non ci fidiamo l&#039;uno dell&#039;altro? Parte 2\" src=\"\/wp-content\/uploads\/2020\/10\/694a86666806c49edb6e44dd9ec26b0f.png\" style=\"display:block;margin: 0 auto;\" \/>Valori diversi di H_1, inviati dal primo partecipante, portano a diversi H_0 risultanti<\/p>\n<p>Ci sono almeno due modi per dimostrare la correttezza<em> H<\/em>i, li esamineremo dopo aver trattato la generazione del polinomio.<\/p>\n<h3>Generazione del polinomio<\/h3>\n<p>Nella sezione precedente, abbiamo presunto che ci fosse un tale polinomio <em>p(x)<\/em> di grado <em>k<\/em>-1 che il partecipante <em>i<\/em> sa <em>p(i)<\/em>, e nessun altro ha alcuna informazione su questo valore. Nella prossima sezione sar\u00e0 necessario che per un certo punto predefinito <em>G<\/em> tutti sappiano <em>p(x)G <\/em>per tutti<em> x<\/em>.<\/p>\n<p>In questa sezione presumeremo che ogni partecipante abbia localmente una chiave privata <em>xi, <\/em>ovvero, \u00e8 ben noto il corrispondente chiave pubblica<em> X<\/em>i.<\/p>\n<p>Un possibile protocollo di generazione del polinomio \u00e8 il seguente:<\/p>\n<p><img decoding=\"async\" alt=\"\u00c8 possibile generare numeri casuali se non ci fidiamo l&#039;uno dell&#039;altro? Parte 2\" src=\"\/wp-content\/uploads\/2020\/10\/ccd8afbc3c88a7f5a03714aeb6593361.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<ol>\n<li>\n<p>Ogni partecipante <em>i<\/em> crea localmente un polinomio arbitrario <em>pi(x) di grado k-1. <\/em>Essi poi inviano a ciascun partecipante<em> j <\/em>valore<em> p<\/em>i(j), cifrato con la chiave pubblica <em>Xj. <\/em>In questo modo solo<em> il partecipante i-<\/em>j-<em> <\/em>e<em> il partecipante conosce<\/em>j-<em> <\/em>i(j). Il partecipante<em> p<\/em>annuncia anche pubblicamente <em>i<\/em> pi(j)G <em>incluso. <\/em>per tutti<em> j <\/em>da<em> 1 <\/em>fino a<em> k <\/em>Tutti i partecipanti utilizzano un certo consenso per scegliere<\/p>\n<\/li>\n<li>\n<p>i partecipanti i cui polinomi saranno utilizzati. Poich\u00e9 alcuni partecipanti potrebbero essere offline, non possiamo aspettare che tutti<em> k <\/em>i partecipanti pubblichino i polinomi. Il risultato di questo passo \u00e8 un insieme<em> n <\/em>composto da almeno<em> <\/em><strong><em>Z<\/em><\/strong><em> <\/em>polinomi creati nel passo (1)<em> k <\/em>I partecipanti si assicurano che i valori a loro noti<em>.<\/em><\/p>\n<\/li>\n<li>\n<p>i(j) corrispondano a quelli annunciati pubblicamente<em> p<\/em>pi(j)G. <em>Dopo questo passo devono rimanere solo i polinomi per i quali il privato trasmesso <\/em>calcola la sua componente privata<em> <\/em><strong><em>Z <\/em><\/strong>p(j)<em> p<\/em>pi(j)G. <em>Dopo questo passo devono rimanere solo i polinomi per i quali il privato trasmesso<\/em><\/p>\n<\/li>\n<li>\n<p>Ogni partecipante<em> j <\/em>come somma<em> i(j) per tutti <\/em>. Ogni partecipante calcola anche tutti i valori<em> p<\/em>pi(x)G per tutti i <em>i<\/em> in <strong><em>Z<\/em><\/strong>p(x) \u2013 <em>p(x)G <\/em>. Ogni partecipante calcola anche tutti i valori <em>\u00e8 davvero un polinomio di grado <\/em>in<em> <\/em><strong><em>Z<\/em><\/strong><em>.<\/em><\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" alt=\"\u00c8 possibile generare numeri casuali se non ci fidiamo l&#039;uno dell&#039;altro? Parte 2\" src=\"\/wp-content\/uploads\/2020\/10\/a7a92dba3b9de7a376c415fc6c330c46.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nota che<em> k-1, <\/em>perch\u00e9 \u00e8 la somma di singoli<em> i(x), ognuno dei quali \u00e8 un polinomio di grado <\/em>perch\u00e9 si tratta della somma dei singoli<em> p<\/em>i(x), ognuno dei quali \u00e8 un polinomio di grado <em>k<\/em>-1. Poi, \u00e8 importante notare che mentre ogni partecipante <em>j<\/em> sa <em>p(j), <\/em>non hanno alcuna informazione su <em>p(x)<\/em> per <em>x \u2260 j<\/em>. Infatti, per calcolare questo valore, devono conoscere tutti <em>pi(x), <\/em>e finch\u00e9 un partecipante<em> j <\/em>non conosce almeno uno dei polinomi scelti, non hanno informazioni sufficienti su<em> p(x).<\/em><\/p>\n<p>Questo \u00e8 l'intero processo di generazione del polinomio, che \u00e8 stato necessario nella sezione precedente. I passaggi 1, 2 e 4 sopra hanno un'implementazione abbastanza ovvia. Tuttavia, il passo 3 non \u00e8 cos\u00ec banale.<\/p>\n<p>In particolare, dobbiamo essere in grado di dimostrare che i cifrati<em> p<\/em>i(j) corrispondono effettivamente a quelli pubblicati. <em>Dopo questo passo devono rimanere solo i polinomi per i quali il privato trasmesso <\/em>Se non possiamo dimostrarlo, un malintenzionato<em> i <\/em>pu\u00f2 inviare spazzatura invece di<em> p<\/em>i(j) al partecipante, <em>j<\/em>e il partecipante <em>j <\/em>non sar\u00e0 in grado di ottenere il vero valore <em>pi(j), <\/em>e non potr\u00e0 calcolare il proprio componente privato.<em>.<\/em><\/p>\n<p>Esiste un protocollo crittografico che consente di creare un messaggio aggiuntivo<em> proof<\/em>i(j), in modo tale che ogni partecipante, avendo un certo valore <em>e, <\/em>assieme a<em> proofi(j) <\/em>e<em> p<\/em>i(j)G, pu\u00f2 verificare localmente che <em>e<\/em> sia realmente <em>pi(j), <\/em>cifrato con la chiave del partecipante<em> j. <\/em>Purtroppo, le dimensioni di tale prova sono incredibilmente grandi e considerando che \u00e8 necessario pubblicarne<em> O(nk) <\/em>tali prove, non sar\u00e0 possibile utilizzarle per questo scopo.<\/p>\n<p>Invece di dimostrare che <em>pi(j) <\/em>corrisponde a<em> p<\/em>i(j)G, possiamo riservare un intervallo di tempo molto ampio nel protocollo di generazione del polinomio, durante il quale tutti i partecipanti verificano i messaggi crittografati ricevuti <em>pi(j), <\/em>e se il messaggio decrittato non corrisponde a<em> p<\/em>i(j)G, pubblicano una prova crittografica che dimostra che il messaggio crittografato ricevuto \u00e8 errato. Dimostrare che il messaggio <em>non <\/em>corrisponde a <em>pi(G)<\/em> \u00e8 molto pi\u00f9 semplice che dimostrare che corrisponde. \u00c8 importante notare che ci\u00f2 richiede che ogni partecipante appaia in rete almeno una volta durante il tempo assegnato per creare tali prove, e si basa sull'assunzione che, se hanno pubblicato una tale prova, essa raggiunger\u00e0 tutti gli altri partecipanti entro lo stesso tempo assegnato.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c8 possibile generare numeri casuali se non ci fidiamo l&#039;uno dell&#039;altro? Parte 2\" src=\"\/wp-content\/uploads\/2020\/10\/f7d92f18c75aa6161a9e3f1724b57426.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Se un partecipante non \u00e8 apparso online durante questo periodo e ha effettivamente avuto almeno un componente errato, quel particolare partecipante non potr\u00e0 partecipare a ulteriori generazioni di numeri. Tuttavia, il protocollo funzioner\u00e0 ancora se ci sono almeno <em>k<\/em> partecipanti che hanno ricevuto solo componenti corrette o che sono riusciti a lasciare una prova di errore entro il tempo assegnato.<\/p>\n<h3>Prove di correttezza H_i<\/h3>\n<p>L'ultima parte da discutere \u00e8 come dimostrare la correttezza di quanto pubblicato<em> H<\/em>i, ovvero che <em>Hi = p(i)H, <\/em>senza rivelazione<em> p(i).<\/em><\/p>\n<p>Ricordiamo che i valori<em> H, G, p(i)G <\/em>sono pubblici e noti a tutti.<em> <\/em>L'operazione di ottenere<em> p(i) <\/em>sapendo<em> p(i)G <\/em>e<em> G <\/em>\u00e8 chiamata logaritmo discreto, o<em> dlog, <\/em>e vogliamo dimostrare che:<\/p>\n<p><em>dlog(p(i)G, G) = dlog(H<\/em>i, <em>H<\/em>)<\/p>\n<p>senza divulgazione <em>p(i)<\/em>. Le costruzioni per tali prove esistono, ad esempio<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Proof_of_knowledge#Schnorr_protocol\"> <u>Protocollo Schnorr<\/u><\/a><\/noindex>.<\/p>\n<p>Con tale costruzione, ogni partecipante insieme a <em>Ciao <\/em>invia una prova di correttezza secondo la costruzione.<\/p>\n<p>Quando un numero casuale \u00e8 generato, spesso \u00e8 necessario utilizzarlo per partecipanti diversi da quelli che lo hanno generato. A tali partecipanti, insieme al numero, devono essere inviati tutti <em>Ciao<\/em> e le prove correlate.<\/p>\n<p>Il lettore curioso potrebbe chiedere: poich\u00e9 il numero casuale finale \u00e8<em> H<\/em>0, e <em>p(0)G \u2013 <\/em>\u00e8 informazione pubblica, perch\u00e9 \u00e8 necessaria una prova per ciascun singolo<em> H<\/em>i, perch\u00e9 non inviare invece la prova che<\/p>\n<p>dlog(<em>p(0)G, G) = dlog(H<\/em>0, <em>H<\/em>)<\/p>\n<p>Il problema \u00e8 che con il Protocollo di Schnorr non \u00e8 possibile creare tale prova, perch\u00e9 nessuno conosce il valore <em>p(0)<\/em>, necessario per creare la prova, e inoltre, l'intero generatore di numeri casuali si basa sul fatto che nessuno conosce questo valore. Pertanto, \u00e8 necessario avere tutti i valori <em>Ciao <\/em>e le loro prove individuali, per dimostrare la correttezza<em> H<\/em>0.<\/p>\n<p>Tuttavia, se ci fosse qualche operazione sui punti delle curve ellittiche, semanticamente simile alla moltiplicazione, la prova di correttezza <em>H0 <\/em>sarebbe banale, ci assicureremmo semplicemente che<\/p>\n<p><em>H<\/em>0 \u00d7 <em>G<\/em> = <em>p(0)G \u00d7 H<\/em><\/p>\n<p>Se la curva selezionata supporta <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@VitalikButerin\/exploring-elliptic-curve-pairings-c73c1864e627\"><u>accoppiamenti di curve ellittiche<\/u><\/a><\/noindex>, questa prova funziona. In questo caso<em> H<\/em>0 \u2013 non \u00e8 solo l'output di un generatore di numeri casuali, che pu\u00f2 essere verificato da qualsiasi partecipante a conoscenza di <em>G, H<\/em> e <em>p(0)G. H<\/em>0 \u2013 \u00e8 anche una firma sul messaggio usato come seed, che conferma che <em>k<\/em> e <em>n <\/em>i partecipanti hanno firmato questo messaggio. Pertanto, se <em>seed \u2013 <\/em>\u00e8 l'hash del blocco nel protocollo blockchain, allora <em>H0<\/em> \u2013 \u00e8 sia una multi-firma sul blocco, sia un buon numero casuale.<\/p>\n<h4>In conclusione<\/h4>\n<p>Questo articolo \u00e8 parte di una serie di articoli tecnici nel blog <noindex><a rel=\"nofollow\" href=\"https:\/\/near.org\">NEAR<\/a><\/noindex>. NEAR \u00e8 un protocollo blockchain e una piattaforma per lo sviluppo di applicazioni decentralizzate, con un focus sulla semplicit\u00e0 di sviluppo e sull'usabilit\u00e0 per gli utenti finali.<\/p>\n<p>Il codice del protocollo \u00e8 open source, l'implementazione \u00e8 scritta in Rust e pu\u00f2 essere trovata <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nearprotocol\/nearcore\">qui<\/a><\/noindex>.<\/p>\n<p>Puoi vedere come appare lo sviluppo su NEAR e sperimentare nell'IDE online <noindex><a rel=\"nofollow\" href=\"https:\/\/examples.near.org\">qui<\/a><\/noindex>.<\/p>\n<p>Puoi seguire tutte le novit\u00e0 in russo nel <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/near_protocol\">gruppo Telegram<\/a><\/noindex> e nel <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/nearprotocol\">gruppo VKontakte<\/a><\/noindex>, mentre in inglese nel <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/NEARProtocol\">Twitter ufficiale<\/a><\/noindex>.<\/p>\n<p>A presto!<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/near\/blog\/521700\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438, \u0437\u0430\u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443, \u043a\u0430\u043a\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0434\u0432\u0438\u0433\u0430\u044e\u0442\u0441\u044f \u043a \u0442\u0430\u043a\u0438\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0434\u0432\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043a \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u0445\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0438. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":95847,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-95846","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\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\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.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\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443? \u0427\u0430\u0441\u0442\u044c 2 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2\" \/>\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=\"2020-10-03T23:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-03T23:42:23+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\udd47\u00c8 possibile generare numeri casuali se non ci fidiamo l'uno dell'altro? Parte 2 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","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\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443? \u0427\u0430\u0441\u0442\u044c 2 | ProHoster","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","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":"2020-10-03T23:42:23+00:00","article:modified_time":"2020-10-03T23:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"95846","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:56:24","updated":"2022-09-30 13:54:48","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\/95846","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=95846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/95846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/95847"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=95846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=95846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=95846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}