03.11.2013 Aufrufe

Skript zur Vorlesung "Codierungstheorie und Kryptographie"

Skript zur Vorlesung "Codierungstheorie und Kryptographie"

Skript zur Vorlesung "Codierungstheorie und Kryptographie"

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Codierungstheorie</strong> <strong>und</strong> Kryptographie<br />

Udo Hebisch<br />

SS 2012<br />

Dieses <strong>Skript</strong> enthält nur den “roten Faden”<br />

der <strong>Vorlesung</strong>. Wesentliche Inhalte werden ausschließlich<br />

in der <strong>Vorlesung</strong> vermittelt. Daher ist dieses<br />

<strong>Skript</strong> nicht zum Selbststudium gedacht, sondern<br />

nur als “Erinnerungsstütze”.<br />

1


1 Einführung <strong>und</strong> Motivation<br />

Bei der Übertragung von Daten geht man im allgemeinen von folgendem Modell<br />

aus. Ein Sender (auch Quelle genannt) erzeugt Nachrichten in Form von Signalen.<br />

Handelt es sich dabei um kontinuierliche Signale, spricht man von analoger Datenübertragung,<br />

handelt es sich dagegen um diskrete Signale, so betrachtet man<br />

die digitale Datenübertragung. Die Nachrichten durchlaufen dann einen Kanal<br />

<strong>und</strong> erreichen letztlich den Empfänger. Auch das Speichern von Daten auf einem<br />

Medium, beispielsweise einer CD oder DVD, <strong>und</strong> das anschließende Herauslesen<br />

kann man mit diesem Modell erfassen. Dabei wird das Speichermedium als<br />

Kanal, der Speichervorgang als Senden <strong>und</strong> der Lesevorgang als Empfang gedeutet.<br />

Im Rahmen dieser <strong>Vorlesung</strong> wird ausschließlich die digitale Datenübertragung<br />

betrachtet <strong>und</strong> man faßt die einzelnen Signale als Buchstaben oder Symbole<br />

aus einem Alphabet auf. Das geeignete mathematische Beschreibungswerkzeug ist<br />

zunächst die Halbgruppentheorie (vgl. Beispiel 2.3).<br />

Bei dieser Form der Datenübertragung können gr<strong>und</strong>sätzlich mindestens die folgenden<br />

beiden Problemkreise auftreten. Einerseits können beim Übertragen der<br />

Zeichen im Kanal Störungen oder Fehler auftreten, indem einzelne Zeichen (Einzelfehler)<br />

oder ganze Zeichenfolgen (Fehlerbündel) in andere Zeichen verfälscht<br />

werden, wobei man auch die Auslöschung als Verfälschung in ein geeignetes Symbol<br />

deuten kann. Man hat also die Aufgabe, den Nachrichten zusätzliche, eigentlich<br />

überflüssige oder red<strong>und</strong>ante Informationen mitzugeben, sie zu codieren.<br />

Diese Informationen sollen es dem Empfänger bei der Decodierung gestatten,<br />

möglichst viele aufgetretene Fehler zu erkennen oder gar zu korrigieren. Mit diesen<br />

Problemen der Fehlererkennung <strong>und</strong> Fehlerkorrektur (vgl. Definition 3.5) befaßt<br />

sich die <strong>Codierungstheorie</strong>, die den ersten Teil der <strong>Vorlesung</strong> ausmacht. Da<br />

diese Störungen in der Regel technisch bedingt sind <strong>und</strong> zufällig auftreten, wird<br />

man zu ihrer Modellierung <strong>und</strong> Behebung auch wahrscheinlichkeitstheoretische<br />

Überlegungen heranziehen.<br />

Beispiel 1.1 Bei der Übertragung der auf einer Tastatur darstellbaren Buchstaben,<br />

Zahlen <strong>und</strong> Sonderzeichen in den Rechner werden diese Zeichen in der Regel<br />

in Bytes umgewandelt oder codiert. Dies sind Folgen aus 8 Bits, wobei jedes Bit<br />

entweder eine 0 oder eine 1 ist. Da es genau 2 8 = 256 verschiedene Bytes gibt,<br />

kann man maximal 256 Zeichen auf diese Weise darstellen. Nun existieren auf der<br />

Tastatur aber weit weniger als 128 verschiedene Zeichen, auch wenn man Groß<strong>und</strong><br />

Kleinschreibung unterscheidet. Hiervon macht man Gebrauch, um einfache<br />

Übertragungsfehler erkennen zu können. Man ordnet den Zeichen der Tastatur in<br />

irgend einer festen Weise, beispielsweise nach dem ASCII-Code (American Standard<br />

Code for Information Interchange) gemäß A ↦→ 1000001, B ↦→ 1000010, . . .,<br />

einige der Zahlen von 0 = 0000000 bis 127 = 1111111 zu <strong>und</strong> ermittelt aus den<br />

2


sieben Bits c 7 c 6 c 5 c 4 c 3 c 2 c 1 dieser Zahlen das führende achte Bit c 8 des Bytes als<br />

Paritätsbit gemäß<br />

(1)<br />

7∑<br />

c 8 = c i mod 2.<br />

i=1<br />

Ist also die Summe gerade, so wird c 8 = 0 berechnet, ist sie ungerade, so wird<br />

c 8 = 1 berechnet. Die Summe aller 8 Bits eines codierten Zeichens ist also stets<br />

gerade. Der Empfänger eines derart codierten Zeichens kann (1) wiederum folgendermaßen<br />

als Kontrollgleichung benutzen. Tritt bei der Datenübertragung an<br />

genau einer Stelle ein Fehler auf, d.h. wird genau eine 0 in eine 1 verwandelt oder<br />

umgekehrt, so wird das empfangene Byte (1) nicht erfüllen <strong>und</strong> damit als fehlerhaft<br />

erkennbar. Natürlich ist nicht erkennbar, welches Bit umgeklappt wurde,<br />

<strong>und</strong> der aufgetretene Fehler kann nicht korrigiert werden. Es kann aber etwa eine<br />

nochmalige Übertragung angefordert werden, sogenanntes ARQ-Verfahren (Automatic<br />

Repeat Request). Fügt man dagegen weitere red<strong>und</strong>ante Bits hinzu, so<br />

können bestimmte Fehler nicht nur erkannt, sondern sogar automatisch korrigiert<br />

werden, sogenanntes FEC-Verfahren (Forward Error Correction). Man kann aufgr<strong>und</strong><br />

dieses Beispiels erahnen, daß bei dieser Art der <strong>Codierungstheorie</strong> Lineare<br />

Algebra über dem Körper Z/(2) oder allgemein über endlichen Körpern ins Spiel<br />

kommt (vgl. auch Definition 3.13 <strong>und</strong> Folgerung 3.14).<br />

Der zweite Problemkreis betrifft die Geheimhaltung der Nachrichten. Der Sender<br />

ist oft daran interessiert, daß nur ein bestimmter Empfänger die Nachricht verstehen<br />

kann <strong>und</strong> ein unbefugter Empfänger oder passiver Angreifer, der ebenfalls<br />

den Kanal abhören kann, nur für ihn unverständliche Zeichenfolgen erkennt. Man<br />

wird also die Nachricht, den Klartext, nach Möglichkeit so in einen Geheimtext<br />

verschlüsseln oder chiffrieren, daß nur jemand, der über einen entsprechenden<br />

Schlüssel verfügt, den eigentlichen Informationsgehalt der übertragenen Zeichenfolge<br />

erschließen bzw. dechiffrieren kann. Ohne Schlüssel soll die Rekonstruktion<br />

der ursprünglichen Nachricht extrem unwahrscheinlich sein. Weiterhin soll die<br />

Verschlüsselung nach Möglichkeit verhindern, daß ein aktiver Angreifer die Nachricht<br />

des Senders verändert, ohne daß der Empfänger dies bemerkt, die Integrität<br />

der Nachricht soll garantiert sein. Darüber hinaus soll die Verschlüsselung dem<br />

Empfänger eventuell auch die Möglichkeit geben, zu erkennen, ob der Absender<br />

tatsächlich der vermutete Sender ist. Dieses Problem betrifft also die Authentifikation<br />

des Senders. Schließlich sollte es dem Sender auch unmöglich sein, später<br />

zu leugnen, eine bestimmte Nachricht gesendet zu haben. Die Nachricht sollte<br />

verbindlich sein. Alle diese Aspekte der Sicherung von Nachrichten werden in<br />

der Kryptographie oder Kryptologie untersucht, mit der sich der zweite Teil der<br />

<strong>Vorlesung</strong> beschäftigt. (“Kryptographie” kommt aus dem griechischen κρυπτoσ<br />

3


= “geheim” <strong>und</strong> γραϕɛιν = “schreiben”, in “Kryptologie” steckt noch λoγoσ<br />

= “Wort, Wissenschaft, Lehre”.) Hierbei kommt es vor allem auf den Entwurf<br />

sicherer Verschlüsselungsverfahren oder Kryptosysteme an, wobei hauptsächlich<br />

algebraische <strong>und</strong> zahlentheoretische Methoden benutzt werden. Bei der Beurteilung<br />

der Sicherheit von derartigen Verfahren wird man schließlich noch Methoden<br />

der Komplexitätstheorie anwenden müssen.<br />

Beispiel 1.2 Das folgende Verfahren benutzte bereits Julius Caesar (100 - 44<br />

v. Chr.) <strong>zur</strong> Verschlüsselung geheimer Botschaften. Um Nachrichten aus den 26<br />

Großbuchstaben des lateinischen Alphabets zu verschlüsseln (übrigens hatte das<br />

Alphabet <strong>zur</strong> Zeit Caesars nur 21 Buchstaben!), ersetzte Caesar jeden Buchstaben<br />

durch denjenigen, der drei Stellen später im Alphabet folgt, also A durch D, B<br />

durch E, ..., X durch A, Y durch B <strong>und</strong> Z durch C. Da man diese Translation um<br />

3 Buchstaben bei zyklischer Anordnung der Buchstaben auch als Rotation deuten<br />

kann, wird das Verfahren kurz als ROT 3 bezeichnet. Der Empfänger muß dann<br />

nur das analoge Verfahren ROT -3 oder ROT 23 anwenden, um die unverschlüsselte<br />

Nachricht zu erhalten. (Übrigens wird ROT 13 wegen ROT -13 = ROT 13 heute<br />

in einigen Browsern <strong>zur</strong> Verfügung gestellt, um Nachrichten gegen “unbeabsichtigtes<br />

Lesen” zu sichern.) An Caesars Methode kann man verschiedene Komponenten<br />

eines beliebigen Chiffrier- <strong>und</strong> Dechiffriersystems identifizieren. Es gibt<br />

einen allgemeinen Algorithmus zum Verschlüsseln von Nachrichten, hier die Permutation<br />

der Buchstaben, die durch eine beliebige, aber feste Rotation bewirkt<br />

wird. Es gibt ebenfalls einen Algorithmus zum Entschlüsseln der Nachricht, der<br />

in diesem Beispiel zufällig derselbe Algorithmus ist. Es gibt weiterhin eine Anzahl<br />

von Schlüsseln, aus denen der Sender einen auswählen kann. Caesar wählte<br />

die Zahl 3, die erwähnten Browser die Zahl 13. Übermittelt der Sender über<br />

einen anderen Kommunikationskanal, etwa durch Boten, diesen Schlüssel an den<br />

Empfänger, dann kann dieser eine derartig verschlüsselte Nachricht mit dem ihm<br />

bekannten Algorithmus mühelos entschlüsseln. Da Sender <strong>und</strong> Empfänger über<br />

denselben Schlüssel <strong>und</strong> seine Umkehrfunktion verfügen, nennt man diese Verfahren<br />

auch symmetrisch. (Die moderne Kryptographie kennt auch Verfahren,<br />

bei denen nur der Empfänger über einen geheimen Schlüssel verfügt. Diese asymmetrischen<br />

Verfahren sind auch unter dem Begriff Public-Key-Kryptosysteme bekannt<br />

geworden.) Der Angreifer muß nun zumindest noch den richtigen Schlüssel<br />

raten, selbst wenn ihm die verwendeten Algorithmen bekannt sind. (In der modernen<br />

Kryptographie geht man bei der Beurteilung eines Verschlüsselungssystem<br />

gr<strong>und</strong>sätzlich davon aus, daß die Algorithmen allgemein bekannt sind.) Es kommt<br />

also ausschließlich darauf an, wie unwahrscheinlich die Ermittlung des verwendeten<br />

Schlüssels ist. Bei diesem konkreten Beispiel hat es dann der Angreifer nicht<br />

schwer. Er muß lediglich einen von 26 möglichen Schlüsseln finden, was in sehr<br />

kurzer Zeit durch systematisches Probieren möglich ist. Man kann die Sicherheit<br />

des Verfahrens dadurch erhöhen, daß man als mögliche Schlüssel beliebige Permutationen<br />

der Buchstaben zuläßt (<strong>und</strong> die Algorithmen natürlich entsprechend<br />

4


ändert). Der Angreifer muß dann den richtigen unter den immerhin 26! ∼ = 4 · 10 26<br />

möglichen Schlüsseln finden. Hier machen aber statistische Informationen über<br />

die Häufigkeiten der einzelnen Buchstaben in den gesendeten Nachrichten die<br />

Suche immer noch recht einfach.<br />

Beispiel 1.3 Das folgende, auf Ideen von Gilbert S. Vernam (1890 - 1960) im<br />

Jahr 1917 <strong>zur</strong>ückgehende Verfahren des Einwegschlüssels gewährt zwar größtmögliche<br />

Sicherheit gegen unbefugtes Abhören, der Preis ist aber der aufwendige<br />

Schlüsselaustausch zwischen Sender <strong>und</strong> Empfänger. Es wird hierbei nämlich vorausgesetzt,<br />

daß Sender <strong>und</strong> Empfänger über eine identische <strong>und</strong> zufällige unendliche<br />

Folge von Binärzeichen s 1 s 2 s 3 . . . verfügen. Die Nachrichten bestehen ebenfalls<br />

aus Folgen von Binärzeichen n 1 n 2 n 3 . . .. Die Verschüsselung besteht darin,<br />

daß aus dem Nachrichtensymbol n i das zu sendende Symbol m i = n i + s i mod 2<br />

gemacht wird. Ist dies geschehen, so wird s i aus der Schlüsselfolge gestrichen, jedes<br />

Schlüsselsymbol wird also nur einmal verwendet. Der Empfänger kann daraus<br />

sofort n i = m i + s i mod 2 berechnen <strong>und</strong> anschließend aus seiner Schlüsselfolge<br />

ebenfalls s i streichen. Dadurch bleiben die beiden Schlüsselfolgen synchron. Ein<br />

Angreifer kann eine Nachricht nur dann entschlüsseln, wenn er für jedes m i das<br />

zugehörige s i richtig errät. Die Wahrscheinlichkeit hierfür geht mit wachsender<br />

Nachrichtenlänge aber gegen 0, wenn die Schlüsselfolge eine Zufallsfolge ist. In der<br />

Praxis kann man sich auch mit Folgen von Pseudozufallszahlen behelfen, wobei<br />

man statt der Schlüsselfolgen nur die entsprechenden Generatoren austauschen<br />

muß.<br />

Eine unterhaltsame Geschichte über die Entwicklung der Kryptologie seit dem<br />

zweiten Weltkrieg kann man in dem Roman “Cryptonomicon” von Neal Stephenson<br />

nachlesen.<br />

Einführende Literatur <strong>zur</strong> <strong>Codierungstheorie</strong><br />

A. Betten et al., <strong>Codierungstheorie</strong>, Springer-Verlag, 1998. ISBN 3-540-64502-0.<br />

W. Heise, P. Quattrocchi, Informations- <strong>und</strong> <strong>Codierungstheorie</strong>, Springer-Verlag,<br />

1989. ISBN 3-540-50537-7.<br />

Ernst Henze, Horst H. Homuth, Einführung in die <strong>Codierungstheorie</strong>, Vieweg,<br />

1973. ISBN 3-528-03024-0.<br />

Raymond Hill, A First Course in Coding Theory, Clarendon Press, 1986. ISBN<br />

0-19-853803-0.<br />

D. Jungnickel, <strong>Codierungstheorie</strong>, Spektrum-Verlag, 1995. ISBN 3-860-25432-4.<br />

5


Werner Lütkebohmert, <strong>Codierungstheorie</strong>, Vieweg-Verlag, 2003.<br />

ISBN 3-528-03197-2.<br />

Ralph-Hardo Schulz, <strong>Codierungstheorie</strong>. Eine Einführung, Vieweg-Verlag, 2003.<br />

ISBN 3-528-16419-0.<br />

Peter Sweeney, Codierung <strong>zur</strong> Fehlererkennung <strong>und</strong> Fehlerkorrektur, Hanser-<br />

Verlag, 1992. ISBN 3-446-16439-1.<br />

Wolfgang Willems, <strong>Codierungstheorie</strong>, deGruyter, 1999. ISBN 3-11-015873-6.<br />

Wolfgang Willems, <strong>Codierungstheorie</strong> <strong>und</strong> Kryptographie, Birkhäuser, 2008.<br />

ISBN 978-3-7643-8611-5.<br />

Einführende Literatur <strong>zur</strong> Kryptologie<br />

Friedrich Bauer, Entzifferte Geheimnisse, Springer-Verlag, 1997. ISBN 3-540-<br />

62632-8.<br />

Albrecht Beutelspacher, Kryptologie, Vieweg-Verlag, 1996. ISBN 3-528-48990-1.<br />

Albrecht Beutelspacher, Geheimsprachen. Geschichte <strong>und</strong> Techniken, Verlag C.<br />

H. Beck, 2002. ISBN 3-406-49046-8.<br />

Albrecht Beutelspacher, Jörg Schwenk, Klaus-Dieter Wolfenstetter, Moderne Verfahren<br />

der Kryptographie, Vieweg-Verlag, 2001. ISBN 3-834-80083-X.<br />

J. Buchmann, Einführung in die Kryptographie, Springer-Verlag, 1999. ISBN 3-<br />

540-40508-9.<br />

Walter Funny, Hans Peter Rieß, Kryptographie. Entwurf, Einsatz <strong>und</strong> Analyse<br />

symmetrischer Kryptoverfahren, Oldenbourg, 1994. ISBN 3-486-22213-9.<br />

R. Kippenhahn, Verschlüsselte Botschaften. Geheimschrift, Enigma <strong>und</strong> Chipkarte,<br />

Rowohlt-Verlag, 1999. ISBN 3-937-87237-X.<br />

Roland Matthes, Algebra, Kryptologie <strong>und</strong> Kodierungstheorie, Fachbuchverlag<br />

Leipzig, 2003, ISBN 3-446-22431-9.<br />

Michael Miller, Symmetrische Verschlüsselungsverfahren, Teubner-Verlag, 2003.<br />

ISBN 3-519-02399-7.<br />

Bruce Schneier, Angewandte Kryptographie, Wiley, 2006. ISBN 0-471-11709-9.<br />

Simon Singh, Geheime Botschaften, Deutscher Taschenbuch Verlag, 2001. ISBN<br />

3-423-33071-6<br />

6


Abraham Sinkov, Elementary Cryptanalysis, Mathematical Association of America,<br />

1966.<br />

Andrea Sgarro, Marcus Würmli, Geheimschriften, Weltbild-Verlag, 1991. ISBN<br />

3-89350-162-2.<br />

Douglas R. Stinson, Cryptography, CRC Press, 1995. ISBN 0-8493-8521-0<br />

Dominic Welsh, Codes <strong>und</strong> Kryptographie, VCH, 1991. ISBN 3-527-27959-8.<br />

Anette Werner, Elliptische Kurven in der Kryptographie, Springer, 2002. ISBN<br />

3-540-42518-7.<br />

Kryptographie, Spektrum der Wissenschaft Dossier, 4/2001.<br />

7


2 Freie Halbgruppen <strong>und</strong> Codierungen<br />

In der algebraischen <strong>Codierungstheorie</strong> werden einige Begriffe <strong>und</strong> Resultate über<br />

Halbgruppen, Gruppen, Körper <strong>und</strong> Vektorräume benötigt. Soweit sie in diesem<br />

<strong>Skript</strong> nicht nochmals aufgeführt sind, kann man sie in den entsprechenden <strong>Skript</strong>en<br />

<strong>zur</strong> Linearen Algebra <strong>und</strong> Klassischen Algebra finden.<br />

Definition 2.1 Unter einer Halbgruppe (S, ·) versteht man eine nichtleere Menge<br />

S zusammen mit einer binären Verknüpfung (der Multiplikation) ·, die also<br />

je zwei Elementen a, b ∈ S genau ein Produkt a · b ∈ S zuordnet, so daß das<br />

Assoziativgesetz gilt:<br />

(2)<br />

a · (b · c) = (a · b) · c für alle a, b, c ∈ S.<br />

Besitzt die Halbgruppe ein Einselement e ∈ S gemäß<br />

(3)<br />

e · a = a · e = a für alle a ∈ S,<br />

so spricht man von einem Monoid. Gilt in (S, ·) das Kommutativgesetz<br />

(4)<br />

a · b = b · a für alle a, b ∈ S,<br />

so nennt man die Halbgruppe (das Monoid) kommutativ.<br />

Definition 2.2 Sind a <strong>und</strong> b Elemente einer Halbgruppe (S, ·) <strong>und</strong> ist c = a·b ihr<br />

Produkt, so nennt man a einen linken Teiler oder ein Präfix <strong>und</strong> b einen rechten<br />

Teiler oder ein Postfix bzw. Suffix von c.<br />

Beispiel 2.3 Für eine beliebige Menge X ≠ ∅ sei X + = ⋃ n∈N X n . Definiert man<br />

für alle (x 1 , . . . , x n ), (y 1 , . . . , y m ) ∈ X + eine Multiplikation durch<br />

(5)<br />

(x 1 , . . . , x n ) · (y 1 , . . . , y m ) = (x 1 , . . . , x n , y 1 , . . . , y m ),<br />

dann ist (X + , ·) eine Halbgruppe, die freie Halbgruppe über X. Man schreibt die<br />

Elemente (x 1 , . . . , x n ) ∈ X + einfach in der Form x 1 · · · x n <strong>und</strong> die Multiplikation<br />

als Konkatenation x 1 · · · x n y 1 · · · y m . Speziell für endliches X nennt man X ein<br />

Alphabet, die Elemente x ∈ X Buchstaben <strong>und</strong> die Elemente x 1 · · · x n ∈ X +<br />

8


Wörter oder Strings über X. Adjungiert man zu (X + , ·) ein leeres Wort λ als<br />

Einselement, so nennt man X ∗ = X + ∪ {λ} das freie Monoid über X. Ist w =<br />

x 1 · · · x n ∈ X ∗ , so nennt man l(w) = n die Länge von w; genau die Wörter<br />

u 1 = x 1 , u 2 = x 1 x 2 , . . . , u n−1 = x 1 · · · x n−1 sind Präfixe <strong>und</strong> die Wörter v 1 =<br />

x 2 · · · x n , . . . , v n−1 = x n sind Postfixe von w. Unter einer formalen Sprache L<br />

(über dem Alphabet X) versteht man eine beliebige Teilmenge von X ∗ .<br />

Definition 2.4 Sind A <strong>und</strong> B Teilmengen einer Halbgruppe (S, ·) so versteht<br />

man unter dem Komplexprodukt AB die Teilmenge<br />

(6)<br />

AB = {a · b | a ∈ A, b ∈ B}.<br />

Für A = B schreibt man auch A 2 anstelle von AA, für einelementige Mengen<br />

A = {a} bzw. B = {b} schreibt man auch aB anstelle von {a}B bzw. Ab anstelle<br />

von A{b}.<br />

Definition 2.5 Es seien A <strong>und</strong> B Alphabete. Eine Codierung von A in B ist<br />

eine beliebige Abbildung γ : A + → B + ; sie heißt eindeutig decodierbar, wenn sie<br />

injektiv ist, <strong>und</strong> sie heißt homomorph, wenn<br />

(7)<br />

γ(uv) = γ(u)γ(v) für alle u, v ∈ A +<br />

gilt. Die Menge C = γ(A) ⊂ B + heißt Code (zu γ), die Elemente c ∈ C Codewörter.<br />

Für |B| = 2 spricht man von binären, für |B| = 3 von ternären Codes.<br />

Besitzen alle Codewörter c ∈ C dieselbe Länge n = l(c), so heißt C ein Blockcode<br />

der Länge n über B. Bei variablen Längen der Codewörter spricht man auch von<br />

Faltungscodes. Ist |C| = 1, so nennt man C einen trivialen Code. Unter der Informationsrate<br />

eines Blockcodes der Länge n über einem Alphabet mit q Elementen<br />

versteht man R = R(C) = 1 n log q |C|.<br />

Bemerkung 2.6 a) Man bezeichnet allgemein jede nichtleere endliche Teilmenge<br />

C einer freien Halbgruppe B + als Code. Man kann dies mit der obigen Definition<br />

in Einklang bringen, indem man als Alphabet A eine beliebige, zu C gleichmächtige<br />

Menge wählt <strong>und</strong> als Codierung γ eine beliebige bijektive Abbildung von A<br />

auf C = γ(A), die man in kanonischer Weise gemäß<br />

(8)<br />

γ(x 1 · · · x n ) = γ(x 1 ) . . . γ(x n )<br />

9


zu einem Homomorphismus von A + in B + fortsetzt. Auf diese Weise entsteht<br />

stets eine homomorphe Codierung, die jedoch nicht eindeutig decodierbar sein<br />

muß (vgl. Aufgabe 2.17).<br />

b) Bei dem Alphabet B = {b 1 , . . . , b q } kommt es nicht auf die konkreten Symbole<br />

b i an, sondern nur auf die Mächtigkeit q = |B|. Man kann daher nach geeigneter<br />

Umbenennung B = {1, . . . , q − 1, 0} annehmen <strong>und</strong> diese Menge mit der Trägermenge<br />

des Restklassenringes (Z/(q), +, ·) identifizieren. Auf diese Weise hat man<br />

stets die Möglichkeit, die Buchstaben des Alphabets zu addieren <strong>und</strong> zu multiplizieren.<br />

Dies kann man unter Umständen bei der Konstruktion von Codierungen<br />

mit besonderen Eigenschaften ausnutzen (vgl. Beispiel 1.1, Definition 3.13 <strong>und</strong><br />

Folgerung 3.14). Außerdem kann man das Auftreten von Übertragungsfehlern<br />

dann dadurch modellieren, daß zu einem übertragenen Codewort ein geeignetes<br />

Fehlerwort hinzuaddiert wurde. Ist q = p k sogar eine Primzahlpotenz, dann kann<br />

man B auch mit dem endlichen Körper F q identifizieren, wodurch die Multiplikation<br />

