Das Pedersen Commitment
Für viele Anwendungen wird ein wesentlich größerer Zahlenbereich für die Nachricht benötigt, als nur ein Bit. Unter anderem für Kartenspiele. Ein Deck enthält 52 verschiedene Karten, eine Nachricht muss also mindestens 52 unterschiedliche Werte haben können. Ein noch schwierigeres Beispiel ist aber Stein-Schere-Papier. Mit den drei Werten Stein, Schere, Papier hat es genau einen Wert zu viel für das Bit-Commitment. Wir haben also die Gefahr, dass Bob Alices Wert aus dem Commitment durch Durchprobieren finden kann. Eine Lösung für dieses Problem wurde 1991 von Torben Pryds Pedersen vorgestellt. Sie funktioniert wie folgt [2] [4]:
| Bob: | Alice: |
|---|---|
| Setup: Bob wählt zufällige Primzahlen und , wobei ein Vielfaches von ist wählt zufällig und aus einer Untergruppe der Ordnung in außerdem: und Bob sendet , , und an Alice |
|
| Alice empfängt , , und | |
| Committen: Alice testet, ob und Primzahlen und ob ein Vielfaches von ist. Außerdem ob und aus einer Untergruppe der Ordnung in sind. Für den Commit wählt sie eine Zufallszahl und die Nachricht Daraus wird das Commitment berechnet: und an Bob gesendet |
|
| Bob empfängt | |
| Aufdecken: Alice sendet und an Bob |
|
| Bob empfängt und Bob testet ob<br/> Wenn hat Alice geschummelt. |
Erklärung:
Warum darf und nicht größer als sein? Jedes Element der Untergruppe ist ein Generator. Es wird das folgende mathematische Problem als Einwegfunktion genutzt:
Zu beachten ist aber Folgendes: Die Gruppe ist zyklisch:
und
Der Sinn von ist, die Nachricht zu maskieren (ebenso wie in Commitment mit Hash-Funktion, Möglichkeit 2).
Bob könnte, wenn der Wertebereich klein genug wäre, alle Möglichkeiten durchprobieren. Bei Stein-Schere-Papier sähe das folgendermaßen aus:
sei und
Probieren:
Jedoch bei
sei und
Probieren:
bleibt unbekannt
Auch hier sorgt , das aus demselben Bereich wie ist, dafür dass selbst wenn der diskrete Logarithmus gelöst werden könnte, immer noch alle Werte für gleich wahrscheinlich wären. Deswegen ist das Verfahren unconditional hiding.
Eventuelle Probleme: Kann Alice für ein Commitment von ein an Bob senden, das ungleich ist? Dazu müsste gelten:
Da Alice theoretisch fähig wäre, den Logarithmus zu lösen, was mit großen Zahlen sehr rechenaufwendig und zeitaufwendig ist, ist das Verfahren computational binding. Aber: Bob setzt die Werte und . Deswegen hat er direkten Einfluss darauf, wie stark Alice an ihren Wert gebunden ist. Bob sollte damit, um seinetwillen, Primzahlen im Bitbereich wählen.
Des Weiteren kann Bob die Zeit zwischen Committen und Aufdecken begrenzen, was für eine Berechnung von und , die ergeben würden, eine gewaltige Rechenleistung erfordern würde.
Eine Rechenleistung, die in absehbarer Zeit nicht gegeben sein wird.