Heiko Knospe Eine Analyse des AES Algorithmus mit dem Computeralgebrasystem Sage Abstract. Das Computeralgebrasystem Sage bietet viele algebraische und zahlentheoretische Funktionen und ist durch eigene Python-Skripten leicht erweiterbar. Sage kann daher gut für kryptographische Untersuchungen verwendet werden. Der Beitrag behandelt eine Kryptoanalyse der Blockchiffre AES, die in vielen Netzwerkprotokollen und Sicherheitsanwendungen zum Einsatz kommt. AES besitzt eine relativ einfache algebraische Struktur. In dem Beitrag werden insbesondere die Nichtlinearität und das differentielle Verhalten der S-Box sowie die Diffusionseigenschaften der Chiffre untersucht. Sage Sage (Sagemath) [5] ist ein freies Computeralgebrasystem, das neben eigenen Funktionen auch verschiedene andere Systeme und Bibliotheken wie Singular, Maxima, PARI und R enthält und über eine einheitliche Schnittstelle zur Verfügung stellt. Sage besitzt eine interaktive Konsole sowie eine Browser-basierte Benutzeroberfläche und kann durch eigenen Python Code leicht erweitert werden. Eine besondere Stärke sind die algebraischen und zahlentheoretischen Objekte und Funktionen. Beispiele hierfür sind Ringe, Körper, algebraische Zahlkörper, Polynome, Restklassen und endliche Körper. Sage ist daher für kryptographische Untersuchungen gut geeignet und ermöglicht einen schnellen Zugang zu interessanten kryptologischen Fragestellungen, die etwa im Rahmen von Praktika und Forschungsprojekten bearbeitet werden können. Nachfolgend werden einige Elemente einer Kryptoanalyse der AES Blockchiffre unter Einsatz von Sage erläutert. Die AES Blockchiffre Der Advanced Encryption Standard AES (der Rijndael Algorithmus) ist eine standardisierte und weit verbreitete Blockchiffre. AES ist von großer
2 praktischer Bedeutung; die Chiffre wird zur symmetrischen Verschlüsselung von Daten und Datenträgern und zur Sicherung der Netzwerkkommunikation mit Protokollen wie SSL/TLS und IPsec eingesetzt. AES verschlüsselt (und entschlüsselt) Blöcke der Länge 28 Bit in Abhängigkeit von einem Schlüssel k {0, } n, wobei n = 28, n = 92 oder n = 256 zulässig sind: f k : {0, } 28 {0, } 28 Durch Wahl eines Operationsmodus, z.b. Cipher Block Chaining (CBC) Mode oder Counter Mode, und einer Paddingmethode (Auffüllen auf Vielfache der Blocklänge) entsteht ein Verschlüsselungsverfahren für Daten beliebiger Länge. Der Klartext, die Zwischenergebnisse (Status) und der Chiffretext werden in einer 4 4 Matrix über dem Körper GF (256) angeordnet. In 0, 2 oder 4 Runden (abhängig von der Schlüssellänge) werden folgende Operationen ausgeführt (siehe Abbildung ): SubBytes: Nichtlineare S-Box. ShiftRows: Zyklische Verschiebung der Zeilen. MixColumns: Lineare Abbildung der Spaltenvektoren. AddRoundKey: Addition des Rundenschlüssels. Die Rundenschlüssel werden unter Verwendung der S-Box aus dem AES Schlüssel abgeleitet. Der Körper K = GF (2 8 ) wird durch den Restklassenring GF (2)[t]/(t 8 + t 4 + t 3 + t + ) definiert. K ist als GF (2)- Vektorraum isomorph zu GF (2) 8, aber einige AES Operationen verwenden die zusätzliche Körperstruktur. Die Elemente von K können als binäres Polynom vom Grad < 8 bzw. als Hexadezimalzahl repräsentiert werden. Die Galoisgruppe Gal(K GF (2)) ist eine zyklische Gruppe der Ordnung 8, die vom Frobenius f(x) = x 2 erzeugt wird. Die GF (2)-lineare Spurabbildung ist durch die Summe der konjugierten Elemente definiert: T r : K GF (2) T r(x) = x + x 2 + x 4 + + x 28 Sage beherrscht die Rechenoperationen im Körper K und kann auch die Spur von Elementen berechnen. In dem folgenden Beispiel wird K = GF (2 8 ) und a = t mod (t 8 + t 4 + t 3 + t + ) K definiert und dann a 254 K sowie die Spur dieses Elements berechnet.
3 0 2 3 0 8 Bits SubBytes AddRound Key ShiftRows 2 3 MixColumns Abb. : AES Operationen F.<t>=GF(2)[] K.<a>=GF(2^8, name= a, modulus=t^8+t^4+t^3+t+) a^254 a^7 + a^3 + a^2 + (a^254).trace() Satz Alle GF (2)-linearen Abbildungen K GF (2) sind von der Form f(x) = T r(αx) mit α K. Beweis: Offensichtlich hat der Dualraum von K genau 256 Elemente. Falls T r(α x) = T r(α 2 x) gilt für alle x K, so ist auch T r((α α 2 )x) = 0 für alle x. Dies ist aber nur möglich, falls α = α 2 gilt. Der nichtlineare AES S-Box ist definiert durch die multiplikative Invertierung der Bytes der Zustandsmatrix, gefolgt von einer GF (2)-affinen Abbildung. AES Implementierungen verwenden hierfür üblicherweise eine Tabelle mit den 256 Funktionswerten. f RD (x) = Ax + b für x 0, bzw. f RD (0) = b.
4 0 0 0 0 0 0 0 0 0 A = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 b = 0 0 0 Da die Einheitengruppe K eine zyklische Gruppe der Ordnung 255 ist, gilt x = x 254 für x 0. Die Abbildung i(x) = x wird bijektiv auf K fortgesetzt, indem 0 K auf 0 abgebildet wird. Da die Matrix A regulär ist, folgt dass f RD insgesamt bijektiv und daher ausgewogen (balanced) ist, d.h. die Funktionswerte sind gleichverteilt. Jede Abbildung von K nach K kann durch ein Polynom über K vom Grad < 256 interpoliert werden. Für die S-Box f RD gilt (siehe [2] A.5): f RD (x) = 05 x 254 + 09 x 253 + F 9 x 25 + 25 x 247 + F 4 x 239 + 0 x 223 + B5 x 9 + 8F x 27 + 63 Alle Funktionen von K nach GF (2) besitzen eine algebraische Normalform (ANF), insbesondere auch die Verkettung von i(x) mit einer beliebigen GF (2)-linearen Abbildung T r(β. ) : K GF (2). Sage kann die ANF konkret berechnen. Man zeigt dann auch, dass der algebraische Grad dieser Funktionen 7 ist. Allgemein lässt sich zeigen, dass der Grad von T r(βx n ) für β 0 und n < 255 gleich dem Hamming Gewicht der binären Darstellung von n ist (siehe [3]), beispielsweise ist das Gewicht von 254 gleich 7. Im folgenden Beispiel wird die ANF von T r(x 254 ) bestimmt. from sage.crypto.boolean_function import BooleanFunction R.<x>=K[] B=BooleanFunction(x^254) B.algebraic_normal_form() x0*x6*x7 + x0*x*x2*x3*x4*x5 + x*x2*x3*x4*x5*x6*x7 +...
5 Lineare Kryptoanalyse f RD (x) = Ax +b ist offensichtlich weder K-affin noch GF (2)-affin. Aber: kann die Invertierung i(x) = x (bzw. i(0) = 0) eventuell GF (2)-linear oder GF (2)-affin genähert werden? Definition Die Nichtlinearität N (f) einer booleschen Funktion f : GF (2) n GF (2) ist die minimale Hamming Distanz von f zur Menge der affinen Abbildungen: N (f) = min h affin {x GF (2)n f(x) h(x)} Die Nichtlinearität von affinen Abbildungen ist 0 und man kann zeigen, dass stets N (f) 2 n 2 n 2 gilt (siehe []). Anwendung auf die AES S-Box: Da die S-Box vektorwertig ist, bestimmt man die Nichtlinearitäten der Verkettung von i(x) = x mit beliebigen, nichtkonstanten affinen Projektionen pr von K auf GF (2): pr i : K i K pr GF (2) Wegen Satz müssen die nichtkonstanten affinen Abbildungen pr von der Form T r(βx) oder T r(βx)+ mit einem geeigneten β K sein. Gesucht sind Abbildungen pr i mit möglichst kleiner Nichtlinearität. Man betrachtet hierfür alle α, β K, β 0 und bestimmt dann die Anzahl der x K mit T r(βx ) = T r(αx) Die Berechnung führt die Sage Funktion checklin aus (siehe unten). Falls die Eingangs- und Ausgangsbits von x eine lineare Gleichung erfüllen würden, so erhielte man die maximale Anzahl 256, bei einer echt affinen Abbildung (d.h. lineare Abbildung +) wäre die Anzahl 0. Die Anzahl der zufälligen Übereinstimmungen beträgt 28. Eine starke Nichtlinearität bedeutet eine geringe Abweichung von 28 für alle α und β, wobei kleine Abweichungen unvermeidbar sind. def checklin(alpha,beta): counter = for x in K.list():
6 if (x!= K(0)): if ((beta/x).trace() == (alpha*x).trace()): counter+= return counter Beispiele (für konkrete α, β K): checklin(a^6+a^4+a,a^2+) 44 checklin(a+,a^2+a^3+a^7) 26 Sage besitzt sogar eine eigene Funktion, welche die Nichtlinearität einer booleschen Funktion berechnet. Die folgende Schleife berechnet die Nonlinearität aller Funktionen T r(βx ). Das Ergebnis ist 2 für alle β 0. for beta in K: B = BooleanFunction( beta*x^254 ) print beta, B.nonlinearity() Satz 2 Die Nichtlinearität der AES S-Box Funktionen pr(i(x)) beträgt 2 für alle nichttrivialen affinen Projektionen pr. Beweis: Dies lässt sich mit den Funktionen checklin() oder nonlinearity() überprüfen. Der Nachweis kann alternativ auch mit Hilfe der Walsh- Transformation geführt werden [3]. Folgerung: Jede lineare (oder affine) Gleichung zwischen den 8 Eingangsund Ausgangsbits einer S-Box hat mindestens 2 und höchstens 44 Fehler (von 256). Der Betrag der Korrelation zwischen der S-Box und linearen Funktionen beträgt höchstens 44 2 2 = 2 3. Bei 25 aktiven S-Boxen in 8 vier AES Runden (vgl. [2]) beträgt die Korrelation höchstens 2 75. Eine lineare Approximation des AES damit praktisch ausgeschlossen.
Differentielle Kryptoanalyse 7 Die differentielle Kryptoanalyse untersucht, ob bestimmte charakteristische Paare von Input- und Outputdifferenzen besonders häufig auftreten. Definition Eine Abbildung f : GF (2) n GF (2) m heißt differentiell δ-uniform, wenn für alle a 0, b GF (2) n gilt (vgl. [3]): {x GF (2) n f(x + a) + f(x) = b} δ. Für affine Abbildungen f : GF (2) n GF (2) m gilt δ 2 n. In diesem Fall gilt f(x + a) + f(x) = f(a) + f(0) = b für alle x GF (2) n. Anwendung auf die AES S-Box: Bestimme ein minimales δ 256 für die S-Box f RD. Die differentiellen Eigenschaften hängen nur von der Invertierung i(x) = x (bzw. i(0) = 0) ab. Untersuche also die Lösungen folgender Gleichung im Körper K für a 0: i(x + a) + i(x) = b. Fall: i(a) b. Dann folgt x 0 und x a und es gilt: x + a + x = b bx2 + abx + a = 0 In diesem Fall gibt es höchstens 2 Lösungen. 2. Fall: i(a) = b. Dann erhält man die offensichtlichen Lösungen x = 0 und x = a. Weitere Lösungen (mit x 0 und x a) liefert dann die Gleichung: x + a + x = a x2 + ax + a 2 = 0 Quadratische Gleichungen über dem Körper K der Charakteristik 2 Für b 0 gilt: ( x x 2 + bx + c = 0 b mit T = x b. ) 2 + x b + c b 2 = 0 T 2 + T + d = 0
8 Lemma T 2 + T + d = 0 hat genau dann eine Lösung, wenn T r(d) = 0. Falls u eine Lösung ist, so ist u + eine weitere Lösung. Beweis: " ": Wenn u eine Lösung ist, dann gilt: T r(d) = T r(u 2 ) + T r(u) = 2 T r(u) = 0, da T r(u 2 ) = T r(u). " ": Nun gelte T r(d) = 0. Sei u eine Lösung der Gleichung im algebraischen Abschluss von K. Dann folgt: 0 = d+d 2 + +d 2n = (u 2 +u)+(u 4 +u 2 )+ +(u 2n +u 2n ) = u+u 2n Also ist u = u 2n und es folgt u K. Der Zusatz ist offensichtlich. Im oben betrachteten 2. Fall haben wir folgende Gleichungen: x 2 + ax + a 2 = 0 T 2 + T + = 0 mit T = x a. Da T r() = 8 = 0 gilt, hat diese Gleichung aufgrund des Lemmas zwei Lösungen. Da weder x = 0 noch x = a die Gleichung erfüllen, erhalten wir im 2. Fall also insgesamt vier Lösungen. Satz 3 Die Gleichung i(x + a) + i(x) = b hat für alle a, b K mit a 0 höchstens vier Lösungen über K. Die AES S-Box ist also differentiell 4- uniform. Die Wahrscheinlichkeit einer Ausbreitung von Differenzen beträgt für eine S-Box nur 4 2 = 2 6. Bei 25 aktiven S-Boxen in vier AES Runden 8 (vgl. [2]) beträgt die Wahrscheinlichkeit 2 50. Dies bietet Sicherheit gegen einen Angriff mit differentieller Kryptoanalyse. Lawinenkriterium Man untersucht dabei die Ausbreitungseigenschaften der S-Box und fordert, dass die Änderungen f RD (x) + f RD (x + b) möglichst ausgewogen sein sollten. Das Lawinenkriterium (Strict Avalanche Criterion, [6]) für eine boolesche Funktion f : GF (2) n GF (2) besagt, dass die Änderung eines Eingangsbits (d.h. das Hamming-Gewicht der Eingangsdifferenz b ist gleich ) die Hälfte der Ausgangswerte ändern sollte. Das Kriterium lässt sich mit Hilfe der Autokorrelation beschreiben: F (b) = (f f)(b) = x GF (2) n ( ) f(x+b) f(x)
9 f erfüllt das Lawinenkriterium, falls F (b) = 0 gilt für alle b K mit Hamming-Gewicht. Für eine lineare oder affine Funktion gilt F (b) = ±2 n. Zur Untersuchung der AES S-Box berechnet man mit Unterstützung von Sage die Autokorrelationswerte von T r(βx 254 ) oder bestimmt direkt die Ausgewogenheit der booleschen Funktionen T r(β(x 254 +(x+b) 254 )) für β 0 und b K vom Gewicht. Es zeigt sich, dass die Autokorrelation zwischen 32 und 32 liegt und die Funktionen nur für wenige β und b vollständig ausgewogen sind. Diffusionseigenschaften Überträgt man das Lawinenkriterium auf die komplette AES Chiffre f k, so ergibt sich eine Anforderung, die Claude Shannon als Diffusion bezeichnet hat [4]: die Änderung eines Klartext-Bits sollte ungefähr die Hälfte der Chiffretext-Bits ändern. Da hierbei Blöcke von 28 Bit (statt 8 Bit bei der S-Box) betrachtet werden und die Transformation zusätzlich von einem Schlüssel abhängt, wird der Kriterium statistisch formuliert. Klartext x, Schlüssel k und Bitänderung b werden zufällig gewählt und die Änderung f k (x) f k (x + b) sollte eine Folge von Zufalls-Bits sein (unabhängig und gleichverteilt). Die Diffusionseigenschaften sollen bereits nach zwei Runden erfüllt sein (vgl. [2]). Eine weitere Anforderung ist, dass die Diffusionseigenschaften nicht nur für Klartext- sondern auch für Schlüsseländerungen (bei festem Klartext) gelten sollen. Die Diffusion wird dabei im Wesentlichen durch die linearen AES Operationen MixColumns und ShiftRows erreicht, die lokale Diffusion sowie Dispersion (Ausbreitung) erzeugen. Die Diffusionseigenschaften nach zwei Runden sollen experimentell überprüft werden. Ein Schlüssel k und ein Einheitsvektor b der Länge 28 Bit sowie die Runden i und i + (mit i < 9) werden vorab zufällig gewählt. Anschließend wird ein Status x (d.h. eine 4 4 Matrix über K bzw. ein binärer Vektor der Länge 28) n mal zufällig gewählt. Der Status x und der um ein Bit veränderte Status x + b werden zwei AES Runden unterzogen. Dazu werden die Operationen SubBytes, ShiftRows, MixColumns, AddRoundKey[i], SubBytes, ShiftRows, MixColumns, AddRoundKey[i+] ausgeführt. Das Ergebnis sei y bzw. y b. Der Lawinenvektor ist y y b und
0 sollte eine Folge Zufalls-Bits sein. Zu Überprüfung sind nun verschiedene statistische Tests möglich. Wir betrachten hier nur die Häufigkeiten. Die Summation der Lawinenvektoren und anschließende Division durch n ergibt einen Wahrscheinlichkeitsvektor (p, p 2,..., p 256 ). Dabei ist p j die Wahrscheinlichkeit, dass die Eingangsänderung b nach zwei AES Runden das j-te Ausgangsbit ändert. Die Wahrscheinlichkeit p j sollte für alle j nahe bei 2 liegen. Ein Wert p j = 0 oder p j = würden bedeuten, dass das j-te Bit unabhängig von der Eingangsänderung ist. Die AES Operationen können mit Sage vergleichsweise einfach selbst implementiert werden. Alternativ kann man das Modul sage.crypto.mq verwenden, welches alle nötigen Funktionen (z.b. Rundenschlüssel erzeugen, S-Box, ShiftRows und MixColumns) zur Verfügung stellt. Es sind dann nur noch einige Zeilen Sage-Code erforderlich, um das oben beschriebene Experiment zu implementieren. Beispiel: n = 0000 Lawinenvektoren, Runden 3 und 4, Eingangsänderung b = (, 0, 0,..., 0). Wahrscheinlichkeiten der Ausgangsänderungen: (0.499, 0.502, 0.502, 0.495, 0.508, 0.495, 0.504, 0.498, 0.498, 0.499, 0.502, 0.502, 0.499, 0.488, 0.495, 0.508, 0.498, 0.499, 0.502, 0.502, 0.499, 0.488, 0.495, 0.508, 0.50, 0.504, 0.508, 0.505, 0.502, 0.505, 0.508, 0.504, 0.505, 0.505, 0.503, 0.50, 0.498, 0.503, 0.497, 0.499, 0.505, 0.505, 0.503, 0.50, 0.498, 0.503, 0.497, 0.499, 0.5, 0.5, 0.504, 0.496, 0.497, 0.498, 0.503, 0.500, 0.505, 0.503, 0.50, 0.500, 0.503, 0.497, 0.500, 0.505, 0.507, 0.509, 0.507, 0.498, 0.502, 0.509, 0.506, 0.495, 0.53, 0.503, 0.500, 0.502, 0.502, 0.495, 0.55, 0.502, 0.509, 0.507, 0.498, 0.50, 0.50, 0.506, 0.502, 0.507, 0.507, 0.509, 0.507, 0.498, 0.502, 0.509, 0.506, 0.495, 0.500, 0.504, 0.504, 0.498, 0.503, 0.503, 0.508, 0.505, 0.503, 0.509, 0.500, 0.494, 0.497, 0.53, 0.505, 0.497, 0.497, 0.503, 0.509, 0.500, 0.504, 0.505, 0.53, 0.507, 0.497, 0.503, 0.509, 0.500, 0.504, 0.505, 0.53, 0.507) Alle Ausgangsbits hängen vom ersten Eingangsbit ab. Bei diesem Experiment beträgt die mittlere Wahrscheinlichkeit für die Änderung eines Ausgangsbits p = 0,503. Mit weiteren Tests können die übrigen Eingangsbits und die Unabhängigkeit der Änderungen der einzelnen Ausgangsbits untersucht werden.
Zusammenfassung Mit Hilfe von theoretischen Überlegungen und dem Computeralgebrasystems Sage wurden die Eigenschaften des AES Algorithmus untersucht. Es wurde eine lineare und eine differenzielle Kryptoanalyse der S-Box von AES durchgeführt. Die Chiffre bietet Sicherheit gegen diese Angriffsmöglichkeiten. Die S-Box erfüllt aber nicht vollständig das Lawinenkriterium. Die Diffusionseigenschaften konnten bereits für zwei AES Runden bestätigt werden. Weitere statistische Untersuchungen sind möglich und sinnvoll. Literaturverzeichnis [] Carlet, C.:Nonlinearity of Boolean Functions. In: van Tilborg (Ed.), Encyclopedia of Cryptography and Security. Springer US (20). [2] Daemen, J.; V. Rijmen: The design of Rijndael. AES Advanced Encryption Standard. Information Security and Cryptography. Springer-Verlag, Berlin, Heidelberg, New York (2002). [3] Nyberg, K.: Differentially uniform mappings for cryptography. Advances in Cryptology EUROCRYPT 93, Lecture Notes in Computer Science, vol. 765, ed. T. Helleseth. Springer-Verlag, Berlin, 55 64 (994). [4] Shannon, C.E.: Communication Theory of Secrecy Systems. Bell Syst. Tech. Journal, Vol. 28, 656 75 (949). [5] Stein, W. et al.: Sage mathematics software. http://www.sagemath.org (20). [6] Webster, A.F., Tavares, S.E.: On the design of S-boxes. In: Advances in Cryptology Crypto 85, Lecture Notes in Computer Science, vol. 28. Springer-Verlag, Berlin, 523 534 (986). Autor Prof. Dr. Heiko Knospe Fachhochschule Köln Institut für Nachrichtentechnik Betzdorfer Str. 2 D-50672 Köln E-Mail: heiko.knospe@fh-koeln.de