________________________________________________________________________________
Inhalt....: Digitales Geld
Kategorie.: Arbeitsblatt
Mathematik: Kryptographie, Zahlentheorie
MuPAD.....: 3.0.0
Datum.....: 2003-06-23
Autoren...: Julia Faflek <faflek@mupad.de>
Funktionen: nextprime, random, igcd, powermod
________________________________________________________________________________
Blinde Signaturen und digitales Geld
Das Bezahlen im Internet mittels Kreditkartennummer etc. ist immer noch recht unsicher.
Daher ist es sinnvoll, eine interneteigene Währung, sogenanntes digitales Geld, einzuführen.
Wie soll digitales Geld im Internet realisiert werden? Da man durch das Inter-
net nur Nullen und Einsen schicken kann, muss eine Geldmünze durch einen
Bitstring repräsentiert werden, der als Zahl aufgefasst wird. Die Bank vergibt
also irgendwie einen autorisierten Bitstring an uns, im Gegenzug wird der
Wert dieser Münze von unserem Konto abgebucht. Nun können wir zu einem
Händler gehen und einkaufen. Nachdem der Händler überprüft hat, ob es sich
auch wirklich um "echtes" Geld handelt, schickt er die Münze zur Bank. Diese
wiederum wird testen, dass die Münze auch nicht schon einmal zur Bezahlung
benutzt wurde. Wir merken, dass bei diesem Vorgehen viele Faktoren zu be-
rücksichtigen sind, z.B. die eben angesprochene Einmaligkeit des Geldes oder
die Wahrung der Anonymität der Beteiligten. Eine große Hilfe zur Erreichung
der Ziele bietet die blinde Unterschrift, die auf David Chaum zurückgeht und
stark auf RSA beruht. Diese Art von Unterschrift kann man sich wie folgt vor-
stellen: In einem Briefumschlag befinden sich ein Dokument und ein Kohle-
papier. Nun kann die Bank durch den Umschlag hindurch das Dokument sig-
nieren, ohne es gesehen zu haben. Man muss jetzt nur noch das unterschrie-
bene Dokument aus dem Umschlag herausnehmen.
Schauen wir uns das Ganze nun im Detail an.
Als erstes wird der RSA-Modul N erzeugt, sowie die Schlüssel der Bank, e
ist der öffentliche und d der private Schlüssel für die 10€-Münzenerstellung.
p := nextprime(2^600);
q := nextprime(p + 2^16);
N := p*q;
e := random(1..N)():
while (igcd(e, (p-1)*(q-1)) > 1) do
e := random(1..N)()
end_while:
e;
d := powermod(e, -1, (p-1)*(q-1));
![]()
![]()
![]()
![]()
![]()
Wir wollen von der Bank eine 10€-Münze bekommen. Zunächst müssen wir
eine Zahl m < N erzeugen, die einer bestimmten Regel entspricht, die allen
Beteiligten bekannt ist. Die Zahl muss redundant sein, z.B. hier abcdabcdabcdabcd.
Dieses m soll von der Bank unterschrieben werden und damit eine gültige
10€-Münze werden.
m := 1234123412341234
![]()
Die Zahl m muss jetzt "geblendet" werden, also in einen Briefumschlag getan
werden. Dazu wählen wir eine modulo N invertierbare Zahl z, die dem Um-
schlag entspricht.
z := random(1..N)():
while (igcd(z, N) > 1) do
z := random(1..N)()
end_while:
z
![]()
Nun wird ein r mit Hilfe des öffentlichen Schlüssels e der Bank berechnet,
welches den Briefumschlag mit dem Kohlepapier repräsentiert.
r := powermod(z, e, N)
![]()
Abschließend wird die geblendete Nachricht berechnet, die dem kompletten
Brief entspricht.
c := m * r mod N
![]()
Der Brief, also das c, wird an die Bank geschickt. Diese soll daraus eine 10€-
Münze erstellen, indem sie ihren geheimen Schlüssel verwendet.
s := powermod(c, d, N)
![]()
Dieses s wird an uns zurückgeschickt und fungiert als unterschriebenes Doku-
ment in dem Umschlag. Aber dies ist noch nicht die gewünschte Münze. Wir
müssen das Dokument noch aus dem Umschlag herausnehmen. Dazu über-
legen wir folgendes:




Wir wollten aber doch die unterschriebene Münze bekommen. Also berechnen
wir:

Muenze := s*1/z mod N
![]()
Wir überprüfen noch kurz, ob die erhaltene Münze auch wirklich das von der
Bank unterschriebene m ist:
is(Muenze - powermod(m, d, N) = 0)
![]()
Es hat also geklappt, die Bank hat das m unterschrieben, ohne es überhaupt
gesehen zu haben. Die Zahl z diente nur zum Verschleiern von m. Wir haben
nun eine autorisierte 10€-Münze und können bei einem Händler damit ein-
kaufen. Wie funktioniert denn das genau? Der Händler überprüft mit dem
öffentlichen 10€-Schlüssel der Bank:
m1 := powermod(Muenze, e, N)
![]()
Wenn die so errechnete Zahl das vorgegebene Redundanzmuster erfüllt, dann
weiß der Händler, dass die Münze echt ist. Anschließend schickt er die Münze
an die Bank, diese muss noch irgendwie überprüfen, ob mit der Münze schon
bezahlt wurde. Dieses System ist absolut anonym. Niemand kann von der Münze
auf unsere Identität schließen. Aber wie man leicht vermuten kann, gibt es doch
weitere Probleme. Wie will die Bank feststellen, dass wir die Münze nicht mehr-
mals verwenden? Über all diese Sachen muss man sich Gedanken machen,
wenn man elektronisches Geld benutzen will.
_____________________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie unter: http://schule.mupad.de bzw. http://studium.mupad.de
_____________________________________________________________________________________