mit einem von 0 verschiedenen Buchstaben sogar invertierbar ist.<br />

Beispiel 2.7 a) Es sei B ein Alphabet mit |B| = q. Für b ∈ B sei b = x 1 . . . x n ∈<br />

B n mit x i = b für i = 1, . . . , n die n-fache Wiederholung des Buchstabens b. Der<br />

Blockcode C = {b | b ∈ B} heißt q-närer Wiederholungscode der Länge n.<br />

b) Ist allgemeiner C ⊆ B n ein beliebiger Blockcode der Länge n, so wird für<br />

m ∈ N die m-fache Wiederholung von C als Blockcode {(c, . . . , c) ∈ B mn | c ∈ C}<br />

definiert.<br />

Beispiel 2.8 Es seien n, q ≥ 1 natürliche Zahlen <strong>und</strong> B = {0, 1, . . . , q − 1}. Der<br />

volle q-näre Gray-Code C n der Länge n wird folgendermaßen rekursiv definiert.<br />

Für n = 1 sei C 1 = B. Für n > 1 beginnen die ersten q n−1 Worte von C n mit<br />

dem Zeichen 0 gefolgt von sämtlichen Codeworten von C n−1 in der konstruierten<br />

Reihenfolge. Die nächsten q n−1 Codeworte beginnen mit dem Zeichen 1 gefolgt<br />

von den Codeworten von C n−1 , diese aber in umgekehrter Reihenfolge ihrer Konstruktion.<br />

Die nächsten q n−1 Codeworte beginnen mit dem Zeichen 2, gefolgt von<br />

den Codeworten aus C n−1 , diesmal wieder in ihrer ursprünglichen Reihenfolge,<br />

<strong>und</strong> so abwechselnd bis das erste Zeichen q − 1 ist. Natürlich gilt C n = B n , aber<br />

die Reihenfolge der Codewörter ist hier entscheidend! Jede nichtleere Teilmenge<br />

C aufeinanderfolgender Codeworte aus C n bezeichnet man als q-nären Gray-Code<br />

der Länge n.<br />

Definition 2.9 Es sei (S, ·) eine Halbgruppe. Eine nichtleere Teilmenge U von<br />

S heißt eine Unterhalbgruppe von (S, ·), wenn<br />

(9)<br />

a, b ∈ U =⇒ a · b ∈ U<br />

10


für alle a, b ∈ S erfüllt ist. Für eine nichtleere Teilmenge A von S sei < A > der<br />

Durchschnitt aller Unterhalbgruppen U von (S, ·) mit A ⊆ U (vgl. Aufgabe 2.18).<br />

Man nennt < A > die von A erzeugte Unterhalbgruppe von (S, ·).<br />

Der Beweis der beiden folgenden gr<strong>und</strong>legenden Sätze ist umfangreicher <strong>und</strong> wird<br />

innerhalb der <strong>Vorlesung</strong> daher nicht geführt.<br />

Satz 2.10 Es sei B ein Alphabet. Eine nichtleere, endliche Teilmenge C ⊆ B +<br />

ist genau dann ein eindeutig decodierbarer Code, wenn C =< C > \ < C > 2 gilt<br />

<strong>und</strong> wenn für alle w ∈ B + aus < C > w ∩ < C >≠ ∅ <strong>und</strong> w < C > ∩ < C >≠ ∅<br />

bereits w ∈< C > folgt.<br />

Der nächste Satz gibt einen Algorithmus an, mit dem die eindeutige Decodierbarkeit<br />

einer homomorphen Codierung entschieden werden kann. Dieser Algorithmus<br />

geht auf eine Arbeit von Sardinas <strong>und</strong> Patterson im Jahr 1953 <strong>zur</strong>ück.<br />

Definition 2.11 Für Teilmengen M <strong>und</strong> N einer Halbgruppe (S, ·) sei<br />

M −1 N = {x ∈ S | Mx ∩ N ≠ ∅}.<br />

Satz 2.12 Es seien A <strong>und</strong> B Alphabete <strong>und</strong> γ : A + → B + eine homomorphe<br />

Codierung. Die Mengen M n seien definiert durch M 0 = γ(A), M 1 = M0 −1 M 0 <strong>und</strong><br />

M n+1 = Mn<br />

−1 M 0 ∪ M0 −1 M n . Genau dann ist γ eindeutig decodierbar, wenn γ|A<br />

injektiv ist <strong>und</strong> M n ∩ M 0 = ∅ für alle n ≥ 1 gilt.<br />

Definition 2.13 Ein Code C ⊂ B + heißt irreduzibel, sofort decodierbar oder ein<br />

Präfix-Code, wenn kein Codewort Präfix eines anderen Codewortes ist.<br />

Bemerkung 2.14 a) Man nennt diese Bedingung auch Präfix-Eigenschaft oder<br />

Fano-Bedingung nach Robert Mario Fano (1917 - ).<br />

b) Jeder Blockcode ist irreduzibel, jeder irreduzible Code ist eindeutig decodierbar.<br />

Aufgabe 2.15 Beweisen Sie, daß das Einselement in einem Monoid stets eindeutig<br />

bestimmt ist.<br />

Aufgabe 2.16 Gibt es Alphabete X, für welche die freie Halbgruppe X + kommutativ<br />

ist?<br />

11


Aufgabe 2.17 Beweisen Sie, daß für die eindeutige Decodierbarkeit einer homomorphen<br />

Codierung γ : A + → B + die Injektivität der Einschränkung γ|A<br />

notwendig, aber nicht hinreichend ist.<br />

Aufgabe 2.18 Beweisen Sie, daß der Durchschnitt beliebig vieler Unterhalbgruppen<br />

einer Halbgruppe (S, ·) entweder leer oder Unterhalbgruppe von (S, ·)<br />

ist.<br />

Aufgabe 2.19 a) Zeigen Sie, daß jeder Blockcode eindeutig decodierbar ist.<br />

b) Es seien A = {a, b, c}, B = {0, 1}, γ 1 (A) = C 1 = {0, 10, 01} <strong>und</strong> γ 2 (A) = C 2 =<br />

{1, 10, 00}. Entscheiden Sie mit Satz 2.12, ob γ i eindeutig decodierbar ist.<br />

c) Es sei C = {110, 11, 100, 00, 10} ⊂ B + . Entscheiden Sie, ob C eindeutig decodierbar<br />

ist.<br />

d) Zeigen Sie, daß C 1 = {11, 10, 110, 001} <strong>und</strong> C 2 = {11, 10, 001} eindeutig decodierbare<br />

Codes über B = {0, 1} sind.<br />

12


3 Eigenschaften von Blockcodes<br />

Definition 3.1 Es sei B ein Alphabet <strong>und</strong> v, w ∈ B n ⊂ B + . Dann heißt<br />

(10)<br />

d(v, w) = |{i | v i ≠ w i }|,<br />

also die Anzahl der Stellen, an denen sich v <strong>und</strong> w unterscheiden, der Hamming-<br />

Abstand oder die Hamming-Distanz von v <strong>und</strong> w. (Dieser Begriff wurde 1950 von<br />

R. W. Hamming eingeführt.)<br />

Satz 3.2 Die Hamming-Distanz definiert eine Metrik auf B n , d. h. es gilt für<br />

alle u, v, w ∈ B n<br />

(11)<br />

(12)<br />

(13)<br />

d(u, v) ≥ 0 <strong>und</strong> d(u, v) = 0 ⇐⇒ u = v,<br />

d(u, v) = d(v, u),<br />

d(u, v) ≤ d(u, w) + d(w, v).<br />

Ist (B, +) eine additiv geschriebene abelsche Gruppe (was nach Bemerkung 2.6 b)<br />

immer angenommen werden darf), so ist d translationsinvariant, d. h. es gilt<br />

außerdem<br />

(14)<br />

d(u + w, v + w) = d(u, v).<br />

Beweis: Aufgr<strong>und</strong> der Definition des Abstandes als Anzahl der unterschiedlichen<br />

Stellen sind die Aussagen in (11) <strong>und</strong> (12) klar. Zum Beweis von (13) betrachte<br />

eine beliebige Stelle i, an der u i ≠ v i gilt, die also in d(u, v) gezählt wird. Dann<br />

muß w i aber auch von mindestens einem der beiden Zeichen u i oder v i verschieden<br />

sein <strong>und</strong> wird daher in d(u, w) oder in d(w, v) (oder in beiden) gezählt. Damit ist<br />

die rechte Seite mindestens so groß wie die linke. In (14) gilt die Gleichheit, weil<br />

für jede Stelle i stets u i + w i = v i + w i gleichwertig zu u i = v i ist.<br />

⋄<br />

Definition 3.3 Es sei B ein Alphabet <strong>und</strong> r ∈ N 0 . Für v ∈ B n sei<br />

(15)<br />

B r (v) = {w ∈ B n | d(v, w) ≤ r}<br />

die abgeschlossene Kugel vom Radius r um den Mittelpunkt v <strong>und</strong><br />

(16)<br />

S r (v) = {w ∈ B n | d(v, w) = r}<br />

die Sphäre vom Radius r um den Mittelpunkt v.<br />

13


Lemma 3.4 Ist |B| = q, so gilt für alle j, r ∈ N 0 <strong>und</strong> v ∈ B n<br />

(17)<br />

|S j (v)| =<br />

( n<br />

j<br />

)<br />

(q − 1) j ,<br />

<strong>und</strong> da die abgeschlossene Kugel B r (v) disjunkte Vereinigung der Sphären S j (v)<br />

für j = 0, . . . , r ist,<br />

(18)<br />

( )<br />

r∑ n<br />

|B r (v)| = (q − 1) j .<br />

j=0<br />

j<br />

Beweis: Offensichtlich ist nur (17) zu zeigen. Ein Element w ∈ B n liegt aber<br />

genau dann in S j (v), wenn es genau j Stellen i 1 , . . . , i j gibt, an denen sich w <strong>und</strong><br />

v unterscheiden. Diese j Stellen können nun zunächst einmal auf ( )<br />

n<br />

j verschiedene<br />

Weisen aus allen Stellen 1, . . . , n ausgewählt werden. Für jede so ausgewählte<br />

Stelle i muß sich dann w i von v i unterscheiden, während an den nicht ausgewählten<br />

Stellen v <strong>und</strong> w übereinstimmen. Da v i genau ein Zeichen aus B für diese<br />

Stelle festlegt, kann w i an dieser Stelle jedes der anderen q − 1 Zeichen aus B<br />

sein. Es gibt also für das Wort w genau q − 1 verschiedene Möglichkeiten, sich<br />

von v an dieser Stelle i zu unterscheiden. Daher gibt es für das Wort w genau<br />

(q − 1) j Möglichkeiten, sich an allen j ausgewählten Stellen von v zu unterscheiden<br />

<strong>und</strong> an den anderen Stellen mit v übereinzustimmen. Also wird die Anzahl<br />

aller w ∈ B n , die von v den Abstand j haben, durch die rechte Seite von (17)<br />

beschrieben.<br />

⋄<br />

Definition 3.5 Es sei C ⊆ B n ein Blockcode der Länge n.<br />

a) C heißt t-fehlererkennend, falls B t (c) für alle c ∈ C kein Codewort außer c<br />

enthält.<br />

b) C heißt e-fehlerkorrigierend, falls B e (c) ∩ B e (c ′ ) = ∅ für alle Codewörter c ≠ c ′<br />

gilt.<br />

c) Ist |C| > 1, so heißt<br />

(19)<br />

d(C) = min{d(c, c ′ ) | c ≠ c ′ , c, c ′ ∈ C}<br />

die Minimaldistanz von C. Für jeden trivialen Code sei d(C) = 0.<br />

d) Ist |C| = M <strong>und</strong> d(C) = d, so heißt C ein (n, M, d)-Code über B.<br />

e) Mit A q (n, d) wird das maximale M bezeichnet, für das bei gegebenen q = |B|, n<br />

<strong>und</strong> d ein (n, M, d)-Code über B existiert.<br />

14


Beispiel 3.6 a) Jeder triviale Blockcode der Länge n ist ein (n, 1, 0)-Code, <strong>und</strong><br />

M = 1 ist für d = 0 aufgr<strong>und</strong> der Defintion der Minimaldistanz auch optimal,<br />

d. h. es ist A q (n, 0) = 1 für jedes q <strong>und</strong> n.<br />

b) Es ist C = B n ein (n, q n , 1)-Code <strong>und</strong> M = q n ist bei gegebenen n <strong>und</strong> q für<br />

d = 1 ebenfalls optimal, also A q (n, 1) = q n . Dies folgt aus dem Satz 3.23.<br />

c) Der q-näre Wiederholungscode C der Länge n ist ein (n, q, n)-Code.<br />

Definition 3.7 Ein Blockcode C ⊆ B n erkennt Vertauschungsfehler an den Stellen<br />

i <strong>und</strong> j aus {1, . . . , n}, wenn für alle (c 1 , . . . , c i , . . . , c j , . . . , c n ) ∈ C mit c i ≠ c j<br />

gilt (c 1 , . . . , c j , . . . , c i , . . . , c n ) /∈ C.<br />

Bemerkung 3.8 Es werden noch weitere Vertauschungsfehler unterschieden, die<br />

bei der Übermittlung von Ziffern auftreten: Sprungtranspositionen (abc ↦→ cba),<br />

Zwillingsfehler (aa ↦→ bb), Sprungzwillingsfehler (aca ↦→ bcb), phonetische Fehler<br />

(a0 ↦→ 1a) <strong>und</strong> übrige, zufällige Fehler. Über die Häufigkeiten derartiger Fehler<br />

gibt es statistische Untersuchungen.<br />

Satz 3.9 Es sei C ⊆ B n ein Blockcode mit Minimaldistanz d.<br />

a) Ist d ≥ t + 1, so ist C ein t-fehlererkennender Code.<br />

b) Ist d ≥ 2e + 1, so ist C ein e-fehlerkorrigierender Code.<br />

Beweis: a) Ist c ∈ C <strong>und</strong> c ≠ c ′ ∈ B n mit c ′ ∈ B t (c), dann folgt d(c, c ′ ) ≤ t < d,<br />

also kann c ′ nicht auch in C liegen.<br />

b) Wäre w ∈ B e (c)∩B e (c ′ ) für verschiedene Codeworte c <strong>und</strong> c ′ , so wäre d(c, c ′ ) ≤<br />

d(c, w) + d(w, c ′ ) ≤ e + e < d, was nach Definition der Minimaldistanz nicht sein<br />

kann.<br />

⋄<br />

Definition 3.10 Es sei C ⊂ B n ein Blockcode der Länge n. Man nennt C perfekt,<br />

falls ein e ∈ N 0 existiert, so daß<br />

(20)<br />

B n = ⋃<br />

B e (c)<br />

c∈C<br />

die disjunkte Vereinigung der Kugeln B e (c) ist.<br />

15


Satz 3.11 Es sei C ⊆ B n ein Blockcode der Länge n über B <strong>und</strong> es gelte |B| = q.<br />

a) Ist d(C) ≥ 2e + 1 für e ∈ N 0 , so gilt die Hamming-Schranke<br />

(21)<br />

( )<br />

e∑ n<br />

q n ≥ |C| (q − 1) j .<br />

j=0<br />

j<br />

b) Genau dann ist ein nicht-trivialer Code C perfekt, wenn in (21) die Gleichheit<br />

gilt. Diese Gleichung nennt man auch Kugelpackungsgleichung.<br />

Beweis: a) Aus d(C) ≥ 2e + 1 folgt wie im Beweis von Satz 3.9 b) zunächst<br />

einmal B e (c) ∩ B e (c ′ ) = ∅ für alle c ≠ c ′ aus C. Mit Lemma 3.4 erhält man<br />

q n = |B n | ≥ | ⋃<br />

B e (c)| = ∑ ( )<br />

e∑ n<br />

|B e (c)| = |C||B e (c)| = |C| (q − 1) j ,<br />

c∈C c∈C<br />

j=0<br />

j<br />

<strong>und</strong> hierin gilt Gleichheit genau dann, wenn B n = ⋃ c∈C B e (c) gilt.<br />

b) Gilt also die Gleichheit, so ist C nach Definition perfekt. Ist C umgekehrt<br />

nicht-trivial <strong>und</strong> perfekt, so ist ⋃ c∈C B e (c) disjunkte Überdeckung von B n <strong>und</strong><br />

da |C| > 1 gilt, hat man auch d(C) ≥ 2e+1. Nach a) gilt (21) also mit Gleichheit.<br />

⋄<br />

Beispiel 3.12 a) Triviale Codes (e = n) <strong>und</strong> C = B n (e = 0) sind perfekte<br />

Codes. Der binäre Wiederholungscode ungerader Länge n = 2e + 1 ist perfekt,<br />

denn B n wird von den beiden disjunkten Kugeln vom Radius e um die beiden<br />

Codeworte 0 <strong>und</strong> 1 überdeckt. Diese Codes nennt man auch triviale perfekte<br />

Codes.<br />

b) Die weiter unten behandelten (linearen) Hamming-Codes sind perfekt.<br />

c) Es gibt noch zwei von M. J. E. Golay im Jahr 1949 entdeckte perfekte Codes,<br />

den binären (23, 2 12 , 7)-Golay-Code <strong>und</strong> den ternären (11, 3 6 , 5)-Golay-Code.<br />

d) Zwei tiefliegende Resultate, die von verschiedenen Autoren in den 70er <strong>und</strong><br />

80er Jahren bewiesen wurden, besagen, daß für Primzahlpotenzen q = |B| ein<br />

nicht-trivialer perfekter Code nur mit denselben Parametern wie die Hamming-<br />

Codes <strong>und</strong> die Golay-Codes existieren kann. Außerdem ist für beliebiges q <strong>und</strong><br />

d(C) ≥ 7 der binäre Golay-Code der einzige nicht-triviale perfekte Code.<br />

Durch die folgenden Begriffsbildungen wird das Vorgehen in Beispiel 1.1 verallgemeinert<br />

<strong>und</strong> verständlicher.<br />

16


Definition 3.13 Es sei C ⊆ B n ein Blockcode der Länge n <strong>und</strong> das Alphabet<br />

B werde gemäß Bemerkung 2.6 b) als additive Gruppe vorausgesetzt. Der<br />

Erweiterungscode C von C ist dann der Blockcode der Länge n + 1<br />

n∑<br />

C = {(v 1 , . . . , v n+1 ) | (v 1 , . . . , v n ) ∈ C, v n+1 = − v i }.<br />

i=1<br />

Lemma 3.14 a) Ist C Blockcode, so gilt d(C) ≤ d(C) ≤ d(C) + 1.<br />

b) Ist C nicht-trivialer Blockcode, so gilt d(C) ≥ 2.<br />

c) Ist C binärer Blockcode <strong>und</strong> d(C) ungerade, so gilt d(C) = d(C) + 1.<br />

Beweis: a) Zu c = (c 1 , . . . , c n ) ∈ C sei stets c = (c 1 , . . . , c n , c n+1 ) ∈ C. Zwei Elemente<br />

c <strong>und</strong> c ′ aus C unterscheiden sich mindestens an den Stellen, an denen sich<br />

die zugehörigen Elemente c <strong>und</strong> c ′ aus C unterscheiden <strong>und</strong> höchstens zusätzlich<br />

noch an der letzten Stelle. Es gilt also<br />

(22)<br />

d(c, c ′ ) ≤ d(c, c ′ ) ≤ d(c, c ′ ) + 1.<br />

Hieraus folgt bereits die Behauptung, falls es zwei verschiedene Elemente c ≠ c ′ in<br />

C gibt. Sonst ist mit C aber auch C einelementig <strong>und</strong> es gilt d(C) = 0 = d(C) < 1.<br />

b) Wegen |C| > 1 existieren c ≠ c ′ aus C. Entweder gilt nun stets 2 ≤ d(c, c ′ ) für<br />

alle c ≠ c ′ aus C oder es gibt c ≠ c ′ in C mit d(c, c ′ ) = 1. Im ersten Fall folgt aus<br />

a) bereits 2 ≤ d(C) ≤ d(C). Im zweiten Fall unterscheiden sich c <strong>und</strong> c ′ an genau<br />

einer Stelle j, an der sich c <strong>und</strong> c ′ dann ebenfalls unterscheiden. Außerdem ist<br />

dann c n+1 ≠ c ′ n+1, da sich die beiden Summen genau in den Summanden c j ≠ c ′ j<br />

unterscheiden. Dies zeigt d(c, c ′ ) = 2 für alle diese Paare. Also gilt d(C) ≥ 2.<br />

c) Sei k = d(C) ≥ 1 ungerade. Wegen (22) bleibt d(c, c ′ ) = k =⇒ d(c, c ′ ) = k + 1<br />

für alle c ≠ c ′ aus C zu zeigen. Gilt aber die Voraussetzung dieser Implikation,<br />

so seien I = {i 1 , . . . , i k } die Stellen, an denen sich c <strong>und</strong> c ′ unterscheiden. Wenn<br />

nun c an einer geraden Anzahl von Stellen aus I eine 1 hat, so hat c ′ dort eine<br />

0 <strong>und</strong> folglich, da k ungerade ist, an einer ungeraden Anzahl von Stellen eine 1.<br />

Sonst hat c an einer ungeraden Anzahl von Stellen eine 1 <strong>und</strong> c ′ an einer geraden<br />

Anzahl. In jedem Fall ist ∑ i∈I c i ≠ ∑ i∈I c ′ i mod 2. Da die restlichen Stellen von<br />

c <strong>und</strong> c ′ aber gleich sind, folgt c n+1 ≠ c ′ n+1 <strong>und</strong> daher d(c, c ′ ) = d(c, c ′ ) + 1. ⋄<br />

Folgerung 3.15 Für ungerades d gilt A 2 (n + 1, d + 1) = A 2 (n, d). Also gilt für<br />

gerades d > 0 auch A 2 (n, d) = A 2 (n − 1, d − 1).<br />

17


Beweis: Offensichtlich reicht es, den ungeraden Fall zu beweisen. Sei also d ungerade.<br />

Ist dann C ein binärer (n, M, d)-Code, so ist C ein (n+1, M, d+1)-Code.<br />

Dies zeigt A 2 (n + 1, d + 1) ≥ A 2 (n, d). Sei umgekehrt C ein (n + 1, M, d + 1)-<br />

Code. Entfernt man aus allen Codewörtern eine feste Koordinate, so bleiben<br />

unterschiedliche Codeworte verschieden, da sie sich wegen d + 1 > 1 nicht nur<br />

in dieser Koordinate unterscheiden konnten. Man erhält also eine Blockcode der<br />

Länge n aus M Codewörtern. Zwei auf diese Weise erhaltene Codeworte der<br />

Länge n unterschieden sich aber noch in mindestens d Koordinaten. Sind c ≠ c ′<br />

zwei Codeworte aus C mit d(c, c ′ ) = d+1 <strong>und</strong> streicht man aus allen Codewörtern<br />

eine Koordinate, an der sich c <strong>und</strong> c ′ unterscheiden, so haben die resultierenden<br />

Codewörter nur noch den Abstand d, der resultierende Code ist also tatsächlich<br />

ein (n, M, d)-Code. Dies zeigt auch die andere Ungleichung.<br />

⋄<br />

Definition 3.16 Ein Blockcode C der Länge n über B = Z/(q) heißt Paritätscode<br />

<strong>zur</strong> Basis q mit den Gewichten g 1 , . . . , g n ∈ B, wenn C genau aus den<br />

(c 1 , . . . , c n ) ∈ B n besteht, für die<br />

(23)<br />

n∑<br />

g i c i ≡ 0 mod q<br />

i=1<br />

gilt. Das letzte Zeichen c n eines jeden Codewortes heißt dann das Kontrollzeichen<br />

dieses Wortes. Stets ist (0, . . . , 0) in C. Gilt g i = 1 für alle Gewichte, wird also<br />

zunächst die Quersumme berechnet, so heißt C einfach ein Paritätscode.<br />

Beispiel 3.17 a) Bei der EAN (Europäische Artikel-Nummer) wird ein Paritätscode<br />

<strong>zur</strong> Basis 10 entweder der Länge 13 (EAN13) oder der Länge 8 (EAN8) verwendet.<br />

Beim EAN13 lauten die Gewichte 1, 3, 1, . . . , 3, 1, beim EAN8 dagegen<br />

3, 1, . . . , 3, 1. Beide Codes sind also nach dem folgenden Satz 1-fehlererkennend.<br />

b) Bei der ISBN10 (Internationale Standard Buch Nummer) wird ein Paritätscode<br />

<strong>zur</strong> Basis 11 der Länge 10 verwendet. Die Gewichte lauten 10, 9, . . . , 1. Ist das<br />

Kontrollzeichen eine 10, so wird dieses als X notiert. Nach dem folgenden Satz<br />

ist der ISBN-Code 1-fehlererkennend. Er erkennt sogar Vertauschungsfehler an<br />

beliebigen Stellen.<br />

Seit 2007 wird auch die ISBN13 <strong>zur</strong> Basis 10 der Länge 13 verwendet. Die Gewichte<br />

sind dieselben wie bei der EAN13. Die ISBN13 entsteht aus der ISBN10 durch<br />

voranstellen der drei Ziffern 978 <strong>und</strong> der anderen Berechnung der Prüfziffer.<br />

c) Bei den Euro-Banknoten kommt ein Paritätscode der Länge 9 zum Einsatz.<br />

Die auftretenden Buchstaben werden vorher durch Ziffern aus {0, . . . , 9} ersetzt.<br />

Sämtliche Gewichte sind 1.<br />

18


Satz 3.18 Es sei C ein Paritätscode <strong>zur</strong> Basis q mit den Gewichten g i . Um das<br />

Kontrollzeichen stets berechnen zu können, muß g n teilerfremd zu q sein.<br />

a) Genau dann ist C 1-fehlererkennend, wenn jedes g i teilerfremd zu q ist. Insbesondere<br />

ist also jeder Paritätscode 1-fehlererkennend.<br />

b) Genau dann erkennt C alle Vertauschungsfehler an aufeinanderfolgenden Stellen,<br />

wenn g i − g i+1 für i = 1, . . . , n − 1 teilerfremd zu q ist.<br />

Beweis: Aus (23) folgt g n c n ≡ −(g 1 c 1 +. . .+g n−1 c n−1 ) mod q <strong>und</strong> diese Gleichung<br />

ist genau dann nach c n auflösbar, wenn das Inverse gn<br />

−1 modulo q existiert. Dies<br />

ist aber genau für ggT (g n , q) = 1 der Fall.<br />

a) Sei c = (c 1 , . . . , c n ) ∈ C <strong>und</strong> c ′ unterscheide sich genau an der Stelle i von c ′ .<br />

