{"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\/\">prima parte<\/a><\/noindex> Nell'articolo abbiamo discusso perch\u00e9 potrebbe essere necessario generare numeri casuali per partecipanti che non si fidano l'uno dell'altro, quali requisiti vengono posti a tali generatori di numeri casuali e abbiamo esaminato due approcci per la loro implementazione.<\/p>\n<p>In questa parte dell'articolo esamineremo in dettaglio 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 avere una comprensione base della crittografia. Utilizzeremo 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 capire le basi delle firme soglia non \u00e8 necessario comprendere come funzionano le curve ellittiche, a parte alcune nozioni fondamentali:<\/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>, sebbene anche la notazione <em>Gx<\/em> \u00e8 spesso utilizzato 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>Sapendo solo il punto <em>G<\/em> e il suo prodotto con lo 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 qualsiasi 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 calcolare anche <em>p(x)G<\/em> per qualsiasi <em>x<\/em>.<\/p>\n<p>Queste informazioni sono sufficienti per approfondire i dettagli su 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> 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 i malintenzionati 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 esista un tale polinomio <em>p(x)<\/em> di grado <em>k<\/em>-1, in modo 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>). Supponiamo anche che per un certo punto prestabilito <em>G<\/em> tutti conoscano <em>p(x)G <\/em>per tutti i valori <em>x<\/em>. Lo chiameremo <em>p(i)<\/em> \u201ccomponente privata\u201d <em>i<\/em>-o partecipante (perch\u00e9 solo <em>i<\/em>-il partecipante conosce il suo), e <em>p(i)G<\/em> \u201ccomponente pubblica\u201d <em>i<\/em>-o partecipante (perch\u00e9 tutti i partecipanti la conoscono). Come ricorderete, la conoscenza <em>p(i)G <\/em>non \u00e8 sufficiente per ricostruire <em>p(i).<\/em><\/p>\n<p>Creare un tale polinomio in modo che solo <em>i-<\/em>-o partecipante e nessun altro conosca la propria componente privata \u00e8 la parte pi\u00f9 complessa e interessante del protocollo, e la analizzeremo di seguito. Supponiamo per ora di avere un tale polinomio e che tutti i partecipanti conoscano le proprie componenti private.<\/p>\n<p>Come possiamo utilizzare un tale polinomio per generare un numero casuale? Per iniziare, abbiamo bisogno di una stringa che non sia stata precedentemente utilizzata 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. Supponiamo che i partecipanti vogliano generare un numero casuale, utilizzando <em>h <\/em>come seed. Prima di tutto, i partecipanti convertono <em>h<\/em> in un punto sulla curva usando qualunque funzione prestabilita:<\/p>\n<p><em>H = scalarToPoint(h)<\/em><\/p>\n<p>Poi ogni partecipante <em>i<\/em> calcola e pubblica <em>Hi = p(i)H, <\/em>cosa che possono fare perch\u00e9 conoscono<em> p(i) e H. <\/em>La rivelazione<em> H<\/em>i non consente agli altri partecipanti di ricostruire la componente privata <em>i<\/em>-o partecipante, e quindi un insieme di componenti private pu\u00f2 essere utilizzato da un blocco all'altro. Cos\u00ec, il costoso algoritmo di creazione del polinomio, descritto di seguito, deve essere eseguito solo una volta.<\/p>\n<p>Quando <em>k<\/em> Una volta che 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, di cui abbiamo parlato nella sezione precedente. A questo punto, tutti i partecipanti calcolano <em>H0 = p(0)H, <\/em>e questo sar\u00e0 il numero casuale risultante. Si noti che nessuno conosce<em> p(0), <\/em>e quindi l'unico modo per calcolare<em> p(0)H \u00e8 <\/em>l'interpolazione<em> p(x)H, <\/em>che \u00e8 possibile solo quando<em> k <\/em>i valori<em> p(i)H <\/em>sono noti. La rivelazione di 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: gli aggressori che controllano solo <em>k-<\/em>1 partecipanti, o meno, non hanno alcuna informazione o influenza sull'output, mentre qualsiasi <em>k<\/em> partecipante pu\u00f2 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 eluso con attenzione sopra. Affinch\u00e9 l'interpolazione funzioni, \u00e8 importante che il valore<em> H<\/em>i pubblicato da ciascun partecipante <em>i<\/em> sia realmente uguale a <em>p(i)H.<\/em> Poich\u00e9 nessuno oltre al <em>i<\/em>-esimo partecipante sa <em>p(i), <\/em>nessuno oltre al <em>i-<\/em>-esimo partecipante pu\u00f2 verificare che <em>Hi <\/em>sia davvero calcolato correttamente, e senza alcuna prova crittografica di correttezza<em> H<\/em>i un attaccante potrebbe 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 risultati diversi di H_0<\/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 supposto di avere un tale polinomio <em>p(x)<\/em> di grado <em>k<\/em>-1 tale che il partecipante <em>i<\/em> conosce <em>p(i)<\/em>, e nessun altro ha alcuna informazione su questo valore. Nella sezione successiva avremo anche bisogno che per un certo punto prefissato <em>G<\/em> tutti sappiano <em>p(x)G <\/em>per tutti<em> x<\/em>.<\/p>\n<p>In questa sezione presupporremo che ogni partecipante abbia localmente una certa chiave privata <em>xi, <\/em>tale che la corrispondente chiave pubblica<em> X<\/em>i sia nota.<\/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 quindi inviano a ciascun partecipante<em> j <\/em>valore<em> p<\/em>i(j), crittografato con la chiave pubblica <em>Xj. <\/em>Cos\u00ec solo<em> i-<\/em>-esimo<em> <\/em>e<em> j-<\/em>-esimo<em> <\/em>partecipante conosce<em> p<\/em>i(j). Il partecipante <em>i<\/em> annuncia anche pubblicamente <em>pi(j)G <\/em>per tutti<em> j <\/em>di<em> 1 <\/em>fino a<em> k <\/em>incluso.<\/p>\n<\/li>\n<li>\n<p>Tutti i partecipanti usano un certo consenso per scegliere<em> k <\/em>i partecipanti i cui polinomi verranno usati. Poich\u00e9 alcuni partecipanti potrebbero essere offline, non possiamo aspettare che tutti<em> n <\/em>i partecipanti pubblicano i polinomi. Il risultato di questo passo \u00e8 un insieme<em> <\/em><strong><em>Z<\/em><\/strong><em> <\/em>composto da almeno<em> k <\/em>polinomi, creati nel passo (1)<em>.<\/em><\/p>\n<\/li>\n<li>\n<p>I partecipanti si assicurano che i valori a loro noti<em> p<\/em>i(j) corrispondano ai pubblicamente annunciati <em>pi(j)G. <\/em>Dopo questo passo rimarranno nei<em> <\/em><strong><em>Z <\/em><\/strong>solo i polinomi per i quali i privati trasmessi<em> p<\/em>i(j) corrispondano ai pubblicamente annunciati <em>pi(j)G.<\/em><\/p>\n<\/li>\n<li>\n<p>Ogni partecipante<em> j <\/em>calcolano il proprio componente privato<em> p(j) <\/em>come somma<em> p<\/em>i(j) per tutti <em>i<\/em> in <strong><em>Z<\/em><\/strong>. Ogni partecipante calcola anche tutti i valori <em>p(x)G <\/em>come somma <em>pi(x)G per tutti i i <\/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>Si prega di notare che<em> p(x) \u2013 <\/em>\u00e8 davvero un polinomio di grado<em> k-1, <\/em>poich\u00e9 \u00e8 la somma di singoli<em> p<\/em>i(x), ognuno dei quali \u00e8 un polinomio di grado <em>k<\/em>-1. Successivamente, fai attenzione che mentre ogni partecipante <em>j<\/em> conosce <em>p(j), <\/em>non hanno alcuna informazione su <em>p(x)<\/em> per <em>x \u2260 j<\/em>. Infatti, per calcolare questo valore, hanno bisogno di conoscere tutti <em>pi(x), <\/em>e finch\u00e9 il 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 era necessario nel capitolo precedente. I passaggi 1, 2 e 4 sopra hanno una realizzazione piuttosto ovvia. Tuttavia, il passo 3 non \u00e8 cos\u00ec triviale.<\/p>\n<p>In particolare, dobbiamo essere in grado di dimostrare che i cifrati<em> p<\/em>i(j) corrispondono effettivamente a quanto pubblicato <em>pi(j)G. <\/em>Se non possiamo dimostrarlo, un attaccante<em> i <\/em>pu\u00f2 inviare spazzatura al posto 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 reale 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 qualsiasi partecipante, avendo un certo valore <em>e, <\/em>e anche<em> proofi(j) <\/em>e<em> p<\/em>i(j)G, pu\u00f2 verificare localmente che <em>e<\/em> \u2013 \u00e8 davvero <em>pi(j), <\/em>cifrato con la chiave del partecipante<em> j. <\/em>Sfortunatamente, la dimensione di tale prova \u00e8 incredibilmente grande, e considerando che \u00e8 necessario pubblicare<em> O(nk) <\/em>prove di questo tipo, non pu\u00f2 essere utilizzato per questo scopo.<\/p>\n<p>Invece di dimostrare che <em>pi(j) <\/em>corrisponde a<em> p<\/em>i(j)G possiamo nel protocollo di generazione del polinomio dedicare un periodo di tempo molto ampio, durante il quale tutti i partecipanti verificano i cifrati ricevuti <em>pi(j), <\/em>e se il messaggio decifrato non corrisponde al pubblico<em> p<\/em>i(j)G, pubblicano una prova crittografica che l'informazione cifrata ricevuta \u00e8 errata. Dimostrare che il messaggio <em>non <\/em>corrisponde a <em>pi(G)<\/em> \u00e8 molto pi\u00f9 semplice che dimostrare che esso corrisponde. Va notato che questo richiede che ogni partecipante appaia in rete almeno una volta nel periodo di tempo dedicato alla generazione di tali prove, e dipende dall'assunzione che se pubblicano tale prova, raggiunger\u00e0 tutti gli altri partecipanti entro lo stesso periodo di tempo.<\/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 appare in rete in questo periodo di tempo, e ha effettivamente almeno un componente errato, quel particolare partecipante non sar\u00e0 in grado di partecipare alla successiva generazione di numeri. Il protocollo, tuttavia, continuer\u00e0 a funzionare se ci sono almeno <em>k<\/em> partecipanti che hanno ricevuto solo componenti corretti o hanno avuto il tempo di lasciare prova dell'erroneit\u00e0 nei tempi previsti.<\/p>\n<h3>Prove di correttezza H_i<\/h3>\n<p>L'ultima parte da discutere \u00e8 come dimostrare la correttezza dei pubblicati<em> H<\/em>i, ossia 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>si chiama 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 rivelazione <em>p(i)<\/em>. Esistono costruzioni per tali prove, ad esempio<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Proof_of_knowledge#Schnorr_protocol\"> <u>Protocollo di Schnorr<\/u><\/a><\/noindex>.<\/p>\n<p>Con tale costruzione, ogni partecipante insieme a <em>Hi <\/em>invia la prova di correttezza secondo la costruzione.<\/p>\n<p>Quando un numero casuale \u00e8 generato, spesso deve essere utilizzato da partecipanti diversi da quelli che lo hanno generato. A tali partecipanti \u00e8 necessario inviare insieme al numero tutti <em>Hi<\/em> e le prove correlate.<\/p>\n<p>Un 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 ogni singolo<em> H<\/em>i, perch\u00e9 invece non inviare una 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 una tale prova, perch\u00e9 nessuno conosce il valore <em>p(0)<\/em>, necessario per creare la prova e, inoltre, tutto il generatore di numeri casuali si basa sul fatto che nessuno conosce questo valore. Pertanto \u00e8 necessario avere tutti i valori <em>Hi <\/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 che sia 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 scelta supporta <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@VitalikButerin\/exploring-elliptic-curve-pairings-c73c1864e627\"><u>coppie di curve ellittiche<\/u><\/a><\/noindex>, tale prova funziona. In questo caso<em> H<\/em>0 non \u00e8 solo l'output del generatore di numeri casuali, che pu\u00f2 essere verificato da qualsiasi partecipante che conosce <em>G, H<\/em> e <em>p(0)G. H<\/em>0 \u00e8 anche una firma su un messaggio che \u00e8 stato usato come seed, a conferma che <em>k<\/em> e <em>n <\/em>i partecipanti hanno firmato questo messaggio. In questo modo, se <em>il seed \u2013 <\/em>\u00e8 l'hash di un blocco nel protocollo blockchain, allora <em>H0<\/em> \u00e8 contemporaneamente una multi-firma su un blocco e un ottimo 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 aperto, la nostra implementazione \u00e8 scritta in Rust, ed \u00e8 possibile trovarla <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'online IDE <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 su Telegram<\/a><\/noindex> e in <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/nearprotocol\">gruppo su VKontakte<\/a><\/noindex>, e in inglese nel ufficiale <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/NEARProtocol\">Twitter<\/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.1.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.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\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}]}}