{"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\/fr\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","title":{"rendered":"Peut-on g\u00e9n\u00e9rer des nombres al\u00e9atoires si nous ne nous faisons pas confiance ? Partie 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Peut-on g\u00e9n\u00e9rer des nombres al\u00e9atoires si nous ne nous faisons pas confiance ? Partie 2\" src=\"\/wp-content\/uploads\/2020\/10\/fc42fe5e99ce4412a0ce99eb63629a42.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Salut, Habr !<\/p>\n<p>Dans <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/near\/blog\/521090\/\">de la premi\u00e8re partie<\/a><\/noindex> dans cet article, nous avons discut\u00e9 de la n\u00e9cessit\u00e9 de g\u00e9n\u00e9rer des nombres al\u00e9atoires pour des participants qui ne se font pas confiance, des exigences qui sont pos\u00e9es \u00e0 de tels g\u00e9n\u00e9rateurs de nombres al\u00e9atoires, et nous avons examin\u00e9 deux approches pour leur mise en \u0153uvre.<\/p>\n<p>Dans cette partie de l'article, nous examinerons en d\u00e9tail une autre approche qui utilise des signatures seuil.<\/p>\n<h3>Un peu de cryptographie<\/h3>\n<p>Pour comprendre comment fonctionnent les signatures seuil, il faut conna\u00eetre un peu les bases de la cryptographie. Nous utiliserons deux concepts : les scalaires, ou simplement des nombres que nous d\u00e9signerons par des lettres minuscules (<em>x, y<\/em>) et les points sur une courbe elliptique, que nous d\u00e9signerons par des lettres majuscules.<\/p>\n<p>Pour comprendre les bases des signatures seuil, il n'est pas n\u00e9cessaire de comprendre comment fonctionnent les courbes elliptiques, \u00e0 part quelques notions de base :<\/p>\n<ol>\n<li>\n<p>Les points sur une courbe elliptique peuvent \u00eatre additionn\u00e9s et multipli\u00e9s par un scalaire (la multiplication par un scalaire sera d\u00e9sign\u00e9e par <em>xG<\/em>, bien que la notation <em>Gx<\/em> est \u00e9galement souvent utilis\u00e9 dans la litt\u00e9rature). Le r\u00e9sultat de l'addition et de la multiplication par un scalaire \u2014 c'est un point sur une courbe elliptique.<\/p>\n<\/li>\n<li>\n<p>Sachant seulement le point <em>G<\/em> et son produit avec le scalaire <em>xG<\/em> il n'est pas possible de calculer <em>x<\/em>.<\/p>\n<\/li>\n<\/ol>\n<p>Nous utiliserons \u00e9galement le concept de polyn\u00f4me <em>p(x)<\/em> de degr\u00e9 <em>k<\/em>-1. En particulier, nous utiliserons la propri\u00e9t\u00e9 suivante des polyn\u00f4mes : si nous connaissons la valeur <em>p(x) <\/em>pour n'importe quel <em>k <\/em>diff\u00e9rent <em>x <\/em>(et nous n'avons plus d'informations sur <em>p(x)<\/em>), nous pouvons calculer <em>p(x) <\/em>pour n'importe quel autre <em>x<\/em>.<\/p>\n<p>Il est int\u00e9ressant de noter que pour tout polyn\u00f4me <em>p(x)<\/em> et un certain point sur la courbe <em>G<\/em>, connaissant la valeur <em>p(x)G<\/em> pour n'importe quel <em>k<\/em> de valeurs diff\u00e9rentes <em>x<\/em>, il est \u00e9galement possible de calculer <em>p(x)G<\/em> pour n'importe quel <em>x<\/em>.<\/p>\n<p>Ces informations suffisent pour explorer les d\u00e9tails de fonctionnement des signatures seuil et comment les utiliser pour g\u00e9n\u00e9rer des nombres al\u00e9atoires.<\/p>\n<h3>Un g\u00e9n\u00e9rateur de nombres al\u00e9atoires bas\u00e9 sur des signatures seuil<\/h3>\n<p>Supposons que <em>n<\/em> des participants veulent g\u00e9n\u00e9rer un nombre al\u00e9atoire, et nous voulons que la participation de n'importe quel <em>k<\/em> d'entre eux soit suffisante pour g\u00e9n\u00e9rer un nombre, mais que des attaquants contr\u00f4lant <em>k<\/em>-1 ou moins de participants ne puissent pr\u00e9dire ou influencer le nombre g\u00e9n\u00e9r\u00e9.<\/p>\n<p><img decoding=\"async\" alt=\"Peut-on g\u00e9n\u00e9rer des nombres al\u00e9atoires si nous ne nous faisons pas confiance ? Partie 2\" src=\"\/wp-content\/uploads\/2020\/10\/00d54b3b0ca237a1551cdbdc35688099.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Supposons qu'il existe un polyn\u00f4me <em>p(x)<\/em> de degr\u00e9 <em>k<\/em>-1, tel que le premier participant connaisse <em>p(1)<\/em>, le deuxi\u00e8me sache <em>p(2), <\/em>et ainsi de suite (<em>n<\/em>le -\u00e8me sait <em>p(n)<\/em>). Supposons \u00e9galement que pour un certain point pr\u00e9d\u00e9fini <em>G<\/em> tout le monde sache <em>p(x)G <\/em>pour toutes les valeurs <em>x<\/em>. Nous allons appeler <em>p(i)<\/em> \u00abcomposante priv\u00e9e\u00bb <em>i<\/em>-e participant (car seul <em>i<\/em>-e participant la conna\u00eet), et <em>p(i)G<\/em> \u00abcomposante publique\u00bb <em>i<\/em>-e participant (car tous les participants la connaissent). Comme vous vous en souvenez, savoir <em>p(i)G <\/em>n'est pas suffisant pour reconstruire <em>p(i).<\/em><\/p>\n<p>Cr\u00e9er un tel polyn\u00f4me de sorte que seul <em>i-<\/em>e participant et personne d'autre connaisse sa composante priv\u00e9e \u2013 c'est la partie la plus complexe et int\u00e9ressante du protocole, et nous l'examinerons ci-dessous. Supposons qu'un tel polyn\u00f4me existe, et que tous les participants connaissent leurs composantes priv\u00e9es.<\/p>\n<p>Comment pouvons-nous utiliser un tel polyn\u00f4me pour g\u00e9n\u00e9rer un nombre al\u00e9atoire ? Pour commencer, nous avons besoin d'une cha\u00eene qui n'a pas encore \u00e9t\u00e9 utilis\u00e9e comme entr\u00e9e pour le g\u00e9n\u00e9rateur. Dans le cas de la blockchain, le hachage du dernier bloc <em>h<\/em> \u2014 un bon candidat pour une telle cha\u00eene. Supposons que les participants souhaitent cr\u00e9er un nombre al\u00e9atoire en utilisant <em>h <\/em>comme graine. D'abord, les participants convertissent <em>h<\/em> en un point sur la courbe en utilisant une fonction pr\u00e9d\u00e9finie :<\/p>\n<p><em>H = scalarToPoint(h)<\/em><\/p>\n<p>Ensuite, chaque participant <em>i<\/em> calcule et publie <em>Hi = p(i)H, <\/em>ce qu'ils peuvent faire car ils connaissent<em> p(i) et H. <\/em>La divulgation<em> H<\/em>i ne permet pas aux autres participants de reconstruire la composante priv\u00e9e <em>i<\/em>-e participant, et donc un ensemble de composantes priv\u00e9es peut \u00eatre utilis\u00e9 d'un bloc \u00e0 l'autre. Ainsi, l'algorithme co\u00fbteux de cr\u00e9ation de polyn\u00f4me, d\u00e9crit ci-dessous, doit \u00eatre ex\u00e9cut\u00e9 une seule fois.<\/p>\n<p>Lorsque <em>k<\/em> les participants ont d\u00e9voil\u00e9 <em>Hi = p(i)H, <\/em>tout le monde peut calculer<em> H<\/em>x = <em>p(x)H<\/em> pour tous <em>x<\/em> gr\u00e2ce \u00e0 la propri\u00e9t\u00e9 des polyn\u00f4mes que nous avons discut\u00e9e dans la section pr\u00e9c\u00e9dente. \u00c0 ce moment, tous les participants calculent <em>H0 = p(0)H, <\/em>et c'est le nombre al\u00e9atoire r\u00e9sultant. Notez que personne ne conna\u00eet<em> p(0), <\/em>et par cons\u00e9quent, la seule fa\u00e7on de calculer<em> p(0)H \u2013 <\/em>est l'interpolation<em> p(x)H, <\/em>ce qui n'est possible que lorsque<em> k <\/em>les valeurs<em> p(i)H <\/em>sont connues. La divulgation d'un nombre moindre<em> p(i)H <\/em>ne fournit aucune information sur<em> p(0)H.<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Peut-on g\u00e9n\u00e9rer des nombres al\u00e9atoires si nous ne nous faisons pas confiance ? Partie 2\" src=\"\/wp-content\/uploads\/2020\/10\/a91219381018f90f73b0a92976c92c79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Le g\u00e9n\u00e9rateur ci-dessus poss\u00e8de toutes les propri\u00e9t\u00e9s que nous souhaitons : les attaquants ne contr\u00f4lant que <em>k-<\/em>1 participants, ou moins, n'ont aucune information ni influence sur la sortie, tandis que tous les <em>k<\/em> participants peuvent calculer le nombre r\u00e9sultant, et tout sous-ensemble de <em>k<\/em> participants parviendra toujours au m\u00eame r\u00e9sultat pour la m\u00eame graine.<\/p>\n<p>Il y a un probl\u00e8me que nous avons habilement \u00e9vit\u00e9 ci-dessus. Pour que l'interpolation fonctionne, il est important que la valeur<em> H<\/em>i publi\u00e9e par chaque participant <em>i<\/em> soit r\u00e9ellement \u00e9gale \u00e0 <em>p(i)H.<\/em> Comme personne d'autre que <em>i<\/em>-i\u00e8me participant ne sait <em>p(i), <\/em>personne d'autre que <em>i-<\/em>-i\u00e8me participant ne peut v\u00e9rifier que <em>Salut <\/em>a \u00e9t\u00e9 r\u00e9ellement calcul\u00e9 correctement, et sans aucune preuve cryptographique de la validit\u00e9<em> H<\/em>i un attaquant peut publier n'importe quelle valeur comme <em>Salut, <\/em>et influencer arbitrairement la sortie du g\u00e9n\u00e9rateur de nombres al\u00e9atoires<em>:<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Peut-on g\u00e9n\u00e9rer des nombres al\u00e9atoires si nous ne nous faisons pas confiance ? Partie 2\" src=\"\/wp-content\/uploads\/2020\/10\/694a86666806c49edb6e44dd9ec26b0f.png\" style=\"display:block;margin: 0 auto;\" \/>Diff\u00e9rentes valeurs H_1 envoy\u00e9es par le premier participant conduisent \u00e0 diff\u00e9rents H_0 r\u00e9sultants<\/p>\n<p>Il existe au moins deux fa\u00e7ons de prouver la validit\u00e9<em> H<\/em>i, nous les examinerons apr\u00e8s avoir abord\u00e9 la g\u00e9n\u00e9ration du polyn\u00f4me.<\/p>\n<h3>G\u00e9n\u00e9ration du polyn\u00f4me<\/h3>\n<p>Dans la section pr\u00e9c\u00e9dente, nous avons suppos\u00e9 qu'il existe un tel polyn\u00f4me <em>p(x)<\/em> de degr\u00e9 <em>k<\/em>-1 que le participant <em>i<\/em> sait <em>p(i)<\/em>, et personne d'autre n'a aucune information sur cette valeur. Dans la section suivante, nous aurons \u00e9galement besoin que pour un certain point pr\u00e9d\u00e9termin\u00e9 <em>G<\/em> tout le monde sache <em>p(x)G <\/em>pour tous<em> x<\/em>.<\/p>\n<p>Dans cette section, nous supposerons que chaque participant dispose localement d'une certaine cl\u00e9 priv\u00e9e <em>xi, <\/em>telle que la cl\u00e9 publique correspondante est bien connue<em> X<\/em>i.<\/p>\n<p>Un protocole possible de g\u00e9n\u00e9ration de polyn\u00f4mes est le suivant :<\/p>\n<p><img decoding=\"async\" alt=\"Peut-on g\u00e9n\u00e9rer des nombres al\u00e9atoires si nous ne nous faisons pas confiance ? Partie 2\" src=\"\/wp-content\/uploads\/2020\/10\/ccd8afbc3c88a7f5a03714aeb6593361.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<ol>\n<li>\n<p>Chaque participant <em>i<\/em> cr\u00e9e localement un polyn\u00f4me arbitraire <em>pi(x) de degr\u00e9 k-1. <\/em>Ils envoient ensuite \u00e0 chaque participant<em> j <\/em>la valeur<em> p<\/em>i(j) chiffr\u00e9e avec la cl\u00e9 publique <em>Xj. <\/em>Ainsi, seul<em> i-<\/em>-i\u00e8me<em> <\/em>et<em> j-<\/em>-i\u00e8me<em> <\/em>participant sait<em> p<\/em>i(j). Le participant <em>i<\/em> annonce \u00e9galement publiquement <em>pi(j)G <\/em>pour tous<em> j <\/em>\u00e0 partir de<em> 1 <\/em>\u00e0<em> k <\/em>inclusivement.<\/p>\n<\/li>\n<li>\n<p>Tous les participants utilisent un certain consensus pour choisir<em> k <\/em>les participants dont les polyn\u00f4mes seront utilis\u00e9s. Comme certains participants peuvent \u00eatre hors ligne, nous ne pouvons pas attendre que tous<em> n <\/em>les participants publient leurs polyn\u00f4mes. Le r\u00e9sultat de cette \u00e9tape est un ensemble<em> <\/em><strong><em>Z<\/em><\/strong><em> <\/em>compos\u00e9 d'au moins<em> k <\/em>polyn\u00f4mes cr\u00e9\u00e9s \u00e0 l'\u00e9tape (1)<em>.<\/em><\/p>\n<\/li>\n<li>\n<p>Les participants s'assurent que les valeurs qui leur sont connues<em> p<\/em>i(j) correspondent aux <em>pi(j)G annonc\u00e9s publiquement. <\/em>Apr\u00e8s cette \u00e9tape, il ne doit rester que des polyn\u00f4mes pour lesquels les valeurs transmises en priv\u00e9<em> <\/em><strong><em>Z <\/em><\/strong>calculent leur composante priv\u00e9e<em> p<\/em>i(j) correspondent aux <em>pi(j)G annonc\u00e9s publiquement.<\/em><\/p>\n<\/li>\n<li>\n<p>Chaque participant<em> j <\/em>p(j)<em> comme la somme <\/em>i(j) pour tous<em> p<\/em>. Chaque participant calcule \u00e9galement toutes les valeurs <em>i<\/em> dans <strong><em>Z<\/em><\/strong>pi(x)G pour tous i <em>p(x)G <\/em>i(j) pour tous <em>p(x) \u2013 <\/em>dans<em> <\/em><strong><em>Z<\/em><\/strong><em>.<\/em><\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" alt=\"Peut-on g\u00e9n\u00e9rer des nombres al\u00e9atoires si nous ne nous faisons pas confiance ? Partie 2\" src=\"\/wp-content\/uploads\/2020\/10\/a7a92dba3b9de7a376c415fc6c330c46.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Veuillez noter que<em> c'est r\u00e9ellement un polyn\u00f4me de degr\u00e9 <\/em>k-1,<em> car c'est la somme de plusieurs <\/em>i(x), chacun d'eux \u00e9tant un polyn\u00f4me de degr\u00e9<em> p<\/em>i(x), chacun d'eux \u00e9tant un polyn\u00f4me de degr\u00e9 <em>k<\/em>-1. Ensuite, notez que bien que chaque participant <em>j<\/em> sait <em>p(j), <\/em>ils n'ont aucune information sur <em>p(x)<\/em> pour <em>x \u2260 j<\/em>. En effet, pour calculer cette valeur, ils doivent conna\u00eetre toutes les <em>pi(x), <\/em>et tant que le participant<em> j <\/em>ne conna\u00eet pas au moins un des polyn\u00f4mes choisis, ils n'ont pas assez d'informations sur<em> p(x).<\/em><\/p>\n<p>C'est tout le processus de g\u00e9n\u00e9ration de polyn\u00f4me qui \u00e9tait n\u00e9cessaire dans la section pr\u00e9c\u00e9dente. Les \u00e9tapes 1, 2 et 4 ci-dessus ont une r\u00e9alisation assez \u00e9vidente. En revanche, l'\u00e9tape 3 n'est pas si triviale.<\/p>\n<p>Concr\u00e8tement, nous devons pouvoir prouver que les<em> p<\/em>i(j) correspondent r\u00e9ellement \u00e0 ceux publi\u00e9s. <em>pi(j)G annonc\u00e9s publiquement. <\/em>Si nous ne pouvons pas le prouver, un attaquant<em> i <\/em>peut envoyer des donn\u00e9es corrompues \u00e0 la place de<em> p<\/em>i(j) au participant, <em>j<\/em>et le participant <em>j <\/em>ne pourra pas obtenir la v\u00e9ritable valeur de <em>pi(j), <\/em>et ne pourra pas calculer sa composante priv\u00e9e.<em>.<\/em><\/p>\n<p>Il existe un protocole cryptographique qui permet de cr\u00e9er un message suppl\u00e9mentaire,<em> proof<\/em>i(j), de sorte que tout participant, ayant une certaine valeur <em>e, <\/em>ainsi que<em> proofi(j) <\/em>et<em> p<\/em>i(j)G, peut localement s'assurer que <em>e<\/em> est bien <em>pi(j), <\/em>chiffr\u00e9 avec la cl\u00e9 du participant<em> j. <\/em>Malheureusement, la taille d'une telle preuve est incroyablement grande, et \u00e9tant donn\u00e9 qu'il est n\u00e9cessaire de publier<em> O(nk) <\/em>de telles preuves, il ne sera pas possible de les utiliser \u00e0 cette fin.<\/p>\n<p>Au lieu de prouver que <em>pi(j) <\/em>correspond \u00e0<em> p<\/em>i(j)G, nous pouvons, dans le protocole de g\u00e9n\u00e9ration de polyn\u00f4me, consacrer une tr\u00e8s longue p\u00e9riode, pendant laquelle tous les participants v\u00e9rifient les informations chiffr\u00e9es obtenues, <em>pi(j), <\/em>et si le message d\u00e9chiffr\u00e9 ne correspond pas au public<em> p<\/em>i(j)G, ils publient une preuve cryptographique que le message chiffr\u00e9 re\u00e7u est erron\u00e9. Prouver que le message <em>ne <\/em>correspond \u00e0 <em>pi(G)<\/em> est beaucoup plus simple que de prouver qu'il correspond. Il convient de noter que cela n\u00e9cessite que chaque participant apparaisse sur le r\u00e9seau au moins une fois pendant le temps allou\u00e9 pour cr\u00e9er de telles preuves, et repose sur l'hypoth\u00e8se que s'ils publient cette preuve, elle atteindra tous les autres participants dans ce m\u00eame temps imparti.<\/p>\n<p><img decoding=\"async\" alt=\"Peut-on g\u00e9n\u00e9rer des nombres al\u00e9atoires si nous ne nous faisons pas confiance ? Partie 2\" src=\"\/wp-content\/uploads\/2020\/10\/f7d92f18c75aa6161a9e3f1724b57426.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Si un participant n'est pas apparu sur le r\u00e9seau pendant cette p\u00e9riode, et qu'il avait r\u00e9ellement au moins une composante incorrecte, ce participant ne pourra pas participer \u00e0 la g\u00e9n\u00e9ration ult\u00e9rieure de nombres. Cependant, le protocole fonctionnera toujours s'il y a au moins <em>k<\/em> participants, qui ont soit seulement obtenu des composants valides, soit ont eu le temps de laisser une preuve d'invalidit\u00e9.<\/p>\n<h3>Preuves de validit\u00e9 H_i<\/h3>\n<p>La derni\u00e8re partie \u00e0 discuter est comment prouver la validit\u00e9 des publications<em> H<\/em>i, \u00e0 savoir que <em>Hi = p(i)H, <\/em>sans divulgation<em> p(i).<\/em><\/p>\n<p>Rappelons que les valeurs<em> H, G, p(i)G <\/em>sont publiques et connues de tous.<em> <\/em>L'op\u00e9ration d'obtention<em> p(i) <\/em>connaissant<em> p(i)G <\/em>et<em> G <\/em>s'appelle logarithme discret, ou<em> dlog, <\/em>et nous voulons prouver que :<\/p>\n<p><em>dlog(p(i)G, G) = dlog(H<\/em>i, <em>H<\/em>)<\/p>\n<p>sans divulgation <em>p(i)<\/em>. Des constructions pour de telles preuves existent, par exemple<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Proof_of_knowledge#Schnorr_protocol\"> <u>Schnorr Protocol<\/u><\/a><\/noindex>.<\/p>\n<p>Avec une telle construction, chaque participant avec <em>Salut <\/em>envoie une preuve de validit\u00e9 selon la construction.<\/p>\n<p>Lorsque le nombre al\u00e9atoire est g\u00e9n\u00e9r\u00e9, il est souvent n\u00e9cessaire de l'utiliser par des participants autres que ceux qui l'ont g\u00e9n\u00e9r\u00e9. Ces participants doivent recevoir tous <em>Salut<\/em> et les preuves associ\u00e9es avec le nombre.<\/p>\n<p>Le lecteur curieux pourrait demander : puisque le nombre al\u00e9atoire final est<em> H<\/em>0, et <em>p(0)G \u2013 <\/em>c'est une information publique, pourquoi avoir besoin d'une preuve pour chaque distinct<em> H<\/em>i, pourquoi ne pas envoyer \u00e0 la place une preuve que<\/p>\n<p>dlog(<em>p(0)G, G) = dlog(H<\/em>0, <em>H<\/em>)<\/p>\n<p>Le probl\u00e8me est qu'avec le Schnorr Protocol, il n'est pas possible de cr\u00e9er une telle preuve, car personne ne conna\u00eet la valeur <em>p(0)<\/em>, n\u00e9cessaire pour cr\u00e9er la preuve, et de plus, tout le g\u00e9n\u00e9rateur de nombres al\u00e9atoires est bas\u00e9 sur le fait que personne ne conna\u00eet cette valeur. Il est donc n\u00e9cessaire d'avoir toutes les valeurs <em>Salut <\/em>et leurs preuves individuelles pour prouver la validit\u00e9.<em> H<\/em>0.<\/p>\n<p>Cependant, s'il y avait une op\u00e9ration sur les points des courbes elliptiques qui \u00e9tait s\u00e9mantiquement semblable \u00e0 la multiplication, la preuve de validit\u00e9 <em>H0 <\/em>serait triviale, nous pourrions simplement v\u00e9rifier que<\/p>\n<p><em>H<\/em>0 \u00d7 <em>G<\/em> = <em>p(0)G \u00d7 H<\/em><\/p>\n<p>Si la courbe choisie supporte <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@VitalikButerin\/exploring-elliptic-curve-pairings-c73c1864e627\"><u>elliptic curve pairings<\/u><\/a><\/noindex>, une telle preuve fonctionne. Dans ce cas,<em> H<\/em>0 n'est pas seulement la sortie du g\u00e9n\u00e9rateur de nombres al\u00e9atoires que tout participant connaissant <em>G, H<\/em> et <em>p(0)G. H<\/em>0 est aussi une signature sur le message qui a \u00e9t\u00e9 utilis\u00e9 comme seed, confirmant que <em>k<\/em> et <em>n <\/em>les participants ont sign\u00e9 ce message. Ainsi, si <em>seed \u2013 <\/em>c'est le hachage d'un bloc dans le protocole blockchain, alors <em>H0<\/em> \u2013 c'est \u00e0 la fois une multi-signature sur le bloc, et un tr\u00e8s bon nombre al\u00e9atoire.<\/p>\n<h4>En conclusion<\/h4>\n<p>Cet article fait partie d'une s\u00e9rie d'articles techniques sur le blog <noindex><a rel=\"nofollow\" href=\"https:\/\/near.org\">NEAR<\/a><\/noindex>. NEAR est un protocole blockchain et une plateforme pour le d\u00e9veloppement d'applications d\u00e9centralis\u00e9es, ax\u00e9e sur la simplicit\u00e9 de d\u00e9veloppement et la facilit\u00e9 d'utilisation pour les utilisateurs finaux.<\/p>\n<p>Le code du protocole est ouvert, notre impl\u00e9mentation est \u00e9crite en Rust, et elle peut \u00eatre trouv\u00e9e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nearprotocol\/nearcore\">ici<\/a><\/noindex>.<\/p>\n<p>Vous pouvez voir \u00e0 quoi ressemble le d\u00e9veloppement sous NEAR et exp\u00e9rimenter dans l'IDE en ligne <noindex><a rel=\"nofollow\" href=\"https:\/\/examples.near.org\">ici<\/a><\/noindex>.<\/p>\n<p>Pour suivre toutes les nouvelles en russe, vous pouvez visiter <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/near_protocol\">le groupe sur Telegram<\/a><\/noindex> et dans <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/nearprotocol\">groupe sur VKontakte.<\/a><\/noindex>, et en anglais sur le site officiel <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/NEARProtocol\">Twitter<\/a><\/noindex>.<\/p>\n<p>\u00c0 bient\u00f4t !<\/p>\n<p>Source : <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.2 - 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\/fr\/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.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47Peut-on g\u00e9n\u00e9rer des nombres al\u00e9atoires si nous ne nous faisons pas confiance ? Partie 2 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/fr\/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":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/95846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=95846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/95846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/95847"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=95846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=95846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=95846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}