Genau dann erkennt C diesen Fehler nicht, wenn q neben g 1 c 1 +. . .+q i c i +. . . q n c n<br />

auch g 1 c 1 +. . .+q i c ′ i+. . . q n c n teilt oder gleichwertig, wenn q das Produkt g i (c i −c ′ i)<br />

teilt. Also erkennt C genau dann diesen Fehler, wenn q keine der möglichen Zahlen<br />

g i (c i − c ′ i) teilt.<br />

Gilt nun ggT (q, g i ) = 1, so teilt q keine dieser Zahlen, da q sonst c i − c ′ i teilen<br />

müßte, was wegen c i − c ′ i| ≤ q − 1 unmöglich ist.<br />

Gilt andererseits ggT (q, g i ) = d > 1, so haben c = (0, . . . , 0, c i , 0, . . . , 0) <strong>und</strong><br />

c ′ = (0, . . . , 0, c ′ i, 0, . . . , 0) mit c ′ i = q ≠ 0 <strong>und</strong> c d i = 0 den Abstand 1 <strong>und</strong> liegen<br />

wegen g i c ′ q<br />

i = g i = q g i<br />

beide in C, d. h., C erkennt diesen einfachen Fehler nicht.<br />

d d<br />

b) Sei c = (c 1 , . . . , c i , . . . , c j , . . . c n ) ∈ C <strong>und</strong> c ′ = (c 1 , . . . , c j , . . . , c i , . . . , c n ), wobei<br />

i <strong>und</strong> j nicht notwendig benachbart sein müssen. Genau dann erkennt C diesen<br />

Fehler nicht, wenn g 1 c 1 + . . . + g i c j + . . . + g j c i + . . . + g n c n ebenfalls von q geteilt<br />

wird. Dies ist gleichwertig zu q | g i c i + g j c j − g i c j − g j c i = (g i − g j )(c i − c j ).<br />

Also erkennt C genau dann diesen Fehler, wenn q keine der möglichen Zahlen<br />

(g i − g j )(c i − c j ) teilt.<br />

Mit der analogen Fallunterscheidung wie beim Beweis von a) folgt nun die Behauptung.<br />

⋄<br />

Folgerung 3.19 Für gerades q gibt es keinen Paritätscode <strong>zur</strong> Basis q der 1-<br />

fehlererkennend ist <strong>und</strong> gleichzeitig alle Vertauschungsfehler an aufeinanderfolgenden<br />

Stellen erkennt.<br />

Beweis: Sei C Paritätscode der Länge n mit Gewichten g 1 , . . . , g n . Wenn C 1-<br />

fehlererkennend ist, so müssen nach Satz 3.18 a) alle g i ungerade sein. Dann sind<br />

aber alle Differenzen g i − g j für i ≠ j gerade <strong>und</strong> nicht teilerfremd <strong>zur</strong> geraden<br />

Zahl q. Wegen Satz 3.18 b) erkennt C daher nicht alle Vertauschungsfehler. ⋄<br />

19


Definition 3.20 Es sei (B, +) eine beliebige endliche Gruppe. Weiterhin seien<br />

π i für i = 1, . . . , n Permutationen von B <strong>und</strong> a ∈ B. Dann heißt<br />

(24)<br />

n∑<br />

C = {(c 1 , . . . , c n ) | c i ∈ B, π i (c i ) = a}<br />

i=1<br />

ein Kontrollcode <strong>und</strong> ∑ n<br />

i=1 π i (c i ) = a die Kontrollgleichung von C.<br />

Satz 3.21 a) Jeder Kontrollcode C ist 1-fehlererkennend.<br />

b) Ein Kontrollcode C mit den Permutationen π 1 , . . . , π n erkennt alle Vertauschungen<br />

an aufeinanderfolgenden Stellen, falls π i (b) + π i+1 (b ′ ) ≠ π i+1 (b) + π i (b ′ )<br />

für alle b ≠ b ′ aus B <strong>und</strong> i = 1, . . . , n − 1 gilt.<br />

Beweis: a) Für |C| = 1 ist nichts zu zeigen. Wären c = (c 1 , . . . , c i , . . . , c n ) <strong>und</strong><br />

c ′ = (c 1 , . . . , c ′ i, . . . , c n ) aus C mit d(c, c ′ ) = 1, also c i ≠ c ′ i, so würde<br />

π 1 (c 1 ) + . . . + π i (c i ) + . . . + π n (c n ) = a = π 1 (c 1 ) + . . . + π i (c ′ i) + . . . + π n (c n )<br />

in der Gruppe (B, +) sofort π i (c i ) = π i (c ′ i) <strong>und</strong> damit c i = c ′ i nach sich ziehen.<br />

Also gilt stets d(c, c ′ ) ≥ 2 <strong>und</strong> daher ist C 1-fehlererkennend.<br />

b) Sei c = (c 1 , . . . , c i , . . . , c j , . . . , c n ) ∈ C <strong>und</strong> c ′ = (c 1 , . . . , c j , . . . , c i , . . . , c n ) mit<br />

c i ≠ c j . Genau dann erkennt C diese Vertauschung nicht, wenn sowohl π 1 (c 1 ) +<br />

. . . + π i (c i ) + . . . + π j (c j ) + . . . + π n (c n ) = a als auch π 1 (c 1 ) + . . . + π i (c j ) + . . . +<br />

π j (c i ) + . . . + π n (c n ) = a gelten. Durch Subtraktion gleicher Summanden folgt in<br />

der Gruppe (B, +) dann<br />

(25)<br />

π i (c i ) + . . . + π j (c j ) = π i (c j ) + . . . + π j (c i ).<br />

Wenn hierin also stets Ungleichheit gilt, so erkennt C alle Vertauschungen der<br />

Stellen i <strong>und</strong> j. Für j = i + 1 ist dies gerade die Behauptung in b). Bei kommutativen<br />

Gruppen kann man (25) sogar weiter vereinfachen zu<br />

π i (c i ) + π j (c j ) = π i (c j ) + π j (c i ).<br />

Daher erkennt in diesem Fall der Kontrollcode C alle Vertauschungen an den<br />

Stellen i <strong>und</strong> j, wenn π i (b) + π j (b ′ ) ≠ π i (b ′ ) + π j (b) für alle b ≠ b ′ aus B gilt. ⋄<br />

20


Bemerkung 3.22 a) Einige Banken verwenden bei der Vergabe ihrer Kontonummern<br />

einen Kontrollcode über der Gruppe (Z/(10), +).<br />

b) Bei den 9-stelligen Postgironummern wird ebenfalls ein Kontrollcode über<br />

(Z/(10), +) angewendet.<br />

c) Der bei der Numerierung der ehemaligen DM-Scheine verwendete Code war<br />

ein Kontrollcode über der Diedergruppe der Ordnung 10.<br />

d) Es sind auch Kontrollcodes über nichtassoziativen Quasigruppen untersucht<br />

worden, die bessere Eigenschaften bezüglich der Fehlererkennung haben als die<br />

über Gruppen definierten Kontrollcodes.<br />

e) Der ISIN-Code (International Securities Identification Number) ordnet jedem<br />

Wertpapier eine zwölfstellige Buchstaben-Zahlenkombination zu. So hat beispielsweise<br />

die Aktie der Deutschen Telekom die ISIN DE0007664005. Zunächst werden<br />

zwei Buchstaben als Länderkennung nach ISO 3166-1 angegeben, hier DE<br />

für Deutschland. Danach folgen 9 Ziffern für das Papier. Die letzte Ziffer ist<br />

eine Prüfziffer. Zu ihrer Berechnung werden die beiden Buchstaben der Länderkennung<br />

in eine vierstellige Zahl umgewandelt, indem <strong>zur</strong> jeweiligen Stelle im<br />

Alphabet 9 addiert wird, also gemäß A = 10, B = 11, . . . , Z = 35. Es entstehen<br />

die Ziffern c 1 c 2 . . . c 13 . Die ungeraden Stellen werden unverändert gelassen, die<br />

geraden Stellen durch die Abbildung π(z) = Quersumme(2z) permutiert. Dann<br />

wird die Prüfziffer c 14 durch die Kontrollgleichung<br />

π(c 1 ) + c 2 + π(c 3 ) + . . . + π(c 13 ) + c 14 = 0 mod 10<br />

berechnet. Dieser Kontrollcode erkennt einfache Fehler <strong>und</strong> Vertauschungen benachbarter<br />

Stellen, wenn es sich nicht um 09 <strong>und</strong> 90 handelt. In der Praxis werden<br />

diese Kombinationen aber nicht konsequent vermieden, z. B. bei der BMW-<br />

Stammaktie DE000519000.<br />

Der folgende Satz wurde 1964 von R. C. Singleton bewiesen.<br />

Satz 3.23 Es sei C ⊆ B n <strong>und</strong> |B| = q. Dann gilt für die Minimaldistanz d von<br />

C die Singleton-Schranke<br />

(26)<br />

d ≤ n − log q |C| + 1.<br />

Beweis: Im Fall d = 0, also |C| = 1, ist die Ungleichung jedenfalls erfüllt.<br />

Für d ≥ 1 betrachte die Projektion ϕ : B n → B n−d+1 gemäß ϕ(v 1 , . . . , v n ) =<br />

(v 1 , . . . , v n−d+1 ). Für c = (c 1 , . . . , c n ) ≠ (c ′ 1, . . . , c ′ n) = c ′ aus C gilt ϕ(c) ≠ ϕ(c ′ ),<br />

21


da sonst (c 1 , . . . , c n−d+1 ) = (c ′ 1, . . . , c ′ n−d+1) <strong>und</strong> damit d(c, c ′ ) < d = d(C) wäre.<br />

Also ist ϕ|C injektiv. Es folgt |C| = |ϕ(C)| ≤ |B n−d+1 | = q n−d+1 . Durch Logarithmieren<br />

folgt hieraus sofort die behauptete Ungleichung.<br />

⋄<br />

Definition 3.24 Blockcodes C mit d(C) = n − log q |C| + 1 heißen Maximum<br />

Distance Separable Codes, kurz MDS-Codes.<br />

Bemerkung 3.25 Wegen der Singleton-Schranke ist also stets A q (n, d) ≤ q n−d+1<br />

<strong>und</strong> für MDS-Codes wird diese obere Schranke auch erreicht. Es existiert aber<br />

keineswegs für jede Kombination der Parameter ein Blockcode C, der die Schranke<br />

auch mit Gleichheit erreicht.<br />

Die folgende Tabelle gibt für binäre Codes (q = 2) <strong>und</strong> kleine Werte von n <strong>und</strong> d<br />

(Wegen Folgerung 3.15 reicht es, ungerades d zu betrachten! Wegen Beispiel 3.6 b)<br />

besteht eine entsprechende Spalte für d = 1 gerade aus den Potenzen 2 n .) exakte<br />

Werte oder bekannte Abschätzungen für A 2 (n, d) an. Sie ist dem Buch “A First<br />

Course in Coding Theory” von Raymond Hill aus dem Jahr 1986 entnommen.<br />

Eine Aktualisierung könnte Thema einer Abschlußarbeit sein. Die Fälle, in denen<br />

die Singleton-Schranke erreicht wird, sind fett hervorgehoben.<br />

n d=3 d=5 d=7<br />

3 2 - -<br />

4 2 - -<br />

5 4 2 -<br />

6 8 2 -<br />

7 16 2 2<br />

8 20 4 2<br />

9 40 6 2<br />

10 72-79 12 2<br />

11 144-158 24 4<br />

12 256 32 4<br />

13 512 64 8<br />

14 1024 128 16<br />

15 2048 256 32<br />

16 2560-3276 256-340 36-37<br />

Definition 3.26 Es sei C ⊆ B n ein Blockcode. Ein Decodierschema δ von C<br />

bezüglich ∅ ≠ D ⊆ B n ist dann eine beliebige Abbildung δ : D → C. Dabei heißt<br />

B n \ D Decodierausfall von δ, <strong>und</strong> δ heißt vollständig, wenn D = B n gilt.<br />

22


Beispiel 3.27 Es sei B = {0, 1} <strong>und</strong> C = {00000, 11111} der binäre Wiederholungscode<br />

der Länge n = 5. Dann sind mögliche Decodierschemata gegeben<br />

durch D i = B i (00000) ∪ B i (11111) <strong>und</strong> δ i : D i → C mit δ i (v) = c für v ∈ B i (c)<br />

für i = 0, 1, 2. Dabei ist nur δ 2 vollständig.<br />

Aufgabe 3.28 Der nicht-triviale binäre Blockcode C der Länge n bestehe nur<br />

aus Vektoren, die eine gerade Anzahl von Einsen besitzen. Dann gilt d(C) ≥ 2.<br />

Aufgabe 3.29 Beweisen Sie A 2 (3, 2) = 4.<br />

Aufgabe 3.30 Zeigen Sie, daß man das Kontrollzeichen bei der ISBN10 auch<br />

gemäß<br />

c 10 = 1 · c 1 + 2 · c 2 + . . . + 9 · c 9 mod 11<br />

berechnen kann.<br />

Aufgabe 3.31 Obwohl die Singleton-Schranke eingehalten wird, gibt es keinen<br />

binären (7, 2 3 , 5)-Code.<br />

Aufgabe 3.32 Konstruieren Sie einen binären MDS-Code mit den Parametern<br />

(4, 8, 2).<br />

Aufgabe 3.33 Bestimmen Sie die Prüfziffer der ISBN13 978-3-7643-8611-?<br />

Aufgabe 3.34 Bestimmen Sie die Prüfziffer der ISIN der holländischen Elsevier-<br />

Aktie NL000034948?<br />

23


4 Lineare Codes<br />

In diesem Abschnitt ist das Alphabet B stets ein endlicher Körper K = F q gemäß<br />

Bemerkung 2.6 b). Auf dem K-Vektorraum K n sei durch<br />

(27)<br />

n∑<br />

v · w T = v i w i<br />

i=1<br />

eine symmetrische Bilinearform definiert, die aber nicht positiv definit, also kein<br />

Skalarprodukt ist. Für jeden Unterraum V von K n sei<br />

(28)<br />

V d = {w ∈ K n | v · w T = 0 für alle v ∈ V }<br />

der Orthogonalraum von V . Es gilt dann (V d ) d = V <strong>und</strong> dim(V ) + dim(V d ) = n.<br />

Es sei π ∈ S n eine Permutation. Durch<br />

(29)<br />

P π (v 1 , . . . , v n ) = (v π(1) , . . . , v π(n) )<br />

wird eine lineare Abbildung P π : K n → K n definiert. Bezüglich der kanonischen<br />

Basis entspricht ihr eine Permutationsmatrix P , d.h. eine Matrix, in der in jeder<br />

Zeile <strong>und</strong> in jeder Spalte genau eine 1 <strong>und</strong> sonst lauter Nullen stehen. Die Abbildung<br />

P π permutiert die Koordinaten von K n in der durch π vorgegebenen Weise.<br />

Die speziell durch π = (1 2 · · · n 1) gegebene lineare Abbildung z = P π heißt<br />

zyklische Verschiebung des K n .<br />

Definition 4.1 Ein Linearcode C ist ein Unterraum des K-Vektorraums K n für<br />

einen endlichen Körper K <strong>und</strong> n ∈ N. Ist k = dim(C) die Dimension von C <strong>und</strong><br />

d = d(C) die Minimaldistanz, so spricht man auch von einem [n, k, d]-Code oder<br />

[n, k]-Code. Ist C ein [n, k]-Code, so nennt man den [n, n − k]-Code C d den zu C<br />

dualen Code.<br />

Beispiel 4.2 a) C = K n ist stets ein [n, n, 1]-Linearcode.<br />

b) Der triviale Code C = {0} ⊂ K n ist stets ein [n, 0, 0]-Linearcode. Der duale<br />

Code ist C d = K n .<br />

c) Der q-näre Wiederholungscode C = {b | b ∈ K} ⊂ K n ist stets ein [n, 1, n]-<br />

Linearcode. Der duale Code ist C d = K n−1 , also der Erweiterungscode von K n−1 .<br />

24


Definition 4.3 a) Für v = (v 1 , . . . , v n ) ∈ K n sei<br />

(30)<br />

tr(v) = {i | v i ≠ 0}<br />

der Träger von v <strong>und</strong><br />

(31)<br />

wt(v) = d(v, 0) = |{i | v i ≠ 0}| = |tr(v)|<br />

das Gewicht von v.<br />

b) Für ∅ ≠ C ⊆ K n sei tr(C) = ⋃ c∈C tr(c) <strong>und</strong><br />

(32)<br />

wt(C) = min{wt(c) | 0 ≠ c ∈ C}<br />

heißt das Minimalgewicht von C ≠ {0}. Für C = {0} werde wt(C) = 0 gesetzt.<br />

Bemerkung 4.4 Ist C ⊆ K n Linearcode <strong>und</strong> |tr(C)| < n, so haben alle Codeworte<br />

c ∈ C an den Koordinatenstellen aus {1, . . . , n} \ tr(C) den Eintrag 0. Ein<br />

Weglassen dieser Koordinaten ändert daher an der Linearität von C ebensowenig<br />

wie an den Abständen zwischen den Codeworten. Man darf daher bei Bedarf für<br />

nicht-triviale Linearcodes |tr(C)| = n annehmen.<br />

Lemma 4.5 Für jeden Linearcode C gilt wt(C) = d(C).<br />

Beweis: Für den trivialen Linearcode C = {0} ist wt(C) = d(C) = 0. Wegen<br />

der Linearität von C ist für beliebige c, c ′ ∈ C auch die Differenz c − c ′ in C<br />

enthalten. Insbesondere liegt der Nullvektor c − c = 0 in C <strong>und</strong> daher läßt sich<br />

jeder Codevektor c ∈ C auch als Differenz c − 0 = c von Codevektoren schreiben.<br />

Damit gilt für beliebige c ≠ c ′ aus C wegen der Translationsinvarianz (14) der<br />

Hamming-Distanz d(c, c ′ ) = d(c − c ′ , 0) = wt(c − c ′ ) = wt(c ′′ ) mit c ′′ = c − c ′ ≠ 0.<br />

Bildet man auf beiden Seiten das Minimum, so erhält man die Behauptung. ⋄<br />

Definition 4.6 Es sei C ein [n, k]-Code über K.<br />

a) Ist k > 0, so heißt eine k × n-Matrix G über K eine Erzeugermatrix oder<br />

Generatormatrix für C, falls<br />

(33)<br />

K k G = {(v 1 , . . . , v k ) · G | v i ∈ K} = C<br />

25


gilt, falls also die Zeilen von G eine Basis von C bilden. Im ausgearteten Fall<br />

C = {0} sei G = (0, . . . , 0) ∈ K n die Erzeugermatrix von C. Stets hat G den<br />

Rang k = dim(C).<br />

b) Ist k < n, so heißt eine (n − k) × n-Matrix H über K mit rang(H) = n − k<br />

eine Kontrollmatrix für C, falls<br />

(34)<br />

{v ∈ K n | H · v T = 0} = C<br />

gilt. Im ausgearteten Fall C = K n sei H = (0, . . . , 0) ∈ K n die Kontrollmatrix<br />

von C.<br />

Bemerkung 4.7 Ist C ein Linearcode <strong>und</strong> C d der dazu duale Code, so ist jede<br />

Generatormatrix von C eine Kontrollmatrix von C d <strong>und</strong> umgekehrt.<br />

Satz 4.8 Ist C nicht-trivialer [n, k]-Code über K <strong>und</strong> H eine Kontrollmatrix von<br />

C, so gilt<br />

wt(C) = min{r ∈ N | es gibt r linear abhängige Spalten von H}<br />

= max{r ∈ N | je r − 1 Spalten von H sind linear unabhängig}.<br />

Beweis: Seien h 1 , . . . , h n die Spalten von H. Wegen C ≠ {0} sind sie linear<br />

abhängig. Sei r minimal gewählt, so daß es r linear abhängige Spalten h i1 , . . . , h ir<br />

gibt. Unmittelbar klar ist dann, daß es maximal r −1 linear unabhängige Spalten<br />

von H gibt, so daß die zweite Gleichheit gilt. Weiterhin gibt es c i ∈ K für<br />

i = 1, . . . , n mit c i ≠ 0 genau für i ∈ {i 1 , . . . , i r } <strong>und</strong> ∑ n<br />

i=1 c i h i = 0. Daher liegt<br />

c = (c 1 , . . . , c n ) wegen H · c T = 0 in C. Wegen wt(c) = r folgt wt(C) ≤ r.<br />

Angenommen, es gäbe ein c ′ ∈ C mit wt(c ′ ) = r ′ < r. Dann würde H · c ′T = 0<br />

die Existenz von r ′ < r linear abhängigen Spalten liefern, im Widerspruch <strong>zur</strong><br />

minimalen Wahl von r. Also gilt sogar wt(C) = r <strong>und</strong> damit auch die erste<br />

Gleichheit.<br />

⋄<br />

Definition 4.9 Zwei [n, k]-Linearcodes C <strong>und</strong> C ′ heißen äquivalent, wenn es eine<br />

Permutation π ∈ S n mit C ′ = P π (C) gibt. Ein [n, k]-Linearcode heißt systematisch,<br />

wenn er eine Generatormatrix G der Form<br />

(35)<br />

G = (E k | G ′ )<br />

besitzt, wobei E k die k×k-Einheitsmatrix <strong>und</strong> G ′ eine beliebige k×(n−k)-Matrix<br />

ist.<br />

26


Lemma 4.10 a) Zu jedem Linearcode existiert ein äquivalenter systematischer<br />

Linearcode.<br />

b) Ist C systematischer Linearcode mit einer Generatormatrix gemäß (35), dann<br />

ist<br />

(36)<br />

H = (−G ′T | E n−k )<br />

eine Kontrollmatrix von C.<br />

Beweis: a) Mit dem Gauß-Algorithmus läßt sich eine beliebige Generatormatrix<br />

von C in die Gestalt (35) bringen. Die dabei notwendigen Spaltenvertauschungen<br />

bestimmen die Permutation π.<br />

b) Multipliziert man die i-te Zeile von H mit der j-ten Spalte von G T , so ergibt<br />

sich<br />

(−g 1,i , . . . , −g k,i , 0 . . . , 1, . . . , 0)(0, . . . , 1, . . . , 0, g j,k+1 , . . . , g j,n ) = −g j,i + g j,i = 0.<br />

Also ist H Kontrollmatrix von C.<br />

⋄<br />

Bemerkung 4.11 a) Ist C systematischer [n, k]-Linearcode, so nennt man die<br />

ersten k Stellen jedes Codevektors auch Informationsstellen <strong>und</strong> die letzten n −<br />

k Stellen Kontrollstellen (vgl. Definition 3.16). Die Informationsrate von C ist<br />

gerade k n .<br />

b) Ist C ein [n, k]-Linearcode mit Generatormatrix G, dann wird durch (vgl. (33))<br />

γ(v) = v · G für alle v ∈ K k<br />

eine injektive lineare Abbildung γ : K k → K n mit γ(K k ) = C definiert. Also ist<br />

dann γ eine (lineare) Codierung für den Code C. Im allgemeinen gibt es daher<br />

(abhängig von G) verschiedene Codierungen für denselben Code.<br />

Beispiel 4.12 Für k ≥ 2 sei P k−1 = {〈v〉 | 0 ≠ v = (v 1 , . . . , v k ) T , v i ∈ K}<br />

die Menge aller eindimensionalen Unterräume von K k , der projektive Raum der<br />

Dimension k − 1 über K. Weiterhin sei n = (q k − 1)/(q − 1) = |P k−1 | <strong>und</strong><br />

P k−1 = {〈h 1 〉, . . . , 〈h n 〉}. Definiert man H = (h 1 , . . . , h n ) als Kontrollmatrix eines<br />

Linearcodes C, dann nennt man C einen Hamming-Code. Da H den Rang k hat,<br />

gilt dim(C) = n−k. Da ferner je zwei Spalten von H linear unabhängig sind, aber<br />

auch drei linear abhängige Spalten existieren, gilt d(C) = 3 nach Satz 4.8. Also<br />

ist C ein [n, n − k, 3]-Code. Da außerdem die Kugelpackungsgleichung erfüllt ist,<br />

27


ist C perfekt. Dieser Hamming-Code wird auch mit Ham q (k) bezeichnet. Der zu<br />

Ham q (k) duale Code, der also H als Generatormatrix besitzt, heißt Simplex-Code<br />

Sim q (k). Man kann zeigen, daß es sich um einen (n, k, q k−1 )-Code handelt.<br />

Wählt man etwa im binären Fall, also bei q = 2 den Parameter k = 3, so wird<br />

n = 23 −1<br />

= 7 <strong>und</strong> die 7 eindimensionalen Unterräume von 2−1<br />

K3 werden erzeugt<br />

von den Vektoren 001, 010, 100, 011, 101, 110, 111. Also ist<br />

⎛<br />

⎞<br />

1 1 1 0 1 0 0<br />

⎜<br />

⎟<br />

H = ⎝ 1 1 0 1 0 1 0 ⎠<br />

1 0 1 1 0 0 1<br />

Kontrollmatrix des Hamming-Codes C = Ham 2 (3). Offensichtlich sind je zwei<br />

Spalten von H linear unabhängig, aber es gibt auch drei Spalten, die linear<br />

abhängig sind. Daher ist die Minimaldistanz tatsächlich d(C) = 3. Nach Lemma<br />

3.14 hat der Erweiterungscode C die Minimaldistanz 4.<br />

Wählt man dagegen K = Z/(3) = {0, 1, 2}, also mit q = 3 den ternären Fall,<br />

sowie k = 2, so wird n = 8/2 = 4 <strong>und</strong> die vier eindimensionalen Unterräume von<br />

K 2 lassen sich von den Vektoren 01, 10, 11 <strong>und</strong> 12 erzeugen. Also ist<br />

H =<br />

( 1 1 1<br />

) 0<br />

2 1 0 1<br />

Kontrollmatrix des Hamming-Codes C = Ham 3 (2). Eine Generatormatrix von<br />

C ist daher<br />

( )<br />

1 0 2 1<br />

G =<br />

.<br />

0 1 2 2<br />

<strong>und</strong> man erhält C = {0000, 1021, 2012, 0122, 0211, 1110, 2220, 1202, 2101}.<br />

Ist C ⊆ K n ein Linearcode, dann existiert der Quotientenraum V = K n /C,<br />

dessen Elemente die Restklassen v modulo C von v ∈ K n sind, d.h. es ist v =<br />

{v + c | c ∈ C}.<br />

Lemma 4.13 Ist C ein [n, k]-Linearcode über K <strong>und</strong> H eine Kontrollmatrix von<br />

C, dann gilt für alle v, v ′ ∈ K n<br />

(37)<br />

