{"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\/de\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","title":{"rendered":"Kann man Zufallszahlen generieren, wenn wir uns gegenseitig nicht vertrauen? Teil 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kann man Zufallszahlen generieren, wenn wir uns gegenseitig nicht vertrauen? Teil 2\" src=\"\/wp-content\/uploads\/2020\/10\/fc42fe5e99ce4412a0ce99eb63629a42.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hallo, Habra!<\/p>\n<p>Im <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/near\/blog\/521090\/\">ersten Teils<\/a><\/noindex> In den Artikeln haben wir besprochen, warum es notwendig sein kann, Zufallszahlen f\u00fcr Teilnehmer zu generieren, die sich nicht gegenseitig vertrauen, welche Anforderungen an solche Zufallszahlengeneratoren gestellt werden und haben zwei Ans\u00e4tze zu ihrer Implementierung betrachtet.<\/p>\n<p>In diesem Teil des Artikels werden wir einen weiteren Ansatz im Detail untersuchen, der Schwellenunterschriften verwendet.<\/p>\n<h3>Ein wenig Krypto<\/h3>\n<p>Um zu verstehen, wie Schwellenunterschriften funktionieren, muss man ein wenig grundlegende Krypto verstehen. Wir werden zwei Konzepte verwenden: Skalare, oder einfach Zahlen, die wir mit Kleinbuchstaben bezeichnen werden (<em>x, y<\/em>) und Punkte auf einer elliptischen Kurve, die wir mit Gro\u00dfbuchstaben bezeichnen werden.<\/p>\n<p>Um die Grundlagen der Schwellenunterschriften zu verstehen, muss man nicht wissen, wie elliptische Kurven funktionieren, au\u00dfer einige grundlegende Dinge:<\/p>\n<ol>\n<li>\n<p>Man kann Punkte auf einer elliptischen Kurve addieren und mit einem Skalar multiplizieren (die Multiplikation mit einem Skalar werden wir als <em>xG<\/em>bezeichnen, obwohl die Notation <em>Gx<\/em> wird ebenfalls h\u00e4ufig in der Literatur verwendet). Das Ergebnis der Addition und der Multiplikation mit einem Skalar \u2014 ist ein Punkt auf der elliptischen Kurve.<\/p>\n<\/li>\n<li>\n<p>Nur mit dem Punkt <em>G<\/em> und seinem Produkt mit dem Skalar <em>xG<\/em> kann man nicht berechnen <em>x<\/em>.<\/p>\n<\/li>\n<\/ol>\n<p>Wir werden auch das Konzept eines Polynoms verwenden <em>p(x)<\/em> der Ordnung <em>k<\/em>-1. Insbesondere werden wir die folgende Eigenschaft von Polynomen verwenden: Wenn wir den Wert <em>p(x) <\/em>f\u00fcr beliebige <em>k <\/em>unterschiedliche <em>x <\/em>(und keine weiteren Informationen \u00fcber <em>p(x)<\/em>) haben, k\u00f6nnen wir <em>p(x) <\/em>f\u00fcr jeden anderen berechnen <em>x<\/em>.<\/p>\n<p>Es ist interessant, dass man f\u00fcr jedes Polynom <em>p(x)<\/em> und einen bestimmten Punkt auf der Kurve <em>G<\/em>, wobei man den Wert <em>p(x)G<\/em> f\u00fcr beliebige <em>k<\/em> verschiedener Werte <em>x<\/em>, auch berechnen kann <em>p(x)G<\/em> f\u00fcr jedes <em>x<\/em>.<\/p>\n<p>Diese Informationen sind ausreichend, um in die Details zu gehen, wie Schwellenunterschriften funktionieren und wie sie zur Generierung von Zufallszahlen verwendet werden k\u00f6nnen.<\/p>\n<h3>Zufallszahlengenerator auf Schwellenunterschriften<\/h3>\n<p>Nehmen wir an, dass <em>n<\/em> Teilnehmer ein Zufallszahl generieren wollen, und wir m\u00f6chten, dass die Teilnahme von beliebigen <em>k<\/em> von ihnen ausreicht, um die Zahl zu generieren, aber dass Angreifer, die kontrollieren <em>k<\/em>-1 oder weniger Teilnehmer, die generierte Zahl nicht vorhersagen oder beeinflussen k\u00f6nnen.<\/p>\n<p><img decoding=\"async\" alt=\"Kann man Zufallszahlen generieren, wenn wir uns gegenseitig nicht vertrauen? Teil 2\" src=\"\/wp-content\/uploads\/2020\/10\/00d54b3b0ca237a1551cdbdc35688099.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nehmen wir an, es gibt ein solches Polynom <em>p(x)<\/em> der Ordnung <em>k<\/em>-1, dass der erste Teilnehmer wei\u00df <em>p(1)<\/em>, der zweite wei\u00df <em>p(2), <\/em>und so weiter (<em>n<\/em>-ter wei\u00df <em>p(n)<\/em>). Angenommen, dass f\u00fcr einen bestimmten vorab definierten Punkt <em>G<\/em> alle wissen <em>p(x)G <\/em>f\u00fcr alle Werte <em>x<\/em>. Wir werden es nennen <em>p(i)<\/em> \u201eprivate Komponente\u201c <em>i<\/em>-es Teilnehmers (weil nur <em>i<\/em>-er Teilnehmer sie kennt), und <em>p(i)G<\/em> \u201e\u00f6ffentliche Komponente\u201c <em>i<\/em>-es Teilnehmers (weil alle Teilnehmer sie kennen). Wie Sie sich erinnern, reicht das Wissen <em>p(i)G <\/em>nicht aus, um zu rekonstruieren <em>p(i).<\/em><\/p>\n<p>Die Erstellung eines solchen Polynoms, sodass nur <em>i-<\/em>-er Teilnehmer und niemand sonst seine private Komponente kennt \u2013 ist der schwierigste und interessanteste Teil des Protokolls, das wir unten erl\u00e4utern werden. Angenommen, wir haben ein solches Polynom, und alle Teilnehmer kennen ihre privaten Komponenten.<\/p>\n<p>Wie k\u00f6nnen wir ein solches Polynom nutzen, um eine Zufallszahl zu generieren? Zun\u00e4chst ben\u00f6tigen wir eine bestimmte Zeichenkette, die zuvor nicht als Eingabe f\u00fcr den Generator verwendet wurde. Im Fall von Blockchain ist der Hash des letzten Blocks <em>h<\/em> \u2014 ein guter Kandidat f\u00fcr eine solche Zeichenfolge. Lassen Sie die Teilnehmer eine Zufallszahl erzeugen mit <em>h <\/em>als Seed verwenden. Zuerst konvertieren die Teilnehmer <em>h<\/em> in einen Punkt auf der Kurve unter Verwendung einer beliebigen vordefinierten Funktion:<\/p>\n<p><em>H = scalarToPoint(h)<\/em><\/p>\n<p>Dann berechnet jeder Teilnehmer <em>i<\/em> und ver\u00f6ffentlicht <em>Hi = p(i)H, <\/em>was sie tun k\u00f6nnen, weil sie wissen,<em> p(i) und H. <\/em>Die Offenlegung<em> H<\/em>i erlaubt es den anderen Teilnehmern nicht, die private Komponente <em>i<\/em>-es Teilnehmers zu rekonstruieren, und daher kann ein Satz privater Komponenten von Block zu Block verwendet werden. So muss der teure Algorithmus zur Erstellung des Polynoms, der unten beschrieben wird, nur einmal durchgef\u00fchrt werden.<\/p>\n<p>Wenn <em>k<\/em> Nach der Offenlegung <em>Hi = p(i)H, <\/em>k\u00f6nnen alle berechnen<em> H<\/em>x = <em>p(x)H<\/em> f\u00fcr alle <em>x<\/em> aufgrund der Eigenschaften von Polynomen, die wir im vorherigen Abschnitt besprochen haben. In diesem Moment berechnen alle Teilnehmer <em>H0 = p(0)H, <\/em>und das ist die resultierende Zufallszahl. Beachten Sie, dass niemand wei\u00df<em> p(0), <\/em>und daher ist der einzige Weg,<em> p(0)H zu berechnen \u2013 <\/em>die Interpolation<em> p(x)H, <\/em>was nur m\u00f6glich ist, wenn<em> k <\/em>die Werte<em> p(i)H <\/em>bekannt sind. Die Offenlegung einer geringeren Anzahl verursacht<em> p(i)H <\/em>keine Informationen \u00fcber<em> p(0)H.<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Kann man Zufallszahlen generieren, wenn wir uns gegenseitig nicht vertrauen? Teil 2\" src=\"\/wp-content\/uploads\/2020\/10\/a91219381018f90f73b0a92976c92c79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Der obige Generator hat alle Eigenschaften, die wir wollen: Angreifer, die nur <em>k-<\/em>-1 Teilnehmer oder weniger kontrollieren, haben keine Informationen und keinen Einfluss auf die Ausgabe, w\u00e4hrend beliebige <em>k<\/em> Teilnehmer die resultierende Zahl berechnen k\u00f6nnen, und jede Teilmenge aus <em>k<\/em> Teilnehmern kommt immer zu demselben Ergebnis f\u00fcr denselben Seed.<\/p>\n<p>Es gibt ein Problem, das wir oben umgangen haben. Damit die Interpolation funktioniert, ist es wichtig, dass der Wert<em> H<\/em>i, den jeder Teilnehmer ver\u00f6ffentlicht hat, <em>i<\/em> tats\u00e4chlich gleich ist <em>p(i)H.<\/em> Da niemand au\u00dfer dem <em>i<\/em>-ten Teilnehmer wei\u00df, <em>p(i), <\/em>kann niemand au\u00dfer <em>i-<\/em>dem -ten Teilnehmer \u00fcberpr\u00fcfen, ob <em>Hi <\/em>tats\u00e4chlich korrekt berechnet wurde und ohne einen kryptografischen Nachweis der Korrektheit<em> H<\/em>kann ein Angreifer jeden Wert als <em>Hallo, <\/em>ver\u00f6ffentlichen und willk\u00fcrlich die Ausgabe des Zufallszahlengenerators beeinflussen.<em>:<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Kann man Zufallszahlen generieren, wenn wir uns gegenseitig nicht vertrauen? Teil 2\" src=\"\/wp-content\/uploads\/2020\/10\/694a86666806c49edb6e44dd9ec26b0f.png\" style=\"display:block;margin: 0 auto;\" \/>Unterschiedliche Werte H_1, die vom ersten Teilnehmer gesendet wurden, f\u00fchren zu unterschiedlichen resultierenden H_0.<\/p>\n<p>Es gibt mindestens zwei M\u00f6glichkeiten, die Korrektheit von<em> H<\/em>i zu beweisen. Wir werden diese betrachten, nachdem wir die Polynom-Generierung behandelt haben.<\/p>\n<h3>Polynom-Generierung<\/h3>\n<p>Im vorherigen Abschnitt haben wir angenommen, dass wir ein solches Polynom haben, <em>p(x)<\/em> der Ordnung <em>k<\/em>-1, sodass der Teilnehmer <em>i<\/em> wei\u00df <em>p(i)<\/em>, und niemand sonst hat irgendwelche Informationen \u00fcber diesen Wert. Im n\u00e4chsten Abschnitt m\u00fcssen wir auch sicherstellen, dass f\u00fcr einen bestimmten vordefinierten Punkt <em>G<\/em> alle wissen, <em>p(x)G <\/em>f\u00fcr alle<em> x<\/em>.<\/p>\n<p>In diesem Abschnitt gehen wir davon aus, dass jeder Teilnehmer lokal einen privaten Schl\u00fcssel <em>xi, <\/em>hat, sodass der entsprechende \u00f6ffentliche Schl\u00fcssel<em> X<\/em>i f\u00fcr alle bekannt ist.<\/p>\n<p>Ein m\u00f6glicher Protokoll zur Generierung des Polynoms ist folgender:<\/p>\n<p><img decoding=\"async\" alt=\"Kann man Zufallszahlen generieren, wenn wir uns gegenseitig nicht vertrauen? Teil 2\" src=\"\/wp-content\/uploads\/2020\/10\/ccd8afbc3c88a7f5a03714aeb6593361.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<ol>\n<li>\n<p>Jeder Teilnehmer <em>i<\/em> erzeugt lokal ein beliebiges Polynom <em>pi(x) der Ordnung k-1. <\/em>Sie senden dann an jeden Teilnehmer<em> j <\/em>system-id D<em> p<\/em>i(j), verschl\u00fcsselt mit dem \u00f6ffentlichen Schl\u00fcssel <em>Xj. <\/em>So wei\u00df nur der<em> i-<\/em>-te<em> <\/em>und<em> j-te<\/em>-te<em> <\/em>Teilnehmer,<em> p<\/em>i(j). Der Teilnehmer <em>i<\/em> k\u00fcndigt auch \u00f6ffentlich an <em>pi(j)G <\/em>f\u00fcr alle<em> j <\/em>ab<em> 1 <\/em>bis<em> k <\/em>einschlie\u00dflich.<\/p>\n<\/li>\n<li>\n<p>Alle Teilnehmer nutzen einen Konsens, um die<em> k <\/em>Teilnehmer auszuw\u00e4hlen, deren Polynome verwendet werden. Da einige Teilnehmer offline sein k\u00f6nnten, k\u00f6nnen wir nicht warten, bis alle<em> n <\/em>Teilnehmer ihre Polynome ver\u00f6ffentlicht haben. Das Ergebnis dieses Schrittes ist eine Menge<em> <\/em><strong><em>Z<\/em><\/strong><em> <\/em>die aus mindestens<em> k <\/em>Polynomen besteht, die in Schritt (1) erstellt wurden.<em>.<\/em><\/p>\n<\/li>\n<li>\n<p>Die Teilnehmer stellen sicher, dass die ihnen bekannten Werte<em> p<\/em>i(j) den \u00f6ffentlich angek\u00fcndigten <em>pi(j)G entsprechen. <\/em>Nach diesem Schritt sollten nur noch die Polynome \u00fcbrig bleiben, f\u00fcr die privat \u00fcbermittelte<em> <\/em><strong><em>Z <\/em><\/strong>ihre private Komponente<em> p<\/em>i(j) den \u00f6ffentlich angek\u00fcndigten <em>pi(j)G entsprechen.<\/em><\/p>\n<\/li>\n<li>\n<p>Jeder Teilnehmer<em> j <\/em>p(j)<em> als Summe <\/em>i(j) f\u00fcr alle<em> p<\/em>. Jeder Teilnehmer berechnet auch alle Werte <em>i<\/em> in <strong><em>Z<\/em><\/strong>pi(x)G f\u00fcr alle i. <em>p(x)G <\/em>i(j) f\u00fcr alle <em>p(x) \u2013 <\/em>in<em> <\/em><strong><em>Z<\/em><\/strong><em>.<\/em><\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" alt=\"Kann man Zufallszahlen generieren, wenn wir uns gegenseitig nicht vertrauen? Teil 2\" src=\"\/wp-content\/uploads\/2020\/10\/a7a92dba3b9de7a376c415fc6c330c46.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Beachten Sie, dass<em> ist tats\u00e4chlich ein Polynom der Ordnung <\/em>k-1,<em> da es sich um die Summe einzelner <\/em>i(x) handelt, von denen jede ein Polynom der Ordnung<em> p<\/em>ist. <em>k<\/em>-1. Dann beachten Sie, dass w\u00e4hrend jeder Teilnehmer <em>j<\/em> wei\u00df <em>p(j), <\/em>sie keine Informationen \u00fcber <em>p(x)<\/em> f\u00fcr <em>x \u2260 j<\/em>. Tats\u00e4chlich m\u00fcssen sie, um diesen Wert zu berechnen, alle <em>pi(x), <\/em>und solange der Teilnehmer<em> j <\/em>nicht mindestens eines der gew\u00e4hlten Polynome kennt, haben sie keine ausreichenden Informationen \u00fcber<em> p(x).<\/em><\/p>\n<p>Das ist der gesamte Prozess der Erzeugung des Polynoms, der im vorherigen Abschnitt erforderlich war. Die Schritte 1, 2 und 4 oben haben eine recht offensichtliche Umsetzung. Schritt 3 ist jedoch nicht trivial.<\/p>\n<p>Insbesondere m\u00fcssen wir in der Lage sein zu beweisen, dass die verschl\u00fcsselten<em> p<\/em>i(j) tats\u00e4chlich den ver\u00f6ffentlichten entsprechen. <em>pi(j)G entsprechen. <\/em>Wenn wir das nicht beweisen k\u00f6nnen, k\u00f6nnte ein Angreifer<em> i <\/em>m\u00fcll anstelle von<em> p<\/em>i(j) an den Teilnehmer senden, <em>j<\/em>und der Teilnehmer <em>j <\/em>wird den tats\u00e4chlichen Wert nicht erhalten <em>pi(j), <\/em>und wird seine private Komponente nicht berechnen k\u00f6nnen.<em>.<\/em><\/p>\n<p>Es gibt ein kryptografisches Protokoll, das es erm\u00f6glicht, eine zus\u00e4tzliche Nachricht zu erstellen,<em> proof<\/em>i(j), so dass jeder Teilnehmer, der einen bestimmten Wert hat, <em>e, <\/em>und auch<em> proofi(j) <\/em>und<em> p<\/em>i(j)G, kann lokal \u00fcberpr\u00fcfen, dass <em>e<\/em> \u2013 es tats\u00e4chlich <em>pi(j), <\/em>mit dem Schl\u00fcssel des Teilnehmers<em> j verschl\u00fcsselt ist. <\/em>Leider ist die Gr\u00f6\u00dfe eines solchen Beweises unglaublich gro\u00df, und angesichts der Tatsache, dass es notwendig ist,<em> O(nk) <\/em>solcher Beweise zu ver\u00f6ffentlichen, k\u00f6nnen sie nicht zu diesem Zweck verwendet werden.<\/p>\n<p>Anstatt zu beweisen, dass <em>pi(j) <\/em>entspricht<em> p<\/em>i(j)G, k\u00f6nnen wir im Protokoll zur Erzeugung des Polynoms einen sehr langen Zeitraum einplanen, w\u00e4hrenddessen alle Teilnehmer die erhaltenen verschl\u00fcsselten \u00fcberpr\u00fcfen, <em>pi(j), <\/em>und wenn die entschl\u00fcsselte Nachricht nicht mit der \u00f6ffentlichen<em> p<\/em>i(j)G \u00fcbereinstimmt, ver\u00f6ffentlichen sie einen kryptografischen Beweis daf\u00fcr, dass die erhaltene verschl\u00fcsselte Nachricht falsch ist. Zu beweisen, dass die Nachricht <em>nicht <\/em>entspricht <em>pi(G)<\/em> ist viel einfacher, als zu beweisen, dass sie \u00fcbereinstimmt. Es sollte angemerkt werden, dass dies erfordert, dass jeder Teilnehmer mindestens einmal im Netzwerk erscheint, w\u00e4hrend der Zeit, die f\u00fcr die Erstellung solcher Beweise vorgesehen ist, und beruht auf der Annahme, dass, wenn sie einen solchen Beweis ver\u00f6ffentlicht haben, er alle anderen Teilnehmer in dieser Zeit erreicht.<\/p>\n<p><img decoding=\"async\" alt=\"Kann man Zufallszahlen generieren, wenn wir uns gegenseitig nicht vertrauen? Teil 2\" src=\"\/wp-content\/uploads\/2020\/10\/f7d92f18c75aa6161a9e3f1724b57426.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Wenn ein Teilnehmer in diesem Zeitraum nicht im Netzwerk erscheint und er tats\u00e4chlich mindestens eine fehlerhafte Komponente hatte, kann dieser spezielle Teilnehmer nicht an der weiteren Zahlenerzeugung teilnehmen. Das Protokoll wird jedoch weiterhin funktionieren, wenn es mindestens <em>k<\/em> Teilnehmer, die entweder gerade korrekte Komponenten erhalten haben oder rechtzeitig einen Nachweis \u00fcber die Unkorrektheit hinterlassen haben.<\/p>\n<h3>Nachweise der Korrektheit H_i<\/h3>\n<p>Der letzte Punkt, den es zu besprechen gilt, ist, wie man die Korrektheit der ver\u00f6ffentlichten<em> H<\/em>i, n\u00e4mlich dass <em>Hi = p(i)H, <\/em>ohne Offenlegung<em> p(i).<\/em><\/p>\n<p>Erinnern wir uns daran, dass die Werte<em> H, G, p(i)G <\/em>\u00f6ffentlich und allen bekannt sind.<em> <\/em>Der Vorgang der Erhaltung<em> p(i) <\/em>w\u00e4hrend man wei\u00df,<em> p(i)G <\/em>und<em> G <\/em>wird diskreter Logarithmus oder<em> dlog genannt, <\/em>und wir wollen beweisen, dass:<\/p>\n<p><em>dlog(p(i)G, G) = dlog(H<\/em>i, <em>H<\/em>)<\/p>\n<p>ohne Preisgabe <em>p(i)<\/em>. Konstruktionen f\u00fcr solche Nachweise existieren, wie zum Beispiel das<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Proof_of_knowledge#Schnorr_protocol\"> <u>Schnorr-Protokoll.<\/u><\/a><\/noindex>.<\/p>\n<p>Mit dieser Konstruktion sendet jeder Teilnehmer zusammen mit <em>Hi <\/em>einen Nachweis der Korrektheit gem\u00e4\u00df der Konstruktion.<\/p>\n<p>Wenn eine Zufallszahl generiert wird, muss sie oft von anderen Teilnehmern verwendet werden, als denen, die sie generiert haben. Solchen Teilnehmern m\u00fcssen zusammen mit der Zahl alle <em>Hi<\/em> und zugeh\u00f6rige Nachweise gesendet werden.<\/p>\n<p>Der neugierige Leser k\u00f6nnte fragen: Da die endg\u00fcltige Zufallszahl \u2013 das<em> H<\/em>0 ist, und <em>p(0)G \u2013 <\/em>\u00f6ffentliche Informationen sind, warum braucht man dann einen Nachweis f\u00fcr jedes einzelne<em> H<\/em>i, warum nicht einfach den Nachweis schicken, dass<\/p>\n<p>dlog(<em>p(0)G, G) = dlog(H.<\/em>0, <em>H<\/em>)<\/p>\n<p>Das Problem besteht darin, dass mit dem Schnorr-Protokoll solch ein Nachweis nicht erstellt werden kann, weil niemand den Wert kennt, <em>p(0),<\/em>der zur Erstellung eines Nachweises erforderlich ist, und noch mehr, der gesamte Zufallszahlengenerator basiert darauf, dass niemand diesen Wert kennt. Daher ist es notwendig, alle Werte <em>Hi <\/em>und deren individuelle Nachweise zu haben, um die Korrektheit zu beweisen.<em> H<\/em>0.<\/p>\n<p>Wenn es jedoch eine Operation an Punkten auf elliptischen Kurven g\u00e4be, die semantisch mit der Multiplikation vergleichbar ist, w\u00e4re der Nachweis der Korrektheit <em>H0 <\/em>trivial, wir m\u00fcssten nur sicherstellen, dass<\/p>\n<p><em>H<\/em>0 \u00d7 <em>G<\/em> = <em>p(0)G \u00d7 H<\/em><\/p>\n<p>Wenn die ausgew\u00e4hlte Kurve <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@VitalikButerin\/exploring-elliptic-curve-pairings-c73c1864e627\"><u>elliptische Kurvenpaarungen unterst\u00fctzt,<\/u><\/a><\/noindex>funktioniert solch ein Nachweis. In diesem Fall ist<em> H<\/em>0 nicht nur die Ausgabe des Zufallszahlengenerators, die jeder Teilnehmer \u00fcberpr\u00fcfen kann, der wei\u00df, <em>G, H<\/em> und <em>p(0)G. H<\/em>0 ist auch eine Unterschrift auf der Nachricht, die als Seed verwendet wurde, was best\u00e4tigt, dass <em>k<\/em> und <em>n <\/em>die Teilnehmer diese Nachricht unterzeichnet haben. Somit, wenn <em>seed \u2013 <\/em>es der Hash des Blocks im Blockchain-Protokoll ist, dann <em>H0<\/em> ist es gleichzeitig eine Multi-Unterschrift auf dem Block und eine sehr gute Zufallszahl.<\/p>\n<h4>Abschlie\u00dfend<\/h4>\n<p>Dieser Artikel ist Teil einer Serie technischer Artikel im Blog. <noindex><a rel=\"nofollow\" href=\"https:\/\/near.org\">NEAR<\/a><\/noindex>. NEAR \u2013 ist ein Blockchain-Protokoll und eine Plattform zur Entwicklung dezentraler Anwendungen mit dem Fokus auf einfache Entwicklung und Benutzerfreundlichkeit f\u00fcr Endanwender.<\/p>\n<p>Der Protokollcode ist offen, unsere Implementierung ist in Rust geschrieben, und sie kann gefunden werden <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nearprotocol\/nearcore\">hier<\/a><\/noindex>.<\/p>\n<p>Sie k\u00f6nnen sehen, wie die Entwicklung unter NEAR aussieht, und in der Online-IDE experimentieren <noindex><a rel=\"nofollow\" href=\"https:\/\/examples.near.org\">hier<\/a><\/noindex>.<\/p>\n<p>Um alle Nachrichten auf Russisch zu verfolgen, k\u00f6nnen Sie in der <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/near_protocol\">Gruppe im Telegram<\/a><\/noindex> und in <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/nearprotocol\">Gruppe auf VKontakte<\/a><\/noindex>, und auf Englisch im offiziellen <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/NEARProtocol\">Twitter-Account<\/a><\/noindex>.<\/p>\n<p>Bis bald!<\/p>\n<p>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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\udd47Kann man Zufallszahlen generieren, wenn wir uns gegenseitig nicht vertrauen? Teil 2 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/de\/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":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/95846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=95846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/95846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/95847"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=95846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=95846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=95846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}