Kryptographische Zufallszahlen Schieberegister, Output-Feedback
Stromchiffren Bei Stromchiffren wird die Eingabe zeichenweise bzw. blockweise mit einer parallel dazu erzeugten Schlüsselfolge meist mit XOR oder ADD chiffriert. Die Schlüsselfolge ist dabei meist eine pseudo Zufallsfolge. Zeichenbzw. Block- Generator Klartextfolge: + Chiffretext: 5 - S 2
Einmalschlüssel Bei Stromchiffren dürfen Schlüssel keinesfalls mehrfach verwendet werden! Nachricht1 + Schlüssel = Chiffre1 Nachricht2 + Schlüssel = Chiffre2 Chiffre1 - Chiffre2 = Nachricht1 - Nachricht 2 Damit kann die Nachricht als mit Klartext verschlüsselt angesehen werden und mit statistischen Methoden entschlüsselt werden. Damit ist der Schlüssel kompromittiert und kann erst recht nicht für noch weitere Verschlüsselungen verwendet werden 5 - S 3
deterministische zufällige Folgen Pseudo-Zufallszahlen um nicht lange Schlüsselfolgen sicher zu übertragen, erzeugt man lange Folgen aus kurzen Schlüsseln deterministisch Die Folge muß Zufällig sein, d.h. keine statistischen Unregelmäßigkeiten aufweisen. (Folgen mit sehr langer Periode) Der Erzeugungsalgorithmus muß kryptographisch sicher sein. z.b. Schieberegister-Folgen technisch leicht sind 0-1-Folgen mit Schieberegistern zu realisieren z.b. Rekursion etwas aufwendiger sind Folgen natürlicher Zahlen die sich aus d+1 Anfangswerten x 0,x 1,...,x d durch eine rekursive Definition x n+1 := f((x n,x n-1,...x n-d ) ergeben. (Zufälligkeit nur schwer verifizierbar) 5 - S 4
Cypher Feedback Aus Blockchiffren kann man Stromchiffren erzeugen: Cipher FeedBack (CFB)-Mode Anfangsblock E, Schlüssel S Chiffreblock Z = C(S,A) (abhängig vom Klartext) Codebyte = Textbyte + Z 1 (1.Byte von Z, entsprechend für k Byte) E : 1-Byte-Shift + Codebyte. 1-Byte-Shift Anfangsblock Schlüssel C Codebyte + Chiffreblock Klartextbyte 5 - S 5
Output Feedback Eine alternative Methode ist: Ouput FeedBack (OFB)-Mode Anfangsblock E, Schlüssel S Chiffreblock Z = C(S,A) (unabhängig vom Klartext) Codebyte = Textbyte + Z 1 (1.Byte von Z, entsprechend für k Byte) E : 1-Byte-Shift + Z 1. 1-Byte-Shift Anfangsblock Schlüssel C Chiffreblock + Codebyte Klartextbyte 5 - S 6
Crypt Der UNIX-Verschlüssselungsalgorithmus crypt greift die Ideen der ENIGMA auf. Aus dem Schlüssel wird je ein 256-Element Rotor und Reflektor erzeugt, die nach dem ENIGMA-Prinzip eine dauend wechselnde Substitution erzeugen. Wie die ENIGMA ist diese Stromchiffre leicht analysierbar und das frei verfügbare CBW (crypt breakers workbench) knackt Daten, die mit crypt verschlüsselt sind. Crypt ist also als Verschlüsselung nicht zu empfehlen könnte aber prinzipiell zu einer funktionstüchtigen Verschlüsselung ausgebaut werden (viele Rotoren aber keinen Reflector) 5 - S 7
RC4 Externer Schlüssel: S (k Byte) Interner Schlüssel: 2 Byte i,j + Permutation P i (i=0...255) 0 0 0 1 2 3 4 5 6 7 8 9... i... j... 255 Initialisierung......... i j P 0 P 1 P 2 P 3 P 4 P 5 P 6 P 7 P 8 P 9 P i P j P 255 + + i=0...255 S S... S Konstruktion der Zufalls-Bytefolge K i i j P 0 P 1 P 2 P 3 P 4 P 5 P 6 P 7 P 8 P 9... P i... P j... P 255 + 1 + K i = P t + t 5 - S 8
SEAL Neuer Algorithmus von Rogaway & Coppersmith, von IBM patentiert. Sehr schnelle Chiffrierung Beruht auf der (langsamen) Berechnung von 3 KByte langen Tabellen aus einem Schlüssel Die Berechnung der Schlüsselfolge muß nicht sequentiell geschehen, sondern kann beliebig viele Bytes überspringen. Besonders geeignet für die Chiffrierung ganzer Festplatten oder verstreuter Datenbankeinträge. bisher unbekannt, aber wahrscheinlich hoch. 5 - S 9
Schieberegister LFSR Eine Anfangs- Bitfolge wird durch ein Schieberegister geschoben und dabei das nächste Folgenbit aus einigen der vorhergehenden aufsummiert: 1000 + 0100 1010 0101 Periode 6 0010 0001 1000 1000 + 1100 1110 1111 0111 1011 1101 Periode 15 Ein Schieberegister der Länge n 0110 erzeugt eine Bitfolge einer Periode 0011 von höchstens 2 n -1. 1001 Sobald 000..0 vorkommt, ist die 0100 Bitfolge konstant 0. 0010 0001 1000 5 - S 10
Kryptoanalyse known-plaintext-attack: ist eine durchgehendes Schlüssel-Stück von der doppelten Länge des Schieberegisters bekannt, so kann der Code gebrochen werden Im vorigen Beispiel sei das Folgenstück 00111101 bekannt. Mit dem Ansatz x n+4 := c 0 x n + c 1 x n+1 + c 2 x n+2 + c 3 x n+3 und dem Anfangsstück 0011 ergeben sich die Bedingungen c 2 + c 3 = 1, c 1 + c 2 + c 3 = 1, c 0 + c 1 + c 2 + c 3 = 0, c 0 + c 1 + c 2 = 1, woraus sich die Rückkopplungen c 0 = c 3 = 1 und deren fehlen c 1 = c 2 = 0 bestimmen läßt Jede Bitfolge von Periode <2k läßt sich durch ein Schieberegister der Länge <k erzeugen. Die kleinste solche Schieberegister-Länge heißt die lineare Komplexität der Bitfolge 5 - S 11
nichtlineare Rückkopplung Verknüpft man die Rückkopplungen nicht einfach mit + sondern mit einem komplexeren Ausdruck mit +,* (XOR, AND), so entsteht eine Folge, die eventuell größere lineare Komplexität besitzt. a*d + 1 d c b a 1 0000 1000 1100 1110 1111 Periode 5 0111 1011 0101 1110 0000 1000 0100 1010 0101 Periode 15 + 0010 1001 1100 0110 d c b a 1011 1101 1110 Die Kryptoanalyse liefert für ein 5-elementiges LFSR die TAP-Sequenz 4,3,1 0111 und mit dieser läßt sich diese Zufallsfolge genau erzeugen. 0011 0001 0000 Es ist aber nicht garantiert, daß die Komplexität wirklich ansteigt, wie das erste Beispiel zeigt. Die 00..0 spielt in nichtlinearen Rückkopplungen keine Sonderrolle mehr 5 - S 12
A5 (D-Netze) A5 benützt ein 64-Bit Register als 3 LFSR der Längen 19, 22 und 23 und den TAP-Sequenzen 18,17,16,13 ; 21,20,16,12 und 22,21,18,17. + + + höchstens eines der Register gibt sein Bit weiter, wenn nämlich sein mittleres Bit (dick umrandet) sich von den beiden anderen mittleren Bit unterscheidet. Damit ist die Bitfolge nichtlinear rückgekoppelt. Wegen der kurzen Register und Sequenzen ist A5 nicht als sicher anzusehen, trotzdem ist es einer der meistgenutzen Algorithmen. 5 - S 13
Lineare Rekursion Betrachten wir die Zahlen {0,1,...,N-1} und darauf die Rekursion x n+1 := a*x n + c MOD N, so erhält man eine Zahlenfolge, x n = a n *x 0 + (a n-1 +...+a+1)*c = a n *x 0 + c*(a n -1)/(a-1) MOD N, deren Periode maximal N sein kann. Hinreichend: ggt(c,n) = 1 ; prim p N => p (a-1) ; 4 N => 4 (a-1) Beispiele zeigen aber noch starke Regelmäßigkeiten Verbesserung: Linear-rekursive Folge auf NM Zahlen erzeugen und mit _ DIV M auf {0,1,...,N-1} reduzieren. 5 - S 14
Beispiel N=26 => 2,13 a-1 => a=1, wähle c=7 : 0 7 14 21 2 9 16 23 4 11 18 25 6 13 20 1 8 15 22 3 10 17 24 5 12 19 0... Die graphische Darstellung der Folge zeigt eine starke Regelmäßigkeit Beispiel 5 - S 15
Beispiel Beispiel N=24, wähle a=13, c=23 0 23 10 9 20 19 6 5 16 15 2 1 12 11 22 21 8 7 18 17 4 3 14 13 eine auffällige Häufung von Zahlenpaaren i, i-1! Die graphische Darstellung der Folge zeigt eine starke Regelmäßigkeit 5 - S 16
Verbesserung Mit DIV auf kleinere N reduzieren: z.b. _ DIV 2 0 7 14 21 2 9 16 23 4 11 18 25 6 13 20 1 8 15 22 3 10 17 24 5 12 19 0... 0 3 7 10 1 4 8 11 2 5 9 12 3 6 10 0 4 7 11 1 5 8 12 2 6 9 0... Noch viel Regelmäßigkeit, aber Wiederholungen ohne Periode möglich Mit DIV auf kleinere N reduzieren: z.b. _ DIV 2 0 23 10 9 20 19 6 5 16 15 2 1 12 11 22 21 8 7 18 17 4 3 14 13 0 11 5 4 10 9 3 2 8 7 1 0 6 5 11 10 4 3 9 8 2 1 7 6 noch immer die auffällige Häufung von i i-1. 5 - S 17
nichtlineare Rekursion 3^x+63 mod 127 (x-63)^2 +42 mod 127 7x+63 mod 127 x+42 mod 127 5 - S 18
Rekursion Es wird berechnet: x(k+1)=a 3 x(k) + a 2 x(k-1) + a 1 x(k-2) (mod m) m=27 ==> max. Periode 27 3-1 = 19682 a 1 = 1, a 2 = 7, a 3 = 4 : 01 02 03 00 23 14 01 17 08 17 06 16 15 16 23 03 00 17 17 25 20 02 11 24 13 15 13 08 03 00 02 11 04 14 14 23 15 19 15 19 11 03 00 00 23 19 26 17 26 06 07 15 07 05 03 00 26 26 16 21 01 20 24 04 15 04 07 03 00 11 20 22 23 23 05 15 10 15 10 20 03 00 14 05 10 08 26 08 06 25 15 25 14 03 00 08 08 07 11 20 02 24 22 15 22 26 03 00 20 02 05 05 14 15 01 15 [Periode 117] 01 02 03 00 23 14 Die maximale Periode wird bei weitem nicht erreicht aber es gibt einige unregelmäßige Wiederholungen 5 - S 19
Rekursion Es wird berechnet: x(k+1)=a 3 x(k) + a 2 x(k-1) + a 1 x(k-2) (mod m) m=27 ==> max. Periode 27 3-1 = 19682 a 1 = 1, a 2 = 7, a 3 = 4 : 01 01 01 12 02 12 20 04 06 18 10 10 20 25 07 07 21 05 12 23 19 06 18 25 16 14 04 22 22 03 26 12 17 06 06 18 22 04 26 19 19 19 12 11 12 02 22 06 18 01 01 02 16 25 25 21 14 02 05 10 06 18 16 07 23 22 03 13 03 08 12 26 07 06 18 13 22 08 10 10 10 12 20 12 11 13 06 18 19 19 11 07 16 16 21 23 12 14 01 06 18 07 25 05 13 04 04 03 17 12 08 25 06 18 04 13 17 [Periode 117 ] 01 01 01 12 02 12 5 - S 20
Beispiele Es wird berechnet: x(k+1)=a 3 x(k) + a 2 x(k-1) + a 1 x(k-2) (mod m) Die Periode muß nicht an den Anfang zurückkehren: m=27 ==> max. Periode 27 3-1 = 19682 a 1 = 3, a 2 = 7, a 3 = 4 : 03 02 01 00 13 01 14 21 23 11 25 03 04 04 26 09 14 08 22 24 04 07 20 06 23 05 10 09 13 10 23 12 23 02 16 12 04 13 08 00 14 26 13 06 04 16 02 24 23 23 01 18 13 19 05 03 23 20 07 21 04 22 17 18 14 17 04 15 04 25 11 15 23 14 19 [Position 75, Periode 72 ] 00 13 01 a 1 = 1, a 1 = 7, a 1 = 4 : 01 03 03 09 12 12 24 00 15 24 12 18 12 21 06 18 15 15 03 00 12 03 15 09 15 6 21 [Position 27,Periode 24] 09 12 12 5 - S 21
Lineare Rekursion: In der Statistik sind lineare Rekursionen als gute Zufallsgeneratoren sehr beliebt, weil sie statistischen Zufallstests sehr gut standhalten Die kryptographische von Zufallsgeneratoren, die auf linearer Rekursion beruhen ist als sehr schlecht zu bewerten. Selbst wenn Nichtlinearitäten zugelassen werden (z.b. X n = (a* X n-13 +b*x n-12 + c*x n-1 +d) mod N ) kann eine so erzeugte Bitfolge noch leicht gebrochen werden, d.h. der Erzeugungsmechanismus kann aus kurzen Teilfolgen bestimmt werden 5 - S 22
Message Digest Cypher Um gute Zufallsgeneratoren zu konstruieren kann man die Feedback-Modi statt auf Blockcodes auch auf nichtumkehrbare Funktionen (Hashfunktionen) anwenden. Eine Hashfunktion ist eine schlüsselabhängige Funktion H, die Zeichenfolgen beliebiger Länge auf Blöcke einer festen Länge t abbildet, dabei ist eine Umkehrfunktion nicht nötig (und nicht erwünscht!) Append Schlüssel H CFB Zufallsblock Append Schlüssel H Codeblock + Klartextblock OFB Zufallsblock 5 - S 23