v = v ′ ⇐⇒ v · H T = v ′ · H T .<br />

Beweis: Es ist v = v ′ gleichwertig zu v−v ′ ∈ C <strong>und</strong> dies wiederum nach Definiton<br />

der Kontrollmatrix zu (v − v ′ ) · H T = 0, also zu v · H T − v ′ · H T = 0. ⋄<br />

28


Definition 4.14 Es sei H Kontrollmatrix eines [n, k]-Linearcodes C. Für v ∈ K n<br />

heißt S H (v) = v · H T das Syndrom von v bezüglich H.<br />

Definition 4.15 Es sei C ein [n, k]-Code über K mit der Kontrollmatrix H.<br />

Weiterhin sei in jeder Restklasse v ein Restklassenführer f v mit<br />

wt(f v ) = min{wt(v + c) | c ∈ C}<br />

gewählt. Bei der Syndrom-Decodierung wird zu einem empfangenen Wort c ′ das<br />

Syndrom v = c ′ · H T berechnet <strong>und</strong> δ(c ′ ) = c ′ − f v gesetzt.<br />

Bemerkung 4.16 a) Der Restklassenführer ist nicht immer eindeutig bestimmt.<br />

Es gibt daher i. a. verschiedene Möglichkeiten der Decodierung.<br />

b) Es ist stets δ(c ′ ) ∈ C <strong>und</strong> das Decodierschema ist vollständig.<br />

Beispiel 4.17 Es sei B = K = Z/(2) der zweielementige Körper <strong>und</strong> der [4, 2]-<br />

Linearcode C ⊂ K 4 sei gegeben durch die Generatormatrix<br />

( ) 1100<br />

G = .<br />

0011<br />

Wegen G · G T = O ist G auch Kontrollmatrix von C = C d , d. h. C ist selbstdual.<br />

Eine Restklasse von K 4 /C ist immer gegeben durch C selbst, in diesem Fall<br />

also durch C 0 = C = {0000, 1100, 0011, 1111}. Hieran kann man auch sofort die<br />

Minimaldistanz d(C) = 2 ablesen. Der eindeutig bestimmte Restklassenführer<br />

in C 0 ist stets der Nullvektor v 0 = 0 = 0000. Zur Bestimmung der nächsten<br />

Restklasse C 1 wählt man einen Vektor aus K 4 \ C 0 mit minimalem Gewicht,<br />

hier also einen der Einheitsvektoren, willkürlich aus. Für v 1 = 0001 erhält man<br />

so C 1 = {0001, 0010, 1101, 1110}. Analog bestimmt man die nächste Restklasse<br />

C 2 durch Auswahl eines Restklassenführers c 2 ∈ K 4 \ (C 0 ∪ C 1 ) mit minimalem<br />

Gewicht. Wiederum kann man einen der beiden verbliebenen Einheitsvektoren<br />

frei wählen. Für c 2 = 0100 erhält man so C 2 = {0100, 0111, 1000, 1011}. Die<br />

noch übrigen vier Vektoren bilden dann die vierte <strong>und</strong> letzte Nebenklasse C 3 =<br />

{0101, 0110, 1001, 1010}. Da alle das Gewicht 2 haben, kann man einen beliebigen<br />

von ihnen als Restklassenführer wählen, beispielsweise c 3 = 0101.<br />

Durch Multiplikation mit der Kontrollmatrix H = G erhält man die Syndrome<br />

s H (c 0 ) = 00, s H (c 1 ) = 01, s H (c 2 ) = 10 <strong>und</strong> s H (c 3 ) = 11.<br />

Empfängt man nun beispielsweise das Wort c ′ = 1001, so berechnet man v =<br />

s H (c ′ ) = c ′ · H T = 11 ≠ 00, woran man erkennt, daß ein Übertragungsfehler<br />

vorliegt. Man korrigiert ihn zu c = c ′ − c 3 = 1001 − 0101 = 1100 ∈ C. Bei Wahl<br />

von 0110 als Restklassenführer von C 3 hätte man dagegen zu 1111 korrigiert.<br />

29


Beispiel 4.18 Es seien K ein Körper mit q Elementen <strong>und</strong> d, n ∈ N mit 2 ≤<br />

d ≤ n ≤ q. Weiterhin sei a = (a 1 , . . . , a n ) ∈ K n mit paarweise verschiedenen a i<br />

<strong>und</strong> v = (v 1 , . . . , v n ) ∈ K n mit v i ≠ 0 für alle i. Die (d − 1) × n-Matrix H werde<br />

definiert durch<br />

⎛<br />

⎞<br />

v 1 . . . v n<br />

a 1 v 1 . . . a n v n<br />

H =<br />

a 2 1v 1 . . . a 2 nv n<br />

.<br />

⎜<br />

⎟<br />

⎝ . . . ⎠<br />

a d−2<br />

1 v 1 . . . a d−2<br />

n v n<br />

Der verallgemeinerte Reed-Solomon-Code GRS d (a, v) ist dann<br />

GRS d (a, v) = {c ∈ K n | H · c T = 0}.<br />

Ist α ∈ K ein primitives Element, d. h. gilt K \ {0} = {1, α, α 2 , . . . , α q−2 }, <strong>und</strong><br />

setzt man a = v = (1, α, . . . , α q−2 ), so nennt man den Code GRS d (a, v) einen<br />

Reed-Solomon-Code kurz: RS-Code (Irving Stoy Reed, Gustave Solomon 1960).<br />

Bemerkung 4.19 a) Es ist GRS d (a, v) ein [n, n − d + 1, d]-Code <strong>und</strong> damit ein<br />

MDS-Code.<br />

b) Ein [255, 251, 5]-Reed-Solomon-Code über K = F 8 ist Ausgangspunkt für die<br />

Konstruktion der Codierung, mit der Daten auf den gängigen Compact Discs<br />

dargestellt werden. Bei der konkreten Konstruktion werden noch die Techniken<br />

der Codeverkürzung <strong>und</strong> Codeverschachtelung benutzt:<br />

Definition 4.20 Es seien n ≥ 2, C ein [n, k]-Code über K <strong>und</strong> i ∈ {1, . . . , n}.<br />

Dann heißt<br />

(38)<br />

Č = Či = {(c 1 , . . . , c i−1 , c i+1 , . . . , c n ) | (c 1 , . . . , c i−1 , 0, c i+1 , . . . , c n ) ∈ C}<br />

Verkürzung von C an der Stelle i <strong>und</strong><br />

(39)<br />

C ∗ = C ∗ i = {(c 1 , . . . , c i−1 , c i+1 , . . . , c n ) | (c 1 , . . . , c i−1 , c i , c i+1 , . . . , c n ) ∈ C}<br />

Punktierung von C an der Stelle i.<br />

Definition 4.21 Es sei C ein [n, k, d]-Code <strong>und</strong> t ∈ N. Dann heißt der [tn, tk, d]-<br />

Code<br />

C(t) = {(c 11 , . . . , c t1 , . . . , c 1n , . . . , c tn ) | (c i1 , . . . , c in ) ∈ C, i = 1, . . . , t}<br />

die Codeverschachtelung von C <strong>zur</strong> Tiefe t.<br />

30


Bemerkung 4.22 Die Codeworte aus C(t) sind die spaltenweise gelesenen Einträge<br />

der Matrizen<br />

⎛<br />

⎞<br />

c 11 . . . c 1n<br />

⎜<br />

⎟<br />

⎝ . . . ⎠ .<br />

c t1 . . . c tn<br />

Kann C Fehlerbündel der Länge l korrigieren, so kann C(t) Fehlerbündel der<br />

Länge tl korrigieren. Man beachte aber, daß C <strong>und</strong> C(t) dieselbe Minimaldistanz<br />

haben.<br />

Definition 4.23 Ein Vektor v = (0, . . . , 0, v i , . . . , v i+l−1 , 0, . . . , 0) ∈ K n mit v i ≠<br />

0 ≠ v i+l−1 heißt (Fehler-)Bündel der Länge l.<br />

Lemma 4.24 Es sei C i ein [n, k i , d i ]-Code über K für i = 1, 2. Dann ist<br />

(40)<br />

C = C 1 ∞C 2 = {(c 1 , c 1 + c 2 ) | c i ∈ C i } ⊆ K 2n<br />

ein [2n, k 1 + k 2 , min{2d 1 , d 2 }]-Code über K.<br />

Beweis: Die Abbildung ϕ : C 1 ⊕ C 2 → C gemäß ϕ((c 1 , c 2 )) = (c 1 , c 1 + c 2 ) ist<br />

offensichtlich surjektiv, injektiv <strong>und</strong> linear. Also gilt dim(C) = dim(ϕ(C 1 ⊕C 2 )) =<br />

dim(C 1 ⊕ C 2 ) = k 1 + k 2 . Ist C = {0} trivial, so muß offensichtlich dasselbe für<br />

C 1 <strong>und</strong> C 2 gelten. Also hat man d(C) = 0 = min{2d 1 , d 2 }.<br />

Sei also C ≠ {0} <strong>und</strong> 0 ≠ c = (c 1 , c 1 + c 2 ) ∈ C. Für c 2 = 0 gilt wegen c 1 ≠ 0<br />

dann wt(c) = 2wt(c 1 ) ≥ 2d 1 . Für c 2 ≠ 0 folgt wegen wt(c 1 ) ≥ |T r(c 1 ) ∩ T r(c 2 )|<br />

wt(c) = wt(c 1 ) + wt(c 1 + c 2 )<br />

≥ wt(c 1 ) + wt(c 1 ) + wt(c 2 ) − 2|T r(c 1 ) ∩ T r(c 2 )|<br />

≥ wt(c 2 ) ≥ d 2 .<br />

Insgesamt folgt d(C) ≥ min{2d 1 , d 2 }. Für c 1 = 0 <strong>und</strong> c 2 ∈ C 2 mit minimalem<br />

Gewicht oder c 1 ∈ C 1 mit minimalem Gewicht <strong>und</strong> c 2 = 0 wird dieses Minimum<br />

aber auch erreicht.<br />

⋄<br />

Die in (40) beschriebene Konstruktion geht auf M. Plotkin (1960) <strong>zur</strong>ück.<br />

31


Beispiel 4.25 Es sei K = {0, 1} <strong>und</strong> r, m ∈ N 0 mit 0 ≤ r ≤ m. Die binären<br />

Reed-Muller-Codes RM(r, m) werden rekursiv definiert. Sie wurden 1954 von D.<br />

E. Muller <strong>und</strong> Irving Stoy Reed unabhängig voneinander beschrieben. Es sei<br />

RM(0, m) der binäre Wiederholungscode der Länge 2 m , also ein [2 m , 1, 2 m ]-Code,<br />

RM(m, m) = K 2m <strong>und</strong><br />

RM(r, m) = RM(r, m − 1)∞RM(r − 1, m − 1)<br />

für m = 1, 2, . . . <strong>und</strong> jeweils 1 ≤ r ≤ m − 1. Der Reed-Muller-Code r-ter Ordnung<br />

RM(r, m) ist ein [2 m , ∑ ( )<br />

r m<br />

i=0 i , 2 m−r ]-Code. Der [32, 6, 16]-Code RM(1, 5) wurde<br />

bei den Mariner-Marssonden 1969 bis 1976 <strong>zur</strong> Bildübertragung benutzt. Es<br />

konnten bis zu 7 Fehler pro Codewort korrigiert werden. Die 2 6 = 64 Codeworte<br />

entsprachen den verschiedenen Helligkeiten der Bildpunkte.<br />

Es ist also<br />

RM(1, 5) = RM(1, 4)∞RM(0, 4)<br />

= ((RM(1, 3)∞RM(0, 3))∞RM(0, 4)<br />

= (((RM(1, 2)∞RM(0, 2))∞RM(0, 3))∞RM(0, 4)<br />

= (((RM(1, 1)∞RM(0, 1))∞RM(0, 2))∞RM(0, 3))∞RM(0, 4).<br />

Hierin sind speziell RM(1, 1) = K 2 = {00, 01, 10, 11} <strong>und</strong> RM(0, 1) = {00, 11},<br />

woraus sich RM(1, 2) = {0000, 0011, 0101, 0110, 1010, 1001, 1111, 1100} ergibt.<br />

Also besteht RM(1, 2) genau aus allen binären Vektoren der Länge 4 mit geradem<br />

Gewicht. Er kann also auch als Erweiterungscode von C = K 3 aufgefaßt werden.<br />

Der nächste Konstruktionsschritt ergibt dann wegen RM(0, 3) = {0000, 1111}<br />

den Code<br />

RM(1, 3) = {00000000, 00001111, 00110011, 00111100,<br />

01010101, 01011010, 01100110, 01101001,<br />

10101010, 10100101, 10011001, 10010110,<br />

11111111, 11110000, 11001100, 11000011}.<br />

Dieser besitzt bereits die Minimaldistanz 4 <strong>und</strong> kann ebenso wie der [7, 4, 3]-<br />

Hammingcode, der allerdings eine Stelle kürzer ist, einfache Fehler korrigieren.<br />

Satz 4.26 (Griesmer-Schranke) Existiert ein [n, k, d]-Code über K, so gilt<br />

(41)<br />

n ≥<br />

k−1 ∑<br />

i=0<br />

⌈ d<br />

q i ⌉<br />

.<br />

32


Beweis: Der Beweis erfolgt durch Induktion nach k.<br />

Für k = 0 <strong>und</strong> k = 1 besagt (41) gerade n ≥ 0 bzw. n ≥ d, was jeweils richtig ist.<br />

Sei k ≥ 2 <strong>und</strong> G eine Generatormatrix eines [n, k, d]-Codes C, wobei die erste<br />

Zeile von G einen Codevektor c ≠ 0 von minimalem Gewicht d enthalte. Durch<br />

Übergang zu einem äquivalenten Linearcode darf<br />

G =<br />

( z<br />

G 1 G 2<br />

)<br />

mit z = (1, . . . , 1, 0, . . . , 0), G 1 ∈ M k−1,d (K) <strong>und</strong> G 2 ∈ M k−1,n−d (K) angenommen<br />

werden, wobei z genau in den ersten d Koordinaten Einsen enthält. Zeige nun,<br />

daß G 2 den Rang k − 1 hat.<br />

Wäre dies nicht der Fall, so könnte man durch Zeilenumformungen die erste Zeile<br />

von G 2 zu einer Nullzeile machen <strong>und</strong> in der ersten Zeile von G 1 müßten alle<br />

Elemente von 0 verschieden sein, wegen des minimalen Gewichtes d von z. Dann<br />

könnte man aber aus den ersten beiden Zeilen von G durch Subtraktion ein von<br />

0 verschiedenes Codewort bilden, das ein Gewicht kleiner als d = d(C) hat, was<br />

unmöglich ist. Also erzeugt G 2 einen [n − d, k − 1, d 2 ]-Code C 2 .<br />

Sei (u|v) mit u = (u 1 , . . . , u d ) eine beliebige Zeile von (G 1 |G 2 ). Für jedes b ∈ K<br />

sei n b = |{i | u i = b}| <strong>und</strong> dann n a = max{n b | b ∈ K} für ein a ∈ K. Dann gilt<br />

n a ≥ ⌈ d q ⌉.<br />

Aus 0 ≠ (u|v) − az ∈ C <strong>und</strong> daher wt((u|v) − az) ≥ d folgt wt(v) ≥ ⌈ d ⌉. Durch<br />

q<br />

elementare Zeilenumformungen von (G 1 |G 2 ) kann man dies für jedes v = v 2 ∈ C 2<br />

erreichen.<br />

Nach Induktionsvoraussetzung gilt<br />

k−2 ∑<br />

n − d ≥ ⌈ d k−2<br />

q ⌉ ≥ ∑<br />

⌈ d k−1<br />

i q ⌉ = ∑<br />

⌈ d i+1 q ⌉, i<br />

i=0<br />

i=0<br />

i=1<br />

also<br />

k−1 ∑<br />

n ≥ ⌈ d k−1<br />

q ⌉ + ⌈d⌉ = ∑<br />

⌈ d i q ⌉. i<br />

i=1<br />

i=0<br />

⋄<br />

Folgerung 4.27 Die binären Reed-Muller-Codes RM(1, m) erster Ordnung erreichen<br />

die Griesmer-Schranke.<br />

33


Beweis: Für die binären Codes RM(1, m) lauten die Parameter q = 2, n =<br />

2 m , k = m + 1 <strong>und</strong> d = 2 m−1 . Also gilt<br />

m∑<br />

2 m ≥ ⌈ 2m−1<br />

⌉ = 2 m−1 + . . . + 2 + 1 + 1 = 2 m ,<br />

i=0<br />

2 i<br />

also tatsächlich die Gleichheit.<br />

⋄<br />

Satz 4.28 (Gilbert-Varshamov-Schranke) Es sei K ein Körper mit q Elementen.<br />

Ferner seien n, k, d ∈ N mit k ≤ n <strong>und</strong><br />

(42)<br />

d−2<br />

q n−k ∑<br />

( ) n − 1<br />

><br />

(q − 1) i .<br />

i<br />

i=0<br />

Dann gibt es einen [n, k, d ′ ]-Code mit d ′ ≥ d.<br />

Beweis: Für k = n ist q n−k = q 0 = 1 <strong>und</strong> die Summe auf der rechten Seite<br />

von (42) muß 0 sein, was nur für d = 1 möglich ist. Dann ist aber C = K n mit<br />

d ′ = d = 1 ein Linearcode der behaupteten Art.<br />

Sei also k < n <strong>und</strong> V = K n−k sowie v 1 , . . . , v n−k Basis von V . Weiterhin seien<br />

v n−k+1 , . . . , v n−k+s ∈ V, (s ≥ 0) so gewählt, daß je d − 1 Vektoren aus V s =<br />

{v 1 , . . . , v n−k , v n−k+1 , . . . , v n−k+s } linear unabhängig sind. Die Anzahl der Vektoren,<br />

die sich als Linearkombinationen von höchstens d − 2 Vektoren aus V s<br />

darstellen lassen, ist kleiner oder gleich<br />

d−2 ∑<br />

i=0<br />

( ) n − k + s<br />

(q − 1) i .<br />

i<br />

Dabei beschreibt der Binomialkoeffizient alle möglichen Wahlen von jeweils i<br />

Vektoren aus V s <strong>und</strong> die Potenz von q −1 alle Möglichkeiten, i von 0 verschiedene<br />

Koeffizienten vor diese Vektoren zu setzen. Ist diese Summe nun echt kleiner als<br />

q n−k , so existiert ein v n−k+s+1 ∈ V \ V s , so daß je d − 1 Vektoren aus V s+1 =<br />

V s ∪ {v n−k+s+1 } linear unabhängig sind <strong>und</strong> sich folglich die Menge V s noch um<br />

einen Vektor vergrößern läßt. Daher besagt (42) gerade, daß sich s bis s = k<br />

vergrößern läßt. Also existiert eine Menge V k = {v 1 , . . . , v n } für die je d − 1 ihrer<br />

Vektoren linear unanbhängig sind. Schreibt man diese Vektoren als Spalten einer<br />

Matrix H, so ist diese eine (n − k) × n-Matrix <strong>und</strong> nach Satz 4.8 Kontrollmatrix<br />

eines [n, k, d ′ ]-Linearcodes mit d ′ ≥ d.<br />

⋄<br />

Aufgabe 4.29 Bestimmen Sie Generatorenmatrizen <strong>und</strong> Kontrollmatrizen zu<br />

den in Beispiel 4.2 erwähnten Codes.<br />

34


Aufgabe 4.30 Ermitteln Sie die Anzahl aller binären [n, k]-Codes für n ≤ 4.<br />

(Hinweis: Bestimmen Sie für k = 0, 1, . . . , n jeweils alle k-dimensionalen Unterräume<br />

von {0, 1} n indem Sie mögliche Basisvektoren auswählen.) Geben Sie<br />

aus jeder Klasse untereinander äquivalenter Codes jeweils einen an.<br />

35


5 Zyklische Codes<br />

Auch in diesem Abschnitt sei B = K = F q ein endlicher Körper. Mit K[x] werde<br />

der Polynomring über K bezeichnet <strong>und</strong> für n ∈ N sei<br />

n−1 ∑<br />

V n = { a ν x ν | a ν ∈ K} ⊂ K[x]<br />

ν=0<br />

definiert. Dann bildet V n einen n-dimensionalen Vektorraum, der vermöge der<br />

Isomorphie<br />

(a n−1 , . . . , a 0 ) ↦→<br />

n−1 ∑<br />

ν=0<br />

a ν x ν<br />

mit K n identifiziert werden kann. Ist p(x) ∈ K[x] ein Polynom vom Grad n über<br />

K, so existiert für f(x), g(x) ∈ V n die Division mit Rest gemäß f(x) · g(x) =<br />

q(x) · p(x) + r(x) <strong>und</strong> der eindeutig bestimmte Rest r(x) liegt in V n . Man kann<br />

daher auf V n eine Multiplikation erklären gemäß<br />

(43)<br />

f(x) ∗ g(x) = r(x).<br />

Dann wird (V n , +, ∗) eine K-Algebra, also insbesondere ein kommutativer Ring<br />

mit Einselement. Dieser Ring ist isomorph zum Restklassenring K[x]/(p(x)) von<br />

K[x] nach dem von p(x) erzeugten Hauptideal <strong>und</strong> damit selbst ein Hauptidealring.<br />

Genau dann ist (V n , +, ∗) ein Körper, wenn p(x) irreduzibel in K[x] ist, wenn<br />

also jeder Teiler von p(x) entweder ein konstantes Polynom oder ein Polynom vom<br />

Grad n ist.<br />

Im folgenden sei ∗ die durch p(x) = x n −1 definierte Multiplikation auf K n = V n .<br />

Definition 5.1 Ein [n, k]-Linearcode C heißt zyklisch genau dann, wenn z(C) =<br />

C für die zyklische Verschiebung z : K n → K n gilt.<br />

Beispiel 5.2 Der triviale Code C = {0} <strong>und</strong> der Code C = K n sind zyklische<br />

Codes. Ebenso ist der q-näre Wiederholungscode ein zyklischer Code.<br />

Satz 5.3 a) Ein [n, k]-Linearcode ist genau dann zyklisch, wenn z m (c) ∈ C für<br />

alle c ∈ C <strong>und</strong> m ∈ N gilt.<br />

b) Der Durchschnitt zyklischer Linearcodes der gleichen Länge n ist wieder zyklisch.<br />

36


c) Für alle v ∈ K n <strong>und</strong> alle m ∈ N gilt z m (v) = x m ∗ v.<br />

d) Ist C zyklischer [n, k]-Linearcode, so ist C Ideal von (V n , +, ∗).<br />

e) ∅ ≠ C ⊆ K n ist genau dann zyklischer Linearcode, wenn C Ideal von (V n , +, ∗)<br />

ist.<br />

Beweis: a) Sei C zyklischer Code. Für c ∈ C gilt dann z(c) ∈ z(C) = C, also<br />

die Behauptung für m = 1. Gelte die Behauptung also für ein m ∈ N. Dann folgt<br />

z m+1 (c) = z(z m (c)) ∈ z(C) = C. Also gilt z m (c) ∈ C für alle c ∈ C <strong>und</strong> m ∈ N.<br />

Umgekehrt folgt hieraus für m = 1 sofort z(C) ⊆ C, d. h. z(C) ist Unterraum von<br />

C. Da die zyklische Verschiebung aber injektiv ist, haben beide Räume dieselbe<br />

Dimension, woraus dann z(C) = C folgt.<br />

b) Der Durchschnitt beliebiger Unterräume von K n ist wieder ein Unterraum.<br />

Der Durchschnitt zyklischer Unterräume ist wegen a) aber wieder zyklisch.<br />

c) Es sei v = (v n−1 , . . . , v 0 ) = v(x) = v n−1 x n−1 + . . . + v 1 x + v 0 ∈ K n = V n . Dann<br />

gilt z(v) = (v n−2 , . . . , v 0 , v n−1 ) <strong>und</strong> x ∗ v(x) = v n−1 x n + v n−2 x n−1 + . . . + v 0 x =<br />

v n−1 x n − v n−1 + v n−2 x n−1 + . . . + v 0 x + v n−1 = v n−2 x n−1 + . . . + v 0 x + v n−1 modulo<br />

(x n − 1). Also sind z(v) <strong>und</strong> x ∗ v gleich. Der Rest folgt jetzt durch Induktion<br />

nach m.<br />

d) Da C Unterraum von K n ist, ist (C, +) Untergruppe von (K n , +) = (V n , +).<br />

Ist c ∈ C, so liegt x∗c wieder in C <strong>und</strong> damit x m ∗c für alle m ∈ N. Mit x m ∗c liegt<br />

dann aber auch a m x m ∗ c im Unterraum C für alle a m ∈ K. Da auch die Addition<br />

von endlich vielen Elementen aus C nicht aus diesem Unterraum herausführt, gilt<br />

f(x) ∗ c ∈ C für alle f(x) ∈ V n . Also ist C Ideal von (V n , +, ∗).<br />

e) Wegen d) ist nur zu zeigen, daß jedes Ideal C von (V n , +, ∗) zyklischer Linearcode<br />

ist. Dabei ist jedes solche Ideal offensichtlich bereits ein Unterraum, also ein<br />

Linearcode. Außerdem gilt x ∗ c ∈ C für jedes c ∈ C. Wegen z(c) = x ∗ c wie im<br />

Beweis von c) folgt z(c) ∈ C <strong>und</strong> damit nach a), daß C zylischer Code ist. ⋄<br />

Bemerkung 5.4 Über e) hinaus gilt sogar: C ist genau dann zyklischer Linearcode,<br />

wenn es ein g ∈ K n = V n mit g(x) | x n − 1 <strong>und</strong> C = g ∗ V n gibt, d. h. wenn<br />

C Hauptideal von (V n , +, ∗) ist. Ein derartiges g(x) ist durch die Forderung “g(x)<br />

normiert” eindeutig bestimmt. Dabei gehören zu den Extremfällen C = {0} <strong>und</strong><br />

C = K n aus Beispiel 5.2 gerade die trivialen Teiler g(x) = x n − 1 <strong>und</strong> g(x) = 1.<br />

Satz 5.5 Es seien n ∈ N, g(x) ∈ K[x] mit grad(g(x)) = m < n, g(x) | x n − 1<br />

<strong>und</strong> g(x) normiert.<br />

37


a) Ist g(x) = x m + g m−1 x m−1 + . . . + g 0 , dann wird durch<br />

(44)<br />

⎛<br />

x n−m−1 ⎞ ⎛<br />

⎞<br />

g(x) 1 g m−1 . . . g 1 g 0 0 . . . 0<br />

G =<br />

.<br />

⎜<br />

⎟<br />

