Websalon

Datensicherheit. Verschluesselung mit dem RSA-Code. Theoretisches.


Das "public key"- System von R. L. Riverest, A. Shamir, L. M. Adleman
(1978) (RSA- Code). 

(Anm. der Redaktion):
Nachdem wir schon einen Beitrag zum Thema DES hatten, wollen wir Euch
diesmal noch mal mit Mathematik aergern. Bei den Publik Key Verfahren handelt 
es sich um Verschluesselungsprogramme, wo es zwei Schluessel gibt: Einen zum
Verschluesseln und einen zum Entschluesseln. Der zum verschluesseln kann
allgemein bekannt sein. Er ist zum Entschluesseln nutzlos. Diese Ver-
fahren haben den Vorteil, dass ein Nachteil von anderen Cryptoverfahren 
(z.B. DES) wegfaellt. Dort muss naemlich der Schluessel ausgetaucht werden, 
damit die Gegenstelle den Text wieder entschluesseln kann. Fuer die meisten
"praktischen" Anwendungen (z.B> in der Wirtschaft) sind die Public Key
Verfahren besser einsetzbar (Gute Informationen zu dem Thema kann mensch
von der GMD, Berlinghoven zum Projekt TeleTrust erhalten). 
(Ende der Anmerkung)

Die Benutzer eines oeffentlichen Kommunikativsystems wollen verschluesselte
Botschaften austauschen. Es wird ein Alphabet mit N Zeichen benutzt. Die
Zeichen werden durchnumeriert. Seinen b(0), b(1), ... b(N-1) die Buch-
staben in diesem Alphabet. Diese Reihenfolge wird beibehalten.
Man waehlt natuerliche Zahlen k und l mit k < l, fuer die N^k (N hoch k) und
N^l (N hoch l) ca. 200 Dezimalstellen haben. Das Alphabet, die Reihenfolge
der Zeichen, die Zahl N, und die Zahlen k und l werden veroeffentlicht.

(1) Erzeugung des Codes

Es sei A ein Benutzer dieses Systems. A waehlt zwei verschiedene Primzahlen
p(A) und q(A) mit jeweils etwa 100 Dezimalstellen, die folgende Bedingung
erfuellen :
                        Es ist  N^k < p(A) * q(A) < N^l

Dann berechnet A die Zahlen   m(A) = p(A) * q(A)                 und
                              phi(A) = (p(A) -1) * (q(A) - 1)
und waehlt eine Zahl e(A) zwischen 1 und phi(A)-1, die mit phi(A)-1 keinen
gemeinsamen Teiler hat. Anschlieend berechnet A die Zahl d(A) fuer die
gilt:

   Es gibt eine natuerliche Zahl k mit :  d(A) * e(A) = 1 + phi(A) * k

   (Mathematisch: d(A) * e(A) ist kongruent zu 1 modulo phi(A))

   (Fuer die Berechnung von d(A) gibt es schnelle Algorithmen. Eingabe
   dieser Algorithmen ist e(A) und phi(A). Die Geheimhaltung von phi(A)
   ist also dringend erforderlich, um die Sicherheit des Codes zu
   garantieren.)

Die Zahlen m(A) und e(A) werden veroeffentlicht, die Zahlen p(A), q(A),
d(A) und phi(A)  muessen geheimgehalten werden. p(A), q(A) und phi(A)
werden nicht mehr benoetigt.

(2) Verschluesselung und Entschluesselung

Der Benutzer B moechte an A eine verschluesselte Nachricht schicken. B teilt
den Klartext in Bloecke aus k Zeichen und ersetzt jedes Zeichen durch sein
"numerisches" quivalent (also jeweils b(i) durch i). So entstehen k-tupel
aus Zahlen in {0, 1, ..., N-1}. Es sei (y(1), ..., y(k)) ein solches
k-tupel. B berechnet

   X := y(1) * N^(k-1) + y(2) * N^(k-2) + ... + y(k-1) * N + y(k)   und

   X1 := (X ^ e(A)) MOD m(a)

Es gilt 0 < X < N^k-1 < N^l-1. B berechnet die z(1), ..., z(l) mit

   X1 = z(1) * N^(l-1) + z(2) * N^(l-2) + ... + z(l-1) * N + z(l).

Das l-tupel (z(1), ..., z(l)) wird ueber das oeffentliche Kommunikations-
system an A geschickt.

