Lineare Codes Dipl.-Inform. Wolfgang Globke Institut für Algebra und Geometrie Arbeitsgruppe Differentialgeometrie Universität Karlsruhe 1 / 19 Codes Ein Code ist eine eindeutige Zuordnung von Zeichen aus einem gegebenen Zeichenvorrat zu einem Codewort aus einem anderen Zeichenvorrat. Matrikelnummern codieren Studenten. ASCII-Zeichen codieren das lateinische Alphabet (und etliche weitere Zeichen). Bitfolgen codieren im Rechner natürliche Zahlen und mit etwas Geschick auch einige rationale Zahlen. 2 / 19 Achtung Code 6= Chiffre 3 / 19 Binäre Codes Wir konzentrieren uns nun auf die Codierung durch endliche Bitfolgen fester Länge k: 0, 1, 0, 1, 0, 0, 1, 0 {z } | k In diesem Fall sprechen wir von einem binären Code. 4 / 19 Binäre Arithmetik Die Bits gehorchen bestimmten Regeln: AND 0 1 0 1 0 0 0 1 Was hat das mit dem Körper • 0 1 XOR 0 1 0 1 0 1 1 0 F2 = Z/2Z zu tun? 0 1 0 0 0 1 + 0 1 0 1 0 1 1 0 5 / 19 Binäre Codes Und wenn wir gerade dabei sind. . . 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0 010101110110110 c = (0 1 0 1 0 1 1 1 0 1 1 0 1 1 0) ∈ Fn2 Wir können eine Bitfolge c der Länge n als Vektor im Vektorraum Fn2 auffassen. 6 / 19 Lineare Codes Ein linearer Code C ist ein Untervektorraum von C enthält 2k Codeworte für dim C = k ≤ n. Fn2 . 7 / 19 Nachrichtenübertragung Rauschen e Nachricht x Codierer c Kanal v decodierte Nachricht Decodierer 8 / 19 Effizienz vs. Fehlerkorrektur Bei der Konstruktion von Codes hat man zwei Ziele im Auge: 1 Effizienz der Darstellung. 2 Möglichkeiten zur Fehlerkorrektur. Dies sind zwei gegensätzliche Ziele: Korrekturfähigkeit wird verbessert, wenn man zusätzliche Bits zur Darstellung hinzufügt (also die Redundanz erhöht). Dadurch wird die Darstellung weniger effizient. 9 / 19 Fehlerkorrektur Wir betrachten die Fehlerkorrektur. Hinzufügen redundanter Bits geschieht durch Einbetten des Codes C der Dimension k in Fn2 mit n > k. Der Hamming-Abstand zweier Codeworte c = (c1 . . . cn ), c0 = (c10 . . . cn0 ) ist die Anzahl der Stellen, an denen sich die beiden unterscheiden: dist(c, c0 ) = #{j | cj 6= cj0 }. Die Minimaldistanz d ist der minimale Abstand zwischen zwei Codeworten aus C , d = min{dist(c, c0 ) | c, c0 ∈ C }. Sie ist entscheidend für die Fehlerkorrekturfähigkeit des Codes. 10 / 19 Fehlerkorrektur Die Minimaldistanz d bestimmt, wieviele Fehler erkannt bzw. korrigiert werden können. ccc c!! ! ddd− 1 d−1 " d2 ! ! dd − 1 2 " d−1 d2 cc dcc c! ) = 5 dist(c, " ◦ vc "∈ C cc c! Es können bis zu d − 1 Fehler erkannt oder b d−1 2 c Fehler korrigiert werden (hängt vom Übertragungskanal ab). 11 / 19 Lineare Codes vs. beliebige Codes Nutze die Vektorraumstruktur des linearen Codes: Fn2 . Ein linearer Code C ist ein Untervektorraum von Fn2 . Ein beliebiger Code B ist eine Teilmenge von Ein beliebiger Code B hat keine Struktur, es müssen alle Codeworte separat gespeichert werden. linearer Speicheraufwand. Ist C ein k-dimensionaler Unterraum, so reichen k Basisvektoren, um alle 2k Codeworte darzustellen. logarithmischer Speicheraufwand. 12 / 19 Codierungsabbildung Nutze die Vektorraumstruktur des linearen Codes: Wir haben 2k Informationsworte x ∈ Fk2 , die wir durch Bitfolgen c der Länge n > k codieren wollen. Codierung erfolgt durch die lineare Codierungsabbildung Γ : Fk2 → Fn2 , x 7→ c = x · G . Sie ist durch die Erzeugermatrix G definiert, deren Zeilen eine Basis unseres Codes C sind. Es ist also C = Bild Γ ( Fn2 . 13 / 19 Fehlererkennung Nutze die Vektorraumstruktur des linearen Codes: Problem: Sender schickt ein Codewort c ∈ Fn2 über den Kanal, Empfänger erhält v ∈ Fn2 . Ein Fehler liegt vor, wenn v 6= c gilt. Wie kann man Fehler erkennen? Prüfe, ob v ein Codewort aus C ist: Löse das LGS v =x·G nach x ∈ Fk2 . 14 / 19 Fehlererkennung Der Code C ist als Untervektorraum die Lösungsmenge eines homogenen LGS. Es gibt also eine Prüfmatrix H mit G · H > = O. Mit H kann man ein empfangenes v auf Fehler prüfen: v∈C ⇔ v · H > = 0. 15 / 19 Fehlerkorrektur Das Fehlersyndrom s von v ist s = v · H > ∈ Fn−k . 2 Es hängt nur von einem additiven Fehler e ab, nicht von c: v =c+e ⇒ v · H > = c| ·{z H >} +e · H > = e · H > = s. =0 Aus v kann man also das ursprüngliche Codewort c rekonstruieren, wenn man eine Lösung e des LGS e · H> = s findet. Zur Fehlerkorrektur finde Vektor e mit möglichst kleinem Hamming-Gewicht. Dieses Problem ist NP-schwer. 16 / 19 Weitere Eigenschaften und Problemstellungen Systematische Codierung: Durch geeigneten Basiswechsel S die Erzeugermatrix G auf eine einfachere Form S · G bringen. Zyklische Codes: Periodische Struktur der Erzeugermatrix liefert Abschätzungen für Minimaldistanz d. Bestimmung der Minimaldistanz d bei gegebener Erzeugermatrix G . Bestimmung der maximalen Anzahl der Codeworte bei gegebener Minimaldistanz. Aufzählen aller Codeworte. 17 / 19 Codierungstheorie in Karlsruhe IKS (vormals IAKS Beth) Institut für Kryptographie und Sicherheit (Leitung Dr. Jörn Müller-Quade) Vorlesung: Signale, Codes und Chiffren I - II Vorlesung: Grundlagen der Computersicherheit Vorlesung: Public Key Kryptographie Vorlesung: Embedded Security diverse Praktika zur Computersicherheit 18 / 19 G. Goos Vorlesungen über Informatik, Band 1 (Springer) M. Grassl, W. Globke Algorithmen für Gruppen und Codes K. Jacobs, D. Jungnickel Einführung in die Kombinatorik (de Gruyter) F.J. MacWilliams, N.J.A. Sloane The Theory of Error-Correcting Codes (North-Holland) 19 / 19