⎝ xg(x)<br />

= 0 1 g m−1 . . . g 1 g 0 .<br />

⎜<br />

⎟<br />

⎠ ⎝ . 0 ⎠<br />

g(x) 0 . . . 0 1 g m−1 . . . g 1 g 0<br />

eine Generatormatrix eines [n, n − m]-Linearcodes C definiert.<br />

b) Ist C gemäß (44) gegeben, dann gilt für alle v = v(x) ∈ K n = V n<br />

(45)<br />

v ∈ C ⇐⇒ g(x) | v(x).<br />

c) Ist C gemäß (45) gegeben, dann ist C zyklischer [n, n − m]-Linearcode.<br />

Beweis: a) Offensichtlich ist G eine (n − m) × n-Matrix mit Rang(G) = n − m,<br />

also definiert G einen [n, n − m]-Linearcode C.<br />

b) Es ist v ∈ C genau dann, wenn v(x) Linearkombination der Zeilen von G ist,<br />

was offensichtlich gleichwertig zu v(x) = a(x)g(x) mit einem Polynom a(x) vom<br />

Grad höchstens n − m − 1 ist, wenn also g(x)|v(x) in V n gilt.<br />

c) Es bleibt zu zeigen, daß z(v(x)) ∈ C für alle v(x) ∈ C gilt. Sei also v =<br />

(v n−1 , . . . , v 0 ) ∈ K n mit g(x)|v(x) nach b). Dann folgt z(v(x)) = xv(x)−v n−1 x n +<br />

v n−1 = xv(x)−v n−1 (x n −1) <strong>und</strong> wegen g(x)|(x n −1) teilt g(x) beide Summanden.<br />

Also gilt g(x)|z(v(x)) <strong>und</strong> damit z(v(x)) ∈ C nach b).<br />

⋄<br />

Definition 5.6 Es sei n ∈ N, g(x) ∈ K[x] mit grad(g(x)) = m < n, g(x) | x n − 1<br />

<strong>und</strong> g(x) normiert. Dann heißt g(x) Generatorpolynom des gemäß (44) definierten<br />

zyklischen [n, n − m]-Linearcodes C.<br />

Bemerkung 5.7 a) Aus g(x) | x n −1 folgt g 0 ≠ 0 <strong>und</strong> es existiert ein h(x) ∈ K[x]<br />

mit g(x)h(x) = x n − 1, also ist auch h(x) Generatorpolynom eines zyklischen<br />

Codes.<br />

b) Aus (44) folgt sofort, daß ein zyklischer Code systematisch ist.<br />

c) Ist C zyklischer Linearcode, dann ist das gemäß Bemerkung 5.4 existierende,<br />

eindeutig bestimmte Polynom g(x) ∈ V n gerade Generatorpolynom von C.<br />

38


Definition 5.8 Sei g(x) ∈ K[x] Generatorpolynom von C ⊆ K n . Dann heißt<br />

h(x) ∈ K[x] mit g(x)h(x) = x n − 1 Kontrollpolynom von C.<br />

Satz 5.9 Ist h(x) ∈ K[x] Kontrollpolynom von C ⊆ K n , dann gilt<br />

(46)<br />

v ∈ C ⇐⇒ v ∗ h = 0,<br />

<strong>und</strong> mit grad(h(x)) = k = n − m, also h(x) = x k + h k−1 x k−1 + . . . + h 1 x + h 0 , ist<br />

(47)<br />

⎛<br />

⎞<br />

h 0 h 1 . . . h k−1 1 0 . . . 0<br />

H =<br />

0 h 0 h 1 . . . h k−1 1 .<br />

⎜<br />

⎟<br />

⎝ . 0 ⎠<br />

0 . . . 0 h 0 h 1 . . . h k−1 1<br />

Kontrollmatrix von C.<br />

Beweis: Ist v(x) ∈ C, dann existiert nach (45) ein f(x) ∈ K[x] mit v(x) =<br />

f(x)·g(x) = f(x)∗g(x), woraus v(x)∗h(x) = f(x)∗g(x)∗h(x) = f(x)∗(x n −1) = 0<br />

folgt.<br />

Umgekehrt ergibt sich aus v(x) ∗ h(x) = 0 sofort v(x) · h(x) = f(x) · (x n − 1) für<br />

ein f(x) ∈ K[x], also v(x) · h(x) = f(x) · g(x) · h(x) <strong>und</strong> daher v(x) = f(x) · g(x).<br />

Die Behauptung über H ist dann klar.<br />

⋄<br />

Bemerkung 5.10 Ist C ein zyklischer [n, k]-Linearcode mit Generatorpolynom<br />

g(x), dann wird durch<br />

γ((v k−1 , . . . , v 0 )) =<br />

( k−1<br />

) ∑<br />

v ν x ν g(x)<br />

ν=0<br />

eine injektive lineare Abbildung γ : K k → V n = K n mit γ(K k ) = C definiert. Also<br />

ist γ eine (lineare) Codierung für den Code C. Wird w = (w n−1 , . . . , w 0 ) ∈ K n<br />

mit w ∗ h ≠ 0 empfangen, so liegt ein Übertragungsfehler vor. Im anderen Fall<br />

liefert eine Division von w(x) durch g(x) das codierte Zeichen.<br />

Beispiel 5.11 Die Reed-Solomon-Codes sind zyklische Codes. Daher werden sie<br />

auch bei der Codierung von Audio-CDs eingesetzt, wo die Korrektur von Fehlerbündeln<br />

(Kratzern) sehr wichtig ist.<br />

39


Satz 5.12 Ist C zyklischer [n, k]-Linearcode, dann existiert ein Decodierschema<br />

δ : D → C, das jedes Fehlerbündel der Länge m mit 1 ≤ m ≤ n − k erkennt.<br />

Beweis: Sei e ∈ K n \ {0} ein solches Fehlerbündel <strong>und</strong> b ∈ K n = V n mit<br />

grad(b(x)) = m − 1 < n − k <strong>und</strong> e = z j (b) für ein j ∈ N. Da C Linearcode<br />

ist, genügt es, e ∉ C zu zeigen. Sei dazu g(x) Generatorpolynom von C, also<br />

grad(g(x)) = n−k. Wäre e ∈ C, dann auch b = z n−j (e) ∈ C. Dies ist aber wegen<br />

grad(b(x)) < grad(g(x)) unmöglich.<br />

⋄<br />

Beispiel 5.13 Für kleine n lassen sich alle binären zyklischen Linearcodes der<br />

Länge n systematisch bestimmen:<br />

Nach Beispiel 5.2 sind für jedes n stets {0} <strong>und</strong> K n sowie der Wiederholungscode<br />

der Länge n zyklisch. Für n = 1 <strong>und</strong> n = 2 sind dies auch sämtliche Linearcodes<br />

<strong>und</strong> damit sämtliche zyklischen Codes. Für n = 1 stimmen K 1 = K <strong>und</strong> der<br />

Wiederholungscode sogar noch überein.<br />

Für n = 3 erhält man alle weiteren zyklischen Codes durch ihre Generatorpolynome<br />

g(x), die Teiler von x 3 − 1 sind. Wegen x 3 − 1 = (x − 1)(x 2 + x + 1)<br />

kommen nur g(x) = x − 1 = x + 1 <strong>und</strong> das irreduzible Polynom h(x) = x 2 + x + 1<br />

in Frage. Dabei erzeugt g(x) den zyklischen Code C = {000, 011, 110, 101}, der<br />

Erweiterungscode von K 2 ist. Der von h(x) erzeugte hierzu duale Code ist gerade<br />

der Wiederholungscode.<br />

Für n = 4 zerlegt man entsprechend x 4 −1 in unzerlegbare Faktoren: x 4 −1 = (x 2 −<br />

1)(x 2 +1) = (x 2 −1) 2 = ((x−1)(x+1)) 2 = (x−1) 4 . Dies ergibt die Generatorpolynome<br />

g 1 (x) = x−1, g 2 (x) = (x−1) 2 <strong>und</strong> g 3 (x) = (x−1) 3 = x 3 +x 2 +x+1. Hierbei<br />

liefert g 1 (x) den Code C 1 = {0000, 0011, 0110, 1100, 1001, 1010, 0101, 1111} <strong>und</strong><br />

g 2 (x) den selbstdualen Code C 2 = {0000, 0101, 1010, 1111}, während g 3 (x) wieder<br />

den Wiederholungscode erzeugt, der zu C 1 dual ist.<br />

Beispiel 5.14 Seien K = Z/(2), n = 7 <strong>und</strong> g(x) = x 3 + x + 1 ∈ K[x]. Wegen<br />

(x 7 − 1) : g(x) = x 4 + x 2 + x + 1 wird durch g(x) ein zyklischer [7, 4]-Code<br />

C mit dem Kontrollpolynom h(x) = x 4 + x 2 + x + 1 definiert. Die zugehörige<br />

Generatormatrix ist<br />

⎛<br />

⎞<br />

1 0 1 1 0 0 0<br />

0 1 0 1 1 0 0<br />

G = ⎜<br />

⎟<br />

⎝ 0 0 1 0 1 1 0 ⎠ ,<br />

0 0 0 1 0 1 1<br />

die Kontrollmatrix entsprechend<br />

⎛<br />

⎞<br />

1 1 1 0 1 0 0<br />

⎜<br />

⎟<br />

H = ⎝ 0 1 1 1 0 1 0 ⎠ .<br />

0 0 1 1 1 0 1<br />

40


Da die Spalten von H alle 7 von 0 verschiedenen Vektoren des K 3 sind, handelt<br />

es sich bei C um einen Hamming-Code.<br />

Für die Permutation π = (12), also die Vertauschung der ersten beiden Koordinaten,<br />

erhält man den Linearode C ′ = π(C) mit der Generatormatrix<br />

⎛<br />

⎞<br />

0 1 1 1 0 0 0<br />

G ′ 1 0 0 1 1 0 0<br />

= ⎜<br />

⎟<br />

⎝ 0 0 1 0 1 1 0 ⎠ ,<br />

0 0 0 1 0 1 1<br />

der aber wegen z(0111000) = (1110000) ∉ C ′ nicht zyklisch ist. Natürlich ist aber<br />

auch C ′ ein Hamming-Code.<br />

Aufgabe 5.15 Ermitteln Sie alle binären zyklischen Linearcodes der Länge 5.<br />

Aufgabe 5.16 Zeigen Sie, daß es neben dem ternären Wiederholungscode der<br />

Länge 4 noch einen weiteren ternären zyklischen Linearcode C der Länge 4 mit<br />

|C| = 3 gibt.<br />

Aufgabe 5.17 Ermitteln Sie alle ternären zyklischen Linearcodes der Längen<br />

n = 3 <strong>und</strong> n = 4.<br />

Aufgabe 5.18 Für jeden Körper K mit |K| = q <strong>und</strong> jede Länge n ∈ N ist nach<br />

Beispiel 5.2 der q-näre Wiederholungscode C der Länge n zyklisch. Geben Sie<br />

das Generatorpolynom g(x) ∈ K[x] von C an.<br />

41


6 Kryptosysteme <strong>und</strong> perfekte Sicherheit<br />

Definition 6.1 Eine Kryptosystem (P(A), C(B), K, E, D) besteht aus<br />

• einer Menge P von Klartexten (plaintext) über einem Klartextalphabet A,<br />

• einer Menge C von Geheimtexten (ciphertext) über einem Geheimtextalphabet<br />

B,<br />

• einer Menge K von Schlüsseln (key), dem Schlüsselraum,<br />

• der Verschlüsselung oder Chiffrierung E, d. h. einer Familie von Abbildungen<br />

E K : P → C, K ∈ K,<br />

• der Entschlüsselung oder Dechiffrierung D, d. h. einer Familie von Abbildungen<br />

D K : C → P, K ∈ K,<br />

so daß für alle K ∈ K gilt<br />

D K ◦ E K = ι P .<br />

Die Zuordnungen von E K <strong>und</strong> D K zu K ∈ K stellen den Chiffrier- <strong>und</strong> den<br />

Dechiffrieralgorithmus dar.<br />

Bemerkung 6.2 a) Einige klassische Kryptosysteme gestatteten es, einem Klartext<br />

auch mehrere Geheimtexte zuzuordnen. Beispielsweise kann man für häufig<br />

vorkommende Buchstaben im Klartext mehrere verschiedene Verschlüsselungen<br />

durch Buchstaben im Geheimtext vorsehen, unter denen zufällig gewählt werden<br />

darf. Hierdurch kann man die Häufigkeiten der Buchstaben im Geheimtext gegenüber<br />

den Häufigkeiten der Buchstaben im Klartext verändern. Es handelt sich<br />

dann bei den E K nur um linkseindeutige Relationen.<br />

b) In der Kryptographie wird generell vorausgesetzt, daß die Chiffrier- <strong>und</strong> Dechiffrieralgorithmen<br />

allgemein bekannt sind. Die Geheimhaltung basiert einzig<br />

auf der Unkenntnis der verwendeten Schlüssel. Diese Sichtweise wurde durch den<br />

niederländischen Kryptanalytiker A. Kerckhoffs im 19. Jahrh<strong>und</strong>ert erstmals formuliert.<br />

c) Klassische Kryptosysteme sind symmetrisch, bei ihnen ist es leicht, aus E K<br />

die Umkehrabbildung D K zu berechnen. Bei asymmetrischen Systemen ist die<br />

Ermittlung von D K aus E K ohne geheime Zusatzinformation extrem schwierig.<br />

Man nennt derartige Funktionen E K Einwegfunktionen <strong>und</strong> die geheimen Zusatzinformationen<br />

Falltüren. Wird ein solches Verfahren benutzt, so kann der<br />

Empfänger einer Nachricht dem Sender einen Schlüssel K öffentlich mitteilen,<br />

42


mit dem dieser eine Nachricht verschlüsseln soll. Wenn nur der Empfänger die<br />

geheime Zusatzinformation besitzt, mit der er D K berechnen kann, ist einem Angreifer<br />

die Entschlüsselung trotzdem nicht möglich. Derartige Verfahren werden<br />

daher auch Kryptosysteme mit öffentlichem Schlüssel genannt.<br />

Beispiel 6.3 a) Translations-Kryptosysteme Es sei q eine natürliche Zahl<br />

<strong>und</strong> A = B = K = Z q . Für jeden Schlüssel K = b ∈ K sei E K (x) ≡ x + b mod q<br />

<strong>und</strong> D K (x) ≡ x − b mod q für alle x ∈ Z q .<br />

b) Affine Kryptosysteme Es sei q eine natürliche Zahl <strong>und</strong> A = B = Z q .<br />

Weiterhin sei K = {(a, b) ∈ Z 2 q | ggT(a, q) = 1} <strong>und</strong> für jeden Schlüssel K =<br />

(a, b) ∈ K sei E K (x) ≡ ax + b mod q <strong>und</strong> D K (x) ≡ a −1 (x − b) mod q für alle<br />

x ∈ Z q . Für a = 1 erhält man die Translations-Kryptosysteme als Spezialfall.<br />

c) Substitutions-Kryptosysteme Es sei q eine natürliche Zahl <strong>und</strong> A = B =<br />

Z q . Weiterhin sei K = S q die symmetrische Gruppe der Ordnung q <strong>und</strong> für jeden<br />

Schlüssel K = π ∈ K sei E K (x) = π(x) <strong>und</strong> D K (x) = π −1 (x) für alle x ∈ Z q .<br />

Jede (bijektive) affine Transformation in b) <strong>und</strong> damit erst recht jede Translation<br />

in a) liefert natürlich eine Permutaion von Z q . Daher ist jedes Affine Kryptosystem<br />

ein Substitutions-Kryptosystem. Weil für alle Buchstaben der Klartexte aus<br />

P dieselbe Verschlüsselungsfunktion verwendet wird, nennt man Substitutions-<br />

Kryptosysteme auch monoalphabetische Kryptosysteme.<br />

Definition 6.4 Ein Schlüssel K ∈ K eines Kryptosystems heißt involutorisch,<br />

wenn E K = D K gilt.<br />

Beispiel 6.5 a) In einem Translations-Kryptosystem existiert genau dann ein<br />

involutorischer Schlüssel, wenn q gerade ist, nämlich K = q/2.<br />

b) In einem affinen Kryptosystem sind stets K = (1, 0) <strong>und</strong> K = (−1, b) für<br />

alle b ∈ Z q involutorisch. Es kann weitere involutorische Schlüssel geben (vgl.<br />

Aufgabe 6.18).<br />

c) In einem Substitutions-Kryptosystem sind offensichtlich genau die Schlüssel<br />

K = π involutorisch, für die π = π −1 gilt.<br />

Beispiel 6.6 a) Vigenère-Kryptosysteme (Blaise de Vigenère, 1525 - 1596)<br />

Es seien m <strong>und</strong> q natürliche Zahlen <strong>und</strong> A = B = (Z q ) m = K.<br />

Für K = (k 1 , . . . , k m ) ∈ K sei E K (x 1 , . . . , x m ) ≡ (x 1 + k 1 , . . . , x m + k m ) mod q<br />

<strong>und</strong> D K (x 1 , . . . , x m ) ≡ (x 1 −k 1 , . . . , x m −k m ) mod q für alle (x 1 , . . . , x m ) ∈ (Z q ) m .<br />

43


Für m = 1 ergibt sich ein Translations-Kryptosystem. Für m > 1 spricht man<br />

von einem polyalphabetischen Kryptosystem, da für jeden Buchstaben, je nach<br />

seiner Position im Klartext, mehrere Verschlüsselungen möglich sind.<br />

b) Permutations-Kryptosysteme, Transpositions-Kryptosysteme (Giovanni<br />

Battista Della Porta, 1535 - 1615) Es seien m <strong>und</strong> q natürliche Zahlen <strong>und</strong><br />

A = B = (Z q ) m . Weiterhin sei K = S m die symmetrische Gruppe der Ordnung m<br />

<strong>und</strong> für jeden Schlüssel K = π ∈ K sei E K (x 1 , . . . , x m ) = (x π(1) , . . . , x π(m) ) <strong>und</strong><br />

D K (x 1 , . . . , x m ) = (x π −1 (1), . . . , x π −1 (m)). Die Buchstaben des Klartextes werden<br />

also nur vertauscht, nicht verändert.<br />

c) Hill-Kryptosysteme (Lester S. Hill, 1929) Es seien m <strong>und</strong> q natürliche Zahlen<br />

<strong>und</strong> A = B = (Z q ) m . Weiterhin sei K = {K ∈ M m,m (Z q ) | K invertierbar }. Für<br />

K ∈ K sei E K (x) = xK <strong>und</strong> D K (x) = xK −1 für alle x ∈ (Z q ) m . Für m = 1<br />

ergeben sich spezielle affine Kryptosysteme mit b = 0. Für Permutationsmatrizen<br />

K π ergeben sich die Permutations-Kryptosysteme.<br />

Beispiel 6.7 a) RSA-Kryptosysteme (vgl. Abschnitt 8) Es seien p, q Primzahlen<br />

<strong>und</strong> n = p · q sowie A = B = Z n . Weiterhin sei K = {(n, p, q, e, d) |<br />

ed ≡ 1 mod ϕ(n)}. Für K = (n, p, q, e, d) sei E K (x) ≡ x e mod n <strong>und</strong> D K (x) ≡<br />

x d mod n. Der Teil (n, e) von K heißt öffentlicher Schlüssel, der Teil (p, q, d)<br />

geheimer Schlüssel.<br />

b) Rabin-Kryptosysteme Es seien p, q Primzahlen mit p, q ≡ 3 mod 4 <strong>und</strong><br />

n = p · q sowie A = B = Z n . Weiterhin sei K = {(n, p, q, r) | √0 ≤ r ≤ n − 1}. Für<br />

K = (n, p, q, r) sei E K (x) ≡ x(x + r) mod n <strong>und</strong> D K (x) ≡ r 2<br />

+ x − r mod n.<br />

4 2<br />

Der Teil (n, r) von K heißt öffentlich, der Teil (p, q) geheim.<br />

c) ElGamal-Kryptosysteme Es sei p eine “geeignete” Primzahl, α ∈ Z ∗ p primitives<br />

Element (vgl. Satz 9.2), A = Z ∗ p <strong>und</strong> B = Z ∗ p × Z ∗ p. Weiterhin sei K =<br />

{(p, α, a, β) | β = α a mod p}. Für K = (p, α, a, β) werde ein Exponent k ∈<br />

{0, . . . , p−1} zufällig gewählt <strong>und</strong> E K (x, k) ≡ (α k , xβ k ) mod p <strong>und</strong> D K (x 1 , x 2 ) ≡<br />

x 2 (x a 1) −1 mod p berechnet. Der Teil (p, α, β) von K heißt öffentlich, der Teil a geheim.<br />

Bemerkung 6.8 Man unterscheidet verschiedene Angriffe auf Kryptosysteme:<br />

i) Geheimtext-Angriffe liegen vor, wenn dem Angreifer nur Geheimtexte bekannt<br />

sind, er daraus Klartexte <strong>und</strong> Schlüssel ermitteln möchte: Gegeben sind also<br />

C i = E K (P i ) für i = 1, . . . , n, gesucht K, P i bzw. ein Algorithmus, um P n+1 aus<br />

C n+1 = E K (P n+1 ) zu berechnen.<br />

44


ii) Klartext-Geheimtext-Angriffe liegen vor, wenn dem Angreifer zusammengehörige<br />

Paare aus Klartext <strong>und</strong> Geheimtext vorliegen <strong>und</strong> er daraus den Schlüssel<br />

ermitteln möchte: Gegeben sind also P i , C i = E K (P i ) für i = 1, . . . , n, gesucht<br />

K bzw. ein Algorithmus, um P n+1 aus C n+1 = E K (P n+1 ) zu berechnen. Für<br />

die Sicherheit gegen derartige Angriffe ist es erforderlich, daß die Zuordnung<br />

(P, E K (P )) ↦→ K eine Einweg-Funktion ohne Falltür ist.<br />

iii) Angriffe mit gewähltem Klartext liegen vor, wenn der Angreifer die Geheimtexte<br />

zu von ihm selbst gewählten Klartexten bestimmen kann: Gegeben sind<br />

also P i , C i = E K (P i ) für i = 1, . . . , n mit frei gewählten Klartexten P i , gesucht<br />

K bzw. ein Algorithmus, um P n+1 aus C n+1 = E K (P n+1 ) zu berechnen. Dies<br />

ist insbesondere bei Public-Key-Verfahren stets der Fall, die also gegen derartige<br />

Angriffe sicher sein müssen.<br />

Bei einer adaptiven Variante dieses Angriffs werden die P i nacheinander in Abhängigkeit<br />

von den zuvor erzielten Ergebnissen gewählt.<br />

iv) Angriffe mit gewähltem Geheimtext liegen vor, wenn der Angreifer durch<br />

Kenntnis der Dechiffrierung Geheimtexte wählen kann <strong>und</strong> daraus die zugehörigen<br />

Klartexte ermitteln kann: Gegeben sind also C i , P i = D K (P i ) für i = 1, . . . , n,<br />

gesucht K bzw. ein Algorithmus, um P n+1 aus C n+1 = E K (P n+1 ] zu berechnen<br />

Auch diese Variante muß bei Public-Key-Systemen betrachtet werden.<br />

Eine Kombination aus iii) <strong>und</strong> iv) wir auch ein Angriff mit gewählten Texten<br />

genannt.<br />

v) Angriffe durch Gewalt liegen vor, wenn der “Kryptanalytiker” den Schlüssel<br />

durch Bedrohung, Erpressung oder körperliche Gewalt an sich bringt. Eine Variante<br />

hiervon ist die Bestechung als Angriff mit gekauftem Schlüssel. Diese Methoden<br />

sind sehr wirkungsvoll <strong>und</strong> oft der beste Weg, ein Kryptosystem zu brechen.<br />

Im Rahmen dieser <strong>Vorlesung</strong> werden sie aber aus ethischen Gründen nicht weiter<br />

behandelt!<br />

vi) Brute-Force-Angriffe bestehen darin, daß man für einen gegebenen Geheimtext<br />

C sämtliche Schlüssel K des Schlüsselraumes durchprobiert <strong>und</strong> nachschaut,<br />

ob P = D K (C) ein sinnvoller Klartext ist. Auch diese Methode wird in dieser<br />

<strong>Vorlesung</strong> als “unsportlich” angesehen!<br />

Definition 6.9 Bei Blockchiffren werden die Klartexte aus P in Blöcke a 1 . . . a k<br />

gleicher Länge k über dem Alphabet A eingeteilt <strong>und</strong> für jeden Schlüssel K ∈ K<br />

ist dann E K : A k → B n eine Abbildung, die als Geheimtext eines solchen Blocks<br />

einen Block der Länge n über dem Alphabet B erzeugt. Dabei wird für jeden<br />

Block derselbe Schlüssel verwendet. Meist ist dabei A = B <strong>und</strong> n = k. Im Fall<br />

45


n > k spricht man von einer gespreizten Chiffre. Bei Stromchiffren wird für jeden<br />

Block dagegen ein anderer Schlüssel benutzt.<br />

Wichtige Kryptosysteme, die auf der Verwendung von Blockchiffren beruhen, sind<br />

neben denen aus den Beispielen 6.3, 6.6 <strong>und</strong> 6.7 der Data Encryption Standard<br />

(DES) <strong>und</strong> der Advanced Encryption Standard (AES).<br />

Definition 6.10 Eine Stromchiffre (P(A), C(B), K, L, F, E, D) besteht aus<br />

• einer Menge P von Klartexten über einem Klartextalphabet A,<br />

• einer Menge C von Geheimtexten über einem Geheimtextalphabet B,<br />

• einer endlichen Menge K von Schlüsseln, dem Schlüsselraum,<br />

• einem Schlüsselstromalphabet L,<br />

• einem Schlüsselstromgenerator F = (f 1 , f 2 , . . .) mit<br />

f i : K × A i−1 → L für i ≥ 1,<br />

• der Verschlüsselung oder Chiffrierung E, d. h. einer Familie von Abbildungen<br />

E z : P → C, z ∈ L,<br />

• der Entschlüsselung oder Dechiffrierung D, d. h. einer Familie von Abbildungen<br />

D z : C → P, z ∈ L,<br />

so daß für alle z ∈ L gilt<br />

D z ◦ E z = ι P .<br />

Die Zuordnungen von E z <strong>und</strong> D z zu z ∈ L stellen den Chiffrier- <strong>und</strong> den Dechiffrieralgorithmus<br />

dar.<br />

Eine Stromchiffre heißt synchron, wenn die Funktionen f i nicht von den Klartexten<br />

abhängen, also Funktionen auf K sind.<br />

Eine Stromchiffre heißt periodisch mit der Periode d, wenn z i+d = z i für alle i ≥ 1<br />