A berechnet daraus wieder X1 = z(1) * N^(l-1) + ... + z(l), und dann

   X2 := (X1 ^ d(A)) mod m(A). Es gilt: X2 = X.

Aus X berechnet A die Zahlen y(1), ..., y(k) mit

   X := y(1) * N^(k-1) + y(2) * N^(k-2) + ... + y(k-1) * N + y(k)

und hat damit (y(1), ..., y(k)) zurueckgewonnen, und kann die Original-
nachricht daraus zusammensetzen.

Anmerkung:
Die Gesamtnachricht setzt sich aus den Kodierungen aller k-tupel der
Originalnachricht zusammen. Die Nachricht verlaengert sich beim kodieren
also um das l/k-fache. Zum Kodieren ist die Kenntnis der Zahlen m(A),
e(A), k, l, und N sowie die Kodierung der Zeichen im Alphabet notwendig.
m(A) und e(A) haben jeweils ca. 200 Stellen und sind somit nur schweer zu
merken, oder ueberall fuer jeweils alle Benutzer zu speichern.

(3) Identifizierung von Nachrichten

Jeder Teilnehmer erhaelt eine Signatur (g(1), ..., g(k)) aus Zeichen des
Alphabets zugewiesen, die ihn eindeutig identifiziert (z. B. der
Username), und die veroeffentlicht ist. B moechte mit seiner Botschaft an A
einen Beweis dafuer mitschicken, da die Botschaft von ihm kommt. B
berechnet mit seiner eigenen Signatur:

   s := g(1) * N^(k-1) + g(2) * N^(k-2) + ... + g(k-1) * N + g(k) und

   s1 := (s ^ d(B)) mod m(B) und ermittelt daraus die h(1),.. h(l) mit

   s1 = h(1) * N^(l-1) + h(2) * N^(l-2) + ... + h(l-1) * N + h(l)

und schickt (h(1),..., h(l)) mit seiner Botschaft an A. A dechiffriert,
wie in (2) beschrieben die eingegangenen l-tupel. Alle ergeben sinnvollen
Klartext auer h(1),..., h(l). Hiermit berechnet er wieder

   s1 := h(1) * N^(l-1) + h(2) * N^(l-2) + ... + h(l-1) * N + h(l) und
   s :=  (s1 ^ e(B)) mod m(B)

A schreibt s als:

   s = g(1) * N^(k-1) + g(2) * N^(k-2) + ... + g(k-1) * N + g(k)

und hat damit (g(1), ..., g(k)) berechnet und vergleicht mit der
veroeffentlichten Signatur im Telefonbuch.

Anmerkung:
Dieses Verfahren klappt nur dann, wenn man die Position der h(1), ...,
h(l) in der verschluesselten Datei nicht im Vorraus ermitteln kann, und
wenn B seine Identitaet bereits anderswo in der verschluesselten Datei
andeutet. So bietet die hier beschriebene Methode eine Moeglichkeit, das
Dokument zu "unterschreiben", so dass nicht jeder diese Unterschrift unter
ein mit falschem Absender versehenen Brief schreiben kann. Wenn die Zahlen
h(1), ..., h(l) jedoch einem dritten bekannt werden, so ist das Verfahren
hinfaellig. Ausserdem muss B seine Identitaet anderswo im Dokument angeben,
weil sonst der Empfaenger alle Moeglichkeiten fuer verschiedene Absender
durchgehen muss.

(4) Sicherheit

Die Sicherheit des Systems beruht darauf, dass es (noch) keinen schnellen
Algorithmus zur Faktorisierung grosser natuerlicher Zahlen gibt. Um eine an
A gerichtete Nachricht zu entschluesseln benoetigt man d(A) und um d(A) zu
berechnen benaetigt man die Faktorisierung von m(A) = p(A= * q(A).

(5) Primzahlen

Zur Herstellung von p(A) und q(A) und e(A) hat men einen Generator von
Zufallszahlen zu verwenden (und einen schnellen Primzahltest)

(6) Zum modernsten Stand

- G. Brassard, Modern cryptology, 1988
- E. Kranakis, Primality and cryptography
- N. Knoblitz, A course in number theory and cryptogrphy

Quelle:  Vorlesung ueber Lineare Algebra, Paderborn. 
         Aus dem Zerberus. Anfragen bitte an ZENTRALE@BIONIC, da ich 
         dem Namen des Autors verschlammt habe.

-----------------------------------------------------------------------------