Projekt Crypt Einfache kryptografische Verfahren zum selber programmieren. von Torsten Zuther Inhalt Seite 1 1. Einfache klassische Verfahren 1.1. Cäsarverfahren – altes Prinzip modernisiert 1.2. Multiplikationsverfahren 1.3. Tausch-Chiffre 1.4. Lineare Schieberegister 1.5. Vigenére-Chiffre 1.6. Aufblähen-Algorithmus 1.7. XOR-Verschlüsselung Inhalt Seite 2 2. Schwer invertierbare Verfahren 2.1. Das RSA-Verfahren 2.2. Der Data Encryption Standard(DES) 1.1. Cäsar modernisiert Idee von Cäsar: (Verschiebung des Alphabets um s Einheiten) Index Alphabet Chiffriertes Alphabet (s = 4) 1 A E 2 B F … … … 26 Z D 1.1. Cäsar modernisiert Beispiel: Schlüssel = 11 aus „CAESAR“ wird „NLPDC“ 1.1. Cäsar modernisiert Das Alphabet hier besteht aus 256 Zeichen (ASCII-Zeichensatz). 0 < s < 256 255 Schlüssel 1.1. Cäsar modernisiert Beispiel (s = 46): 1.2. Multiplikationsverfahren Starke Verwandtschaft mit dem Cäsarverfahren Jedes Zeichen wird im Modul 256 mit t multipliziert. (t ist der Schlüssel) K = 44 (Klartext) M = 256 (das Modul, der ASCII-Zeichensatz) T = 11 (t, der Multiplikator oder der Schlüssel) 1.2. Multiplikationsverfahren Beispiel: Verschlüsselung: (K * t) mod m = (44 * 11) mod 256 = 484 mod 256 C (Ciphertext)= 228 Entschlüsselung: (modulare Inverse von t ausrechen – mit dem euklidischen Algorithmus) (C * inv t) mod m = (228 * 163) mod 256 = K = 37164 mod 256 = 44 1.3. Tausch-Chiffre Kapselt Cäsar- und Multiplikationsverfahren Verschlüsselung: c = [(k + s) * t] mod m Entschlüsselung: k = [(c * inv t) – s] mod m 1.4. Lineare Schieberegister Besteht aus n Bits (Zellen) und einem Index m (die markierte Zelle) Beispiel: 0 0 1 1 1 0 1 1 m=4 n Register wird 2 – 1 mal nach rechts verschoben 1.4. Lineare Schieberegister 0 0 0 0 1 ... 0 0 0 0 0 ... 1 0 0 0 0 ... 1 1 0 0 0 ... Schlüssel = 11011... 1 1 1 0 0 ... 0 1 1 1 0 ... 1 0 1 1 1 ... 1 1 0 1 1 ... 1.4. Lineare Schieberegister Beispiel Klartext = 01101111; Schlüssel = 11101100 Verschlüsselt = Klartext xor Schlüssel 01101111 ++11101100 10000011 Ciphertext 1.5. Vigenére-Chiffre Ähnlich dem Cäsarverfahren, aber mit mehreren versch. Schlüsseln zu einem Passwort zusammengefügt: Klartext = "CAESAR" Passwort = "TEST" Verschlüsselung: C A T(s=20) E(s=5) E S A R S(s=19) T(s=20) T(s=20) E(s=5) 1.5. Vigenére-Chiffre Garantiert 100%ige Sicherheit, wenn Passwortlänge = Klartextlänge Keine Häufigkeitenanalyse One-Time-Pad 1.6. Aufblähen-Algorithmus Klartext = "Test" = c0 + c1 + c2 + c3 Verschlüsseln durch Verwirbelung Ciphertext = c1 + R0 + c0 + c3 + R1 + c (Vertauschen von je zwei Zeichen und Einfügen eines Zufallszeichens in deren Mitte) 1.7. XOR-Verschlüsselung Einfachstes symmetrisches Verfahren Schwacher Schutz Jedes Klartextzeichen wird XOR mit dem Schlüssel verknüpft. Entschlüsseln = Verschlüsseln 2.1. Das RSA-Verfahren Beruht auf dem Problem der Primfaktorenzerlegung, das bei großen Zahlen (>512 Bit) enormen Rechenaufwand verursacht. Asymmetrisches Verfahren 3 Schlüssel (2 öffentliche, 1 geheimer): öffentlich: das Modul n, der Encryptor e geheim : der Decryptor d 2.1. Das RSA-Verfahren Zunächst Schlüsselerzeugung p und q (beide prim) bilden das Modul n: n=p*q e ist teilerfremd zu (p-1)*(q-1), d.h. GgT(e,[p-1]*[q-1]) = 1 d = die Inverse von e im Modul (p-1)*(q-1) 2.1. Das RSA-Verfahren Nun kann verschlüsselt werden (Beispiel): p = 17; q = 31 n = p * q = 527 e muss teilerfremd zu (p-1) * (q-1) sein z.B. e = 7 d = inv e (im Modul (17-1)*(31-1) = 480) d = 343 2.1. Das RSA-Verfahren Klartext = 2 c = 2^e mod n = 2 ^ 7 mod 527 = 128 mod 527 = 128 2.1. Das RSA-Verfahren Entschlüsseln Klar = 128^d mod n = 128^343 mod 527 = 128256 * 12864 * 12816 * 1284 * 1282* 1281 mod 527 = 35 * 256 * 35 * 101 * 47 * 128 mod 527 = 2 mod 527 = 2 2.1. Das RSA-Verfahren Angriffsmöglichkeiten: BruteForce-Attacke (aussichtslos) Primfaktorzerlegung von n um auf d zu schließen (bei n >= 1000 Bits aussichtslos) 2.2. Der Data Encryption Standard (DES) 64 Bit Daten werden mit einem 64 Bit Schlüssel verschlüsselt (bzw. 56 Bit) Symmetrisches Verfahren Grafische Darstellung (nächste Seite) Beispiel Permutationstabelle: type TPTab = array[1..64] of Byte; const IPTab: TPTab =(58,50,42,34,26,18,10,02,60,52,44,36,28,20,12,04, 62,54,46,38,30,22,14,06,64,56,48,40,32,24,16,08, 57,49,41,33,25,17,09,01,59,51,43,35,27,19,11,03, 61,53,45,37,29,21,13,05,63,55,47,39,31,23,15,07); Beispiel Sbox: type SBox = array[0..3,0..15] of Byte; const S1: SBox =((14,04,13,01,02,15,11,08,03,10,06,12,05,09,00,07), (00,15,07,04,14,02,13,01,10,06,12,11,09,05,03,08), (04,01,14,08,13,06,02,11,15,12,09,07,03,10,05,00), (15,12,08,02,04,09,01,07,05,11,03,14,10,00,06,13)); { BEISPIEL: Input : 6 Bits: "101011" Output : 4 Bits: Zeile 11b = 3; Spalte 0101b = 5 } Quellen: http://goethe.ira.uka.de/seminare/dzs/ec/des2.png http://dud.inf.tu-dresden.de/~pfitza/DSuKrypt.pdf Lehr- und Übungsbuch Mathematik für Informatiker (Prof. Dr. Aulenbacher, Prof. Dr. Meyer, Dipl.-Math. Wabel-Frenk, Prof. Dr. Wenisch; Fachbuchverlag Leipzig) ENDE