gilt.<br />

Bemerkung 6.11 Blockchiffren können als spezielle (synchrone) Stromchiffren<br />

mit z i = K für alle i ≥ 1 aufgefaßt werden.<br />

Ein Vigenère-Kryptosystem mit Schlüsselwortlänge m kann als synchrone, periodische<br />

Stromchiffre mit der Periode m aufgefaßt werden. Mit K = (k 1 , . . . , k m )<br />

gilt dann z i = k i für 1 ≤ i ≤ m <strong>und</strong> periodischer Wiederholung.<br />

46


Beispiel 6.12 Selbstschlüssel-Chiffre (nach Vigenère) Es sei q eine natürliche<br />

Zahl, A = B = K = L = Z q , z 1 ∈ K <strong>und</strong> z i = x i−1 für i ≥ 2. Weiterhin seien<br />

E z (x) = x + z mod q <strong>und</strong> D z (x) = x − z mod q für alle z ∈ L, x ∈ Z q . Hierdurch<br />

wird eine nicht synchrone, nicht periodische Stromchiffre definiert.<br />

Es sei (P(A), C(B), K, E, D) ein Kryptosystem mit endlichem Klartextraum P<br />

<strong>und</strong> endlichem Schlüsselraum K. Jeder Klartext P ∈ P werde mit einer Wahrscheinlichkeit<br />

p P gesendet <strong>und</strong> zu seiner Verschlüsselung unabhängig von P ein<br />

Schlüssel K ∈ K mit einer Wahrscheinlichkeit q K ausgewählt. Die Wahrscheinlichkeit<br />

für das Paar (P, K) ist also p P q K . Die Chiffrierung E K ordne P den<br />

Geheimtext C zu. Die Wahrscheinlichkeit für das Auftreten von C ist dann<br />

r(C) = ∑ P ∈P<br />

∑<br />

K∈K,C=E K (P )<br />

p P q K .<br />

Die bedingte Wahrscheinlichkeit für den Klartext P bei gegebenem Geheimtext<br />

C ist dann<br />

r(P |C) = 1 ∑<br />

p P q K .<br />

r(C)<br />

K∈K,C=E K (P )<br />

Damit wird die Entropie von P unter C definiert durch<br />

H(P|C) = − ∑ r(P |C) log r(P |C),<br />

P ∈P<br />

<strong>und</strong> die mittlere Entropie von P unter C ist dann<br />

H(P|C) = ∑ C∈C<br />

r(C)H(P|C).<br />

Schließlich ist<br />

I(P, C) = H(P) − H(P|C)<br />

die Information von C über P. Nach Claude E. Shannon (1949) definiert man<br />

Definition 6.13 Ein Kryptosystem (P(A), C(B), K, E, D) heißt dann perfekt sicher,<br />

wenn I(P, C) = 0 ist.<br />

Satz 6.14 Ein Kryptosystem (P(A), C(B), K, E, D) ist genau dann perfekt sicher,<br />

wenn p P = r(P |C) für alle Klartexte P <strong>und</strong> alle Geheimtexte C gilt, wenn<br />

also die Wahrscheinlichkeitsverteilungen auf P <strong>und</strong> C unabhängig sind.<br />

Folgerung 6.15 In einem perfekt sicheren Kryptosystem gibt es mindestens so<br />

viele Schlüssel wie Klartexte.<br />

47


Folgerung 6.16 Erfüllt ein Kryptosystem die Bedingungen (i) |P| = |K| <strong>und</strong><br />

(ii) q K = |K| −1 für alle K ∈ K, so ist es perfekt sicher.<br />

Bemerkung 6.17 Die Verwendung von Einwegschlüsseln liefert also perfekt sichere<br />

Kryptosysteme. Es sind dies auch die einzigen Verfahren, für die bis heute<br />

die perfekte Sicherheit bewiesen ist.<br />

Das Problem des sicheren Austausches von Einwegschlüsseln kann mittels der<br />

technisch noch zu entwickelnden Quanten-Kryptographie zumindest theoretisch<br />

sehr elegant gelöst werden.<br />

Schlüsselvereinbarung in der Quanten-Kryptographie<br />

In einem Quanten-Kanal werden einzelne Photonen (Lichtquanten) übertragen,<br />

die jeweils eine von vier mögliche Polarisationsrichtungen aufweisen: 0 Grad (↕),<br />

45 Grad (↗), 90 Grad (↔) oder 135 Grad (↘). Diese Photonen können als<br />

Zeichen über dem Alphabet A = {0, 1, 2, 3} aufgefaßt werden.<br />

Zur Vereinbarung eines Schüssels für eine spätere geheime Nachrichtenübertragung<br />

durch einen gewöhnlichen Kanal sendet der Sender zunächst eine zufällige<br />

Folge solcher Photonen über den Quanten-Kanal an den Empfänger, z. B.<br />

(a) 0, 2, 1, 0, 3, 2, 2, 1, 0, 2, 3, 1, 1, . . .<br />

Der Empfänger mißt jedes empfangene Photon durch einen jeweils zufällig gewählten<br />

Polarisationsfilter, der ebenfalls durch eine der vier Richtungen bestimmt<br />

ist, also auch als zufällige Folge über A dargestellt werden kann, z. B.<br />

(b) 0, 1, 3, 2, 1, 0, 2, 2, 3, 0, 3, 2, 1, . . .<br />

Wird dabei ein gerades (ungerades) Photon durch einen geraden (ungeraden)<br />

Filter gemessen, so beobachtet der Empfänger bei Gleichheit mit Sicherheit ein<br />

Signal (notiert als 1), bei Ungleichheit mit Sicherheit kein Signal (notiert als 0).<br />

Stimmt dagegen die Parität von gesendetem Photon <strong>und</strong> Filter nicht überein, so<br />

mißt der Empfänger nach den Gesetzen der Quantenmechanik jeweils mit 50 %<br />

Wahrscheinlichkeit ein Signal oder kein Signal. Er ermittel also eine Meßfolge (c)<br />

aus Nullen <strong>und</strong> Einsen, wobei er allerdings nicht weiß, welche Symbole “sicher”<br />

sind <strong>und</strong> welche nur die Wahrscheinlichkeit 0.5 besitzen (vgl. Anhang).<br />

Der Empfänger schickt nun über einen gewöhnlichen Kanal an den Sender die<br />

Folge (b) seiner Filtereinstellungen. Hieraus <strong>und</strong> aus seinen eigenen Filtereinstellungen<br />

kann der Sender die Indizes der “sicheren” Messungen <strong>und</strong> die jeweiligen<br />

Ergebnisse des Empfängers berechnen. Er sendet nun dem Empfänger die Folge<br />

48


(d) dieser Indizes ebenfalls über den gewöhnlichen Kanal. Im obigen Beispiel ist<br />

dies<br />

(d) 1, 3, 4, 5, 6, 10, 11, 13, . . .<br />

Die zugehörige Folge der sicher gemessenen Bits stellt jetzt den beiden Beteiligten<br />

bekannten Schlüssel dar. Die restlichen Messungen des Empfängers (ungefähr 50<br />

%) werden ignoriert.<br />

Ein Angreifer, der das Verfahren kennt <strong>und</strong> die Folge (a) “abhören” will, kann dies<br />

nur tun, indem er die einzelnen Photonen durch einen Polarisationsfilter schickt.<br />

Dabei kann er die Polarisationsrichtung ebenfalls nur zufällig raten. Wählt er<br />

dabei eine andere Parität als der Empfänger, so mißt er entweder ein korrektes<br />

Ergebnis (wenn der Empfänger nicht die Parität des Senders geraten hat), das<br />

später aber verworfen wird, oder er mißt ein später benötigtes Ergebnis, wobei<br />

seine Messung das benötigte Bit aber nur mit einer Wahrscheinlichkeit von 0.5<br />

richtig darstellt. Die Hälfte der Messungen des Angreifers sind also unbrauchbar,<br />

er kennt daher nur die Hälfte des vereinbarten Schlüssels, selbst wenn er alle<br />

Photonen “abhört”.<br />

Seine Situation ist aber noch ungünstiger. Da bei seiner Messung das Photon ausgelöscht<br />

wird, muß er ein “Ersatzphoton” in den Quanten-Kanal einspeisen, sonst<br />

verrät er sich sofort. Dies eingespeiste Photon muss er natürlich gemäß seiner eigenen<br />

Messung polarisieren. In 25 % aller Fälle (siehe Anhang) wird dies aber die<br />

falsche Parität haben, so daß jedes zweite Bit, daß der Empfänger später in seinem<br />

Schlüssel benutzt, nicht mit dem Bit des Senders übereinstimmt. Tauschen daher<br />

Sender <strong>und</strong> Empfänger über den gewöhnlichen Kanal einen kleinen Teil ihres<br />

Schlüssels aus (<strong>und</strong> benutzen diesen Teil gegebenenfalls nicht), so können sie mit<br />

hoher Wahrscheinlichkeit feststellen, ob der Quanten-Kanal bei der Schlüsselvereinbarung<br />

abgehört wurde. Sie werden den Schlüssel daher insgesamt verwerfen<br />

<strong>und</strong> einen erneuten Versuch starten.<br />

Aufgabe 6.18 a) Geben Sie ein Kriterium dafür an, daß ein Schlüssel K = (a, b)<br />

eines affinen Kryptosystems involutorisch ist. Ermitteln Sie damit alle involutorischen<br />

Schlüssel für den Fall q = 15.<br />

b) Gilt q = p 1 p 2 mit verschiedenen ungeraden Primzahlen p i , so gibt es genau<br />

q + p 1 + p 2 + 1 involutorische Schlüssel für ein affines Kryptosystem. Überprüfen<br />

Sie hiermit das Ergebnis aus a).<br />

49


7 Data Encryption Standard<br />

Definition 7.1 Es seien A = B = {0, 1}, n ∈ N gerade <strong>und</strong> t = n 2 . Jedes<br />

P = (b 1 , . . . , b n ) ∈ A n werde in die beiden Hälften L = (b 1 , . . . , b t ) <strong>und</strong> R =<br />

(b t+1 , . . . , b n ) zerlegt, es gilt also P = (L, R). Weiterhin sei r ∈ N eine Anzahl von<br />

R<strong>und</strong>en <strong>und</strong> K 1 , . . . , K r für jede R<strong>und</strong>e ein Schlüssel, der jeweils eine Abbildung<br />

f Ki : A t → A t , die innere Blockchiffre, bestimmt. Weiterhin sei π(L, R) = (R, L)<br />

die Vertauschung von linker <strong>und</strong> rechter Blockhälfte <strong>und</strong> ϕ i (L, R) = (L, R ⊕<br />

f Ki (L)) für i = 1, . . . , r. (Dabei sei ⊕ die Addition modulo 2.) Die Chiffrierung<br />

mittels der Feistel-Chiffre (Horst Feistel, 1973) geschieht nun ausgehend vom<br />

Klartextblock P = P 0 = (L 0 , R 0 ) iterativ gemäß<br />

(48)<br />

P i = ϕ i ◦ π(P i−1 ),<br />

i = 1, . . . , r<br />

<strong>und</strong> abschließender Berechnung des Geheimtextes C gemäß<br />

(49)<br />

C = (R r , L r ).<br />

Insgesamt gilt also<br />

(50)<br />

C = π ◦ ϕ r ◦ π . . . ◦ ϕ 1 ◦ π(P ).<br />

Bemerkung 7.2 Da sowohl π als auch ϕ i involutorische Abbildungen sind, d. h.<br />

es gilt π −1 = π <strong>und</strong> ϕ −1<br />

i = ϕ i , folgt (π ◦ ϕ r ◦ π . . . ◦ ϕ 1 ◦ π) −1 = π ◦ ϕ 1 ◦<br />

π . . . ϕ r ◦ π, d. h. die Dechiffrierung erfolgt nach demselben Verfahren, wobei nur<br />

die Schlüsselreihenfolge umzukehren ist.<br />

Beispiel 7.3 Beim DES wird eine Feistel-Chiffre für n = 64 <strong>und</strong> r = 16 angewandt,<br />

wobei die R<strong>und</strong>enschlüssel K i nach einem festgelegten, öffentlich bekannten<br />

Verfahren aus einem Hauptschlüssel K = (k 1 , . . . , k n ) ∈ A n berechnet<br />

werden. In diesem Hauptschlüssel sind allerdings die Bits j = 8, 16, . . . , 64 irrelevant,<br />

so daß es genau 2 56 verschiedene Schlüssel in K gibt. Auch die Konstruktion<br />

der Chiffrierfunktionen f Ki für die einzelnen R<strong>und</strong>en der Feistel-Chiffre<br />

folgt einem festen, öffentlich bekannten Verfahren. Zusätzlich existiert noch eine<br />

initiale Permutation IP ∈ S 64 , die auf den zu verschlüsselnden Klartextblock<br />

P ∈ A 64 angewandt wird <strong>und</strong> IP (P ) = (L 0 , R 0 ) liefert. Nach Anwendung der<br />

Feistel-Chiffre wird schließlich C = IP −1 (R 16 , L 16 ) gebildet. Diese Permutation<br />

IP ist kryptographisch wirkungslos, da sie ebenfalls öffentlich bekannt ist. Die<br />

50


Sicherheit des DES beruht einzig <strong>und</strong> allein auf der Tatsache, daß die Berechnungen<br />

der Chiffrierfunktionen aus dem Hauptschlüssel (nach heutigem Wissen)<br />

Einwegfunktionen ohne Falltür sind. Trotz vielfältiger Bemühungen zahlreicher<br />

Kryptoanalytiker hat der DES allen Angriffen standgehalten, mit einer einzigen<br />

Ausnahme. Mit moderner Rechnerleistung ist es heute möglich, den gesamten<br />

Schlüsselraum innerhalb eines Tages auszuschöpfen. Dies beruht aber nicht auf<br />

einer Schwachstelle in der Konstruktion des DES. Man hat hier Abhilfe geschaffen,<br />

indem man durch das sogenannte Triple-DES-Verfahren Schlüssellängen von<br />

128 Bit verwendet. Da beide Verfahren auf Feistel-Chiffren beruhen, kann man<br />

sie ebenso wie diese sowohl <strong>zur</strong> Ver- als auch <strong>zur</strong> Entschlüsselung benutzen, wenn<br />

man entsprechend die Schlüsselreihenfolge umkehrt.<br />

Mittlerweile existiert bereits ein Nachfolger zum DES, der AES (Advanced Encryption<br />

Standard), der minimal mit Blocklängen von 128 Bit <strong>und</strong> gleichlangen<br />

Schlüssellängen arbeitet. Bei dem darin verwendeten sogenannten Rijndael-<br />

Algorithmus werden 10 R<strong>und</strong>en berechnet, allerdings handelt es sich nicht mehr<br />

um Feistel-Chiffren.<br />

Bemerkung 7.4 Beim DES gibt es 4 schwache Schlüssel K, für die alle jeweiligen<br />

R<strong>und</strong>enschlüssel K i übereinstimmen. Außerdem gibt es 6 Paare (K, K ′ )<br />

halbschwacher Schlüssel, für die<br />

DES K = DES −1<br />

K ′<br />

gilt. Bei jedem dieser 12 Schlüssel entstehen nur jeweils zwei verschiedene R<strong>und</strong>enschlüssel.<br />

Hinzu kommen noch 48 möglicherweise schwache Schlüssel, für die<br />

nur je 4 verschiedene R<strong>und</strong>enschlüssel existieren. Diese 64 Schlüssel sind also<br />

tunlichst zu vermeiden.<br />

Aufgabe 7.5 Beweisen Sie die in Bemerkung 7.2 enthaltenen Behauptungen.<br />

Aufgabe 7.6 Bestimmen Sie sämtliche schwachen <strong>und</strong> halbschwachen Schlüssel<br />

des DES.<br />

51


8 Der RSA-Algorithmus<br />

Dieser Algorithmus zum Einsatz in Kryptosystemen mit öffentlichen Schlüsseln,<br />

wird nach seinen Entwicklern Rivest, Shamir <strong>und</strong> Adleman (1980) benannt. Zunächst<br />

sei noch einmal das Gr<strong>und</strong>prinzip derartiger Kryptosysteme beschrieben:<br />

(1) Jeder Teilnehmer A konstruiert eine Verschlüsselungsfunktion E A als Einwegfunktion<br />

mit Falltür. Die in die Konstruktion einfließende, nur ihm bekannte<br />

Zusatzinformation liefert die Entschlüsselungsfunktion D A = EA −1 .<br />

(2) Er gibt E A als seinen öffentlichen Schlüssel bekannt, hält aber D A geheim.<br />

(3) Will ein Teilnehmer B eine Nachricht P an A senden, so verschlüsselt er sie<br />

gemäß C = E A (P ) <strong>und</strong> sendet sie an A.<br />

(4) Wenn A den Geheimtext C empfängt, wendet er D A an <strong>und</strong> erhält D A (C) =<br />

D A (E A (P )) = P .<br />

Die Idee dieser Systeme geht auf Diffie <strong>und</strong> Hellman (1975) <strong>zur</strong>ück. Mittlerweile<br />

ist bekannt, daß Mitarbeiter des britischen Geheimdienstes etwa gleichzeitig die<br />

Idee entwickelt haben.<br />

Zur Vorbereitung des RSA-Algorithmus werden einige zahlentheoretische Aussagen<br />

benötigt.<br />

Satz 8.1 Seien n > 0 eine natürliche Zahl <strong>und</strong> e ∈ Z. Genau dann existiert ein<br />

d ∈ Z mit ed ≡ 1 mod m, wenn ggT (e, n) = 1 gilt.<br />

Satz 8.2 Seien n > 0 eine natürliche Zahl <strong>und</strong> e ∈ Z teilerfremd zu n. Dann gilt<br />

e ϕ(n) ≡ 1 mod n. Speziell gilt e p−1 ≡ 1 mod p, wenn n = p eine Primzahl <strong>und</strong> e<br />

nicht durch p teilbar ist.<br />

Satz 8.3 Genau dann ist die natürliche Zahl n > 1 Produkt paarweise verschiedener<br />

Primzahlen, wenn für alle ganzen Zahlen a gilt<br />

a ϕ(n)+1 ≡ a mod n.<br />

Das RSA-Verfahren (vgl. Beispiel 6.7 a))<br />

(1) A wählt zufällig zwei große Primzahlen p <strong>und</strong> q. (Gängige Wahlen sind<br />

Binärzahlen mit Längen ≥ 256 oder sogar ≥ 512.)<br />

52


(2) A berechnet n A = pq <strong>und</strong> ϕ(n A ) = (p − 1)(q − 1). Man nennt n A den RSA-<br />

Modul von A.<br />

(3) Weiterhin wählt A eine zu ϕ(n A ) teilerfremde Zahl e A , den Verschlüsselungsexponenten<br />

von A zwischen 1 <strong>und</strong> ϕ(n A ) − 1.<br />

(4) A bestimmt den Entschlüsselungs-Exponenten d A mit e A d A ≡ 1 mod ϕ(n A )<br />

<strong>und</strong> 1 ≤ d A < ϕ(n A ).<br />

(5) A gibt n A <strong>und</strong> e A öffentlich bekannt, hält die anderen Zahlen aber geheim.<br />

(6) Will nun B eine Nachricht an A senden, so stellt er zunächst den Klartext P<br />

als Folge natürlicher Zahlen n 1 , . . . , n r zwischen 0 <strong>und</strong> n A −1 dar. Dann bestimmt<br />

er zu jeder dieser Zahlen n i den Geheimtext<br />

c i ≡ n e A<br />

i<br />

mod n A<br />

<strong>und</strong> sendet die Folge c 1 , . . . , c r an A.<br />

(7) A bildet zu den empfangenen Geheimtexten c i die Potenzen<br />

c d A<br />

i ≡ n i mod n A ,<br />

die dann noch in den Klartexte <strong>zur</strong>ückverwandelt werden müssen.<br />

Die Durchführbarkeit des Verfahrens beruht darauf, daß man große Primzahlen<br />

relativ schnell finden kann <strong>und</strong> ebenso schnell die Exponentiation von Restklassen<br />

durchführen kann. Dagegen beruht die Sicherheit darauf, daß die Faktorisierung<br />

großer Zahlen n A ein “schweres” Problem ist. Es ist allerdings bisher nicht bewiesen,<br />

daß für die Dechiffrierung tatsächlich die Faktorisierung des RSA-Moduls<br />

notwendig ist.<br />

53


9 Diskreter Logarithmus<br />

Neben der Primfaktorzerlegung großer Zahlen ist die Berechnung des diskreten<br />

Logarithmus ein Rechenverfahren, das möglicherweise eine Einwegfunktion ohne<br />

Falltür darstellt <strong>und</strong> sich deshalb <strong>zur</strong> Konstruktion von Kryptosystemen mit<br />

öffentlichen Schlüsseln eignet.<br />

Definition 9.1 Es seien G eine Gruppe, g ∈ G <strong>und</strong> c = g e . Man nennt e den<br />

(diskreten) Logarithmus von c bezüglich g. Hat g die endliche Ordnung n, so<br />

normiert man noch 0 ≤ e < n.<br />

Im folgenden sei p eine Primzahl <strong>und</strong> G = Z ∗ p<br />

Körpers mit p Elementen.<br />

die multiplikative Gruppe des<br />

Satz 9.2 Für jede Primzahl p ist Z ∗ p eine zyklische Gruppe. Es gibt also ein g ∈ Z,<br />

so daß zu jedem a ∈ Z mit ggT (a, p) = 1 ein Exponent e mit a ≡ g e mod p<br />

existiert. Jedes derartige g nennt man eine Primitivwurzel oder ein primitives<br />

Element modulo p.<br />

Satz 9.3 Es sei p eine Primzahl. Genau dann ist g ∈ Z mit ggT (g, p) = 1 eine<br />

Primitivwurzel modulo p, wenn<br />

für alle Primteiler q von p − 1 gilt.<br />

g (p−1)/q ≢ 1 mod p<br />

Bemerkung 9.4 Es gibt genau ϕ(p − 1) Primitivwurzeln modulo p, also hinreichend<br />

viele unter den Restklassen modulo p, so daß man durch systematische<br />

Suche bald eine finden kann.<br />

Das Diffie-Hellman-Verfahren<br />

Das erste veröffentlichte Kryptosystem mit öffentlichen Schlüsseln stammt von<br />

Diffie <strong>und</strong> Hellman. Dabei werden die Schlüssel wie folgt bestimmt:<br />

(1) Der Sender wählt eine Primzahl p, eine Primitivwurzel α modulo p <strong>und</strong> eine<br />

(geheime) Zahl 0 ≤ a < p − 1. Er berechnet β ≡ α a mod p <strong>und</strong> sendet dem<br />

Empfänger die Nachricht (p, α, β).<br />

(2) Der Empfänger wählt nun eine (ebenfalls geheime) Zahl 0 ≤ k < p − 1,<br />

berechnet γ ≡ α k mod p <strong>und</strong> sendet γ an den Sender <strong>zur</strong>ück.<br />

54


(3) Der vereinbarte Schlüssel ist K = γ a = β k . Er kann von beiden Teilnehmern<br />

berechnet werden.<br />

Veröffentlicht der Sender schon vorab die Zahlen p <strong>und</strong> α als seinen öffentlichen<br />

Schlüssel, so brauchen nur die Nachrichten β <strong>und</strong> γ ausgetauscht zu werden.<br />

Sowohl Sender als auch Empfänger verfügen über die geheimen Zusatzinformationen,<br />

die nur ihnen selbst bekannt sind, um den Schlüssel K zu berechnen. Die<br />

Sicherheit des Verfahrens beruht darauf, daß sich der diskrete Logarithmus von<br />

β bezüglich α nur schwer bestimmen läßt. Es ist aber noch nicht bewiesen, daß<br />

sich α ab aus α a <strong>und</strong> α b ohne Kenntnis von a <strong>und</strong> b nicht bestimmen läßt.<br />

Das ElGamal-Verfahren<br />

Dieses Verfahren entsteht durch eine Modifikation des Diffie-Hellman-Verfahrens.<br />

Die Schritte (1) <strong>und</strong> (2) laufen hier wie beim Diffie-Hellman-Verfahren ab. Will<br />

nun der Empfänger dem Sender einen Klartext m mit k ≤ m ≤ p−1 als Nachricht<br />

schicken, so multipliziert er den Schlüssel K = β k mit m <strong>und</strong> schickt das Paar<br />

(γ, c) mit dem Geheimtext c ≡ Km mod p.<br />

(3 ′ ) Der Sender setzt u = p − 1 − a <strong>und</strong> bestimmt<br />

γ u c = α b(p−1−a) α ak m ≡ α k(p−1) m ≡ m mod p.<br />

Der Nachteil dieses Verfahrens liegt darin, daß der Geheimtext (γ, c) doppelt so<br />

lang ist wie der Klartext m. Der Vorteil besteht darin, daß durch die zufällige<br />

Wahl von k derselbe Klartext nicht zweimal auf die gleiche Weise verschlüsselt<br />

wird. Außerdem kann man das Verfahren auf andere Gruppen übertragen, bei<br />

denen die Berechnung des diskreten Logarithmus noch “schwerer” ist als in Z ∗ p.<br />

Insbesondere sind hier elliptische Kurven über endlichen Körpern im Gespräch.<br />

55


10 Elliptische Kurven<br />

Definition 10.1 Eine elliptische Kurve über dem Körper K = R ist eine Menge<br />

E = {(x, y) ∈ K 2 | y 2 = x 3 + ax + b} ∪ {O}<br />

für a, b ∈ K mit dem unendlich fernen Punkt O. Für 4a 3 + 27b 2 = 0 heißt E<br />

singulär, sonst nicht-singulär.<br />

Bemerkung 10.2 Die Bedingung 4a 3 + 27b 2 ≠ 0 ist hinreichend <strong>und</strong> notwendig<br />

dafür, daß x 3 + ax + b = 0 drei verschiedene (komplexe) Nullstellen hat.<br />

Ist E eine nicht-singuläre elliptische Kurve, so wird folgendermaßen eine Addition<br />

+ auf E definiert, die (E, +) zu einer abelschen Gruppe macht. (Diese Addition<br />

läßt sich durch eine geometrische Darstellung der Kurve motivieren!)<br />

Zunächst setze O + P = P = P + O für alle P ∈ E. Damit ist O neutrales<br />

Element in (E, +).<br />

Für P = (x, y) ∈ E setze −P = (x, −y) <strong>und</strong> P + (−P ) = O = (−P ) + P . Dann<br />

liegt −P in E <strong>und</strong> ist Entgegengesetztes von P .<br />

Für P = (x 1 , y 1 ) <strong>und</strong> Q = (x 2 , y 2 ) ≠ −P setze<br />

