Codierung & Verschlüsselung Prof. Dr. P. Hauck Vorlesungsskript Wintersemester 2009/2010 http://www-dm.informatik.uni-tuebingen.de/lehre/c+v/ws0910/ http://www-dm.informatik.uni-tuebingen.de/skripte/codierungundverschluesselung/cuv_ws2009-2010.pdf Dieser Vorlesungsskript wurde von Matthias Müller (muellmat@informatik.uni-tuebingen.de) in LATEX angefertigt. Die letzte Aktualisierung erfolgte am 14. Mai 2010. Fehler gefunden? Bitte melden!
Alice and Bob c by Randall Munroe (CC-BY-NC-2.5), http://xkcd.com/177/
Inhaltsverzeichnis I Vorbemerkung 1 1 Inhalt 1 1.1 Kryptologie........................................ 1 1.2 Codierungstheorie.................................... 1 1.3 Literatur......................................... 1 II Kryptologie 2 2 Grundbegriffe und einfache Verfahren 2 2.1 Beispiel für (nicht sicheres) symmetrisches Verfahren................. 3 2.2 Zusammenfassung.................................... 4 3 One-Time-Pad und perfekte Sicherheit 5 3.1 Lauftextverschlüsselung................................. 5 3.2 One-Time-Pad...................................... 6 3.3 Perfekte Sicherheit des One-Time-Pads......................... 7 4 Symmetrische Blockchiffren 7 5 Affin-lineare Chiffren 8 5.1 Vorbemerkung zu affin-linearen Chiffren........................ 8 5.2 Affin-lineare Chiffren................................... 9 5.3 Known-Plaintext-Angfriff auf affin-lineare Chiffren.................... 10 6 Der Advanced Encryption Standard (AES) 12 6.1 Hilfsmittel........................................ 13 6.2 Der Rijndael-Algorithmus im Detail........................... 15 6.2.1 Sub-Bytes Transformation............................ 15 6.2.2 Shift-Rows Transformation........................... 15 6.2.3 Mix-Columns Transformation.......................... 15 6.2.4 Schlüsselerzeugung............................... 16 6.2.5 Entschlüsselung................................. 16 6.3 Zusammenfassung.................................... 16 7 Public-Key-Systeme 17 7.1 RSA-Verfahren...................................... 17 7.1.1 Schlüsselerzeugung für Teilnehmer A...................... 17 7.1.2 Verschlüsselung................................. 18 7.1.3 Entschlüsselung................................. 18 7.1.4 Wie berechnet man schnell modulare Potenzen?................ 19 7.1.5 Sicherheit.................................... 20 7.1.6 Wie bestimmt man große Primzahlen?..................... 21 7.2 Diffie-Hellman-Verfahren zur Schlüsselvereinbarung.................. 21 7.2.1 Man-in-the-middle Angriff............................ 22
Codierung & Verschlüsselung 4 7.3 ElGamal-Public Key Verfahren............................. 22 8 Signaturen, Hashfunktionen, Authentifizierung 23 8.1 RSA-Signatur...................................... 23 8.1.1 Vereinfachte Version der RSA-Signatur..................... 23 8.1.2 RSA-Signatur mit Hashfunktion......................... 23 8.2 Authentifizierung..................................... 26 8.2.1 Authentifzierung durch Passwort........................ 26 8.2.2 Challenge-Response-Authentifikation...................... 27 9 Secret Sharing Schemas 27 III Codierung 29 10 Grundbegriffe und einfache Beispiele 29 10.1 Grundbegriffe...................................... 29 10.2 Beispiele......................................... 30 11 Blockcodes 33 11.1 Fehlerkorrektur...................................... 33 11.2 Perfekte Codes...................................... 35 11.2.1 Kugelpackungsschranke und Charakterisierung perfekter Codes........ 35 11.2.2 Beispiele perfekter Codes............................ 36 12 Lineare Codes 37 12.1 Definition und einfache Beispiele............................ 37 12.2 Erzeugermatrizen.................................... 38 12.3 Kontrollmatrizen..................................... 39 12.4 Kontrollmatrizen und Minimalabstand......................... 41 12.5 Syndrom-Decodierung linearer Codes.......................... 42 13 Beispiele guter linearer Codes 45 13.1 Hamming-Codes..................................... 45 13.2 Reed-Solomon-Codes.................................. 47 13.3 MDS-Codes....................................... 48 14 Codierung von Audio-CDs 49 14.1 Bündelfehler und Auslöschungen............................ 49 14.2 Cross-Interleaving.................................... 50 14.3 Audio-CD........................................ 52 14.4 Datenspeicherung auf Audio-CDs............................ 52
Codierung & Verschlüsselung 1 Teil I Vorbemerkung 1 Inhalt Bei Übertragung (Speicherung) von Daten: Schutz vor zufälligen oder systematisch (physikalisch) bedingten Störungen (Kanalcodierung 1 ) Abhören, absichtliche Veränderung durch (unbefugte) Dritte (Kryptologie) Verschlüsselungsverfahren 1.1 Kryptologie symmetrische Verfahren asymmetrische Verfahren (Public-Key-Verfahren) Authentifizierung Signaturen 1.2 Codierungstheorie Fehlererkennung und Fehlerkorrektur lineare Blockcodes Decodierverfahren 1.3 Literatur siehe Anhang, Seite I 1 Kanalcodierung Quellencodierung
Codierung & Verschlüsselung 2 Teil II Kryptologie 2 Grundbegriffe und einfache Verfahren Sender (Alice) Angreifer (Mallory/Eve) Empfänger (Bob) Klartext (Zeichenfolge über Alphabet R) plain text Verschlüsselung encryption Chiffretext (Geheimtext) ciphertext Entschlüsselung decryption Klartext Abbildung 1: Verschlüsselung Verschlüsselung erfordert: Verschlüsselungsverfahren, Algorithmus (Funktion) Schlüssel k e (encryption key) Schlüssel k d (decryption key) E(m, k e ) = c D(c, k d ) = m k d = k e (oder k d leicht aus k e zu berechnen) ansonsten m = Klartext k e = Schlüssel c = Chiffretext k d = zu k e gehöhrende Dechiffrierschlüssel symm. Verschlüsselungsverfahren asymm. Verschlüsselungsverfahren Ist k d nur sehr schwer oder gar nicht aus k e berechenbar, so kann k e veröffentlicht werden. (Public- Key-Verfahren 2 ) 2 Public-Key-Verschlüsselung: http://www.gnupg.org/gph/de/manual/x96.html
Codierung & Verschlüsselung 3 asymmetrisch kein Austausch nötig symmetrisch Schlüssel sicher austauschen, z. B. via PKV Abbildung 2: Asymmetrische und symmetrische Verschlüsselung 2.1 Beispiel für (nicht sicheres) symmetrisches Verfahren (a) R = S = {0, 1,..., 25} Verschiebechiffre mit Schlüssel: i {0, 1,..., 25} Verfahren: x R x + i mod 26 = y y S y i mod 26 = x m = x 1... x r c = (x 1 + i mod 26)... (x r + i mod 26) Das Verfahren ist nicht sicher, da die Schlüsselmenge zu klein ist. (Brute Force-Angriff!) (b) Verallgemeinerung: R, S wie in (a), Schlüsselmenge = Menge aller Permutationen von {0, 1,..., 25} = S 26 Verschlüsselung: Wähle Permutation π x R( π(x) = y ) 0 1 2 3... 25 π = 3 17 4 19...... π(0) = 3 π(1) = 17... =... Entschlüsselung: y π 1 (y) = x m = x 1... x r c = π(x 1 )... (x r ) S 26 = 26! 4 10 26 Brute Force Angriff nicht möglich: 50% der Permutationen testen, 10 12 Permutationen pro Sekunde. Aufwand: 2 10 14 Sekunden 6 10 6 Jahre Solche Verfahren nennt man Substitutionschiffren.
Codierung & Verschlüsselung 4 Trotzdem unsicher! Grund: Charakteristische Häufigkeitsverteilung von Buchstaben in natürlichsprachlichen Texten. Bei genügend langem Chiffretext: Häufigster Buchstabe in Chiffretext = E. Für die 10 12 häufigsten Buchstaben bleiben dann nur wenige Möglichkeiten. Außerdem: Digrammhäufigkeiten benutzen. Inhaltliche Analyse liefert dann meist schon den Klartext. Wir sehen an diesem Beispiel: Verschlüsselungsverfahren beinhaltet viele Verschlüsselungsmöglichkeiten, die jeweils durch einen Schlüssel festgelegt sind. Kommunikationspartner müssen sich zunächst grundsätzlich über das Verschlüsselungsverfahren einigen. Vor der Übertragung müssen Schlüssel auf sicherem Wege vereinbart werden (entfällt bei Public- Key-Verfahren). k d muss geheim gehalten werden. Das Verfahren lässt sich im Allgemeinen nicht geheim halten (und sollte auch nicht geheim gehalten werden Praxistest!). Buchstabe Häufigkeit E 17,5% 27% N 9,8% I 7,7% R 7,2% S 7,1% 35% A 6,5% T 6,1% D 4,9% H 4,5% U 4,3% L 3,5% 28% G 3,0% C 2,9% O 2,7% M 2,5% B 1,9% F 1,7% W 1,7% K 1,3% Z 1,1% P 0,9% 10% V 0,8% J 0,3% Y } X 0,1% Q Tabelle 1: Häufigkeitsverteilung der Buchstaben in deutschsprachigen Texten 2.2 Zusammenfassung Verschlüsselungsverfahren beinhalten viele Verschlüsselungsmöglichkeiten, abhängig von der Auswahl des Schlüssels. Das Verfahren ist bekannt, aber der Schlüssel k d bleibt geheim! Prinzip von Kerckhoffs 3 (1835-1903) Sicherheit eines Verschlüsselungverfahrens darf nicht von der Geheimhaltung des Verfahrens sondern nur von der Geheimhaltung des verwendeten Schlüssels abhängen! Symmetrische Verfahren Schlüssel muss auf sicherem Wege ausgetauscht werden. Warum dann nicht die ganze Nachricht? Nachricht lang, Schlüssel kurz Zeitpunkt der Schlüsselübergabe frei wählbar Schlüssel kann ggf. mehrfach verwendet werden Mit Hilfe von Public-Key-Verfahren kann man Schlüssel ohne Gefahr austauschen (hybride Verfahren) 3 Kerckhoffs Prinzip: http://de.wikipedia.org/wiki/kerckhoffs-prinzip
Codierung & Verschlüsselung 5 Zur Terminologie: Kryptologie (Entwurf) Kryptographie Kryptoanalyse (Angriff) Heute häufig: Kryptologie = Kryptographie Kryptoanalyse: Wie schwer ist ein Verfahren zu knacken? Qualitative Unterschiede hinsichtlich des Erolgs: Schlüssel k d wird gefunden (schlimmster Fall) Eine zu D(, k D ) äquivalente Funktion wird ohne Kenntnis von k d gefunden (ggf. nur für gewisse k d ) Finden des Klartextes für einen abgefangenen Chiffretext Arten von Angriffen: Ciphertext-only-Angriff Known-Plaintext-Angriff Chosen-Plaintext-Angriff Chosen-Ciphertext-Angriff 3 One-Time-Pad und perfekte Sicherheit Gibt es absolut sichere Verschlüsselungsmethoden? Im militärischen Bereich wurden früher häufig sogenannte Lauftextverschlüsselungen verwendet. 3.1 Lauftextverschlüsselung Dazu wurde der Klartext über einem Alphabet Z n geschrieben (z. B. n = 26) und dann wurde ein gleich langer Schlüsseltext über Z n gewählt, der zeichenweise auf den Klartext addiert 4 wurde. Beispiel: Klartext: HALLO 7 0 11 11 14 Schlüssel: HEUTE 7 4 20 19 4 Chiffretext: OEFES 14 4 5 4 18 Dazu musste der Schlüsseltext vorher sicher vereinbart werden. Die geschah häufig so, dass man eine bestimmte Stelle eines bestimmten Buches vereinbarte und der Schlüsseltext war dann der Text des Buches ab dieser Stelle. 4 Addition in Z n
Codierung & Verschlüsselung 6 Klartext: x 1 x 2... x n Schlüssel: k 1 k 2... k n Chiffretext: x 1 + k 1 mod k... x n + k n mod k Dieses Verfahren ist nicht sicher, denn bei einem fortlaufendem natürlichsprachigen Text haben wir unterschiedliche Buchstabenhäufigkeiten (dieselben wie im Klartext), so dass z. B. ein großer Teil der Chiffretextbuchstaben durch Addition von häufigen Buchstaben in Klartext und Schlüsseltext entsteht. Das birgt kryptoanalytische Möglichkeiten. Dennoch kann man diese Idee zur Konstruktion eines perfekt sicheren Verschlüsselungverfahrens verwenden. 3.2 One-Time-Pad Sei Klartextalphabet R = {0, 1} = Z 2. Klartext mit der Länge n über Z 2. Wähle als Schlüsselfolge eine Zufallsfolge k der Länge n über Z 2, addiere bitweise, d. h. XOR-Verknüpfung 5, c = m k, d. h. (x 1,..., x n ) (k 1,..., k n ) = (x 1 k 1,..., x n k n ), falls m = (x 1,..., x n ), k = (k 1,..., k n ). Dieses Verfahren nennt man One-Time-Pad. Wieso One-Time-Pad? Schlüssel k darf nur einmal verwendet werden. m 1 k = c 1 c 1 c 2 = m 1 k m 1 k m 2 k = c 2 = m 1 m 2 Daher ist m 1 m 2 bekannt. Als Summe zweier natürlichsprachiger Texte hat es statistische Auffälligkeiten, die man zur Kryptoanalyse nutzen kann. Zufallsfolge der Länge n ist eigentlich ein unsinniger Begriff. Jedes Bit wird unabhängig von den anderen mit Wahrscheinlichkeit 1 /2 erzeugt (Output einer binären symmetrischen Quelle). Jede Folge der Länge n ist gleich wahrscheinlich (Wahrscheinlichkeit 1 /2 n ). Unter dieser Voraussetzung ist One-Time-Pad perfekt sicher. Ein Verschlüsselungsverfahren ist perfekt sicher, falls gilt: Für jeden Klartext m und jeder Chiffretext c (der festen Länge n) a-posteriori-wahrscheinlichkeit P (m c) = P (m) a-priori-wahrscheinlichkeit P (m c) = Wahrscheinlichkeit 6 dafür, dass es sich bei m um den Klartext handelt, falls der Chiffretext c empfangen wurde. Beispiel: n = 5 m = HALLO P (m) > 0 Angenommen, eine Substitutionschiffre wurde verwendet und c = QITUA wurde empfangen. Dann ist P (m c) = 0, denn bei Substitutionschiffren wurden gleiche Buchstaben gleich verschlüsselt. Man weiß also, dass m nicht gesendet wurde. Substitutionschiffre ist nicht perfekt sicher. 5 XOR-Verknüpfung: 1 1 = 0 = 0 0 1 0 = 1 = 0 1 6 a-posteriori-wahrscheinlichkeit: http://de.wikipedia.org/wiki/a-posteriori-wahrscheinlichkeit. a-priori-wahrscheinlichkeit: http://de.wikipedia.org/wiki/a-priori-wahrscheinlichkeit
Codierung & Verschlüsselung 7 3.3 Perfekte Sicherheit des One-Time-Pads Warum ist One-Time-Pad ist perfekt sicher? Man kann das leicht formal beweisen (Satz von Bayes 7 ). Hier nur die intuitive Begründung: Sei m Z n 2. Alle Schlüssel k Zn 2 sind gleichwahrscheinlich, also auch alle m k (ganz Zn 2 ). m k Jede Folge c lässt sich mit geeignetem k in der Form c = m k erhalten. Wähle k = m c. m k = m m c = c Bei gegebenen m und zufällig gewähltem Schlüssel k ist jeder Chiffretext gleichwahrscheinlich. 4 Symmetrische Blockchiffren Blockchiffre: Nachricht wird in Blöcke (Strings) einer festen Länge n ( 2) zerlegt. Jeder Block wird einzeln verschlüsselt (i. d. R. wieder in einem Block der Länge n). Gleiche Blöcke werden gleich verschlüsselt. (Es gibt andere Betriebsarten, wo die Verschlüsselung von Position im Text abhängt.) Üblicherweise: Klartextblocklänge = Chiffretextlänge = n (nehmen wir jetzt an). } {{ } } {{ } } {{ } } {{ } } {{ } n n n n n Abbildung 3: Zerteilung des Klartextes in Blöcke gleicher Länge Wie viele Blockchiffren der Länge n gibt es? Alphabet Z 2 = {0, 1} (0,..., 0), (0,..., 0, 1),..., (1, 1,..., 1) Block Block Block 2 n Blockchiffre = Anwenden einer Permutation der 2 n Blöcke (Es existieren (2 n )! Permutationen) Wenn alle verwendet werden: Schlüsselmenge = sämtliche Permutationen der 2 n Blöcke (x 11,..., x 1n ), (x 21,..., x 2n ),... Bild von (0,..., 0) Bild von (0,..., 0, 1)... benötigt 2 n Bit um 1 Schlüssel zu speichern Beispiel: n = 64 64 2 64 Bit = 2 6 2 64 Bit = 2 70 Bit 700 Millionen Festplatten mit je 200 GB Konsequenz: Verwende Verfahren, wo nur ein kleiner Teil der Permutationen verwendet wird und sich der Schlüssel dann in kürzerer Form darstellen lässt. Wir geben dafür jetzt einige Beispiele. 7 Bayes sche Formel: http://de.wikipedia.org/wiki/bayessche_statistik
Codierung & Verschlüsselung 8 5 Affin-lineare Chiffren 5.1 Vorbemerkung zu affin-linearen Chiffren n m-matrix a 11... a 1m a 21... a 2m..... a n1... a nm 1 m-matrix ( a 1... ) a m Zeilenvektor n 1-Matrix a 1. a n Spaltenvektor a ij R, R Ring, z. B. a ij Z oder a ij R n m-matrizen A, B a 11... a 1m b 11... b 1m...... +.... a n1... a nm b n1... b nm = a 11 + b 11... a 1m + b 1m..... a n1 + b n1... a nm + b nm A B A B n m m l n l c 11... c 1l A B =..... c n1... c nl c ij = a i1 b 1j + a i2 b 2j +... + a im b mj (A + B) C = A C + B C A (B + C) = A B + A C i. Allg.: A B B A Quadratische Matrizen ( ) n n : E n = 1... 0..... 0... 1 A E n = E n A = A A sei n n-matrix über dem kommutativen Ring R mit Eins. Es existiert inverse Matrix A 1 mit A 1 A = A A 1 = E n, wenn det(a) in R bzgl. der Multiplikation ein Inverses besitzt. ( ) a 11 a 12 2 2-Matrix det(a) = = a 11 a 22 a 12 a 21 a 21 a 22 Allgemein kann man die Determinante einer n n-matrix z. B. mit der Leibniz-Formel berechnen. 1 det(a) b 1 11... det(a) b 1m A 1 =..... b ij = ( 1) i+j det(a ji ) 1 det(a) b 1 n1... det(a) b nm
Codierung & Verschlüsselung 9 A ji ist (n 1) (n 1)-Matrix, die aus A durch Streichen der j-ten Zeile und i-ten Spalte entsteht. ( ) ( ) a 11 a 12 A = A 1 1 = a 21 a 22 det(a) a 22 a 12 a 21 a 11 R = Z k = {0, 1,..., k} Addition und Multiplikation 8 in Z k (, ) r Z k invertierbar bzgl. Multiplikation ggt(r, k) = 1 Beispiel: Z 6 = {0, 1, 2, 3, 4, 5} 5 1 = 5 1 1 = 1 Also: A n n-matrix über Z k. Dann: A invertierbar ggt ( det(a), k ) = 1. 5.2 Affin-lineare Chiffren Klartextalphabet = Chiffretextalphabet = Z k, k N (z. B. k = 2, k = 26) Klartext = Elemente in Z k Entscheidend für affin-lineare Chiffren: Addition und Multiplikation in Z k = normale Addition und Multiplikation in Z k und anschließend mod k reduzieren. Z k ist kommutativer Ring mit Eins. Wähle n n-matrix A über Z k und Zeilenvektor b der Länge n über Z k Schlüssel Blockchiffre der Länge n Block = Zeilenvektor der Länge n über Z k Klartextblock: v Chiffretextblock: w = v A + b 1 n 1 n n n 1 n Verschlüsselung: v va + b = w Wann ist die Chiffrierung v va+b injektiv? (d. h.: Wann gibt es eine Umkehrabbildung?) va + b = w, w b = va. Falls A invertierbar ist (d. h. es existiert A 1 mit A A 1 = E n ), so v = (w b)a 1. Also: Entschlüsselung: w (w b)a 1 = v Genau dann ist A invertierbar, wenn det(a) in Z k invertierbar ist, d. h., wenn ggt ( det(a), k ) = 1. Ist k = p, so ist Z p ein Körper. Dann ist det(a) invertierbar, genau dann, wenn det(a) 0. (Wenn immer b = 0 gewählt wird: lineare Chiffren, Hill-Chiffren) Beachte: Ist v = (v 1,..., v n ) und va + b = (w 1,..., w n ), so hängt jedes w i i. d. R. von allen v 1,..., v n ab ( gute Diffusion). Es handelt sich also nicht um Substitutionschiffre wie in in Kapitel 2, wo jedes Element des Alphabets Z k einzeln substituiert wird. 8 normale Addition bzw. Multiplikation von ganzen Zahlen und anschließend mod k reduzieren.
Codierung & Verschlüsselung 10 ( ) 1 3 Beispiel: A = 3 2 det(a) = 1 2 3 3 7 mod 6 = 5 5 5 25 mod 6 = 1 Z 6 (Blockchiffre der Länge 2) 1 det(a) = det(a) 1 = 5 ( ) ( ) A 1 2 3 10 15 = 5 = 3 1 15 5 ( ) ( ) ( ) Test: A A 1 1 3 4 3 4 + 9 3 + 15 = = 3 2 3 5 12 + 6 9 + 10 = über Z 6 = über Z 6 ( ) 4 3 3 5 ( ) 1 0 0 1 Verschlüsselung: ( ) 1 3 Schlüssel A = 3 2 Chiffretextblock w = b = ( ) 3 5 ( ( ) 1 3 1 2 3 2 ) Klartextblock v = ( ) 1 2 ( ) ( ) ( ) ( ) + 3 5 = 1 1 + 3 5 = 4 0 Entschlüsselung: Klartextblock v = (w b)a 1 = ( ) ( ) 4 3 1 1 3 5 = ( ) 1 2 5.3 Known-Plaintext-Angfriff auf affin-lineare Chiffren. Z 2 : n 2 + n Bit zur Speicherung eines Schlüssels. Wie viele invertierbare n n-matrizen über Z 2, z. B. mit n = 64, existieren? (2 64 1) (2 64 2)... (2 64 2 63 ) 0, 29 2 4096. Große Anzahl von Möglichkeiten! Dennoch: Verfahren ist unsicher gegenüber Known-Plaintext-Angfriff: (A, b) Schlüssel, A invertierbare n n-matrix über Z k, b Z n k Angenommen Angreifer kennt n + 1 Klartext-Chiffretextpaare verschlüsselt mit (A, b). Dann kann er häufig (A, b) bestimmen. v 1 v 0 w 1 w 0 v V = 2 v 0 w n n-matrix Ang: V ist invertierbar Setze W = 2 w 0.. v n v 0 w n w 0
Codierung & Verschlüsselung 11 V A = bekannt (v 1 v 0 )A. (v n v 0 )A = v 1 A + b (v 0 A + b). v n A + b (v 0 A + b) = Da V bekannt, also auch V 1 : A = V 1 W b = w 0 v 0 A w 1 w 0. w n w 0 = W bekannt Beispiel n = 2, k = 26 HE RB ST }{{} 7 4 17 }{{} 1 18 } {{ 19 } v 0 v 1 v 2 NE BL IG 13 }{{} 4 1 }{{} 11 }{{} 8 6 w 0 w 1 w 2 {A-Z} {0 25} v 1 v 0 = v 2 v 0 = ( ) ( ) ( ) 17 7 10 = 1 4 3 ( ) ( ) ( ) 18 7 11 = 19 4 5 ( ) ( ) V = W = 10 3 10 23 = 11 15 11 15 ( ) ( ) 12 7 14 7 = 5 2 21 2 det(v ) = 10 15 + 33 = 183 1 ( ) ( (mod 26) ) V 1 = 15 3 15 3 = 11 10 15 10 A = V 1 W = b = w 0 v 0 A = ( 15 3 15 10 ) ( 14 7 21 2 ( ) ( ) 13 4 7 4 ) ( ) 210 + 63 105 + 6 = = 210 + 210 105 + 26 ( ) 13 7 ( ) = 10 1 4 21 ( ) 13 7 4 21 Test: v 1 A + b = w 1 v 2 A + b = w 2! Hintereinanderausführung von einem Chiffrierverfahren (mit unterschiedlichen Schlüsseln) ist sinnlos, wenn das Verfahren die Gruppeneigenschaft hat. Affin-lineare Chiffren haben die Gruppeneigenschaft: v va + b = w w wb + c = (va + b)b + c = vab } {{ } A + bb + c } {{ } b Hintereinander ausführung zweier affin-linearer Chiffren ist wieder affin-lineare Chiffre.
Codierung & Verschlüsselung 12 6 Der Advanced Encryption Standard (AES) Seit 70 er Jahren: DES 9 (Blocklänge 64 Bit, Schlüssellänge 56 Bit) Gute Blockchiffre, Ende der 90 er Jahre unsicher wegen möglicher Brute-Force-Angriffe. 1997: Neue Ausschreibung durch NIST 10 für Nachfolger von DES. 2000: Wahl von Rijndael 11 -Verfahren für neuen AES 12, benannt nach den Erfindern J. Daemen 13 und V. Rijmen 14 2002: Publikation als Standard: FIPS 15 PUB 197 AES ist sogenannte iterierte Blockchiffre. Mögliche Blocklänge: 128, 192, 256 Mögliche Schlüssellänge: 128, 192, 256 (unabhängig voneinander) Anzahl der Runden (abhängig von gewählten Block- und Schlüssellängen): 10, 12, 14 Wir behandeln den Fall: b = 128, k = 128, r = 10 Vorbemerkung: 128 Bit Blöcke werden dargestellt als a 00 a 01 a 02 a 03 a 10 a 11 a 12 a 13 jedes a ij ist ein Byte a 20 a 21 a 22 a 23 a 30 a 31 a 32 a 33 128er Block wird spaltenweise gelesen: a 00 a 10 a 20 a 30 a 01 a 11 a 21 a 31 a 02 a 12 a 22 a 32 a 03 a 13 a 23 a 33 Zur Beschreibung des AES benötigen wir einige Hilfsmittel über endliche Körper. 9 Data Encryption Standard: http://de.wikipedia.org/wiki/data_encryption_standard 10 National Institute of Standards and Technology: http://nist.gov 11 Rijndael: http://de.wikipedia.org/wiki/rijndael 12 Advanced Encryption Standard: http://de.wikipedia.org/wiki/advanced_encryption_standard 13 Joan Daemen: http://de.wikipedia.org/wiki/joan_daemen 14 Vincent Rijmen: http://de.wikipedia.org/wiki/vincent_rijmen 15 Federal Information Processing Standards Publications: http://itl.nist.gov/fipspubs/
Codierung & Verschlüsselung 13 6.1 Hilfsmittel Endliche Körper: Einfachste Möglichkeit Z p (p Primzahl). Beim AES benötigt man jedoch F 2 8, einen Körper mit 2 8 = 256 Elementen. F 2 8 besteht aus allen Polynomen vom Grad < 8 über Z 2. b 7 x 7 +... + b 1 x + b 0, b i Z 2 (b 7, b 6,..., b 0 ) Byte Addition: + (normale Addition von Polynomen) Multiplikation: (normale Multiplikation von Polynomen und dann reduzieren modulo eines irrduziblen Polynoms von Grad 8 über Z 2. Beim AES wird h = x 8 + x 4 + x 3 + x + 1 verwendet.) (x 7 + x + 1) (x 3 + x) = x 10 + x 8 + x 3 + x 2 + x mod x 8 + x 4 + x 3 + x + 1 ( x 10 + x 8 + x 3 + x 2 + x) : (x 8 + x 4 + x 3 + x + 1) = x 2 + 1 x 7 + x 6 + x 5 + x 3 + x 2 x 8 + x 6 + x 5 + x 4 + x x 8 + x 4 + x 3 + x + 1 x 6 + x 5 + x 3 + 1 das ist der Rest (x 7 + x + 1) (x 7 + x) = x 6 + x 5 + x 3 + 1 Damit wird F 2 8 ein Körper, d. h. jedes Element 0 hat ein Inverses bzgl. Multiplikation. Das Inverse von g 0 lässt sich mit dem erweiterten Euklidischen Algorithmus für Polynome berechnen: g 0 grad(g) 7 h = x 8 + x 4 + x 3 + x + 1 irreduzibel ggt(g, h) = 1 EEA: u, v Z 2 [x] u g + v h = 1 u mod h = g 1 g 1 g = ( (u mod h) g ) mod h = u g mod h = (1 vh) mod h = 1 mod h = 1 Der Aufbau des Rijandal-Verfahrens (AES) ist in Abbildung 4 auf Seite 14 angegeben. Wir beschreiben im Folgenden die einzelnen Teile.
Codierung & Verschlüsselung 14 Klartextblock 128 Bit Schlüssel 128 Bit Schlüsselexpansion auf 128*11 = 1408 Bit + K0 128 Bit Si-1 S0 128 Bit SubBytes Runde 1 ShiftRows + K1 128 Bit MixColumns nicht in der 10. Runde S1 128 Bit + Ki Runde 2 Si + K2 128 Bit S9 128 Bit Runde 10 + K10 128 Bit Chiffretextblock 128 Bit Abbildung 4: Schematischer Ablauf des Rijndael-Verfahrens
Codierung & Verschlüsselung 15 6.2 Der Rijndael-Algorithmus im Detail 6.2.1 Sub-Bytes Transformation a 00... a 03 s i 1 =....., a ij Bytes Sei g einer dieser Bytes, g = (b 7 b 6... b 0 ), b i Z 2. a 30... a 33 1. Schritt Fasse g als Element in F 2 8 auf Ist g = (0,..., 0), so lasse g unverändert Ist g (0,..., 0), so ersetze g durch g 1 via Table-Lookup 2. Schritt Ergebnis nach Schritt 1: g wird folgendermaßen transformiert ga + b = g (affin-lineare Transformation) 1 1 1 1 1 0 0 0 A = zyklischer Shift der ersten Zeile... um eine Stelle nach rechts, etc ( ) b = 1 1 0 0 0 1 1 0 6.2.2 Shift-Rows Transformation Nach Sub-Bytes erhält man eine 4 4-Matrix von Bytes. Auf deren Zeilen weren die angegebenen zyklischen Shifts angewandt. a b c d unverändert e f g h 1. Stelle nach links (zyklisch) i j k l 2. Stelle nach links (zyklisch) m n o p 3. Stelle nach links (zyklisch) a b c d f g h e k l i j p m n o 6.2.3 Mix-Columns Transformation 4 4-Matrix. Einträge als Elemente in F 2 8 auffassen. x x + 1 1 1 1 x x + 1 1 Multiplikation von links mit Matrix 1 1 x x + 1 x + 1 1 1 x ( ) Multiplikation der Einträge in F 2 8. x = 0 0 0 0 0 0 1 0
Codierung & Verschlüsselung 16 6.2.4 Schlüsselerzeugung Ausgangsschlüssel hat 128 Bit. Schreibweise 4 4-Matrix von Bytes. 4 Spalten: w(0), w(1), w(2), w(3) Defin. 40 Spalten à 4 Bytes w(i 1) sei schon definiert. 4 i : w(i) = w(i 4) w(i 1) (Byteweise XOR) 4 i : w(i) = w(i 4) T (w(i 1)) T ist folgende Transformation: a Sei w(i 4) = b c a, b, c, d Bytes d Wende auf b, c, d, a Sub-Bytes Transformation an: b, c, d, a e, f, g, h ( ) i 4 4 Setze v(i) = 0 0... 0 1 0 in F 2 8 e v(i) f T (w(i 1)) = g h Rundenschlüssel k i : 4 4-Matrix mit Spalten: w(4i), w(4i + 1), w(4i + 2), w(4i + 3), i = 0,..., 10. 6.2.5 Entschlüsselung Alle einzelnen Transformationen sind invertierbar. Man kehrt also den Algorithmus um und ersetzt alle Transformationen durch ihre Inversen. 6.3 Zusammenfassung AES ist ein schnelles Verschlüsselungsverfahren. Es hat gute Diffusionseigenschaften: nach zwei Runden hängt jedes Bit von jdem Bit des Ausgangsblocks ab. Bisher sind keine praktikablen Angriffe gegen den AES gefunden worden.
Codierung & Verschlüsselung 17 7 Public-Key-Systeme Grundidee: W. Diffie 16, M. Hellman 17, 1976 Jeder Teilnehmer A hat Paar von Schlüsseln: öffentlicher Schlüssel P A geheimer Schlüssel G A Zu P A gehört öffentlich bekannte Verschlüsselungsfunktion E PA = E(, P A ) B m A : E PA (m) = c (1) m darf mit realistischem Aufwand nicht aus E PA (m) berechenbar sein. E PA ist Einwegfunktion (E PA muss effizient berechenbar sein, aber E 1 P A nicht!) (2) A muss mit Hilfe einer Zusatzinformation (= G A ) in der Lage sein, E 1 P A effizient zu berechnen. D GA (c) = m = E 1 P A (c) Injektive Einwegfunktion, die mit Zusatzinformationen effizient invertierbar ist: Geheimtürfunktion (Trap door function) aus (1) und (2) folgt: (3) G A darf aus P A nicht schnell berechenbar sein! Es ist derzeit noch unbekannt, ob Einwegfunktionen existieren!!!! Notwendig für die Existenz von Einwegfunktionen: P N P. Es gibt Kandidaten für Einwegfunktionen, auf denen die bekannten Public-Key-Systeme beruhen. 7.1 RSA-Verfahren 1977: R. Rivest 18, A. Shamir 19, L. Adleman 20 Beruht auf Schwierigkeit, große Zahlen zu faktorisieren. 7.1.1 Schlüsselerzeugung für Teilnehmer A Wähle zwei große Primzahlen p, q (p q) (min. 500 Bit Länge: 2 500 ) Bilde n = p q ϕ(n) = {a N : 1 a < n, ggt(a, n) = 1} n = p q ϕ(n) = (p 1) (q 1) 16 W. Diffie: http://de.wikipedia.org/wiki/whitfield_diffie 17 M. Hellman: http://de.wikipedia.org/wiki/martin_hellman 18 Ronald L. Rivest: http://de.wikipedia.org/wiki/rivest 19 Adi Shamir: http://de.wikipedia.org/wiki/adi_shamir 20 Leonard Adleman: http://de.wikipedia.org/wiki/leonard_adleman
Codierung & Verschlüsselung 18 [ nicht teilerfremd zu n: 1 p, 2 p, 3 p,..., (q 1) p, q p = n 1 q, 2 q, 3 q,..., (p 1) q, p q = n (p 1) + (q 1) + 1 ϕ(n) = n p q + 1 = pq p q 1 = (p 1) (q 1) ] Wähle e < ϕ(n) mit ggt (e, ϕ(n)) = 1. (Wie? Zufallswahl und dann mit dem Euklidschen Algorithmus ggt(e, ϕ(n)) bestimmen.) Öffentlicher Schlüssel: P A = (n, e) (p, q bleiben geheim) Wähle d < ϕ(n) mit e d 1 (mod ϕ(n)) (d. h. ϕ(n) e d 1, ed = 1 + k ϕ(n) für k N) (Wie? Wende den erweiterten euklidischen Algorithmus auf e, ϕ(n) an. Liefert u, v Z mit ue + vϕ(n) = ggt(e, ϕ(n)) = 1.) d = u mod ϕ(n), denn ed mod ϕ(n) = e (u mod ϕ(n)) mod ϕ(n) = ue mod ϕ(n) = (1 vϕ(n)) mod ϕ(n) = 1 Geheimer Schlüssel: G a = d 7.1.2 Verschlüsselung B Nachricht A. Codiere Nachricht als Zahl. Zerlege in Blöcke, deren Zahlenwert < n. Sei m so ein Block (m < n). m e mod n = c (Chiffretext) 7.1.3 Entschlüsselung c d mod n! = m warum? Gültigkeit basiert auf Kleinem Satz von Fermat: r Primzahl, ggt(a, r) = 1 (d. h. r a), so a r 1 1 (mod r). Sei m < n = pq. c = m e mod n, c d mod n = m ed mod n. ed = 1 + kϕ(n) = 1 + k(p 1)(q 1) Ist p m, so m ed = m 1+k(p 1)(q 1) = m ( m p 1 ) } {{ } k(q 1) m (mod p) 1 ( mod p) Ist p m, so m 0 m ed (mod p) In jedem Fall: m ed m (mod p). Genauso: m ed m (mod q)
Codierung & Verschlüsselung 19 p m ed m, q m ed n. p q n = pq m ed m m ed m (mod n), m ed mod n = m, da m < n 7.1.4 Wie berechnet man schnell modulare Potenzen? m e mod n? e = k e i z i, e i {0, 1}, e k = 1 i=0 m e = m 2k +e k 1 2 k 1 +...+e 1 2+e 0 = m 2k m e k 12 k 1... m e 0 = ( (... ( (m 2 m e k 1 ) 2 m e k 2 ) 2... ) 2... m e 1 ) 2 m e 0 mit maximal 2k Multiplikationen Nach jeder Multiplikation mod n reduzieren. Beispiel: (1) p = 13, q = 23 n = p q = 299 ϕ(n) = 12 22 = 264 (= 3 8 11) e = 5 (kleinstmögliches e) öffentlicher Schlüssel: (n = 299, e = 5) (2) Bestimmung des geheimen Schlüssels: Entweder: Mit erweitertem Euklidschischen Algorithmus u, v Z bestimmen mit u e+v ϕ(n) = 1. Dann d = u mod ϕ(n). Oder (bei kleinem e): Suche kleinstes k N mit e k ϕ(n) + 1. Dann ed = kϕ(n) + 1. In unserem Fall: 5 1 264 + 1 = 265 d = 265 5 = 53 Geheimer Schlüssel: d = 53 (3) Verschlüsselung: Klartext m = 212 m 5 mod 299 berechnen 212 2 = 44944 94 (mod 299) 212 4 94 2 = 8836 165 (mod 299) 212 5 165 212 = 34980 296 (mod 299) Chiffretext c = 296 (4) Entschlüsselung: zu berechnen c 53 mod 299. 53 = 2 5 + 2 4 + 2 2 + 2 0
Codierung & Verschlüsselung 20 296 53 = ( (((2962 296 ) 2 ) 2 296 ) 2 ) 2 296 296 2 ( 3) 2 9 (mod 299) 296 2 296 9 ( 3) = 27 (mod 299) ( 27) 2 729 131 (mod 299) ( 27) 4 131 2 = 17161 118 (mod 299) ( 27) 4 296 118 ( 3) 354 244 (mod 299) 244 2 ( 55) 2 = 3025 35 (mod 299) 244 4 35 2 29 (mod 299) 29 296 29 ( 3) = 87 212 (mod 299) 296 53 mod 299 = 212 = m. 7.1.5 Sicherheit (a) Falls p, q bekannt ϕ(n), d bekannt Aber: Faktorisierung ist ein schweres Problem. Wenn Angreifer ϕ(n) kennt, kann er d bestimmen. Die Bestimmung von ϕ(n) ist aber genauso schwierig wie die Faktorisierung von n: p, q bekannt ϕ(n) = (p 1) (q 1) bekannt. ϕ(n) bekannt p, q bekannt: ϕ(n) = n p q + 1 bekannt s = p + q bekannt, pq = n bekannt, p(s p) = n p 2 sp + n = 0 quadratische Gleichung für p Es gilt sogar: Die Bestimmung von d, die Bestimmung von ϕ(n) und die Bestimmung der Faktorisierung von n sind gleich schwer. Komplexität der besten Faktorisierungsalgorithmen: O(e c(log n) 1 3 (log log n) 2 3 ) RSA Challenge: 640 Bit Zahl, Faktorisierung: 30 CPU-Jahre auf 2,2 GHz-Prozessor. Es ist unbekannt, ob die Bestimmung von m aus c nur mit Kenntnis von e und n genauso schwierig ist wie die Faktorisierung von n. (b) Häufig wird e = 3 gewählt, falls ggt ( 3, ϕ(n) = 1 ). Dies birgt eine Gefahr. Angenommen A 1, A 2, A 3 haben in ihrem öffentlichen Schlüssel jeweils e = 3 gewählt. m A 1 (n 1, 3) m B A 2 (n 2, 3) Angenommen: ggt(n i, n j ) = 1 m A 3 (n 3, 3) c 1 = m 3 mod n 1 c 2 = m 3 mod n 2 c 3 = m 3 mod n 3 Eve fängt c 1, c 2, c 3 ab. Chinesischer Restsatz: Es existiert eindeutig bestimmtes x mit 0 x n 1 n 2 n 3 mit x c i (mod n i ), i = 1, 2, 3 m 3 c i mod n i, m 3 < n 1 n 2 n 3 x = m 3 3 x = m (schnell!)
Codierung & Verschlüsselung 21 7.1.6 Wie bestimmt man große Primzahlen? p Primzahl, a Z ggt(a, p) = 1, so a p 1 1 (mod n) (kleiner Satz von Fermat) Fermat-Test: Gegeben n. Wähle a < n. Teste ob ggt(a, n) = 1 und a n 1 1 (mod n). Wenn nicht, so ist n keine Primzahl. Wenn ja, so keine Aussage möglich. Wähle neues a! Es gibt unendlich viele zusammengesetzte Zahlen n mit a n 1 1 ( mod n) für alle a mit ggt(a, n) = 1, die sog. Carmichael-Zahlen 21. Besserer Test: Miller-Rabin-Test: a 2s t 1 (mod p) Grundidee: Sei p 2 Primzahl, a N, ggt(a, p) = 1, p 1 = 2 s t, 2 t b = a 2s 1 t b 2 ( ) 2 1 (mod p) b mod p = 1 in Zp d. h.: b mod p ist Nullstelle von x 2 1 Z p [x] a 2s 1 t { +1 mod p 1 mod p Indem man so fortfährt, erhält man: Entweder a t 1 (mod p) oder a 2i t 1 (mod p) für ein 0 i < s Teste dies mit n statt p. Man kann zeigen: Wenn n keine Primzahl ist, dann gibt es mindestens 3 4ϕ(n) viele a, so dass n den Test mit a nicht besteht: Zeugen gegen die Primzahleigenschaft von n. Im Allgemeinen testet man n nur mit wenigen a. Dies führt zu einem probabilistischem Primzahltest. (Schnelles Verfahren) Siehe: http://www.jjam.de/java/applets/primzahlen/miller_rabin.html 7.2 Diffie-Hellman-Verfahren zur Schlüsselvereinbarung p Primzahl, Z p = Z p \{0} Gruppe bzgl. Multiplikation, zyklisch g Z p : { g 0, g 1, g 2,..., g p 2} } {{ } = Z p gp 1 1 (mod p) in Z p g heißt Primitivwurzel mod p 0 a p 2 : a g a mod p Kandidat für Einwegfunktion g a mod p a (diskreter Logarithmus) ist nach heutigem Stand schwer! Erste Anwendung: A, B wollen gemeinsammen Schlüssel k für ein symmetrisches Verfahren vereinbaren; es steht nur unsicherer Kommunikationskanal zur Verfügung. 21 Carmichael-Zahl: http://de.wikipedia.org/wiki/carmichael-zahl
Codierung & Verschlüsselung 22 Lösung: Wähle Primzahl p (Bitlänge mindestens 1024 Bit) und Primitivwurzel g mod p. p, g können öffentlich bekannt sein. (a) A wählt zufällig a {2,..., p 2} A berechnet x = g a mod p (a geheim halten!) (b) B wählt zufällig b {2,..., p 2} B berechnet y = g b mod p (b geheim halten!) x=g a mod p (c) A B y=g b mod p B A A: y g mod p = g ba mod p = k B: x g mod p = g ab mod p = k Sicherheit: Angreifer: kennt p, g, g a mod p, g b mod p gesucht: g ab mod p Einzig bekannte Möglichkeit: Berechne a aus g a : (g b ) a mod p = k 7.2.1 Man-in-the-middle Angriff M A B M fängt g a und g b ab, wählt c {2,..., p 2} und sendet g c mod p an A und B. } A: k A = g ca mod p B: k B = g cb glauben: gemeinsamer Schlüssel beide Schlüssel kennt M mod p Schickt A Nachricht an B, verschlüsselt mit k A, so kann M sie abfangen, entschlüsseln, lesen, ggf. verändern und mit k B verschlüsselt an B senden. B kann mit k B entschlüsseln und schöpft keinen Verdacht. Angriff vermeidbar mit Authentifizierungsmethode (siehe Kapitel 8). 7.3 ElGamal-Public Key Verfahren Schlüsselerzeugung A: wählt p, g wie bei Diffie-Hellman-Verfahren. Öffentlicher Schlüssel: (p, g, x) wählt a {2,..., p 2}, x = g a mod p Geheimer Schlüssel: a Verschlüsselung Klartext m: 1 m p 1 B m A B: wählt zufällig b = {2,..., p 2}, y = g b mod p berechnet x b mod p und f = m x b mod p sendet (y, f) an A
Codierung & Verschlüsselung 23 Entschlüsselung y a mod p (= x b mod p) Berechne (y a ) 1 mod p 0 [ { }} {] (y a ) 1 = yp 1 a m = f (y a ) 1 mod p 8 Signaturen, Hashfunktionen, Authentifizierung Anforderungen an digitale Signaturen: Identitätseigenschaft ID des Unterzeichners des Dokuments wird sichergestellt Echtheitseigenschaft des signierten Dokuments Verifizierungseigenschaft jeder Empfänger muss digitale Signatur verifizieren können 8.1 RSA-Signatur 8.1.1 Vereinfachte Version der RSA-Signatur A will Dokument m signieren. A besitzt öffentlichen RSA-Schlüssel (n, e), geheimen Schlüssel d. Signatur: m d mod n sendet (m, m d mod n) an B (m d mod n) e = m ed mod n = m? m < n Wenn m ed mod n = m, dann akzeptiert B Signatur. m > n m d mod n B: m mod n m mod n = m mod n (m, m d mod n) gültige Signatur Also: Falls m > n, m in Blöcke zerlegen, die als Zahl < n sind. Problem: Signatur ist so lang wie Nachricht. Wie lassen sich lange RSA-Signaturen vermeiden? Definition: Sei R ein endliches Alphabet Hashfunktion: H : R R k (k N fest) effizient berechenbar 8.1.2 RSA-Signatur mit Hashfunktion H öffentlich bekannte Hashfunktion. A will Nachricht m signieren. Bildet H(m) und signiert H(m): H(m) d mod n sendet (m, H(m) d mod n) Verifikation durch B m H(m) ( H(m) d mod n ) e mod n? = H(m)
Codierung & Verschlüsselung 24 Angriffsmöglichkeiten: Angreifer kann H(m) bestimmen Wenn es ihm gelingt, m m zu finden mit H(m ) = H(m), so ist (m, H(m) d gültige Signatur von m durch A. mod n) eine Angreifer wählt zufällig y und berechnet z := y e mod n Gelingt es ihm, m zu finden mit H(m) = z, dann ist (m, y) gültige Signatur von m durch A. y e mod n? =! H(m) Definition: erfüllt: Eine kryptographische Hashfunktion ist Hashfunktion, die folgende Eigenschaften (1) H ist Einwegfunktion. (um Angriffe des 2. Typs zu vermeiden) (2) H ist schwach kollisionsresistent, d. h. zu gegebenem m R soll es effizient nicht möglich sein ein m R, mit m m und H(m) = H(m ) zu finden. (um Angriffe des 1. Typs zu vermeiden) Verschärfung: (2 ) H ist stark kollisionsresistent, wenn es effizient nicht möglich ist, m m zu finden mit H(m) = H(m ). Da R unendlich und R k = R k endlich ist, existieren unendlich viele Paare (m, m ), m m, mit H(m) = H(m ). (Bilde R k +1 viele Hashwerte: Kollisionen) Kollisionen lassen sich nicht vermeiden, sie sollen aber nicht schnell herstellbar sein. Da es unbekannt ist, ob es Einwegfunktionen gibt, ist es natürlich auch unbekannt, ob kryptographisch sichere Hashfunktionen existieren. Es gibt nur Kandidaten (siehe unten). Unabhängig davon: Wie groß sollte Länge k des Hashwertes gewählt werden? Nicht zu groß das ist der Sinn von Hashfunktionen. Zu klein dann Gefahr von Kollisionerzeugung (hinsichtlich starker Kollissionsresistenz) wegen Geburtsattacke. Sie beruht auf: Satz (Geburtstagsparadoxon): Ein Merkmal komme in m verschiedenen Ausprügungen vor. Jede Person besitze genau eine dieser Merkmalsausprägungen. Ist l 1 + 1 + 8 m ln(2) 1, 18 m, so ist die Wahrscheinlichkeit, dass unter l Personen zwei 2 die gleiche Merkmalsausprägungen haben, mindestens 1 /2. (Geburtstage m = 366, l = 23, d. h.: Bei 23 Personen ist die Wahrscheinlichkeit mindestens 1 /2, dass zwei Personen am gleichen Tag Geburtstag haben.) Beweis: Gegeben seien l Personen. Alle Ereignisse: ( g 1, g 2,..., g l ), gi {1,..., m} Anzahl: m l Möglichkeiten
Codierung & Verschlüsselung 25 Alle Merkmalsausprägungen g i verschieden: l 1 (m i) = m (m 1) (m 2)... (m (l 1)) i=0 Wahrscheinlichkeit, dass keine zwei Personen solche Merkmalsausprägung haben: q = l 1 i=0 (m i) m l = l 1 ( 1 i ) m i=0 Benutze: e x 1 + x. Dann: q e l 1 i=0 i m = e i l 1 m i=0 i = e l(l 1) 2m Wann ist q 1 /2? Jedenfalls, wenn 1 2 < e l(l 1) 2m. Gleichbedeutend mit: ln(2) l(l 1) 2m, ln 2 l2 l 2m l 2 l 2m ln(2) 0 Auflösen nach l: l 1+ 1+8m ln(2) 2 Geburtstagsattake: R = Z 2, H : Z 2 Z 2. Angreifer erzeugt möglichst viele Hashwerte. Diese werden nach Kollisionenn untersucht. Anzahl aller möglichen Hashwerte: 2 k. Wahrscheinlichkeit 1 /2, dass Kollision vorliegt bei 2 k = 2 k /2 Hashwerten. k = 64 keine ausreichende Sicherheit (2 32 4 10 9 ). Heute: Mindestens k 128, i. d. R. k 160. 2 k /2 ist dann Benchmark für Güte von Kandidaten für kryptographische Hashfunkionen bzgl. starker Kollisionsresistenz. Weit verbreitet waren und sind folgende Hashfunktionen: MD5: (Message Digest 5, Ron Rivest) k = 128 (1992) SHA-1: (Secure Hash Algorithm, entwickelt von NSA) k = 160 (1992/93) Gegen diese Hashfunktionen wurden hinsichtlich starker Kollisionsresistenz in den letzten Jahren erste erfolgreiche Angriffe entwickelt. z. B. Jonx, Wang et. al. seit 2004 SHA-1: Kollisionen feststellen und 2 69 (ggf. sogar 2 63 ) Hashoperationen (anstelle von 2 80 ). NIST (National Institute of Standards and Technology) hat nun Entwicklung einer neuen Hashfunktion als Standard angestoßen (ähnlich wie bei AES). Sieger soll 2012 feststehen. Auf Konstruktionsprinzipien von Hashfunktionen gehen wir hier aus Zeitgründen nicht ein.
Codierung & Verschlüsselung 26 8.2 Authentifizierung Nachweis bzw. Überprüfung, dass jemand derjenige ist, für den er sich ausgibt. Forderungen: Niemand darf sich als jemand anderer ausgeben können. Verifizierer darf sich nicht als Teilnehmer ausgeben können, der sich vorher gegenüber ihm authentifiziert hat. Möglichkeiten: Authentifizierung durch Wissen Besitz biometrische Merkmale Hier nun die erste Möglichkeit. 8.2.1 Authentifzierung durch Passwort A wählt Passwort w. Im Computer von B, gegenüber dem sich A authentifizieren will, ist f(w) gespeichert, f ist Einwegfunktion (häufig Hashfunktion). ( Roger Needham 22 ) Oder: Nullstring wird mit Passwort als Schlüssel verschlüsselt und gespeichert. Wichtig: Passwortverzeichnis (also die f(w)) muss gesichert sein. Gefahren: Passwort oft unverschlüsselt übertragen über unsichere Kanäle Gefahr einfacher Passwörter Passwortsicherheit: http://www.schneier.com/crypto-gram-0701.html Gefahreindämmung durch Einmal-Passwörter: Lamport: f n (w), f n 1 (w),..., f i (w) (Lamport 23, 1981) f Einwegfunktion (sicher gegen Replay-Angriff 24 ) Am Anfang sendet A an B f n (w) = w 0 Wichtig: B muss wissen, dass w o von A kommt. Authentifizierung: A sendet f n 1 (w) = w 1 an B. B prüft f(w 1 ) = w 0. 22 Roger Needham: http://de.wikipedia.org/wiki/roger_needham 23 Leslie Lamport: http://de.wikipedia.org/wiki/leslie_lamport 24 Replay-Angriff: http://de.wikipedia.org/wiki/replay-angriff
Codierung & Verschlüsselung 27 B ersetzt w 0 durch w 1. Bei der nächsten Authentifizierung sendet A f n 2 (w), etc. 8.2.2 Challenge-Response-Authentifikation RSA-Verfahren: A möchte sich gegenüber B authentifizieren. P A = (n, e) G A = d Challenge: B r<n Zufallszahl A r d mod n Response: A B B überprüft, ob r de mod n = r 9 Secret Sharing Schemas Geheimnis wird auf mehrere Teilnehmer verteilt (Teilgeheimnisse), so, dass gewisse Teilmengen der Teilnehmer Geheimnis mit ihren Teilgeheimnissen rekonstruieren können, die anderen nicht (z. B. bei Zugangskontrollen, digitale Signaturen durch mehreree Personen, etc). Beispiel: T = {t 1,..., t n }, k < n Jede Teilmenge von T mit mindestens k Teilnehmern soll Geheimnis rekonstruieren können, Teilmengen von T mit weniger als k Teilnehmern nicht: (k, n)-schwellenwertsystem. Konstruktion: (1979 Shamir) Vereinbarung großer Primzahl p, mindestens p n + 1 g Z p = {0,..., p 1} Verteilung der Teilgeheimnisse: Dealer wählt zufällig a 1,..., a k 1 Z p f(x) = g + a 1 x +... + a k 1 x k 1 Z p [x] (a 1,..., a k 1 ) hält er geheim (und natürlich g). Dealer wählt zufällig x 1,..., x n Z p (paarweise verschieden). Teilnehmer t i erhält als Teilgeheimnis (x i, f(x i )). Rekonstruktion(sversuche) des Geheimnises: k Teilnehmer mit Teilgeheimnissen ( x i1, f(x i1 ) ),..., ( x ik, f(x ik ) ) Durch diese Punkte ist f eindeutig bestimmt, z. B. durch Lagrange-Interpolation. f(x) = f(0) = g k j=1 = (x x i 1 )... ( ) ( ) x x ij 1 x xij+1... (x xik ) ( ) ( ) ( ) xij x i1... xij x ij 1 xij x ij+1... (x xik ) g i j
Codierung & Verschlüsselung 28 Man kann g natürlich auch direkt berechnen, indem man x = 0 in obige Formel für f(x) einsetzt: g = k x il g ij ( ) xil x ij j=1 l j Weniger als k Teilnehmer: etwa k erzeugen Polynom von Grad k 1 Für jedes h Z p existieren gleich viele Polynome von Grad k 1 durch die vorgegebenen k Punkte, die bei h durch die y-achse gehen. Werden als zu Beginn die x i zufällig gleichverteilt gewählt, so ist die Wahrscheinlichkeit 1 /p, dass k < k Teilnehmer das richtige Geheimnis rekonstruieren. Das ist dieselbe Wahrscheinlichkeit, wie g zu raten. Das Schema ist perfekt. Security c by Randall Munroe (CC-BY-NC-2.5), http://xkcd.com/538/
Codierung & Verschlüsselung 29 Teil III Codierung 10 Grundbegriffe und einfache Beispiele 10.1 Grundbegriffe Codierung (Kanalcodierung) Sicherung von Daten/Nachrichten gegen zufällig auftretende Fehler bei Speicherung/Übertragung. Quelle Kanalcodierung Kanal Decodierer Empfänger Nachricht über Alphabet R Codewort (Folge von Codewärtern über Alphabet S) Störungen Rekonstruktion der Nachricht 1. Codewort finden 2. Nachricht Abbildung 5: Codierung Ziele Möglichst viele Fehler erkennen und ggf. korrigieren Aufwand für (De)Codierung möglichst gering halten Grundprinzip: Hinzufügen von Redundanz Zwei Typen: FEC-Verfahren (Forward Error Correction): werden. Aufgetretene Fehler sollen erkannt und korrigiert Vorteil: keine Verzögerung der Übertragung Nachteil: große Redundanz notwendig ARQ-Verfahren (Automatic Repeat Request): Aufgetretene Fehler sollen erkannt werden, werden aber nicht korrigiert. Stattdessen: Wiederholung der Übertragung beim Sender anfordern. Vorteil: geringe Redundanz Nachteil: Verzögerung
Codierung & Verschlüsselung 30 10.2 Beispiele (a) Parity-Check-Codes z. B. Nachrichten 00, 01, 10, 11 Codierung: 00 000 01 011 10 101 11 110 (b) Wiederholungscodes (gerade Anzahl von Einsen in den Codewörtern) 1 Fehler wird erkannt (nicht korrigierbar) 2 Fehler werden nicht erkannt z. B. Nachrichten 00, 01, 10, 11 (wie in 10.2.a) Codierung: 00 000000 01 010101 10 101010 11 111111 (3 Wiederholung) 2 Fehler wurden erkannt 1 Fehler kann korrigiert werden Zwei verschiedene Codewörter unterscheiden sich an mindestens drei Stellen; bei einem Fehler ist das nächstgelegene Codewort das gesendete. (c) Spezieller Code der Länge 5 z. B. Nachrichten 00, 01, 10, 11 (wie in 10.2.a) Codierung: 00 00000 01 01101 10 10110 11 11011 (je zwei Codewörter sind unterschiedlich an mindestens drei Positionen) Angenommen: 1 Fehler tritt bei Übertragung auf. Dann gibt es genau ein Codewort, das sich vom empfangenen Codewort an genau einer Stelle unterscheidet; in das wird decodiert. (d) (Ehemaliger) ISBN-Code ISBN 25 ist ein 10-stelliger Code. Erste 9 Ziffern haben inhaltliche Bedeutung ( = Nachricht). Die 10. Ziffer ist Prüfziffer. Beispiel: 3 }{{} Land - } 540 {{ } - 26121 Verlag } {{ } interne Buchnummer -? }{{} Prüfziffer (Redundanz) Uncodierte Wörter sind gebildet über R = {0,..., 9}; Codwörter über S = {0,..., 9, X} ISBN-Wort: c 10 c 9 c 8... c 2 c 1 c 10 c 9 c 8... c 2 inhaltliche Bedeutung, c 1 wird so gewählt, dass gilt: 10 k=1 k c k 0 (mod 11) 25 ISBN: International Standard Book Number
Codierung & Verschlüsselung 31 c 10 c 9 c 8... c } {{ } 2 c 1 falls c 1 = 10, so setze c 1 = X Beispiel: } 10 {{ 3 } + }{{} 9 5 + }{{} 8 4 + }{{} 7 0 + }{{} 6 2 + }{{} 5 6 + }{{} 4 1 + }{{} 3 2 + }{{} 2 1 + c 1 = 30 = 45 = 32 = 0 = 12 = 30 = 4 = 6 = 2 } {{ } 4 = 161 0 (mod 11) Das Ändern einer Ziffer wird erkannt. Angenommen, c i wird durch x i ersetzt. Dann lautet die Prüfgleichung: 10 k=1k c k c k + i x i = 10 k=1 k c k } {{ } 0 ( mod 11) i }{{} (c i x i ) } {{ } 0 ( mod 11) 0 ( mod 11) da 11 Primzahl. Fehler wird erkannt. Korrektur ist nicht möglich. Vertauschung von zwei Ziffern wird erkannt. 0 (mod 11), c i und c j vertauscht: c 10... c j i... c i j... c 1 10 k=1 k i,j k c k + i c j + j c i = = 10 k=1 10 k=1 k c k + i (c j c i ) + j (c i c j ) k c k } {{ } 0 ( mod 11) + (c j c i ) } {{ } (i j) } {{ } 0 ( mod 11) 0 ( mod 11) 0 (mod 11) (e) EAN-13-Code Europäische Artikelnummer, 13-stelliger Code. Die ersten 12 Ziffern sind international festgelegt, die 13. Ziffer ist Prüfziffer. R = S = {0,..., 9} c 1... c 12 c 13 c 1... c 12 inhaltliche Angabe c 1 c 2 i. d. R. Herstellerland (40... 43 Deutschland) c 3... c 7 i. d. R. Hersteller c 8... c 12 interne Produktnummer c 13 so gewählt, dass c 1 + 3 c 2 + c 3 + 3 c 4 +... + c 11 + 3 c 12 + c 13 0 (mod 10) 1 Fehler wird erkannt x 3x (mod 11) Permutation auf Z 10, da ggt(3, 10) = 1 EAN-13 erkennt aber nicht alle Vertauschungen.
Codierung & Verschlüsselung 32 Seit 1.1.2007 gibt es ISBN-13-Code für Bücher. Er ist kompatibel zu EAN-13. Präfix 978 bzw. 979 vorstellen ( Buchland ). Neue Prüfziffer entsprechend EAN-13. 9 783540 205210 Abbildung 6: Beispiel eines EAN-13 Codewortes Übersetzung in Barcode (Strichcode): c 1 c 2 c 3... c } {{ } 7 c 8... c 12 c } {{ 13 } linke Hälfte rechte Hälfte Jede der Ziffern c 2... c 13 wird durch einen 0-1-String der Länge 7 binär codiert. 0 = weißer Balken, 1 = schwarzer Balken. Codierung sorgt dafür, dass nie mehr als vier weiße oder schwarze Balken nebeneinander stehen. c 2... c 7 werden nach Code A oder Code B codiert. c 1 bestimmt welcher dieser beiden Codes jeweils verwendet wird. c 8... c 13 werden nach Code C codiert. c 1 ergibt sich aus der Art der Codierungen von c 2... c 7. Ziffern Ziffern bestimmt c 2 c 7 c 8 c 13 durch c 1 Zeichen Code A Code B Code C Code D 0 0001101 0100111 1110010 AAAAAA 1 0011001 0110011 1100110 AABABB 2 0010011 0011011 1101100 AABBAB 3 0111101 0100001 1000010 AABBBA 4 0100011 0011101 1011100 ABAABB 5 0110001 0111001 1001110 ABBAAB 6 0101111 0000101 1010000 ABBBAA 7 0111011 0010001 1000100 ABABAB 8 0110111 0001001 1001000 ABABBA 9 0001011 0010111 1110100 ABBABA Tabelle 2: Die vier Codes des EAN-13
Codierung & Verschlüsselung 33 11 Blockcodes Die Beispiele aus Kapitel 10 sind sogenannte Blockcodes, d. h. bei der Codierung werden Wörter einer festen Länge über dem Alphabet S gebildet. Zum Beispiel: 00 00000 01 01101 10 10110 11 11011 Definition: S endliche Menge (= Alphabet), n N. Ein Blockcode C der (Block-)Länge n über S ist Teilmenge von S n = S... S. Die Elemente von C heißen Codewörter. n Ist S = 2, (i. d. R. S = {0, 1}), so binärer Code. C = m, so ist m S n. Dann lassen sich m Informationssymbole (oder Strings von Informationssymbolen) codieren. (Codierungsfunktion) Folge von Informationssymbolen (oder Strings) werden dann in Folge von Codeworten codiert. Definition: S endliches Alphabet, n N a, b S n a = {a 1,..., a n } b = {b 1,..., b n } d(a, b) = {i : 1 i n, a i b i } heißt Hamming-Abstand von a und b. (Benannt nach Richard W. Hamming 26, 1915-1998, Mitbegründer der Codierungstheorie neben Claude E. Shannon 27, 1916-2001) Eigenschaften: (a) d(a, b) = 0 a = b (b) d(a, b) = d(b, a) (c) d(a, b) d(a, c) + d(c, b) (a i b i a i c i oder b i c i ) (Dreiecksungleichung) (d) Wird x C gesendet und y S n wird empfangen und ist d(x, y) = k, so sind k Fehler aufgetreten. 11.1 Fehlerkorrektur Definition: (a) Hamming-Decodierung für Blockcode C S n : Wird y S n empfangen, so wird y zu einem Codewort x C decodiert, das unter allen Codewörtern minimalen Hamming-Abstand zu y hat. d(x ( ), y) = min d(x, y) x C 26 Richard W. Hamming: http://de.wikipedia.org/wiki/richard_wesley_hamming 27 Claude E. Shannon: http://de.wikipedia.org/wiki/claude_elwood_shannon
Codierung & Verschlüsselung 34 x muss nicht eindeutig bestimmt sein, z. B.: C = {(0000), (1111)} y = 0011 ( S = 2: Hamming-Decodierung ist bestmöglich, falls jedes Symbol in einem Codewort mit der gleichen Wahrscheinlichkeit p < 1 /2 verändert wird und wenn jedes Codewort gleichwahrscheinlich ist.) (b) C Blockcode in S n : Minimalabstand von C d(c) = min x,x C x x d(x, x) z. B.: C = {(00000), (01101), (10110), (11011)} d(c) = 3 (Ist C = 1, so ist d(c) := n) (c) Ein Blockcode ist t-fehler-korrigierend, falls d(c) 2t + 1 und er heißt t-fehler-erkennend, falls d(c) t + 1 Begründung für die Bezeichnung in (c): Kugel von Radius t um x C: K t (x) = {y S n : d(x, y) t} Ist d(c) 2t + 1, so sind die Kugeln von Radius t um Codewörter disjunkt: Angenommen, es existiert y S n mit y K t (x) K t (x ), x, x C, x x Dann d(x, x ) d(x, y) + d(y, x ) t + t = 2t d(c) 2t + 1 C R n y x t x' t disjunkt K t (x) K t (x ) = x, x C x x y empfangen: falls y in K t (x) liegt für ein x C, so ist x das eindeutig bestimmte nächstgelegene Codewort zu y und y wird nach x decodiert (korrekt, falls maximal t Fehler aufgetreten sind.) falls y in keiner K t (x) liegt, so kann es mehrere Codewörter geben mit gleichem minimalen Abstand zu y. (Dann ist keine eindeutige Decodierung möglich.) t t x x' y Wenn d(c) t+1 und es treten maximal t und mindestens 1 Fehler auf, so ist das empfangene Wort kein Codewort und es wird erkannt, dass Fehler aufgetreten sind.
Codierung & Verschlüsselung 35 Beispiel: (a) n-facher Wiederholungscode s 1 s 1 s 1... s 1 s n s n s n... s n n (b) ISBN, EAN-Codes: C = {(s, s,..., s) : s S} n 1 -Fehler-korrigierend 2 d(c) = n d(c) = 2 1-Fehler-erkennend 11.2 Perfekte Codes Definition: Code C S n heißt perfekt, falls es ein t N 0 gibt mit der Eigenschaft S n = K t (x) und K t (x) K t (x ) = für alle x, x C, x x. Dann ist d(c) = 2t + 1, falls C > 1: Angenommen d(c) 2t. Wähle x, x C, x x mit d(x, x ) = d(c) 2t. (x, x existieren, da C > 1) Wähle y S n mit d(x, y) = t, d(y, x ) t y K t (x) K t (x ) Also: d(c) 2t + 1 Wähle x C. Wähle y S n mit d(x, y) = t + 1. Es existiert x C mit y K t (x ). Klar: x x. d(x, x ) d(x, y) + d(y, x ) + d(y, x ) t + 1 + t = 2t + 1 d(c) 2t + 1 x C 11.2.1 Kugelpackungsschranke und Charakterisierung perfekter Codes Lemma: S = q, x S n, t N Dann ist K t (x) = t i=0 ( ) n (q 1) i i Beweis: Abstand i > 0 zu x x 1 x 2 Abstand 0 zu x: 1 Wort (nämlich x): ( n 0) (q 1) 0 = 1 i x n Anzahl der Auswahl von i Positionen aus n Positionen: ( ) n i An jeder Position q 1 Änderungsmöglichkeiten insgesamt (q 1) i Möglichkeiten Anzahl der Wörter von Abstand i von x: ( ) n i (q 1) i
Codierung & Verschlüsselung 36 Satz: Sei C ein Code der Länge n über S, C > 1, S = q. d(c) 1 Sei t N 0 maximal mit d(c) 2t + 1, also t = 2 (a) (Kugelpackungsschranke) C t i=0 q n ( n i) (q 1) i (b) C ist perfekt in (a) gilt Gleichheit, d. h. C = t i=0 q n ( n i) (q 1) i Beweis: (a) d(c) 2t + 1, daher K t (x) K t (x ) =, für alle x, x C, x x. Also: S n K t (x) x C q n = S n K t (x) = x C x C K t (x) = Lemma C t i=0 ( ) n (q 1) i i (b) d(c) = 2t + 1 S n = K t (x) x C Gleichheit Gleichheit S n = Kt (x) C perfekt 11.2.2 Beispiele perfekter Codes Trivale Beispiele: einelementige Codes (t = n) C = S n n-facher Wiederholungs-Code über Z 2, n = 2t + 1 C = { } (0... 0), (1... 1) n n Es gibt auch nicht-triviale Beispiele. Wir geben eines an und gehen später nochmals darauf ein. Binärer Hamming-Code der Länge 7 S = Z 2 = {0, 1} C perfekt d(c) = 3 C = 16 C = { (c 1,..., c 7 ) : c i Z 2, c 1 + c 4 + c 6 + c 7 = 0 Rechnen in Z 2 c 2 + c 4 + c 5 + c 7 = 0 c 3 + c 5 + c 6 + c 7 = 0 } Z 7 2 C ist Unterraum von Z 7 2.
Codierung & Verschlüsselung 37 dim(c) = 4 c 4, c 5, c 6, c 7 frei wählbar c 1, c 2, c 3 festgelegt ( 1 0 0 0 ) 1 1 0 Basis: ( 0 1 0 0 ) ( 0 0 1 0 ) erste drei Positionen 0 1 1 1 0 1 C = 2 4 = 16 ( 0 0 0 1 ) 1 1 1 Noch zu zeigen: d(c) = 3. Allgemein gilt: Sei B irgendein binärer Code mit d(b) = d. Wähle x, x B mit d(x, x ) = d. Translationsinvarianz der Metrik: d = d(x, x ) = d(x + x, x + x) = d(0, x + x } {{ } ) B wt(x) = Anzahl der Einsen in x = d(0, x) d(b) = min x B x 0 wt(x) d(c) = 3: Jeder Vektor 0 in C enthält mindestens 3 Einsen. Dies weist man nach durch Überprüfen aller 15 von 0 verschiedenen Codewörter oder durch Analyse der Gleichungen. Prüfe nach, ob bei Kugelpackungsschranke Gleichheit gilt: t i=0 q n ( n i) (q 1) i = q=2 t=1 n=7 2 7 1 + ( 7 1 ) = 27 2 3 = 24 = 16 = C C perfekt 12 Lineare Codes 12.1 Definition und einfache Beispiele Definition: Sei K ein endlicher Körper, n N. Ein linearer Code C der Länge n ist Unterraum von K n (Zeilenvektoren). Alphabet = K. Ist dim(c) = k, so heißt C [n, k]-code. Ist d(c) = d, so [n, k, d]-code. Beachte K = q C = q k Informationsrate 28 von C: k n Bemerkung über endliche Körper (a) p Primzahl, Z p ist endlicher Körper der Ordnung p (b) K endlicher Körper K = p m, p Primzahl, m N (c) Zu jeder Primzahlpotenz existiert (bis auf Isomorphie) genau ein Körper der Ordnung p m (d) f sei ein irreduzibles Polynom von Grad m über Z p. 28 kurz: Rate
Codierung & Verschlüsselung 38 K = {g : g Z p [x], grad(g) m 1} K = p m K wird Körper Addition = übliche Addition von Polynomen Multiplikation = normale Multiplikation + Reduktion mod f (AES: K = 2 8 ) Beispiele: (a) n-facher Wiederholungscode über Z p { } C = (0,..., 0), (1,..., 1),..., (p 1,..., p 1) n C ist linearer Code, C = (1,..., 1) [n, 1, n]-code (b) Hamming-Code ist linearer [7, 4, 3]-Code über Z 2 (c) C = {(c 1,..., c n ) : c i Z p, n i=1 c i = 0} (p = 2 Parity-Check-Code) linearer [n, n 1, 2]-Code über Z p Basis von C: ( 1 0 0... 0 0 p 1 ), ( 0 1 0... 0 p 1 ),..., ( 0... 0 1 p 1 ) Definition: K endlicher Körper (a) x K n, so Gewicht von x = (x 1,..., x n ), wt(x), definiert durch wt(x) = {i : 1 i n, x i 0} (b) Ist {0} C K n, so ist das Minimalgewicht von C definiert durch wt(c) = min x C x 0 wt(x) Satz: Ist C {0} ein linearer Code, so ist d(c) = wt(c) (Beweis wie bei [7, 4, 3]-Hamming Code) 12.2 Erzeugermatrizen Definition: Sei C ein [n, k]-code über K, sei g 1 = (g 11,..., g 1n ),..., g k = (g k1,..., g kn ) g 1 g 11... g 1n eine Basis von C. Dann heißt die k n-matrix G =. =..... Erzeugermatrix von C. g k g k1... g kn Satz: Sei G eine Erzeugermatrix von C. Dann ist C = { u G : u K k} 1 k k n } {{ } Beweis: u = (u 1,..., u k ), u i K ug = (u 1,..., u k ). = u 1 g 1 +... + u k g k C Auf diese Weise erhält man alle Linearkombinationen von g 1,..., g k. Behauptung folgt. k n g 1 g k
Codierung & Verschlüsselung 39 Bemerkung: (a) Die Abbildung { K k C u ug ist bijektiv. u K k Informationswörter codiert in Codewörter durch ug (b) Elementare Zeilenumformungen von Erzeugermatrix führen wieder zu Erzeugermatrix. Beispiel: Hamming-[7, 4]-Code über Z 2 C = { (c 1,..., c 7 ) : c i Z 2, c 1 + c 4 + c 6 + c 7 = 0 Rechnen in Z 2 c 1 + c 4 + c 5 + c 7 = 0 c 3 + c 5 + c 6 + c 7 = 0 } Z 7 2 1 0 0 0 1 0 1 0 1 0 0 0 1 1 Erzeugermatrix G = 0 0 1 0 1 1 1 0 0 0 1 1 1 0 Codierung eines Informationswortes (u 1, u 2, u 3, u 4 ) mit G: (u 1, u 2, u 3, u 4 ) (u 1, u 2, u 3, u 4 ) G = (u 1, u 2, u 3, u 4, u 1 +u 3 +u 4, u 2 +u 3 +u 4, u 1 +u 2 +u 3 ) Informationswort steht an den ersten 4 Stellen des zugeordneten Codeworts. Definition: C [n, k]-code. Erzeugermatrix von C ist in Standardform, falls sie folgende Gestalt hat: 1... 0 G =..... Codewörter (u 1,..., u k ) G = (u 1,..., u k,,..., ) 0... 1 } {{ } }{{} k n k Nicht jeder lineare Code besitzt eine Erzeugermatrix in Standardform. Aber durch geeignete Vertauschung der Positionen in den Codewörtern (Spaltenvertauschungen in der Kontrollmatrix) kann man einen Code (mit denselben Parametern wie der ursprüngliche) erhalten, der Erzeugermatrix in Standardform besitzt. 12.3 Kontrollmatrizen Satz: Sei C ein [n, k]-code über K. Dann existiert (n k) n-matrix H über K mit folgender Eigenschaft: Sei y K n. Dann y C H (n k) n yt = 0 yh t = 0 n 1 H heißt Kontrollmatrix von C. Es ist rg(h) = n k. (Es ist H G t = 0, falls G Erzeugermatrix von C)
Codierung & Verschlüsselung 40 Beweis: Sei g 1,..., g k Basis von C. G = Betrachte lineares Gleichungssystem: g 11 x 1 +... + g 1n x n = 0. g k1 x 1 +... + g kn x n = 0 d. h. G x 1. x n g 1. g k g i = (g i1,..., g in ) = 0 Koeffizientenmatrix G hat Rang k. Dimension des Lösungsraums dieses LGS = n k Sei h 1,..., h n k K n H = h 1. h n k H g t i = Basis des Lösungsraumes dieses LGS h 1 g t i = 0 i = 1,..., k. h n k g i t Hy t = 0 y C rg(h) = n k dim (kern(h)) = k = dim(c) C = kern(h) (falls man die Elemente von C als Spaltenvektoren schreibt) Bemerkung: Kontrollmatrix kann zur Fehlererkennung verwendet werden Beweis liefert Verfahren: Erzeugermatrix Kontrollmatrix Umgekehrt: Kontrollmatrix Erzeugermatrix: Bilde Basis des Lösungsraums von Hx t = 0. Beispiele: (a) Parity-Check-Code über Z 2 C = {(c 1,..., c n ) : n i=1 c i = 0)} k = n 1 H = (1, 1,..., 1) H 1 c. = 0 c 1 +... + c n = 0 (c 1,..., c n ) C c n (b) [7, 4]-Hamming Code
Codierung & Verschlüsselung 41 C = { (c 1,..., c 7 ) : c i Z 2, c 1 + c 4 + c 6 + c 7 = 0 Rechnen in Z 2 c 2 + c 4 + c 5 + c 7 = 0 1 0 0 1 0 1 1 H = 0 1 0 1 1 0 1 0 0 1 0 1 1 1 c 3 + c 5 + c 6 + c 7 = 0 } Z 7 2 (c) C Code mit Erzeugermatrix ( ) 1 1 0 1 0 1 0 1 x 1 + x 2 + x 4 = 0 x 2 + x 4 = 0 [4, 2]-Code über Z 2 G x 1. x 4 = 0 x 3, x 4 frei wählen x 1, x 2 festgelegt. Basis: (0 0 1 0), (0 1 0 1). ( ) 0 0 1 0 Kontrollmatrix H = 0 1 0 1 C = { (c 1,..., c 4 ) : c 3 = 0 c 2 + c 4 = 0 } 12.4 Kontrollmatrizen und Minimalabstand Satz: C [n, k]-code, C {0}, K n, Kontrollmatrix H d(c) = wt(c) = max {r : in H gibt es r linear abhängige Spalten} = min {r : je r 1 Spalten in H sind linear unabhängig} Beweis: s 1,..., s n Spalten von H, Länge n k C {0}, k 1, n k < n s 1,..., s n linear abhängig. Sei min {r : es gibt r linear abhängige Spalten in H} = w s i1,..., s iw linear abhängig. Es existieren c i1,..., c iw K, nicht alle = 0, c i1 s i1 +... + c iw s iw = 0 w min alle c i1,..., c iw 0 Setze c = (c 1,..., c n ) mit den c ij an den Stellen i j, übrige c i = 0 n i=1 c is i = c i1 s i1 +... + c iw s iw = 0 n i=1 c is i t = 0, d. h. Hc t = 0, also c C Da wt(c) = w, folgt w wt(c). Angenommen es existiert 0 c C, wt(c ) = w < w Hc t = 0
Codierung & Verschlüsselung 42 c = (c 1,..., c n) wt(c ) = w n i=1 c i s i = 0 w der Spalten s 1,..., s n sind linear abhängig. Also w = wt(c). Zweite Gleichheit in der Behauptung des Satzes ist klar. Beispiel: [7, 4]-Hamming Code über Z 2 1 0 0 1 0 1 1 H = 0 1 0 1 1 0 1 Kontrollmatrix 0 0 1 0 1 1 1 Keine Spalte ist Nullspalte, keine zwei Spalten sind gleich 1 0 1 0 1., 2. und 4. Spalte sind linear abhängig: 0 + 1 + 1 = 0 d(c) = 3 0 0 0 0 Korollar: (Singleton-Schranke) Ist C ein linearer [n, k]-code, d(c) = d, so gilt: d n k + 1 Beweis: 2. Gleichheit in obigem Satz: d rg(h) + 1 = n k + 1, H Kontrollmatrix von C Zeilen von H sind linear unabhängig Definition: Ein linearer [n, k]-code C über K, K = q, d(c) = d, heißt MDS-Code (maximum distance separable), falls d = n k + 1. (D.h. C hat bei gegebenen n, k maximal möglichen Minimalabstand; vgl. Singleton-Schranke.) Wir werden später Beispiele für MDS-Codes kennen lernen. 12.5 Syndrom-Decodierung linearer Codes Bemerkung: (Nebenklassen von Unterräumen in Vektorräumen) Sei C ein Unterraum des Vektorraums V. Für jedes v V : v + C = {v + x : x C} Nebenklasse von C in V (a) v 1, v 2 V Dann: v 1 + C = v 2 + C oder (v 1 + C) (v 2 + C) = (b) v 1 + C = v 2 + C v 1 v 2 C (insbesondere v + C = C(= 0 + C) v C) (c) Wähle aus jeder Nebenklasse einen Vektor v i : V = (v i + C), disjunkte Vereinigung (d) V Vektorraum über endlichem Körper: v + C = C
Codierung & Verschlüsselung 43 (e) C [n, k]-code (V = K n, dim(c) = k, C = q k, falls K = q), so hat C genau q n k verschiedene Nebenklassen. (Folgt aus (c) und (d).) Definition: C [n, k]-code über K, K = q, Kontrollmatrix H, (n k) n-matrix Ist y K n, so heißt Hy t K n k Syndrom von y. Es gilt: (a) x C Hx t = 0 (x hat Syndrom 0) (b) y 1, y 2 K n y 1, y 2 liegen in der gleichen Nebenklasse zu C (d. h. y 1 + C = y 2 + C) y 1, y 2 haben das gleiche Syndrom (d. h. Hy 1 t = Hy 2 t ) y 1 + C = y 2 + C y 1 y 2 C 0 = H(y 1 y 2 ) t Hy 1 t Hy 2 t = 0 Hy 1 t = Hy 2 t (c) Jedes z K n k tritt als Syndrom auf. Angenommen x C wird gesendet, y = x + f wird empfangen, f Fehlervektor y + C = f + C y und f haben das gleiche Syndrom, nämlich Hy t Bestimme in der Nebenklasse von y ein e mit kleinstmöglichem Gewicht. (Nebenklassenführer) Decodierung: y y e C Dieses Verfahren der Hamming-Decodierung nennt man Syndrom-Decodierung. Ordne die Nebenklassenführer nach der lexikographischen Ordnung ihrer Syndrome. (Dazu Ordnung auf K definieren.) Speicherbedarf: q n k Nebenklassenführer, jedes hat Länge n (Besser als Durchforsten der Liste aller Codewörter (nämlich: q k ), falls k n /2) z. B. C [70, 50]-Code über Z 2 2 20 Nebenklassenfüherer, je 70 Bit Länge. Speicherung: 70 2 20 Bit 8, 75 MB Speicherung der Codewörter: 70 2 50 Bit 9000 TB 1 0 0 0 1 Beispiel: C [5, 2]-Code über Z 2, d(c) = 3, Kontrollmatrix H = 0 1 1 0 0 0 1 0 1 1 (x 1,..., x 5 ) C x 1 + x 5 = 0 x 2 + x 3 = 0 x 2 + x 4 + x 5 = 0 ( ) 1 1 1 0 1 G = 0 1 1 1 0
Codierung & Verschlüsselung 44 Nebenklassen von C: C = (0 0 0 0 0) + C = (1 0 0 0 0) + C = (0 1 0 0 0) + C = (0 0 1 0 0) + C = (0 0 0 1 0) + C = (0 0 0 0 1) + C = (0 0 1 1 1) + C = (0 0 1 0 1) + C = { } (0 0 0 0 0), (1 1 1 0 1), (0 1 1 1 0), (1 0 0 1 1) { } (1 0 0 0 0), (0 1 1 0 1), (1 1 1 1 0), (0 0 0 1 1) Nebenklassenführer: { (1 0 0 0 0) } (0 1 0 0 0), (1 0 1 0 1), (0 0 1 1 0), (1 1 0 1 1) Nebenklassenführer: { (0 1 0 0 0) } (0 0 1 0 0), (1 1 0 0 1), (0 1 0 1 0), (1 0 1 1 1) Nebenklassenführer: { (0 0 1 0 0) } (0 0 0 1 0), (1 1 1 1 1), (0 1 1 0 0), (1 0 0 0 1) Nebenklassenführer: { (0 0 0 1 0) } (0 0 0 0 1), (1 1 1 0 0), (0 1 1 1 1), (1 0 0 1 0) Nebenklassenführer: { (0 0 0 0 1) } (0 0 1 1 1), (1 1 0 1 0), (0 1 0 0 1), (1 0 1 0 0) mögliche { Nebenklassenführer: } (0 0 1 0 1), (1 1 0 0 0), (0 1 0 1 1), (1 0 1 1 0) mögliche Nebenklassenführer: Angenommen als Nebenklassenführer werden gewählt: f 0 = (0 0 0 0 0), f 1 = (1 0 0 0 0),..., f 5 = (0 0 0 0 1), f 6 = (0 1 0 0 1), f 7 = (0 0 1 0 1) 1 0 0 0 1 H = 0 1 1 0 0 0 1 0 1 1 Syndrome: 0 Hf0 t = 0, Hf1 t = 1 0, Hf2 t = 0 0 1, Hf3 t = 1, 0 0 1 0 0 1 Hf4 t = 0, Hf5 t = 0, Hf6 t = 1 1 1, Hf7 t = 1 1 1 0 1 (Ordnung: f 0, f 4, f 3, f 2, f 1, f 5, f 6, f 7 ) Empfangen: y = (1 0 1 1 0), Hy t 1 = 1 1 Decodierung: y y + f 7 = (1 0 0 1 1) C (Hätte man für die Nebenklasse f 7 + C als Nebenklassenführer (1 1 0 0 0) gewählt, so wäre decodiert worden in: y + (1 1 0 0 0) = (0 1 1 1 0) C)
Codierung & Verschlüsselung 45 13 Beispiele guter linearer Codes 13.1 Hamming-Codes Sei q eine Primzahlpotenz, K Körper mit K = q. Sei l N n = ql 1 q 1 k = n l Dann existiert perfekter [n, k]-code C über K, d(c) = 3, der Hamming-Code. Konstruktion: K l \ {0} = q l 1, je q 1 von 0 verschiedene Vektoren erzeugen den gleichen eindimensionalen Unterraum in K l, d. h. n = ql 1 q 1 eindimensionale Unterräume in Kl. Bilde l n-matrix H: Wähle aus jedem der eindimensionalen Unterräume von K l einen Vektor 0 aus und schreibe ihn als Spalte in H. C = { x K n : Hx t = 0 } rg(h) = l, denn H enthält l linear unabhängige Spalten dim(c) = n l = k, C = q k. d(c) = 3, denn nach Konstruktion von H sind je zwei Spalten linear unabhängig und a 0 c 0 b c es gibt drei linear abhängige Spalten 0 0 0 a, b, c 0... 0 0 0 a 0 c 0 c 0 a + c b c 0 b = 0... 0 0 0 Kugelpackungsbedingung: 1 j=0 ( ) n (q 1) i = 1 + n(q 1) = 1 + ql 1 (q 1) = ql j q 1 q n q l = q n l = q k = C C perfekt Beispiele: (a) q = 2 (K = Z 2 ), l = 3, n = 7
Codierung & Verschlüsselung 46 1 0 0 1 0 1 1 H = 0 1 0 1 1 0 1 0 0 1 0 1 1 1 [7, 4]-Hamming Code über Z 2. (b) q = 3 (K = Z 3 ), l = 3, n = 33 1 3 1 = 13 H = 1 0 0 1 2 0 0 1 2 1 1 1 2 0 1 0 1 1 1 2 0 0 1 1 2 1 0 0 1 0 0 1 1 1 1 1 2 1 1 dim(c) = 10, [10, 3]-Hamming Code über Z 3. C = 3 10 = 59049 (c) q = 2, l = 4, n = 24 1 2 1 = 15 1 0 0 0 1 1 1 0 0 0 1 1 1 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 H = 0 0 1 0 0 1 0 1 0 1 1 0 1 1 1 0 0 0 1 0 0 1 0 1 1 0 1 1 1 1 [15, 11]-Hamming Code über Z 2. C = 2 11 = 2048 Angenommen: y = (110101110000110) empfangen 0 0 Ist y C? Hy t 1 = 0 0 0 y C 0 0 Decodierung: y x C ( d(x, y) = 1 ), da C 1-Fehler korrigierender perfekter Code. y unterscheidet sich von x an genau einer Stelle i, statt y i steht in x y i + 1 0 0 1 ( 0 = Hyt = H x t + ( 0,..., 1, 0,..., 0 ) ). h 1i t = Hx t }{{} + H 0 h 2i = 1 h 3i i 0 0 0 h 4i 0 = 0 0 0 i = 2 x = (100101110000110) C Dieses Verfahren lässt sich verallgemeinern: Decodierung binärer Hamming-Codes: y empfangen. Ist Hy t = 0, so ist y C. Ist Hy t 0, so wähle in H diejenige Spalte, die mit Hy t übereinstimmt. Ist dies die i-te Spalte von H, so wird y an Stelle i geändert x C.
Codierung & Verschlüsselung 47 13.2 Reed-Solomon-Codes K Körper, K = q, 1 k n q K[x] k 1 = {f K[x] : grad(f) k 1} K-Vektorraum der Dimension k. Wähle M = {a 1,..., a n } K, a i a j für i j (geht, da n q) C = C M = {(f(a 1 ),..., f(a n )) : f K[x] k 1 } C ist ein Reed-Solomon-Code (Besonders wichtiger Fall: n = q 1, a i = a i wobei a ein Erzeuger von K, d. h. K = a = { a 1, a 2,..., a q 1 = 1 } ) (1) dim(c) = k: { K[x]k 1 C α : f (f(a 1 ),..., f(a n )) α ist ein K-lineare Abbildung, α ist surjektiv. f kern(α), d. h. (f(a 1 ),..., f(a n )) = (0,..., 0) f hat mindestens n verschiedene Nullstellen grad(f) = k 1 < n f = 0 kern(α) = {0}, α bijektiv, also dim(c) = k (2) d(c) = n k + 1: Jedes f 0 in K[x] k 1 hat höchstens k 1 Nullstellen, d. h. mindestens n (k 1) Einträge jedes Codewortes sind 0. Also: d(c) = wt(c) n k + 1 Betrachte: k 1 f = (x a i ) K[x] k 1 i=1 f(a 1 ) =... = f(a k 1 ) = 0 f c = (0,..., 0, f(a k ),..., f(a n )), f(a 1 ),..., f(a n ) 0, also k 1 wt(c) = n k + 1 Also: d(c) = n k + 1 (3) Reed-Solomon-Codes sind MDS-Codes nach (1) und (2). (Für q = 2 nur triviale Codes) 1... 1 a 1... a n a (4) G = 2 1... a 2 n ist Erzeugermatrix von C:..... a k 2 1... a k 2 n a k 1 1... a k 1 n
Codierung & Verschlüsselung 48 K[x] k 1 = C ( ) Basis: 1, x, x 2,..., x k 1 (1,..., 1), (a 1,..., a n ), a k 1 α 1,..., a k 1 n } {{ } Basis von C 13.3 MDS-Codes Reed-Solomon-Codes sind MDS-Codes. Wir geben einige weitere Beispiele: 0 0 (1) G = G.. 0 1 C der Code mit Erzeugermatrix G, wobei G eine Erzeugermatrix eines Reed-Solomon-Codes wie in 13.2.(4) ist. Länge n + 1, Dimension k, d( C) = n k + 2: d(c) (n + 1) k + 1 Singleton Sei 0 x C. Falls x Linearkombination der ersten k 1 Zeilen von G ist, so x = (x, 0), x C x = (f(a 1 ),..., f(a n )), wobei f Polynom von Grad k 2. Also höchstens k 2 Einträge in x sind gleich 0, d. h. wt( x) = wt(x) n (k 2) = n k +2 Falls die letzte Zeile von G in der Linearkombination von x vorkommt, so: x = (x, α), a K, x C. Dabei x 0, falls α 0. wt( x) = wt(x) + 1 n k + 1 + 1 = n k + 2. d( C) = n k + 2 = (n + 1) k + 1, also C MDS-Code Wähle n = q C MDS-Code der Länge q + 1 (2) G 1... 1 0 0 = a 1... a n 1 0 a 2 1... a 2 n 0 1 Code C der Länge q + 2. Dimension 3. Man kann zeigen, dass d( C ) = q = (q + 2) 3 + 1, falls q = 2 l. Also ist C ein MDS-Code. (3) MDS-Vermutung: Falls C [n, k]-code über K, C = q, mit d(c) = n k + 1 (MDS-Code), so n q + 2 (und falls q 2 l sogar n q + 1) (4) Ist C [n, k]-mds-code, n 2, Č = {(c 1,..., c n 1 ) : (c 1,..., c n 1, 0) C} (Verkürzung von C) ist [n 1, k 1, d]-code d(č) = (n 1) (k 1) + 1 Č MDS-Code
Codierung & Verschlüsselung 49 14 Codierung von Audio-CDs 14.1 Bündelfehler und Auslöschungen Auslöschung: Bit kann nicht mehr gelesen werden. Vorteil bei Auslöschungen: Man weiß, wo sie stattgefunden haben. Bündelfehler (Bursts): In einem Codewort sind sämtliche Fehler (einschließlich Auslöschungen) innerhalb b aufeinanderfolgendenen Zeichen aufgetreten (nicht notwendig alle diese Zeichen fehlerhaft); b = Länge des Bündelfehlers. Lemma: [n, k, d]-code kann Bündelfehler bis zur Länge d 1 korrigieren (pro Codewort), falls keine weiteren Fehler aufgetreten sind und die Positionen des Bündels bekannt sind. (ebenso: d 1 Auslöschungen) Beweis: c gesendet, y empfangen. y = ( ) c 1... c i }. {{.. } c j... c n b d 1 Sei c C, das an den Stellen c 1,..., c i, c j,..., c n mit y übereinstimmt. Dann ist d(c, c ) b d 1 c = c Definition: Sei C ein [n, k]-code über K. Interleaving (Spreizung) von C zur Tiefe s liefert Code C(s) K ns auf folgende Weise: Wähle s Codewörter von C, c 1 = ( ) c 11... c n1,..., cs = ( ) c 1s... c ns, schreibe diese als Spalten in c 11... c 1s eine Matrix..... und lese zeilenweise aus: ( ) c 11... c 1s c 21... c 2s... c n1... c ns c n1... c ns C(s)[ns, ks]-code, d ( C(s) ) = d(c) s Codewörter aus C Interleaver Codewort der Länge ns In C(s) können Bündelfehler der Länge b (d 1) s korrigiert werden, wenn man die Positionen kennt. ( ) c11,..., c 1s, }. {{.. }, c n1,..., c ns b In der ursprünglichen Matrixform bedeutet das c 11... c 1s.. Bündelfehler der Länge b.. c n1... c ns Bündelfehler der Länge b (d 1) s bewirkt in jedem Codewort (c 11,..., c n1 ),..., (c 1s,..., c ns ) einem Bündelfehler der Länge d 1. Diese sind korrigierbar nach Lemma.
Codierung & Verschlüsselung 50 14.2 Cross-Interleaving Definition: C 1, C 2 [n i, k i ]-Codes (i = 1, 2) über K, C 1 besitze Erzeugermatrix in Standardform (E k1 A). Das Cross-Interleaving des inneren Codes C 1 mit äußerem Code C 2 ist ein Code C K n 1n 2, der so entsteht: Wähle k 1 Codewörter c 1,..., c k1 spaltenweise in Matrix. aus C 2 K n 2, c i = (c 1i... c n2 i) i = 1... k 1 und schreibe sie Codiere jetzt jede Zeile mit (E k1 A) zu Codewörtern von C 1. n 1 k 1 Kontrollsymbole von C 1 { }} { c 11... c 1k1... C 1.......... c n2 1... c n2 k 1... C 1 C 2 C 2 C 2 C 2 c 11... c 1k1 Wegen der Multiplikation von..... mit (E k1 A) sind die letzten n 1 k 1 Spalten dieser c n21... c n2k 1 Matrix Linearkobinationen der ersten k 1 Spalten, liegen also auch in C 2. Lese zeilenweise aus. Liefert [n 1 n 2, k 1 k 2, d 1 d 2 ]-Code k 1 Codewörter aus C 2 Cross-Interleaver Codewort der Länge n 1 n 2 (n 2 hintereinanderfolgende Codewörter aus C 1 ) C kann Bündelfehler der Länge (d 2 1)n 1 korrigieren. Das lässt sich durch sogenanntes Cross-Interlaeving mit t-facher Verzögerung auf Bursts der Länge (d 2 1)n 1 t erhöhen. (Cross-Interleaver mit t-facher Verzögerung besteht aus n 2 1 Registern der Länge t, 2t,..., (n 2 1)t, die zu Beginn mit Nullen besetzt sind. Funktionsweise: siehe Abbildung auf Seite 51)
Codierung & Verschlüsselung 51 Input: Codewörter aus C 2 c i C 2 c i+1 C 2 t 2t. (n 2 1)t Interleaver c i C 1 c i 1 C 1 c i Codierung mit C1 Output: Codewörter aus C 1 Prüfsymbole von C 1 Abbildung 7: Cross-Interleaver
Codierung & Verschlüsselung 52 14.3 Audio-CD Ausgangscode bei der Audio-CD-Codierung ist ein Reed-Solomon [255, 251, 5]-Code R über F 2 8. C 1 [32, 28, 5]-Code C 2 [28, 24, 5]-Code 223-fache Verkürzung von R 227-fache Verkürzung von R Cross-Interleaving mit C 1 und C 2 mit 4-facher Verzögerung. CIRC 29 kann Bursts bis zur Länge 4 32 4 = 512 über F 2 8 korrigieren. Dabei: Wird Fehler in Codewort aus C 1 erkannt, so wird das gesamte Codewort als ausgelöscht betrachtet. Die dadurch entstehenden Bündelauslöschungen der Länge 4 in den Codewörtern aus C 2 werden mit C 2 korrigiert. 14.4 Datenspeicherung auf Audio-CDs (a) Analoges Tonsignal Abtastrate: 44100 pro Sekunde diskrete Werte (Audiosamples) Shannon sches Abtasttheorem: Hieraus lassen sich Frequenzen bis 22 khz exakt rekonstruieren. Audiosample Wert zwischen 0 und 2 16 1 = 65535 (getrennt für linken und rechten Kanal) Audiosample (a 1, a 2 ), a i Z 16 2 Identifiziere Körper F 2 8 mit Z 8 2 Audiosample Element in F 4 2 8 6 Audiosamples Element in F 24 2 8, enthält 24 8 Infobits. (b) CIRC-Codierung 29 CIRC: Cross-Interleaved Reed-Solomon-Code Infowort in F 24 2 8 = 24 8 Infobits C 2 [28, 24] über F 2 8 äußerer Code 4-fach verzögerter Interleaver C 1 [32, 28] über F 2 8 innerer Code C 1 -Codewort = 32 8 Codebits (pro Infowort)
Codierung & Verschlüsselung 53 Codierungsrate: 24 8 32 8 = 3 4 Bursts der Länge 512 (Elemente in F 2 8) = 8 512 ˆ=4096 Bits können korrigiert werden. (c) Codewort mit 32 8 Codebits Rahmen (Frame) von 588 sogenannten Kanalbits (diese werden dann auf CD gespeichert): Codewort + 8 Bits (Displayinformationen) } {{ } Subcode Kann nicht unmittelbar gespeichert werden. ( ) Technische Anforderung: Zwischen 2 Einsen höchstens 10 Nullen, mindestens 2 Nullen. [ α(n) = #{0, 1}-Folgen der Länge n, die ( ) erfüllen. ] n = 14 kleinstes n mit α(n) > 2 8 ; α(14) = 267 Erweitertes Codewort der Länge 32 8 + 8 = 264 (über Z 2 ) 33 8-Bit Vektoren 33 14-Bit Vektoren, so dass ( ) erfüllt ist [EFM: 8-14-Modulation] (d) Stelle sicher, dass bei Übergängen zwischen zwei 14-Bit-Vektoren Bedingung ( ) gilt: Einfügen von 3 Bits (Koppelbits, merging bits) hinter jedem 14-Bit-Vektor. Block mit 33 14 + 33 3 Bits Anfügen am Ende 24 Bits zur Synchronisation (Identifikation der nächsten Codesequenz) + 3 Pufferbits Liefert Block der Länge 33 14 + 33 3 + 24 + 3 = 588 Bits (der zu 6 ursprünglichen Audiosamples gehört) Pro Sekunde werden Kanalbitrate: 4,3218 Mbit /s 44100 588 6 (e) Physikalische Speicherung auf CD Spiralförmig nach innen verlaufende Spur = 4.321.800 Kanalbits produziert. Spurbreite: 0,6 µm Abstand zweier Spuren: 1 µm Pits: Vertiefungen ( 0,12 µm) Lands: Nicht-Vertiefungen Kanalbit auf einer Spur: Länge 0,3 µm Übergang Pit/Land bzw. Land/Pit: 1 alles andere: 0 0,9 µm 1,5 µm 1,8 µm 1,2 µm 10001 00000 1 000000 1 0000 Abbildung 8: Pits und Lands auf einer Audio-CD
Codierung & Verschlüsselung 54 Bei Pits wird Laserstrahl (Ø 1 µm) wegen Interferenzen weniger stark reflektiert als bei Lands. Auflösung erfordert: Mindestens 2 Nullen zwischen Einsen. Synchronisation und Spurhaltung erfordert: Höchstens 10 Nullen zwischen Einsen. Synchronisation: Bit-Uhr wird bei jedem Übergang neu synchronisiert und zählt aufeinanderfolgende Nullen. Gesamtlänge Pits und Lands sollte ungefähr gleich sein (Fokusierung des Lasers, Hell-Dunkel- Unterscheidung). Sichergestellt durch Wahl der Koppelbits. (f) Abspieldauer CD 74 min Erfordert 74 60 4.321.800 19 10 9 Bits, die abgespeichert werden müssen. Erfordert Spurlänge von 19 10 9 0, 3 10 9 km = 5,7 km Lesegeschwindigkeit: 5700 60 74 1,2-1,3 m /s (g) Decodierung kann Bursts von 4096 Code-Bits korrigieren; diese sind in 4096 588 256 = 9408 Kanalbits enthalten. Länge eines korrigierbaren Burstfehlers: 9408 0, 3 µm 2,8 mm Besondere Abspeicherung der codierten 6 Audiosamples innerhalb eines Rahmens (Scrambling) + Interpolation Korrektur von Bursts der Länge 7,5 mm.
Codierung & Verschlüsselung I Literatur Kryptologie und Codierungstheorie (1) Roland Matthes: Algebra, Kryptologie und Kodierungstheorie. Fachbuchverlag Leipzig, 2003. (2) Wade Trappe, Lawrence Washington: Introduction to Cryptography with Coding Theory. Prentice Hall, 3rd ed., 2005. (3) Wolfgang Willems: Codierungstheorie und Kryptographie. Birkhäuser, 2008. Kryptologie (1) Albrecht Beutelspacher, Heike B. Neumann, Thomas Schwarzpaul: Kryptographie in Theorie und Praxis. Vieweg, 2005. (2) Johannes Buchmann: Einführung in die Kryptographie. Springer, 3.Auflage, 2004. (3) Bruce Schneier: Applied Cryptography. John Wiley & Sons, 2nd ed., 1996. Deutsch: Bruce Schneier: Angewandte Kryptographie. Pearson Studium, 2006. (4) Douglas Stinson: Cryptography - Theory and Praxis. 3. Auflage, CRC Press, 2005. (5) Dietmar Wätjen: Kryptographie - Grundlagen, Algorithmen, Protokolle. Spektrum Akademischer Verlag, 2004. Codierungstheorie (1) Bernd Friedrichs: Kanalcodierung. Springer, 1996. (2) Vera Pless, W. Cary Huffman (editors): Handbook of Coding Theory I,II. Elsevier, 1998. (3) Steven Roman: Coding and Information Theory. Springer, 1992. (4) Ralph-Hardo Schulz: Codierungstheorie. Vieweg, 2. Auflage, 2003. Abbildungsverzeichnis 1 Verschlüsselung..................................... 2 2 Asymmetrische und symmetrische Verschlüsselung................... 3 3 Zerteilung des Klartextes in Blöcke gleicher Länge................... 7 4 Schematischer Ablauf des Rijndael-Verfahrens..................... 14 5 Codierung........................................ 29 6 Beispiel eines EAN-13 Codewortes........................... 32 7 Cross-Interleaver..................................... 51 8 Pits und Lands auf einer Audio-CD........................... 53 Tabellenverzeichnis 1 Häufigkeitsverteilung der Buchstaben in deutschsprachigen Texten.......... 4 2 Die vier Codes des EAN-13............................... 32