aboutsummaryrefslogtreecommitdiffstats
path: root/buch/chapters/90-crypto
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--buch/chapters/90-crypto/aes.tex94
-rw-r--r--buch/chapters/90-crypto/images/dh.pdfbin27689 -> 27689 bytes
-rw-r--r--buch/chapters/90-crypto/images/elliptic.pdfbin21278 -> 21278 bytes
-rw-r--r--buch/chapters/90-crypto/images/keys.pdfbin11043 -> 22934 bytes
-rw-r--r--buch/chapters/90-crypto/images/keys.tex59
5 files changed, 137 insertions, 16 deletions
diff --git a/buch/chapters/90-crypto/aes.tex b/buch/chapters/90-crypto/aes.tex
index 968b2c6..acdda22 100644
--- a/buch/chapters/90-crypto/aes.tex
+++ b/buch/chapters/90-crypto/aes.tex
@@ -333,9 +333,99 @@ c(Z) = \texttt{03}_{16}Z^3 + Z^2+Z^1+\texttt{02}_{16},
\]
die natürlich ebenfalls umkehrbar ist.
-\subsection{Rundenschlüssel
-\label{buch:subsection:rundenschlüssel}}
+\subsection{Schlüssel
+\label{buch:subsection:schlüssel}}
+Die von den Byte- und Blockoperationen mischen die einzelnen Bits
+der Daten zwar ganz schön durcheinander, aber es wird noch kein
+Schlüsselmaterial eingearbeitet, welches den Prozess einzigartig
+macht.
+\subsubsection{Schlüsseladdition}
+Nach jeder Spaltenmischoperation wird ein Rundenschlüssel
+zum Blockhinzuaddiert.
+Beim ersten Mal wird dazu einfach das Schlüsselmaterial verwendet.
+Für die folgenden Runden muss aus diesem Schlüssel neues
+Material, die sogenannten Rundenschlüssel, gewonnen werden.
+
+\subsubsection{Rundenschlüssel}
+\begin{figure}
+\centering
+\includegraphics{chapters/90-crypto/images/keys.pdf}
+\caption{Erzeugung der erweiterten Schlüsseldaten aus dem Schlüssel
+$K_0,\dots,K_7$ für Schlüssellänge 256\,bit.
+Die mit $S$ beschrifteten Blöcke wenden die $S$-Box auf jedes einzelne
+Byte an.
+$\pi$ ist die zyklische Vertauschung der Bytes eines Wortes.
+Die Operation $r_i$ ist eine Addition einer Konstanten, die in jeder
+Runde anders ist.
+\label{buch:crypto:fig:keys}}
+\end{figure}
+Die Erzeugung der Rundenschlüssel ist in Abbildung
+\ref{buch:crypto:fig:keys}
+schematisch dargestellt.
+Die Blöcke beschreiben wieder Spaltenvektoren im vierdimensionalen
+Raum $\mathbb{F}_{2^8}^4$.
+Die Blöcke $K_0$ bis $K_7$ stellen den ursprünglichen Schlüssel dar.
+Die Erzeugung eines neuen Blocks Schlüsselmatrial beginnt damit,
+dass der letzte Vektor des vorangegangenblocks drei Operationen
+unterworfen werden.
+\begin{itemize}
+\item
+Die Operation $\pi$ vertauscht die Bytes des Vektors zyklisch:
+\begin{center}
+\begin{tikzpicture}[>=latex,thick]
+\def\s{0.6}
+\begin{scope}
+\draw (0,0) rectangle (\s,{4*\s});
+\foreach \y in {1,...,3}{
+ \draw (0,{\y*\s}) (\s,{\y*\s});
+}
+\node at ({0.5*\s},{0.5*\s}) {$b_3$};
+\node at ({0.5*\s},{1.5*\s}) {$b_2$};
+\node at ({0.5*\s},{2.5*\s}) {$b_1$};
+\node at ({0.5*\s},{3.5*\s}) {$b_0$};
+\end{scope}
+\draw[->] ({1.1*\s},{2*\s}) -- ({4.9*\s},{2*\s});
+\node at ({3*\s},{2*\s}) [above] {$\pi$};
+\begin{scope}[xshift=3cm]
+\draw (0,0) rectangle (\s,{4*\s});
+\foreach \y in {1,...,3}{
+ \draw (0,{\y*\s}) (\s,{\y*\s});
+}
+\node at ({0.5*\s},{0.5*\s}) {$b_0$};
+\node at ({0.5*\s},{1.5*\s}) {$b_3$};
+\node at ({0.5*\s},{2.5*\s}) {$b_2$};
+\node at ({0.5*\s},{3.5*\s}) {$b_1$};
+\end{scope}
+\end{tikzpicture}
+\end{center}
+\item
+Die $S$-Operation wendet die $S$-Box auf alle Bytes eines Vektors an.
+\item
+Die $r_i$ Operation addiert in Runde eine Konstante $r_i$ zur $0$-Komponente.
+\end{itemize}
+Die Konstante $r_i$ ist wieder ein einzelnes Byte und es ist daher
+naheliegend, diese Bytes mit Hilfe der Arithmetik in $\mathbb{F}_{2^8}$
+zu erzeugen.
+Man kann daher $r_i$ definieren als
+$(\texttt{02}_{16})^{i-1}\in\mathbb{F}_{2^8}$.
+
+\subsection{Runden}
+Der AES-Verschlüsselungsalgorithmus besteht jetzt darin, die bisher
+definierten Operationen wiederholt anzuwenden.
+Eine einzelne Runde besteht dabei aus folgenden Schritten:
+\begin{enumerate}
+\item Wende die $S$-Box auf alle Bytes des Blocks an.
+\item Führe den Zeilenshift durch.
+\item Mische die Spalten (wird in der letzten Runde)
+\item Erzeuge den nächsten Rundenschlüssel
+\item Addiere den Rundenschlüssel
+\end{enumerate}
+Der AES-Verschlüsselungsalgorithmus beginnt damit, dass der Schlüssel
+zum Datenblock addiert wird.
+Anschliessend werden je nach Blocklänge verschiedene Anzahlen von
+Runden durchgeführt, 10 Runden für 128\,bit, 12 Runden für 192\,bit und
+14 Runden für 256\,bit.
diff --git a/buch/chapters/90-crypto/images/dh.pdf b/buch/chapters/90-crypto/images/dh.pdf
index 67b95a5..eede4bd 100644
--- a/buch/chapters/90-crypto/images/dh.pdf
+++ b/buch/chapters/90-crypto/images/dh.pdf
Binary files differ
diff --git a/buch/chapters/90-crypto/images/elliptic.pdf b/buch/chapters/90-crypto/images/elliptic.pdf
index d408f1e..e58639f 100644
--- a/buch/chapters/90-crypto/images/elliptic.pdf
+++ b/buch/chapters/90-crypto/images/elliptic.pdf
Binary files differ
diff --git a/buch/chapters/90-crypto/images/keys.pdf b/buch/chapters/90-crypto/images/keys.pdf
index 99f991f..2c6b4b9 100644
--- a/buch/chapters/90-crypto/images/keys.pdf
+++ b/buch/chapters/90-crypto/images/keys.pdf
Binary files differ
diff --git a/buch/chapters/90-crypto/images/keys.tex b/buch/chapters/90-crypto/images/keys.tex
index 68920a5..d556b7c 100644
--- a/buch/chapters/90-crypto/images/keys.tex
+++ b/buch/chapters/90-crypto/images/keys.tex
@@ -34,55 +34,86 @@
\draw[->] \punkt{(\x+0.5)}{-2.9} -- \punkt{(\x+0.5)}{-4.9};
}
\foreach \x in {0,3,...,18}{
- \draw[->] \punkt{(\x+1)}{-7} -- \punkt{(\x+2)}{-7}
+ \draw[->] \punkt{(\x+1.1)}{-7} -- \punkt{(\x+2)}{-7}
-- \punkt{(\x+2)}{-2.5} -- \punkt{(\x+3.1)}{-2.5};
}
\fill[color=white]
- \punkt{(9+1.5)}{-5.25}
+ \punkt{(9+1.25)}{-5.5}
rectangle
- \punkt{(9+2.5)}{-4.25};
+ \punkt{(9+2.75)}{-4.00};
\draw
- \punkt{(9+1.5)}{-5.25}
+ \punkt{(9+1.25)}{-5.5}
rectangle
- \punkt{(9+2.5)}{-4.25};
+ \punkt{(9+2.75)}{-4.00};
\node at \punkt{(9+2)}{-4.75} {$S$};
}
+
\def\blocks#1{
\foreach \x in {0,3,...,21}{
\wort{\x}{0}{#1}
}
}
-\def\schlange{
+\def\schlange#1{
\draw[->] \punkt{22.1}{2} -- \punkt{23}{2}
-- \punkt{23}{-1.0} -- \punkt{-3}{-1.0}
-- \punkt{-3}{-8} -- \punkt{-1}{-8} -- \punkt{-1}{-2.5}
-- \punkt{0.1}{-2.5};
;
- \fill[color=white] \punkt{-3.5}{-1.5} rectangle \punkt{-2.5}{-3.5};
- \draw \punkt{-3.5}{-1.5} rectangle \punkt{-2.5}{-3.5};
+ \fill[color=white] \punkt{-3.75}{-1.75} rectangle \punkt{-2.25}{-3.25};
+ \draw \punkt{-3.75}{-1.75} rectangle \punkt{-2.25}{-3.25};
\node at \punkt{-3}{-2.5} {$\pi$};
- \fill[color=white] \punkt{-3.5}{-3.5} rectangle \punkt{-2.5}{-5.5};
- \draw \punkt{-3.5}{-3.5} rectangle \punkt{-2.5}{-5.5};
+
+ \fill[color=white] \punkt{-3.75}{-3.75} rectangle \punkt{-2.25}{-5.25};
+ \draw \punkt{-3.75}{-3.75} rectangle \punkt{-2.25}{-5.25};
\node at \punkt{-3}{-4.5} {$S$};
- \fill[color=white] \punkt{-3.5}{-5.5} rectangle \punkt{-2.5}{-7.5};
- \draw \punkt{-3.5}{-5.5} rectangle \punkt{-2.5}{-7.5};
- \node at \punkt{-3}{-6.5} {$r$};
+
+ \fill[color=white] \punkt{-3.75}{-5.75} rectangle \punkt{-2.25}{-7.25};
+ \draw \punkt{-3.75}{-5.75} rectangle \punkt{-2.25}{-7.25};
+ \node at \punkt{-3}{-6.5} {$r_{#1}$};
}
\begin{scope}
\blocks{blue!20}
- \schlange
+ \foreach \x in {0,...,7}{
+ \node at \punkt{(3*\x+0.5)}{2} {$K_\x$};
+ }
+ \schlange{1}
\summe
\end{scope}
\begin{scope}[yshift=-4.5cm]
\blocks{darkgreen!20}
+ \foreach \x in {8,...,15}{
+ \node at \punkt{(3*(\x-8)+0.5)}{2} {$K_{\x}$};
+ }
+ \schlange{2}
\summe
\end{scope}
\begin{scope}[yshift=-9cm]
\blocks{darkgreen!20}
+ \foreach \x in {16,...,23}{
+ \node at \punkt{(3*(\x-16)+0.5)}{2} {$K_{\x}$};
+ }
+ \schlange{3}
+ \summe
+\end{scope}
+
+\begin{scope}[yshift=-13.5cm]
+ \blocks{darkgreen!20}
+ \foreach \x in {24,...,31}{
+ \node at \punkt{(3*(\x-24)+0.5)}{2} {$K_{\x}$};
+ }
+ \foreach \x in {0,3,...,21}{
+ \draw[->,color=gray]
+ \punkt{(\x+0.5)}{-0.1} -- \punkt{(\x+0.5)}{-2.1};
+ \node[color=gray] at \punkt{(\x+0.5)}{-2.1} [below] {$\vdots$};
+ }
+ \draw[color=gray] \punkt{22.1}{2} -- \punkt{23}{2}
+ -- \punkt{23}{-1.0} -- \punkt{-3}{-1.0}
+ -- \punkt{-3}{-2.1};
+ \node[color=gray] at \punkt{-3}{-2.1} [below] {$\vdots$};
\end{scope}
\end{tikzpicture}