<strong>und</strong><br />

sowie<br />

λ = y 2 − y 1<br />

x 2 − x 1<br />

falls x 1 ≠ x 2 ,<br />

λ = 3x2 1 + a<br />

2y 1<br />

x 3 = λ 2 − x 1 − x 2 , y 3 = λ(x 1 − x 3 ) − y 1<br />

P + Q = (x 3 , y 3 ).<br />

sonst<br />

Man kann nun zeigen, daß (x 3 , y 3 ) zu E gehört <strong>und</strong> die so definierte Addition<br />

kommutativ <strong>und</strong> assoziativ ist. (Das letzte ist allerdings mühselig.)<br />

Die obigen Definitionen bleiben korrekt, wenn man den Körper K = R durch<br />

einen endlichen Körper K = Z p für eine Primzahl p > 3 ersetzt. (Die Fälle p = 2<br />

<strong>und</strong> p = 3 sind auszuschließen, da die Bemerkung 10.2 dann nicht mehr richtig<br />

ist <strong>und</strong> die Definition der Addition auf E so nicht mehr funktioniert.)<br />

Satz 10.3 Es sei p > 3 eine Primzahl. Für jede nicht-singuläre elliptische Kurve<br />

E über Z p gilt dann<br />

p + 1 − 2 √ p ≤ |E| ≤ p + 1 + 2 √ p.<br />

56


Bemerkung 10.4 Gilt |E| = p für die nicht-singuläre elliptische Kurve E über<br />

Z p , so sind die diskreten Logarithmen auf E leicht berechenbar. Derartige Kurven<br />

sind also in Kryptosystemen zu vermeiden. Ebenso zu vermeiden sind sogenannte<br />

supersinguläre elliptische Kurven, die aber komplizierter zu definieren sind.<br />

Satz 10.5 Es sei p > 3 eine Primzahl <strong>und</strong> E eine nicht-singuläre elliptische<br />

Kurve über Z p . Dann gibt es natürliche Zahlen n <strong>und</strong> m mit m | n <strong>und</strong> m | (p−1),<br />

so daß (E, +) isomorph zu dem direkten Produkt (Z n , +) × (Z m , +) ist.<br />

Bemerkung 10.6 Es ist m = 1 genau dann, wenn (E, +) selbst eine zyklische<br />

Gruppe ist. Dies ist speziell dann der Fall, wenn |E| prim oder das Produkt<br />

verschiedener Primzahlen ist. In jedem Fall enthält aber (E, +) eine zyklische<br />

Untergruppe. Diese kann für das ElGamal-Verfahren benutzt werden.<br />

Beispiel 10.7 Für p = 11 betrachte die durch y 2 = x 3 +x+6 gegebene elliptische<br />

Kurve E, also a = 1, b = 6. Wegen 4a 3 + 27b 6 = 4 + 5 · 3 = 19 ≠ 0 mod 11 ist<br />

E nicht-singulär. Für x = 0, . . . , 10 ∈ Z 11 berechnet man schnell x 3 + x + 6 mod<br />

11 <strong>und</strong> erhält 6, 8, 5, 3, 8, 4, 8, 4, 9, 7, 4. Von diesen Zahlen sind nur 5, 3, 4 <strong>und</strong> 9<br />

Quadratzahlen in Z 11 mit den Wurzeln 4, 7, 5, 6, 2, 9 <strong>und</strong> 3, 8. Damit enthält E<br />

neben O noch genau die 12 Punkte<br />

(2, 4), (2, 7), (3, 5), (3, 6), (5, 2), (5, 9), (7, 2), (7, 9), (8, 3), (8, 8), (10, 2), (10, 9).<br />

Wegen |E| = 13 ist (E, +) zyklisch <strong>und</strong> jedes Element außer O kann als primitives<br />

Element genommen werden.<br />

Für α = (2, 7) ergibt sich beispielsweise 2α = (2, 7) + (2, 7) = (5, 2) wegen<br />

λ = (3·2 2 +1)·(2·7) −1 = 2·3 −1 = 2·4 = 8 mod 11 <strong>und</strong> damit x 3 = 8 2 −2−2 = 5<br />

mod 11 sowie y 3 = 8(2 − 5) − 7 = 2 mod 11. Insgesamt erhält man<br />

α = (2, 7)<br />

2α = (5, 2)<br />

3α = (8, 3)<br />

4α = (10, 2)<br />

5α = (3, 6)<br />

6α = (7, 9)<br />

7α = (7, 2)<br />

8α = (3, 5)<br />

9α = (10, 9)<br />

10α = (8, 8)<br />

11α = (5, 9)<br />

12α = (2, 4)<br />

57


12 Anhang<br />

12.1 ASCII-Code<br />

American Standard Code for Information Interchange<br />

In den Spalten stehen nacheinander: das Zeichen, der Binärcode (zwei Halbbytes),<br />

der Hexadezimalcode, der Dezimalcode. Natürlich sind auch die anderen Bytes<br />

mit Zeichen belegt, die aber weniger häufig benutzt werden. Insbesondere die<br />

ersten 32 Bytes entsprechen den Steuerzeichen des ISO-7-Codes.<br />

A 0100 0001 41 065 a 0110 0001 61 097<br />

B 0100 0010 42 066 b 0110 0010 62 098<br />

C 0100 0011 43 067 c 0110 0011 63 099<br />

D 0100 0100 44 068 d 0110 0100 64 100<br />

E 0100 0101 45 069 e 0110 0101 65 101<br />

F 0100 0110 46 070 f 0110 0110 66 102<br />

G 0100 0111 47 071 g 0110 0111 67 103<br />

H 0100 1000 48 072 h 0110 1000 68 104<br />

I 0100 1001 49 073 i 0110 1001 69 105<br />

J 0100 1010 4A 074 j 0110 1010 6A 106<br />

K 0100 1011 4B 075 k 0110 1011 6B 107<br />

L 0100 1100 4C 076 l 0110 1100 6C 108<br />

M 0100 1101 4D 077 m 0110 1101 6D 109<br />

N 0100 1110 4E 078 n 0110 1110 6E 110<br />

O 0100 1111 4F 079 o 0110 1111 6F 111<br />

P 0101 0000 50 080 p 0111 0000 70 112<br />

Q 0101 0001 51 081 q 0111 0001 71 113<br />

R 0101 0010 52 082 r 0111 0010 72 114<br />

S 0101 0011 53 083 s 0111 0011 73 115<br />

T 0101 0100 54 084 t 0111 0100 74 116<br />

U 0101 0101 55 085 u 0111 0101 75 117<br />

V 0101 0110 56 086 v 0111 0110 76 118<br />

W 0101 0111 57 087 w 0111 0111 77 119<br />

X 0101 1000 58 088 x 0111 1000 78 120<br />

Y 0101 1001 59 089 y 0111 1001 79 121<br />

Z 0101 1010 5A 090 z 0111 1010 7A 122<br />

[ 0101 1011 5B 091 { 0111 1011 7B 123<br />

\ 0101 1100 5C 092 | 0111 1100 7C 124<br />

] 0101 1101 5D 093 } 0111 1101 7D 125<br />

ˆ 0101 1110 5E 094 ∼ 0111 1110 7E 126<br />

0101 1111 5F 095 > 0111 1111 7F 127<br />

’ 0110 0000 60 096 / 1000 0000 80 128<br />

58


0010 0000 20 032<br />

! 0010 0001 21 033<br />

“ 0010 0010 22 034<br />

# 0010 0011 23 035<br />

$ 0010 0100 24 036<br />

% 0010 0101 25 037<br />

& 0010 0110 26 038<br />

´ 0010 0111 27 039<br />

( 0010 1000 28 040<br />

) 0010 1001 29 041<br />

* 0010 1010 2A 042<br />

+ 0010 1011 2B 043<br />

, 0010 1100 2C 044<br />

- 0010 1101 2D 045<br />

. 0010 1110 2E 046<br />

/ 0010 1111 2F 047<br />

0 0011 0000 30 048<br />

1 0011 0001 31 049<br />

2 0011 0010 32 050<br />

3 0011 0011 33 051<br />

4 0011 0100 34 052<br />

5 0011 0101 35 053<br />

6 0011 0110 36 054<br />

7 0011 0111 37 055<br />

8 0011 1000 38 056<br />

9 0011 1001 39 057<br />

: 0011 1010 3A 058<br />

; 0011 1011 3B 059<br />

< 0011 1100 3C 060<br />

= 0011 1101 3D 061<br />

> 0022 1110 3E 062<br />

? 0011 1111 3F 063<br />

0100 0000 40 064<br />

Die ASCII-Zeichen, bei denen das höchste Bit gleich 1 ist, werden unter anderem<br />

für Sonderzeichen aus anderen Alphabeten (Dänisch, Spanisch etc.) genutzt <strong>und</strong><br />

je nach Ausgabemedium unterschiedlich dargestellt. Man faßt sie daher auch<br />

oft als “nicht druckbare Zeichen” auf. Wenn sie nicht genutzt werden, wird das<br />

höchste Bit frei <strong>und</strong> kann als Paritätsbit (vgl. Beispiel 1.1) benutzt werden.<br />

59


12.2 Morse-Alphabet<br />

Samuel Morse (1791 - 1872) benutzte für seinen Telegraphen 1837 zunächst<br />

nur Ziffern <strong>zur</strong> Übertragung, aus denen nach einem Codebuch Wörter gebildet<br />

wurden. 1840 führte er einen von A. Bain stammenden Code mit wechselnden<br />

Wortlängen ein. Das heutige Morse-Alphabet wurde erst 1851 auf Vorschlag von<br />

C. Gerke vom Deutsch-Österreichischen Telegraphenverein angenommen <strong>und</strong> erhielt<br />

1865 im Internationalen Telegraphenverein allgemeine Anerkennung. (Schon<br />

Gauß <strong>und</strong> Weber (1833) <strong>und</strong> ebenso Steinheil (1837) hatten Codes mit wechselnden<br />

Wortlängen für ihre Telegraphen benutzt.)<br />

a ·− 0 − − − − −<br />

ä · − ·− 1 · − − − −<br />

á · − − · − 2 · · − − −<br />

b − · ·· 3 · · · − −<br />

c − · −· 4 · · · · −<br />

ch - - - - 5 · · · · ·<br />

d − · · 6 − · · · ·<br />

e · 7 − − · · ·<br />

é · · − · · 8 − − − · ·<br />

f · · −· 9 − − − − ·<br />

g − − · . · − · − ·−<br />

h · · ·· , − − · · −−<br />

i ·· : − − − · ··<br />

j · − −− - − · · · ·−<br />

k − · − ’ · − − − −·<br />

l · − ·· ( − · − − ·−<br />

m −− ? · · − − ··<br />

n −· “ · − · · −·<br />

ñ − − · − −<br />

o − − − Notruf · · · − − − · · ·<br />

ö − − −· Anfang − · − · −<br />

p · − −· Ende · · · − ·−<br />

q − − ·−<br />

r · − ·<br />

s · · ·<br />

t −<br />

u · · −<br />

v · · ·−<br />

w · − −<br />

x − · ·−<br />

y − · −−<br />

z − − ··<br />

60


Eine gängige Binärcodierung des Morse-Alphabets ist<br />

· ↔ 01, − ↔ 0111 “Zwischenraum” ↔ 000.<br />

61


12.3 Buchstabenhäufigkeiten<br />

Die Zahlenangaben bedeuten jeweils %.<br />

Deutsch<br />

Einzelbuchstaben (in Cliquen)<br />

E (17.5)<br />

N (9.8)<br />

I (7.7) R (7.5) S (6.8) A (6.4) T (6.1)<br />

D (4.8) U (4.2) H (4.2)<br />

L (3.5) G (3.0) O (3.0) C (2.7) M (2.6)<br />

B (1.9) F (1.6) W (1.5) K (1.5) Z (1.1)<br />

P (1.0) V (0.9)<br />

J (0.3) Y (0.1) X (0.04) Q (0.02)<br />

Bigramme (676 = 26 · 26 mögliche)<br />

EN (0.0443) ER (0.0375) CH (0.0280) EI (0.0242) DE (0.0233) ND (0.0208)<br />

IN (0.0197) GE (0.0196) IE (0.0188) TE (0.0178) ES (0.0168) NE (0.0143) UN<br />

(0.0139) RE (0.0124) HE (0.0124) ST (0.0118) BE (0.0104) AN (0.0082)<br />

Trigramme (17567 = 26 3 mögliche)<br />

EIN (0.0122) ICH (0.0111) NDE (0.0089) DIE (0.0087) UND (0.0087) DER<br />

(0.0086) CHE (0.0075) END (0.0075) GEN (0.0071) SCH (0.0066) CHT (0.0061)<br />

DEN (0.0057) INE (0.0053) NGE (0.0052) NUN (0.0048) UNG (0.0048)<br />

Englisch<br />

Einzelbuchstaben (in Cliquen)<br />

E (12.5)<br />

T (9.2)<br />

A (8.0) O (7.6) I (7.3) N (7.1)<br />

S (6.5) R (6.1) H (5.4)<br />

62


L (4.1) D (4.0)<br />

C (3.1) U (2.7) M (2.5) F (2.3)<br />

P (2.0) G (2.0) W (1.9) Y (1.7) B (1.5)<br />

V (1.0) K (0.7)<br />

X (0.2) J (0.2) Q (0.1) Z (0.1)<br />

Bigramme<br />

TH (0.0330) HE (0.0270) IN (0.0202) ER (0.0191) RE (0.0169) AN (0.0167) ES<br />

(0.0149) EN (0.0146) ON (0.0134) AT (0.0127) TI (0.0126) ED (0.0125) NT<br />

(0.0124) ND (0.0122) ST (0.0116) OR (0.0091) AR (0.0083) IS (0.0079) TO<br />

(0.0079)<br />

Trigramme<br />

THE (0.0353) ING (0.0111) AND (0.0102) ION (0.0075) TIO (0.0075) ENT<br />

(0.0073) ERE (0.0069) HER (0.0068) ATE (0.0066) VER (0.0064) TER (0.0063)<br />

THA (0.0062) ATI (0.0059) FOR (0.0059)<br />

Französisch<br />

Einzelbuchstaben<br />

E (16) N A S R I U T O L D C M P V F B G X H Q Y Z J K W<br />

Bigramme<br />

ES EN OU DE NT TE ON SE AI IT LE ET ME ER EM<br />

Trigramme<br />

ENT QUE ION LES AIT TIO ANS ONT OUR ANT AIS OUS<br />

63


Italienisch<br />

Einzelbuchstaben<br />

E (11) I (11) A (11) O R L N T S C D P U M G V H Z B F Q J K W X Y<br />

Bigramme<br />

ER ES ON RE EL EN DE SI DI TI AL NT AN RA<br />

Trigramme<br />

CHE ERE ZIO DEL ECO ARI QUE ATO IDE EDI ESI<br />

Spanisch<br />

Einzelbuchstaben<br />

E (13) A O S R I N L D C T U P M Y Q G V H F B J Z K W X<br />

Bigramme<br />

ES EN EL DE LA OS UE AR RA RE ON ER AS ST AL AD TA CO OR<br />

Trigramme<br />

QUE EST ARA ADO AQU CIO DEL NTE EDE OSA PER NEI IST SDE<br />

64


12.4 Vigenère-Tafel<br />

Blaise de Vigenère (1525 - 1596),<br />

Johannes Trithemius (1462 - 1516),<br />

Giovanni Battista Della Porta (1538 - 1615)<br />

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z<br />

B C D E F G H I J K L M N O P Q R S T U V W X Y Z A<br />

C D E F G H I J K L M N O P Q R S T U V W X Y Z A B<br />

D E F G H I J K L M N O P Q R S T U V W X Y Z A B C<br />

E F G H I J K L M N O P Q R S T U V W X Y Z A B C D<br />

F G H I J K L M N O P Q R S T U V W X Y Z A B C D E<br />

G H I J K L M N O P Q R S T U V W X Y Z A B C D E F<br />

H I J K L M N O P Q R S T U V W X Y Z A B C D E F G<br />

I J K L M N O P Q R S T U V W X Y Z A B C D E F G H<br />

J K L M N O P Q R S T U V W X Y Z A B C D E F G H I<br />

K L M N O P Q R S T U V W X Y Z A B C D E F G H I J<br />

L M N O P Q R S T U V W X Y Z A B C D E F G H I J K<br />

M N O P Q R S T U V W X Y Z A B C D E F G H I J K L<br />

N O P Q R S T U V W X Y Z A B C D E F G H I J K L M<br />

O P Q R S T U V W X Y Z A B C D E F G H I J K L M N<br />

P Q R S T U V W X Y Z A B C D E F G H I J K L M N O<br />

Q R S T U V W X Y Z A B C D E F G H I J K L M N O P<br />

R S T U V W X Y Z A B C D E F G H I J K L M N O P Q<br />

S T U V W X Y Z A B C D E F G H I J K L M N O P Q R<br />

T U V W X Y Z A B C D E F G H I J K L M N O P Q R S<br />

U V W X Y Z A B C D E F G H I J K L M N O P Q R S T<br />

V W X Y Z A B C D E F G H I J K L M N O P Q R S T U<br />

W X Y Z A B C D E F G H I J K L M N O P Q R S T U V<br />

X Y Z A B C D E F G H I J K L M N O P Q R S T U V W<br />

Y Z A B C D E F G H I J K L M N O P Q R S T U V W X<br />

Z A B C D E F G H I J K L M N O P Q R S T U V W X Y<br />

65


12.5 Dezimalziffern-Codes<br />

12.5.1 Zählcode<br />

Wird bei Fernsprechern benutzt.<br />

1 10<br />

2 110<br />

3 1110<br />

4 11110<br />

5 111110<br />

6 1111110<br />

7 11111110<br />

8 111111110<br />

9 1111111110<br />

0 11111111110<br />

12.5.2 Tetradencodes<br />

BCD Excess-3 Aiken Gray Gray-Stibitz<br />

0 0000 0011 0000 0000 0010<br />

1 0001 0100 0001 0001 0110<br />

2 0010 0101 0010 0011 0111<br />

3 0011 0110 0011 0010 0101<br />

4 0100 0111 0100 0110 0100<br />

5 0101 1000 1011 0111 1100<br />

6 0110 1001 1100 0101 1101<br />

7 0111 1010 1101 0100 1111<br />

8 1000 1011 1110 1100 1110<br />

9 1001 1100 1111 1101 1010<br />

BCD (Binary Coded Decimal)<br />

Excess-3 heißt auch Stibitz-Code, er vermeidet die Tetraden 0000 (Stromunterbrechung)<br />

<strong>und</strong> 1111 (Dauersignal)<br />

Der Aiken-Code ist ein Stellenwertcode, die Bits stehen für die Werte 2,4,2,1, es<br />

gilt, daß die Ziffer 9 − x das bitweise Komplement der Ziffer x ist.<br />

Der Gray-Code (nach F. Gray 1953) hat die Eigenschaft, daß sich die Tetraden<br />

aufeinanderfolgender Ziffern an genau einer Stelle unterscheiden. Gray-Codes<br />

können über beliebigen q-nären Alphabeten <strong>und</strong> von beliebiger Länge konstruiert<br />

werden, vgl. Beispiel 2.8.<br />

66


12.5.3 Pentadencodes<br />

2 aus 5 CCIT-2<br />

0 11000 01101<br />

1 00011 11101<br />

2 00101 11001<br />

3 00110 10000<br />

4 01001 01010<br />

5 01010 00001<br />

6 01100 10101<br />

7 10001 11100<br />

8 10010 01100<br />

9 10100 00011<br />

Der 2-aus-5-Code wurde <strong>zur</strong> Codierung von Postleitzahlen benutzt. Mit Ausnahme<br />

der Codierung von 0 handelt es sich um einen Stellenwertcode mit den Werten<br />

7,4,2,1,0. Das letzte Bit kann man daher als Paritätskontrollbit deuten.<br />

Der CCIT-2-Code (Comité consultatif international de télégraphie) ist der auf I.<br />

M. Baudot <strong>zur</strong>ückgehende Telegraphencode Nr. 2 im internationalen Fernschreibverkehr.<br />

12.6 Längere Binärcodes<br />

biquinär EBCDI 1 aus 10<br />

0 000001 11110000 0000000001<br />

1 000010 11110001 0000000010<br />

2 000100 11110010 0000000100<br />

3 001000 11110011 0000001000<br />

4 010000 11110100 0000010000<br />

5 100001 11110101 0000100000<br />

6 100010 11110110 0001000000<br />

7 100100 11110111 0010000000<br />

8 101000 11111000 0100000000<br />

9 110000 11111001 1000000000<br />

Der Extended Binary Coded Decimal Interchange Code wurde von IBM entwickelt.<br />

Die ersten 4 Bits bilden den Zonenteil <strong>und</strong> sind stets gleich 1111, die<br />

letzten 4 Bits bilden den Ziffernteil <strong>und</strong> codieren gemäß BCD.<br />

Weitere gebräuchliche Binärcodes für Ziffern findet man bei den EAN-Codierungen.<br />

67


12.7 CCIT-2<br />

Der CCIT-2-Code (Comité consultatif international de télégraphie) ist der auf<br />

Murray <strong>zur</strong>ückgehende Telegraphencode Nr. 2 im internationalen Fernschreibverkehr<br />

(Telex). Er wurde 1932 genormt.<br />

Es gibt zunächst 5 einfache belegte Codewörter, die Steuerzeichen codieren:<br />

SP (Zwischenraum) 00000<br />

CR (Wagenrücklauf) 00010<br />

LF (Zeilenvorschub) 01000<br />

Zeichenumschaltung 11011<br />

Buchstabenumschaltung 11111<br />

Dann ist jedes weitere Codewort doppelt belegt. Die Decodierung erfolgt je nach<br />

Empfang der letzten Buchstabenumschaltung/Zeichenumschaltung.<br />

Buchstabe Zeichen Codewort<br />

A − 11000<br />

B ? 10011<br />

C : 01110<br />

D Wer da? 10010<br />

E 3 10000<br />

F [ 10110<br />

G ] 01011<br />

H 10 00101<br />

I 8 01100<br />

J ; 11010<br />

K ( 11110<br />

L ) 01001<br />

M . 00111<br />

N , 00110<br />

O 9 00011<br />

P 0 01101<br />

Q 1 11101<br />

R 4 01010<br />

S ’ 10100<br />

T 5 00001<br />

U 7 11100<br />

V = 01111<br />

W 2 11001<br />

X / 10111<br />

Y 6 10101<br />

Z + 10001<br />

68


Aufbauend auf dem Bacon-Code benutzte aber schon I. M. Baudot 1874 in seinem<br />

Drucktelegraphen einen 5-Bit-Code <strong>und</strong> Carpentier benutzte 1887 den Fünf-<br />

Spur-Lochstreifen, nachdem Wheatstone schon 1841 gelochte Papierstreifen ins<br />

Fernschreibwesen eingeführt hatte.<br />

69


12.8 ISO-7<br />

International Standards Organization<br />

(*) bezeichnet hier Plätze, die in nationalen Normen auch anders belegt werden<br />

können.<br />

0 1 2 3 4 5 6 7<br />

00 NUL DLE SP 0 @ (*) P (*) p<br />

01 SOH DC1 ! 1 A Q a q<br />

02 STX DC2 ” 2 B R b r<br />

03 ETX DC3 # (*) 3 C S c s<br />

04 EOT DC4 $ 4 D T d t<br />

05 ENQ NAK % 5 E U e u<br />

06 ACK SYN & 6 F V f v<br />

07 BEL ETB ’ 7 G W g h<br />

08 BS CAN ( 8 H X h x<br />

09 HT EM ) 9 I Y i y<br />

10 LF SUB * : J Z j z<br />

11 VT ESC + ; K [ (*) k { (*)<br />

12 FF FS , < L \ (*) l | (*)<br />

13 CR GS - = M ] (*) m } (*)<br />

14 SO RS . > N (*) n ˜(*)<br />

15 SI US / ? O − o DEL<br />

In den ersten beiden Spalten stehen gewisse Steuerzeichen, beispielsweise NUL<br />

= Leerzeichen, EOT = End of Transmission, BEL = Klingelzeichen, LF = Zeilenvorschub,<br />

CR = Wagenrücklauf, SO = Dauerschaltung, SI = Rückschaltung,<br />

CAN = ungültig, EM = End of Message, SUB = Substitutionszeichen, ESC =<br />

Codeumschaltung.<br />

Schreibt man die Zeilennummern hexadezimal, also 10 = A, 11 = B, 12 = C, 13 =<br />

D, 14 = E, 15 = F <strong>und</strong> liest für das Zeichen das Paar (Spaltennummer, Zeilennummer)<br />

als Hexadezimalzahl, so erhält man die Nummer des ASCII-Zeichens.<br />

70


12.9 Flexowriter<br />

Zeichen Codewort Zeichen Codewort<br />

Leerzeichen 00000000 A 01000001<br />

BS 10001000 B 01000010<br />

HT 00001001 C 11000011<br />

CR 00001010 D 01000100<br />

LF 10001101 E 11000101<br />

Zwischenraum 10100000 F 11000110<br />

( 00101000 G 01000111<br />

) 10101001 H 01001000<br />

% 10100101 I 11001001<br />

: 00111010 J 11001010<br />

/ 10101111 K 01001011<br />

+ 00101011 L 11001100<br />

- 00101101 M 01001101<br />

0 00110000 N 01001110<br />

1 10110001 O 11001111<br />

2 10110010 P 01010000<br />

3 00110011 Q 11010001<br />

4 10110100 R 11010010<br />

5 00110101 S 01010011<br />

6 00110110 T 11010100<br />

7 10110111 U 01010101<br />

8 10111000 V 01010110<br />

9 00111001 W 11010111<br />

Löschung einer Irrung 11111111 X 11011000<br />

Y 01011001<br />

Z 01011010<br />

Das höchstwertige Bit ist ein Paritätskontrollbit.<br />

71


12.10 IBM-Lochkarten-Code<br />

Hermann Hollerith (1860 - 1929) benutzte erstmals 1889 bei der statistischen Auswertung<br />

der amerikanischen Volkszählung die Binärverschlüsselung von Daten auf<br />

Lochkarten. Alphanumerische Lochkartenmaschinen wurden 1931 eingeführt.<br />

Zeichen Codewort Zeichen Codewort<br />

0 001000000000 S 001010000000<br />

1 000100000000 T 001001000000<br />

2 000010000000 U 001000100000<br />

3 000001000000 V 001000010000<br />

4 000000100000 W 001000001000<br />

5 000000010000 X 001000000100<br />

6 000000001000 Y 001000000010<br />

7 000000000100 Z 001000000001<br />

8 000000000010 Zwischenraum 000000000000<br />

9 000000000001 ≥ 000010000010<br />

A 100100000000 = 000001000010<br />

B 100010000000 ’ 000000100010<br />

C 100001000000 : 000000010010<br />

D 100000100000 ¿ 000000001010<br />

E 100000010000 ˆ 000000000110<br />

F 100000001000 + 100000000000<br />

G 100000000100 ≤ 100010000010<br />

H 100000000010 . 100001000010<br />

I 100000000001 ) 100000100010<br />

