diff --git a/main.tex b/main.tex index 4a328254c92e6cf20014fdd884e04e8f0fc1326d..02b4f2a53ab589c7616928c8cbe8b8f4b3ca3018 100644 --- a/main.tex +++ b/main.tex @@ -1409,17 +1409,18 @@ Der Schlüsselstrom wird berechnet, indem das Shiftregister mit dem Schlüssel addiert. Dieses Ergebnis wird wiederum links ins Register zurück eingespielt. %TODO grafik -Formal besteht ein LFSR also aus einem Initialzustand \((k_0,\dotsc,k_{10})\in\GF_2^n\) +Formal besteht ein LFSR also aus einem Initialzustand \((k_0,\dotsc,k_{n-1})\in\GF_2^n\) aus dem eingesetzten Repo bei einer Registerlänge von \(n\), einem ebensolangen -Rückkopplungskoeffizienten \((a_0,\dotsc,a_{10})\). Dann erfüllt der Schlüsselstrom +Rückkopplungskoeffizienten \((a_0,\dotsc,a_{n-1})\). Dann erfüllt der Schlüsselstrom aus \(k_t\) mit \(t\geq n-1\) nach folgender Gleichung: \[ k_t := a_0 k_{t-n} \xor \dotsb \xor a_{n-1} k_{t-1} \] +\paragraph{Beobachtungen} Erste Beobachtungen ergeben, dass für einen Initialzustand von \((0,\dotsc,0)\) eine Nullfolge generiert wird. Ist der Initialzustand jedoch nicht der -NUllvektor und ist der \enquote{letzte} Rückkopplungskoeffizient \(a_0\neq 0\), +Nullvektor und ist der \enquote{letzte} Rückkopplungskoeffizient \(a_0\neq 0\), dann wird der erzeugte Schlüsselstrom nie \(n\) viele Nullen hintereinander ausgeben, also \[ @@ -1435,6 +1436,7 @@ Registerlänge \(N\) und der Rückkopplung \(a_0=1\) und \(a_1=\dotsb=a_{N-1}=0\ bauen, welches diese Bitfolge generiert. Wir werden später den besseren Berlekamp-Massey-Algorithmus kennenlernen. +\paragraph{Erster Angriff} Wichtig ist: LFSRs sind alleine nicht sicher, da wir eine einfache known-plaintext Attacke durchführen können, indem wir \(n\) Plaintexte \(m_t,\dotsc,m_{t+n}\) mit den zugehörigen Ciphertexten \(c_i=m_i\xor k_i\) sammeln. Wir können nun @@ -1448,15 +1450,17 @@ mehrere kombinieren und eine Auswahlfunktion \(f\) auf die Ausgaben der einzelne LFSRs anwenden, die für jedes Output-Bit der Gesamtchiffre spezifiziert, welches LFSR konkret verwendet wird. -Wir betrachten nun jedoch erstmal einzelne LFSRs und möchten wissen, welche -eine maximale Periode haben um eine möglichst \enquote{gute} Chiffre zu erhalten. -Als Angreifer wollen wir dann untersuchen, wie wir bei einem gegebenen Bitstrom -den Rückkopplungskoeffizienten bestimmen können. Abschließend werden wir uns dann -mit der Auswahlfunktion beschäftigen, und welche Angriffe es darauf gibt. +Man könnte meinen, dass es reichen würde, schlicht die Rückkkopplungskoeffizienten +geheimzuhalten. Wir werden nun sehen, dass wir anhand eines Schlüsselstroms ein +entsprechendes LFSR bauen können -- dadurch also nichts gewonnen ist. Hierzu +betrachten wir nun was es bedeutet, wenn ein LFSR maximale Periode hat um +dann bei gegebenen Bitstrom die Koeffizienten bestimmen zu können. Abschließend +werden wir uns dann mit der Auswahlfunktion beschäftigen, und welche Angriffe es +darauf gibt. -\paragraph{Algebraische Beschreibung des Schlüsselstroms} -Wir werden nun versuchen den generierten Schlüsselstrom über eine -polynomielle Rekursionsgleichung zu beschreiben. +\paragraph{Rekursive Beschreibung von LFSRs} +Bevor wir aber konkret ein LFSR bauen, werden wir nun versuchen den generierten +Schlüsselstrom über eine polynomielle Rekursionsgleichung zu beschreiben. Sei dafür ein LFSR über seine Rückkopplungskoeffizienten \((a_0,\dotsc,a_{n-1})\) gegeben, welches unsere Rekursionsgleichung erfüllt: @@ -1490,14 +1494,23 @@ eindeutiges, irreduzibles Polynom \(\mu\in\GF_2[X]\), sodass \[ I_\alpha = \mu \GF_2[X] \] -Dieses sogenannte Minimalpolynom spannt also -- wie im vorherigen Kapitel -- einen -Körper \(\GF_2[X]/\mu \cdot \GF_2[X]\) über die Restklassen auf. Da nun auch -\(f\in I_\alpha\) teilt \(\mu\mid f\). Ist nun \(f\) irreduzibel, bedeutet das -\(\mu = f\). Tatsächlich ist der durch \(\mu\) bzw.\@ aufgespannte Körper der -von uns gesuchte minimale Erweiterungskörper: +Wir werden sehen, hat das LFSR maximale Periode, bedeutet das, dass \(f\) +irreduzibel ist. Da nun \(f\in I_\alpha\), teilt \(\mu\mid f\) woraus folgt, dass +das charakteristische Polynom unseres LFSRs dieses Polynom \(\mu=f\) ist. + +Das charakteristische Polynom spannt nun also -- wie im vorherigen Kapitel -- +einen Körper \(\GF_2[X]/\mu \cdot \GF_2[X]\) über die Restklassen auf. Tatsächlich +ist der durch \(\mu\) bzw.\@ aufgespannte Körper der von uns gesuchte minimale +Erweiterungskörper: \[ \GF_2(\alpha) = \GF_2[X]/f\cdot\GF_2[X] \] +Hierbei ist wichtig, dass unser charakteristisches Polynom, und somit auch unser +Körper, nicht von den konkreten Werten der Schlüsselbits abhängig ist. Wir haben +damit ersteinmal nur eine algebraische Beschreibung von dem LFSR erhalten, wir +wissen aber noch nicht den konkreten Schlüsselstrom, da wir die Initialzustände +(den Schlüssel) nicht kennen, also der Rekursionsanker unserer Gleichung fehlt. + %TODO environment \paragraph{Beispiel} @@ -1517,7 +1530,7 @@ Dieses Polynom ist irreduzibel über \(\GF_2\), damit finden wir die Nullstelle in \(\GF(\alpha)\). Dieser Körper enthält die Polynome von einem Grad maximal \(1\), d.\,h.: \[ - \GF_2(\alpha) = \{ 0, 1, X, X\xor 1 \} + \GF_2(\alpha) = \GF_{2^2} = \{ 0, 1, X, X\xor 1 \} \] Es gelten folgende Äquivalenzen: \begin{align*} @@ -1526,25 +1539,35 @@ Es gelten folgende Äquivalenzen: (X\xor 1)(X\xor 1) = X^2\xor 1 = X \mod f \end{align*} Somit sind \(\alpha_1:=X\) und \(\alpha_2:=X\xor 1 = X^2\) die Nullstellen von -\(f\), sie erfüllen beide die Rekursionsgleichung. Da die Rekursionsgleichung -linear ist, erfüllt auch für beliebige \(a,b\in\GF_2\) jede Kombination -\(a\alpha_1^t\xor b\alpha_2^t\) die Gleichung. +\(f\), sowohl \(\alpha_1^t\) als auch \(\alpha_2^t\) erfüllen beide die +Rekursionsgleichung. Im Allgemeinen sind sogar alle Nullstellen 2-er Potenzen +voneinander, sprich \(\alpha_i = \alpha^{2^{i-1}}\) mit einem fixen \(\alpha_1\). -Nunn möchten wir die Initialwerte \(k_0=0\), \(k_1=1\) berücksichtigen, hierzu -setzen wir ein: -\begin{align*} - 0 = k_0 &= a\alpha_1^0 \xor b\alpha_2^0 = a\xor b \\ - 1 = k_1 &= a\alpha_1^1 \xor b\alpha_2^1 -\end{align*} -Wir erhalten damit \(a=b=1\). Da nach Rekursion \(\alpha_2=\alpha_1^2\), -erhalten wir: +Wir wissen aber nur, \emph{dass} die gesuchte Lösung die Rekursionsgleichung +erfüllt -- nicht jedoch welche unserer Kandidaten. Das drücken wir aus indem wir +schreiben, dass unsere Lösung für beliebiges \(\theta\in\GF_{2^2}\) durch +\(\theta\alpha_1^t\xor (\theta\alpha_1^t)^2\) beschrieben werden kann, denn +dieser Term beschreibt dank der Linearität der Rekursionsgleichung alle Lösungen. +Wir wissen also: \[ - k_t = \alpha_1^t \xor \alpha_2^t = - \alpha_1^t \xor ((\alpha_1)^2)^t = - \alpha_1^t \xor ((\alpha_1)^t)^2 =: \Tr(\alpha_1^t) + k_t = \theta\alpha_1^t \xor (\theta\alpha_1^t)^2 =: \Tr(\theta\alpha_1^t) \] -Wir nennen \(\Tr(\alpha)\) die Spur (Trace) von \(\alpha\). Mit dieser können -wir nun die konkreten Werte der Folge berechnen: +Hierbei ist \(\Tr(\alpha)\) die Spur (Trace) von \(\alpha\). + +Während \(\Tr\) unabhängig von jedem LFSR ist, beschreibt die Nullstelle die +Rückkkopplungskoeffizienten -- und \(\theta\) den Schlüssel. Was ist aber nun +\(\theta\)? Hierzu nutzen wir die uns bekannten Schlüsselbits und setzen ein: +\begin{align*} + 0 &= k_0 + = \Tr(\theta\alpha_1^0) + = \theta\alpha_1^0 \xor (\theta\alpha_1^0)^2 + = \theta \xor \theta^2 \\ + 1 &= k_1 + = \Tr(\theta\alpha_1^1) + = \theta\alpha_1^1 \xor (\theta\alpha_1^1)^2 +\end{align*} +Aus der ersten Gleichung erhalten wir \(\theta=\theta^2\), aus der zweiten +\(\theta = 1\). Wir können nun den kompletten Schlüsselstrom rekonstruieren: \begin{align*} k_0 =& \Tr(\alpha_1^0) = \alpha_1^0 \xor (\alpha_1^0)^2 = 1\xor 1^2 = 0 \\ k_1 =& \Tr(\alpha_1^1) = \alpha_1^1 \xor \alpha_1^2 =