Commitment mit Hash-Funktion

Eine Möglichkeit ein Commitment durchzuführen, wäre die Nutzung einer kollisionsfreien Hash-Funktion, hier gibt es mehrere Möglichkeiten, welche aber einige Probleme bereiten:

Man nehme als Beispiel das Spiel Stein-Schere-Papier. Die Werte Stein, Schere und Papier werden als die Zahlen 1,2 und 3 codiert.

Für alle Beispiele gilt:
Kollisionsfreie Hashfunktion sei
Commitment sei

1.Möglichkeit:
Nachricht sei

Bob: Alice:
Committen:

sendet an Bob
empfängt
Aufdecken:
sendet an Bob
empfängt
testet:
wenn:
dann hat Alice geschummelt

Problem: Da die Anzahl der Werte, die m annehmen kann begrenzt ist, kann Bob durch Probieren auf das richtige Ergebnis kommen:

Sei: und Bob kennt und .



Bob kennt schon vor dem Aufdecken und kann mit diesem Wissen betrügen. Das Verfahren wird erst dann computational hiding, wenn die Anzahl der Werte, die annehmen kann, so hoch ist, dass ein Durchprobieren aller, mit aktueller Rechenleistung nicht mehr in absehbarer Zeit zu bewerkstelligen ist.

Jedoch: *So lange die Hashfunktion kollisionsfrei ist, ist das Verfahren unconditional binding:
sei eine Nachricht, ungleich der übermittelten Nachricht .
Damit gilt für alle :

Die zweite Möglichkeit:
Die Nachricht sei wieder

Bob: Alice:
Setup:
Alice wählt Zufallszahl
Committen:

sendet an Bob
empfängt
Aufdecken:
sendet und an Bob
empfängt und
testet:
wenn:
dann hat Alice geschummelt

Vorteil: Da Alice eine Zufallszahl aus derselben Menge der möglichen Ergebnisse nimmt, maskiert sie ihre Nachricht . Bob kann alle Möglichkeiten durchprobieren, wird aber herausfinden, dass so lange er nicht kennt, jede Nachricht gleich wahrscheinlich ist. Woraus folgt, dass das Commitment unconditional hiding ist.

Problem: Da Alice die Zufallszahl und die Nachricht beim Setup und Aufdecken frei wählen kann, kann sie einfach betrügen:

Es gilt:

Das Commitment ist damit nicht bindend.

Die dritte Möglichkeit:
Nachricht sei wieder

Bob: Alice:
Setup:
Alice wählt eine beliebige Zufallszahl
Committen:

sendet an Bob
empfängt
Aufdecken:
sendet und an Bob
empfängt und
testet:
wenn:
dann hat Alice geschummelt

Eventuelle Probleme:
Annahme: Bob möchte Schummeln. Es wird davon ausgegangen, dass die Hashfunktion kollisionsfrei ist, also könnte er alle möglichen Werte von und durchprobieren und würde auf das Commitment stoßen, womit das Verfahren nicht länger hiding wäre. Da in diesem Fall nicht an den Zahlenraum von gebunden ist, kann jeden beliebigen Wert annehmen, die Anzahl der Möglichkeiten ist also nur durch die verwendete Hardware beschränkt. Mit normalen Ressourcen kann Bob nicht alle Möglichkeiten durchprobieren, mit unendlicher Rechenpower aber schon. Deswegen ist dieses Verfahren nur computational hiding.

Alice versucht, und ' zu finden, mit denen sie schummeln kann, allerdings gilt immer noch, dass kollisionsfrei ist und deswegen gilt:



Das Commitment ist theoretisch unconditional binding. In der Praxis ist der Wertebereich der Ausgabe einer Hashfunktion endlich, während die Eingabe unendlich viele Werte haben kann. Denn es gilt für eine Hashfunktion mit fester Länge der Ausgabe:

Eingabe kann unendlich viele Werte annehmen
Länge der Ausgabe sei
Der Zahlenraum der Ausgabe ist damit

Dem Geburtstagsparadoxon nach, würden erste Kollisionen auftreten, wenn unterschiedliche Eingaben gehasht worden sind. Das heißt es müssen Kollisionen existieren. Daher kann eine Kollision bei unendlicher Zeit oder Rechenleistung gefunden werden, weswegen die Möglichkeiten 1 und 3 in der Praxis nur computational binding sind.

In den vorangegangenen Beispielen konnte die Nachricht mehrere Werte haben. Was aber, wenn die Nachricht nur ein Bit lang ist? Da bei so einem begrenzten Raum von , das in diesem Beispiel ein Bit ist und deswegen genannt werden wird, nur noch Möglichkeiten probiert werden müssten, ist das vorherige Verfahren für Bits ungeeignet.

Deswegen nun ein weiteres Verfahren: Das Bit-Commitment nach Blum.