J 010100000000 [ 100000010010<br />

K 010010000000 ¡ 100000001010<br />

L 010001000000 | 100000000110<br />

M 010000100000 - 010000000000<br />

N 010000010000 ’ 010010000010<br />

O 010000001000 $ 010001000010<br />

P 010000000100 * 010000100010<br />

Q 010000000010 ] 010000010010<br />

R 010000000001 ; 010000001010<br />

− 010000000110<br />

/ 001100000000<br />

≠ 001010000010<br />

, 001001000010<br />

( 001000100010<br />

10 001000010010<br />

‘ 001000001010<br />

∨ 001000000110<br />

72


12.11 Hexadezimalcode<br />

Zahl Binärdarstellung Hexadezimalcode<br />

0 0000 0<br />

1 0001 1<br />

2 0010 2<br />

3 0011 3<br />

4 0100 4<br />

5 0101 5<br />

6 0110 6<br />

7 0111 7<br />

8 1000 8<br />

9 1001 9<br />

10 1010 A<br />

11 1011 B<br />

12 1100 C<br />

13 1101 D<br />

14 1110 E<br />

15 1111 F<br />

Bytes (also Folgen von 8 Bits) werden oft durch zwei Hexadezimalzeichen dargestellt:<br />

Byte Hexadezimalcode<br />

00000000 00<br />

00000001 01<br />

.<br />

.<br />

00001111 0F<br />

00010000 10<br />

.<br />

.<br />

11111110 FE<br />

11111111 FF<br />

73


12.12 Bacon-Code (um 1580)<br />

Francis Bacon (1561 - 1626), englischer Philosoph<br />

a<br />

b<br />

c<br />

d<br />

e<br />

f<br />

g<br />

h<br />

i<br />

k<br />

l<br />

m<br />

n<br />

o<br />

p<br />

q<br />

r<br />

s<br />

t<br />

v<br />

w<br />

x<br />

y<br />

z<br />

AAAAA<br />

AAAAB<br />

AAABA<br />

AAABB<br />

AABAA<br />

AABAB<br />

AABBA<br />

AABBB<br />

ABAAA<br />

ABAAB<br />

ABABA<br />

ABABB<br />

ABBAA<br />

ABBAB<br />

ABBBA<br />

ABBBB<br />

BAAAA<br />

BAAAB<br />

BAABA<br />

BAABB<br />

BABAA<br />

BABAB<br />

BABBA<br />

BABBB<br />

74


12.13 EAN-13-Codierungen<br />

Codiert werden 13 Ziffern c 1 c 2 . . . c 7 c 8 . . . c 13 . Dabei bestimmt die Ziffer c 1 durch<br />

Code D, nach welchem Code (A bzw. B) die jeweilige Ziffer c 2 , c 3 , . . . , c 7 codiert<br />

wird. Die Ziffern c 8 , . . . c 13 werden alle nach dem Code C codiert.<br />

Zeichen Code A Code B Code C Code D<br />

0 0001101 0100111 1110010 AAAAAA<br />

1 0011001 0110011 1100110 AABABB<br />

2 0010011 0011011 1101100 AABBAB<br />

3 0111101 0100001 1000010 AABBBA<br />

4 0100011 0011101 1011100 ABAABB<br />

5 0110001 0111001 1001110 ABBAAB<br />

6 0101111 0000101 1010000 ABBBAA<br />

7 0111011 0010001 1000100 ABABAB<br />

8 0110111 0001001 1001000 ABABBA<br />

9 0001011 0010111 1110100 ABBABA<br />

75


12.14 Länderkennungen der Euro-Banknoten<br />

Land Kennbuchstabe Alphabetpos. + 10 Quersumme mod 9<br />

Belgien Z 36 0<br />

Griechenland Y 35 8<br />

Deutschland X 34 7<br />

(Dänemark) (W) 33 6<br />

Spanien V 32 5<br />

Frankreich U 31 4<br />

Irland T 30 3<br />

Italien S 29 2<br />

Luxemburg R 28 1<br />

Niederlande P 26 8<br />

Österreich N 24 6<br />

Portugal M 23 5<br />

Finnland L 22 4<br />

(Schweden) (K) 21 3<br />

(Großbritannien) (J) 20 2<br />

Slowenien H 18 0<br />

Zypern G 17 8<br />

Malta F 16 7<br />

Slowakei E 15 6<br />

Estland D 14 5<br />

Die Buchstaben “Q”, “O” <strong>und</strong> “I” wurden nicht vergeben.<br />

Griechenland hat mit Dänemark getauscht, da kein griechischer Buchstabe “W”<br />

existiert.<br />

Luxemburg verausgabt keine Banknoten.<br />

76


12.15 Prüfzifferncodierung der DM-Scheine von 1990 -<br />

2001<br />

12.15.1 Codierung der Buchstaben<br />

A D G K L N S U Y Z<br />

0 1 2 3 4 5 6 7 8 9<br />

12.15.2 Verknüpfungstafel der Diedergruppe D5<br />

| 0 1 2 3 4 5 6 7 8 9<br />

0 | 0 1 2 3 4 5 6 7 8 9<br />

1 | 1 2 3 4 0 6 7 8 9 5<br />

2 | 2 3 4 0 1 7 8 9 5 6<br />

3 | 3 4 0 1 2 8 9 5 6 7<br />

4 | 4 0 1 2 3 9 5 6 7 8<br />

5 | 5 9 8 7 6 0 4 3 2 1<br />

6 | 6 5 9 8 7 1 0 4 3 2<br />

7 | 7 6 5 9 8 2 1 0 4 3<br />

8 | 8 7 6 5 9 3 2 1 0 4<br />

9 | 9 8 7 6 5 4 3 2 1 0<br />

12.15.3 Verwendete Permutation <strong>und</strong> ihre Potenzen<br />

∗ | 0 1 2 3 4 5 6 7 8 9<br />

π | 1 5 7 6 2 8 3 0 9 4<br />

π 2 | 5 8 0 3 7 9 6 1 4 2<br />

π 3 | 8 9 1 6 0 4 3 5 2 7<br />

π 4 | 9 4 5 3 1 2 6 8 7 0<br />

π 5 | 4 2 8 6 5 7 3 9 0 1<br />

π 6 | 2 7 9 3 8 0 6 4 1 5<br />

π 7 | 7 0 4 6 9 1 3 2 5 8<br />

π 8 | 0 1 2 3 4 5 6 7 8 9<br />

π 9 | 1 5 7 6 2 8 3 0 9 4<br />

π 10 | 5 8 0 3 7 9 6 1 4 2<br />

77


12.16 Prüfzifferncode bei Schweizer Einzahlungsscheinen<br />

Verknüpfungstafel der verwendeten Quasigruppe<br />

∗ | 0 1 2 3 4 5 6 7 8 9<br />

0 | 0 9 4 6 8 2 7 1 3 5<br />

1 | 9 4 6 8 2 7 1 3 5 0<br />

2 | 4 6 8 2 7 1 3 5 0 9<br />

3 | 6 8 2 7 1 3 5 0 9 4<br />

4 | 8 2 7 1 3 5 0 9 4 6<br />

5 | 2 7 1 3 5 0 9 4 6 8<br />

6 | 7 1 3 5 0 9 4 6 8 2<br />

7 | 1 3 5 0 9 4 6 8 2 7<br />

8 | 3 5 0 9 4 6 8 2 7 1<br />

9 | 5 0 9 4 6 8 2 7 1 3<br />

78


12.17 Fehlerhäufigkeiten bei der Ziffernübermittlung<br />

Verhoeff führte 1969 eine Untersuchung über das Auftreten verschiedener Fehler<br />

bei der Übermittlung sechsstelliger Zahlen (in niederländischer Sprache) durch.<br />

Fehlertyp Beispiel rel. Häufigkeit<br />

Einzelfehler a → a ′ 79.0 %<br />

Nachbartranspositionen ab → ba 10.2 %<br />

Sprungtranspositionen acb → bca 0.8 %<br />

Zwillingsfehler aa → bb 0.6 %<br />

Phonetische Fehler a0 → 1a(a ≥ 3) 0.5%<br />

Sprung-Zwillingsfehler aca → bcb 0.3%<br />

Restliche Fehler 8.6%<br />

Die Fehlerhäufigkeit war nicht für alle Stellen gleich. Die letzten beiden Stellen<br />

waren doppelt so oft betroffen wie die anderen. Die Häufigkeit von Fehlern steigt<br />

mit der Länge der übermittelten Zahlen. Das (hier statistisch nicht betrachtete)<br />

Auslassen von Ziffern tritt mit einer Wahrscheinlichkeit zwischen 10 <strong>und</strong> 20<br />

Prozent auf, bevorzugt an der letzten Stelle <strong>und</strong> bei der Ziffer 0. Die Art der<br />

Zahlenübermittlung (beispielsweise per Telefon oder handschriftlich) beeinflußt<br />

die Fehlerhäufigkeiten erheblich.<br />

79


12.18 Eight-To-Fourteen-Modulation (EFM)<br />

Byte Codewort Byte Codewort<br />

00000000 01001000100000 01000000 01001000100100<br />

00000001 10000100000000 01000001 10000100100100<br />

00000010 10010000100000 01000010 10010000100100<br />

00000011 10001000100000 01000011 10001000100100<br />

00000100 01000100000000 01000100 01000100100100<br />

00000101 00000100010000 01000101 00000000100100<br />

00000111 00100100000000 01000111 00100100100100<br />

00001000 01001001000000 01001000 01001001000100<br />

00001001 10000001000000 01001001 10000001000100<br />

00001010 10010001000000 01001010 10010001000100<br />

00001011 10001001000000 01001011 10001001000100<br />

00001100 01000001000000 01001100 01000001000100<br />

00001101 00000001000000 01001101 00000001000100<br />

00001111 00100001000000 01001111 00100001000100<br />

00010000 10000000100000 01010000 10000000100100<br />

00010001 10000010000000 01010001 10000010000100<br />

00010010 10010010000000 01010010 10010010000100<br />

00010011 00100000100000 01010011 00100000100100<br />

00010100 01000010000000 01010100 01000010000100<br />

00010101 00000010000000 01010101 00000010000100<br />

00010110 00010010000000 01010110 00010010000100<br />

00010111 00100010000000 01010111 00100010000100<br />

00011000 01001000010000 01011000 01001000000100<br />

00011001 10000000010000 01011001 10000000000100<br />

00011010 10010000010000 01011010 10010000000100<br />

00011011 10001000010000 01011011 10001000000100<br />

00011100 01000000010000 01011100 01000000000100<br />

00011101 00001000010000 01011101 00001000000100<br />

00011110 00010000010000 01011110 00010000000100<br />

00011111 00100000010000 01011111 00100000000100<br />

00100000 00000000100000 01100000 01001000100010<br />

00100001 10000100001000 01100001 10000100100010<br />

00100010 00001000100000 01100010 10010000100010<br />

00100011 00100100100000 01100011 10001000100010<br />

00100100 01000100001000 01100100 01000100100010<br />

00100101 00000100001000 01100101 00000000100010<br />

00100110 01000000100000 01100110 01000000100100<br />

00100111 00100100001000 01100111 00100100100010<br />

00101000 01001001001000 01101000 01001001000010<br />

80


Byte Codewort Byte Codewort<br />

00101001 10000001001000 01101001 10000001000010<br />

00101010 10010001001000 01101010 10010001000010<br />

00101011 10001001001000 01101011 10001001000010<br />

00101100 01000001001000 01101100 01000001000010<br />

00101101 00000001001000 01101101 00000001000010<br />

00101110 00010001001000 01101110 00010001000010<br />

00101111 00100001001000 01101111 00100001000010<br />

00110000 00000100000000 01110000 10000000100010<br />

00110001 10000010001000 01110001 10000010000010<br />

00110010 10010010001000 01110010 10010010000010<br />

00110011 10000100010000 01110011 00100000100010<br />

00110100 01000010001000 01110100 01000010000010<br />

00110101 00000010001000 01110101 00000010000010<br />

00110110 00010010001000 01110110 00010010000010<br />

00110111 00100010001000 01110111 00100010000010<br />

00111000 01001000001000 01111000 01001000000010<br />

00111001 10000000001000 01111001 00001001001000<br />

00111010 10010000001000 01111010 10010000000010<br />

00111011 10001000001000 01111011 10001000000010<br />

00111100 01000000001000 01111100 01000000000010<br />

00111101 00001000001000 01111101 00001000000010<br />

00111110 00010000001000 01111110 00010000000010<br />

00111111 00100000001000 01111111 00100000000010<br />

Byte Codewort Byte Codewort<br />

10000000 01001000100001 11000000 01000100100000<br />

10000001 10000100100001 11000001 10000100010001<br />

10000010 10010000100001 11000010 10010010010000<br />

10000011 10001000100001 11000011 00001000100100<br />

10000100 01000100100001 11000100 01000100010001<br />

10000101 00000000100001 11000101 00000100010001<br />

10000110 00010000100001 11000110 00010010010000<br />

10000111 00100100100001 11000111 00100100010001<br />

10001000 01001001000001 11001000 00001001000001<br />

10001001 10000001000001 11001001 10000100000001<br />

10001010 10010001000001 11001010 00001001000100<br />

10001011 10001001000001 11001011 00001001000000<br />

10001100 01000001000001 11001100 01000100000001<br />

10001101 00000001000001 11001101 00000100000001<br />

10001110 00010001000001 11001110 00000010010000<br />

10001111 00100001000001 11001111 00100100000001<br />

81


Byte Codewort Byte Codewort<br />

10010000 10000000100001 11010000 00000100100100<br />

10010001 10000010000001 11010001 10000010010001<br />

10010010 10010010000001 11010010 10010010010001<br />

10010011 00100000100001 11010011 10000100100000<br />

10010100 01000010000001 11010100 01000010010001<br />

10010101 00000010000001 11010101 00000010010001<br />

10010110 00010010000001 11010110 00010010010001<br />

10010111 00100010000001 11010111 00100010010001<br />

10011000 01001000000001 11011000 01001000010001<br />

10011001 10000010010000 11011001 10000000010001<br />

10011010 10010000000001 11011010 10010000010001<br />

10011011 10001000000001 11011011 10001000010001<br />

10011100 01000010010000 11011100 01000000010001<br />

10011101 00001000000001 11011101 00001000010001<br />

10011110 00010000000001 11011110 00010000010001<br />

10011111 00100010010000 11011111 00100000010001<br />

10100000 00001000100001 11100000 01000100000010<br />

10100001 10000100001001 11100001 00000100000010<br />

10100010 01000100010000 11100010 10000100010010<br />

10100011 00000100100001 11100011 00100100000010<br />

10100100 01000100001001 11100100 01000100010010<br />

10100101 00000100001001 11100101 00000100010010<br />

10100110 01000000100001 11100110 01000000100010<br />

10100111 00100100001001 11100111 00100100010010<br />

10101000 01001001001001 11101000 10000100000010<br />

10101001 10000001001001 11101001 10000100000100<br />

10101010 10010001001001 11101010 00001001001001<br />

10101011 10001001001001 11101011 00001001000010<br />

10101100 01000001001001 11101100 01000100000100<br />

10101101 00000001001001 11101101 00000100000100<br />

10101110 00010001001001 11101110 00010000100010<br />

10101111 00100001001001 11101111 00100100000100<br />

10110000 00000100100000 11110000 00000100100010<br />

10110001 10000010001001 11110001 10000010010010<br />

10110010 10010010001001 11110010 10010010010010<br />

10110011 00100100010000 11110011 00001000100010<br />

10110100 01000010001001 11110100 01000010010010<br />

10110101 00000010001001 11110101 00000010010010<br />

10110110 00010010001001 11110110 00010010010010<br />

10110111 00100010001001 11110111 00100010010010<br />

82


Byte Codewort Byte Codewort<br />

10111000 01001000001001 11111000 01001000010010<br />

10111001 10000000001001 11111001 10000000010010<br />

10111010 10010000001001 11111010 10010000010010<br />

10111011 10001000001001 11111011 10001000010010<br />

10111100 01000000001001 11111100 01000000010010<br />

10111101 00001000001001 11111101 00001000010010<br />

10111110 00010000001001 11111110 00010000010010<br />

10111111 00100000001001 11111111 00100000010010<br />

83


12.19 DES<br />

12.19.1 Verwendete Permutationen/Expansion<br />

IP IP −1 PC1 PC2 P E IP IP −1 PC1 PC2 E<br />

1 58 40 57 14 16 32 33 57 36 31 51 22<br />

2 50 8 49 17 7 1 34 49 4 23 45 23<br />

3 42 48 41 11 20 2 35 41 44 15 33 24<br />

4 34 16 33 24 21 3 36 33 12 7 48 25<br />

5 26 56 25 1 29 4 37 25 52 62 44 24<br />

6 18 24 17 5 12 5 38 17 20 54 49 25<br />

7 10 64 9 3 28 4 39 9 60 46 39 26<br />

8 2 32 1 28 17 5 40 1 28 38 56 27<br />

9 60 39 58 15 1 6 41 59 35 30 34 28<br />

10 52 7 50 6 15 7 42 51 3 22 53 29<br />

11 44 47 42 21 23 8 43 43 43 14 46 28<br />

12 36 15 34 10 26 9 44 35 11 6 42 29<br />

13 28 55 26 23 5 8 45 27 51 61 50 30<br />

14 20 23 18 19 18 9 46 19 19 53 36 31<br />

15 12 63 10 12 31 10 47 11 59 45 29 32<br />

16 4 31 2 4 10 11 48 3 27 37 32 1<br />

17 62 38 59 26 2 12 49 61 34 29<br />

18 54 6 51 8 8 13 50 53 2 21<br />

19 46 46 43 16 24 12 51 45 42 13<br />

20 38 14 35 7 14 13 52 37 10 5<br />

21 30 54 27 27 32 14 53 29 50 28<br />

22 22 22 19 20 27 15 54 21 18 20<br />

23 14 62 11 13 3 16 55 13 58 12<br />

24 6 30 3 2 9 17 56 5 26 4<br />

25 64 37 60 41 19 16 57 63 33<br />

26 56 5 52 52 13 17 58 55 1<br />

27 48 45 44 31 30 18 59 47 41<br />

28 40 13 36 37 6 19 60 39 9<br />

29 32 53 63 47 22 20 61 31 49<br />

30 24 21 55 55 11 21 62 23 17<br />

31 16 61 47 30 4 20 63 15 57<br />

32 8 29 39 40 25 21 64 7 25<br />

84


12.19.2 S-Boxen<br />

S<br />

1<br />

S<br />

2<br />

S<br />

3<br />

S<br />

4<br />

S<br />

5<br />

S<br />

6<br />

S<br />

7<br />

S<br />

8<br />

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />

0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7<br />

1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8<br />

2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0<br />

3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13<br />

0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10<br />

1 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5<br />

2 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15<br />

3 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9<br />

0 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8<br />

1 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1<br />

2 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7<br />

3 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12<br />

0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15<br />

1 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9<br />

2 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4<br />

3 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14<br />

0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9<br />

1 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6<br />

2 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14<br />

3 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3<br />

0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11<br />

1 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8<br />

2 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6<br />

3 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13<br />

0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1<br />

1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6<br />

2 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2<br />

3 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12<br />

0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7<br />

1 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2<br />

2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8<br />

3 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11<br />

85


12.19.3 R<strong>und</strong>enschlüssel<br />

R<strong>und</strong>e 1<br />

R<strong>und</strong>e 2<br />

R<strong>und</strong>e 3<br />

R<strong>und</strong>e 4<br />

R<strong>und</strong>e 5<br />

R<strong>und</strong>e 6<br />

R<strong>und</strong>e 7<br />

R<strong>und</strong>e 8<br />

10 51 34 60 49 17 33 57 2 9 19 42<br />

3 35 25 25 44 58 59 1 36 27 18 41<br />

22 28 39 54 37 4 47 30 5 53 23 29<br />

61 21 38 63 15 20 45 14 13 62 55 31<br />

2 43 26 52 41 9 25 49 59 1 11 34<br />

60 27 18 17 36 50 51 58 57 19 10 33<br />

14 20 31 46 29 63 39 22 28 45 15 21<br />

53 13 30 55 7 12 37 6 5 54 47 23<br />

51 27 10 36 25 58 9 33 43 50 60 18<br />

44 11 2 1 49 34 35 42 41 3 59 17<br />

61 4 15 30 13 47 23 6 12 29 62 5<br />

37 28 14 39 54 63 21 53 20 38 31 7<br />

35 11 59 49 9 42 58 17 27 34 44 2<br />

57 60 51 50 33 18 19 26 25 52 43 1<br />

45 55 62 14 28 31 7 53 63 13 46 20<br />

21 12 61 23 38 47 5 37 4 22 15 54<br />

19 60 43 33 58 26 42 1 11 18 57 51<br />

41 44 35 34 17 2 3 10 9 36 27 50<br />

29 39 46 61 12 15 54 37 47 28 30 4<br />

5 63 45 7 22 31 20 21 55 6 62 38<br />

3 44 27 17 42 10 26 50 60 2 41 35<br />

25 57 19 18 1 51 52 59 58 49 11 34<br />

13 23 30 45 63 62 38 21 31 12 14 55<br />

20 47 29 54 6 15 4 5 39 53 46 22<br />

52 57 11 1 26 59 10 34 44 51 25 19<br />

9 41 3 2 50 35 36 43 42 33 60 18<br />

28 7 14 29 47 46 22 5 15 63 61 39<br />

4 31 13 38 53 62 55 20 23 37 30 6<br />

36 41 60 50 10 43 59 18 57 35 9 3<br />

58 25 52 51 34 19 49 27 26 17 44 2<br />

12 54 61 13 31 30 6 20 62 47 45 23<br />

55 15 28 22 37 46 39 4 7 21 14 53<br />

86


R<strong>und</strong>e 9<br />

R<strong>und</strong>e 10<br />

R<strong>und</strong>e 11<br />

R<strong>und</strong>e 12<br />

R<strong>und</strong>e 13<br />

R<strong>und</strong>e 14<br />

R<strong>und</strong>e 15<br />

R<strong>und</strong>e 16<br />

57 33 52 42 2 35 51 10 49 27 1 60<br />

50 17 44 43 26 11 41 19 18 9 36 59<br />

4 46 53 5 23 22 61 12 54 39 37 15<br />

47 7 20 14 29 38 31 63 62 13 6 45<br />

41 17 36 26 51 19 35 59 33 11 50 44<br />

34 1 57 27 10 60 25 3 2 58 49 43<br />

55 30 37 20 7 6 45 63 38 23 21 62<br />

31 54 4 61 13 22 15 47 46 28 53 29<br />

25 1 49 10 35 3 19 43 17 60 34 57<br />

18 50 41 11 59 44 9 52 51 42 33 27<br />

39 14 21 4 54 53 29 47 22 7 5 46<br />

15 38 55 45 28 6 62 31 30 12 37 13<br />

9 50 33 59 19 52 3 27 1 44 18 41<br />

2 34 25 60 43 57 58 36 35 26 17 11<br />

23 61 5 55 38 37 13 31 6 54 20 30<br />

62 22 39 29 12 53 46 15 14 63 21 28<br />

58 34 17 43 3 36 52 11 50 57 2 25<br />

51 18 9 44 27 41 42 49 19 10 1 60<br />

7 45 20 39 22 21 28 15 53 38 4 14<br />

46 6 23 13 63 37 30 62 61 47 5 12<br />

42 18 1 27 52 49 36 60 34 41 51 9<br />

35 2 58 57 11 25 26 33 3 59 50 44<br />

54 29 4 23 6 5 12 62 37 22 55 61<br />

30 53 7 28 47 21 14 46 45 31 20 63<br />

26 2 50 11 36 33 49 44 18 25 35 58<br />

19 51 42 41 60 9 10 17 52 43 34 57<br />

38 13 55 7 53 20 63 46 21 6 39 45<br />

14 37 54 12 31 5 61 30 29 15 4 47<br />

18 59 42 3 57 25 41 36 10 17 27 50<br />

11 43 34 33 52 1 2 9 44 35 26 49<br />

30 5 47 62 45 12 55 38 13 61 31 37<br />

6 29 46 4 23 28 53 22 21 7 63 39<br />

87


12.20 Quantencodierung<br />

12.20.1 Schlüsselvereinbarung<br />

Ein Eintrag 0|1 bedeutet, daß nach den Gesetzen der Quantenmechanik der<br />

Empfänger mit 50 % Wahrscheinlichkeit ein Photon registriert oder nicht. Derartige<br />

Bits werden vom Sender aussortiert. In der Hälfte aller Fälle wird also<br />

eindeutig ein Bit vereinbart, in der anderen Hälfte wird das Bit verworfen.<br />

Sender Empfänger Prozent gemessenes<br />

Eingabe Messung der Fälle Bit<br />

↕ ↕ 25 1<br />

↕ ↔ 25 0<br />

↕ ↗ 25 0|1<br />

↕ ↘ 25 0|1<br />

↔ ↕ 25 0<br />

↔ ↔ 25 1<br />

↔ ↗ 25 0|1<br />

↔ ↘ 25 0|1<br />

↗ ↕ 25 0|1<br />

↗ ↔ 25 0|1<br />

↗ ↗ 25 1<br />

↗ ↘ 25 0<br />

↘ ↕ 25 0|1<br />

↘ ↔ 25 0|1<br />

↘ ↗ 25 0<br />

↘ ↘ 25 1<br />

12.20.2 Abgehörter Quantenkanal<br />

Sender Angreifer Prozent gem. Angreifer Empfänger gem.<br />

Eingabe Messung der Fälle Bit Eingabe Messung Bit<br />

↕ ↕ 25 1 ↕ ↕ 1<br />

↕ ↔ 25 0 ↕ ↕ 1<br />

↕ ↗ 12.5 1 ↗ ↕ 0|1<br />

↕ ↗ 12.5 0 ↘ ↕ 0|1<br />

↕ ↘ 12.5 1 ↘ ↕ 0|1<br />

↕ ↘ 12.5 0 ↗ ↕ 0|1<br />

In 25 % der Fälle stört der Angreifer also ein vereinbartes Bit. Dies läßt sich<br />

beispielsweise durch den Vergleich zufällig ausgewählter Paritätsbits feststellen.<br />

88

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!