Ausblenden einer Antwort/Abstimmung in der Blockchain

Ich verstehe, dass jede Transaktion in der Blockchain sichtbar ist, aber wäre es möglich, eine DApp zu erstellen, die es Menschen ermöglicht, verkleidet abzustimmen? Ihre Stimme nicht präsentieren, bis der Abstimmungsprozess abgeschlossen ist?

Antworten (2)

Sie suchen nach Verpflichtungsprogrammen . Im Allgemeinen hat ein Commitment-Schema zwei Phasen: Commit- und Reveal- Phase. Ein einfaches Commitment-Schema ist das Folgende:

  1. Commit-Phase: Wenn Alice sich auf einen Wert festlegen möchte, xmuss sie einen Zufallsgenerator r(sagen rwir mal mehr als 100 Bit) generieren und senden H(x||r), wobei Heine kryptografisch sichere Hash-Funktion ist und ||für Verkettung steht). Da Hes kryptografisch sicher ist, ist es rechnerisch unmöglich, ein Urbild von zu finden H(x||r)(dh es hat eine vernachlässigbare Wahrscheinlichkeit). Diese Eigenschaft wird als rechnerische Bindung bezeichnet. Diese Eigenschaft stellt sicher, dass niemand (nicht einmal Alice) den Verpflichtungswert von Alice ändern kann x.
  2. Enthüllen-Phase: Alice enthüllt ihre Wahl x'und r'. Bob prüft, ob H(x||r)==H(x'||r'). Wenn es passt, dann akzeptiere es, andernfalls lehne es ab.

Andere ausgefeiltere Commitment-Schemata könnten unter Verwendung des Discrete-Log-Problems aufgebaut werden.

Nehmen wir an, ich habe 5 Personen auf heißen Stühlen und sie müssen mit „Ja“ oder „Nein“ stimmen. Alle bis auf eine Person stimmen mit „Ja“. Ich möchte, dass diese Stimmen nach x Zeit sichtbar sind und erst dann.
Nun, Sie müssen alle aufdecken, sonst können Sie nicht sagen, welches „Ja“ oder „Nein“ ist. Allein beim Blick auf die Zusagen kann man die Stimmen nicht unterscheiden. Das ist der Sinn von Verpflichtungen...
Oh ja, sorry, vielleicht habe ich es falsch formuliert, das war mir vollkommen klar. Was ich meinte, war, dass die Stimmen nicht entschlüsselbar sein sollten, bis sie enthüllt wurden. Sobald eine Stimme abgegeben wurde, sollte sie geheim bleiben, bis sie aufgedeckt wird, und dann wird alles, was abgegeben wurde, auf einmal aufgedeckt. Ich denke, die Verwendung von Commitment-Schemata könnte in meinem Fall der richtige Weg sein

Das ist möglich, aber nicht direkt. Der einfachste Weg wäre wohl, den Hash der Einzelstimme für jeden Wähler zu speichern. Sie können die Hash-Eigenschaft Hiding verwenden, um die Abstimmung zu verbergen: Wenn Sie die Möglichkeiten „Ja“ und „Nein“ haben, hängt jeder Wähler eine zufällige geheime Zeichenfolge entweder an „Ja“ oder „Nein“ an und lädt den Hash der resultierenden Zeichenfolge hoch. Auf diese Weise gibt der Hash die Stimme nicht preis, bis der Wähler die geheime angehängte Zeichenfolge und seine Stimme preisgibt. Wenn es aufgedeckt wird, kann jeder bestätigen, dass die Stimme nicht verändert wurde, indem er den Hash überprüft.

Eine anspruchsvollere Lösung kann mit homomorpher Verschlüsselung erstellt werden . Das beseitigt die Notwendigkeit, dass jeder Benutzer das Geheimnis nach dem Ende der Abstimmung preisgibt, ist aber etwas komplizierter.

Am Ende hängt es also von Ihrer Anwendung ab.