notes/school/intro-crypto/uebung/06/06.tex

165 lines
6.5 KiB
TeX
Raw Normal View History

2018-12-06 00:05:43 +01:00
\documentclass[12pt,a4paper,german]{article}
\usepackage{url}
%\usepackage{graphics}
\usepackage{times}
\usepackage[T1]{fontenc}
\usepackage{pifont}
\usepackage{ngerman}
\usepackage{float}
\usepackage{diagbox}
\usepackage[latin1]{inputenc}
\usepackage{geometry}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{delarray}
% \usepackage{minted}
\usepackage{csquotes}
\usepackage{graphicx}
\usepackage{epsfig}
\usepackage{longtable}
\usepackage{paralist}
\geometry{left=2.0cm,textwidth=17cm,top=3.5cm,textheight=23cm}
\graphicspath{.}
%%%%%%%%%% Fill out the the definitions %%%%%%%%%
\def \name {Valentin Brandl} %
\def \matrikel {108018274494} %
% \def \pname {Vorname2 Nachname2} %
% \def \pmatrikel {Matrikelnummer2} %
\def \gruppe {Gruppe 193} %
\def \uebung {6} %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DO NOT MODIFY THIS HEADER
\newcommand{\hwsol}{
\vspace*{-2cm}
\noindent \matrikel \quad \name \hfill Gruppe:\gruppe \\
% \noindent \pmatrikel \quad \pname \\
\begin{center}{\Large \bf L\"osung f\"ur \"Ubung \# \uebung}\end{center}
}
\newcommand{\cmark}{\ding{51}}%
\newcommand{\xmark}{\ding{55}}%
\newcommand{\csquare}{\text{\rlap{$\checkmark$}}\square}%
\begin{document}
%Import header
\hwsol
\section*{Aufgabe 1}
\begin{enumerate}[a)]
\item Ein einzelner der im Paper beschriebenen FPGAs kann 400.000.000 (400 Millionen) Schl<68>ssel pro Sekunde testen.
\item Der Average Case einer Schl<68>sselsuche eines $n$-Bit Schl<68>ssels betr<74>gt $2^n / 2$ und der worst-case betr<74>gt
$2^n$, ist also um Faktor 2 langsamer. Der average-case f<>r DES auf einem COPACOBANA betr<74>gt 9 Tage, der
worst-case sind also 18 Tage.
\item Anzahl der Verdoppelungen nach Moore's Law: $((2019 - 2006) * 12) / 18 = 8,6667 \approx 9$
Average Case zum Brechen von DES in 2006: 9 Tage
Verbesserung nach $9$ Iterationen von Moore's Law: $9 / (2^9) = 0,0176$
Im average case l<>sst sich eine DES-Schl<68>sselsuche 2019 in weniger als einem Tag durchf<68>hren (weniger als einer
halben Stunde).
Mit $8$ Iterationen gerechnet, kommt man auf $9 / (2^8) = 0,0351$ Tage, also knapp unter $1$ Stunde.
\item Eine Implementierung als FPGA ist deutlich schneller, als eine Software Implementierung auf general purpose
Hardware zu den selben Kosten. Eine Implementierung als ASIC l<>sst sich nur verwenden um einen bestimmten
Algorithmus anzugreifen, w<>hrend man FPGAs neu programmieren kann, um anderen Algorithmen anzugreifen.
\item Ein einzelner FPGA konnte 2006 400 Millionen Schl<68>ssel pro Sekunde testen. Unter Anwendung von 8 Iterationen
von Moore's Law (siehe c)) ergibt sich daraus eine Leistung von $400000000 * 2^8 = 102.400.000.000$ Schl<68>ssel
pro Sekunde im Jahr 2019
Ein COPACOBANA enth<74>lt 120 FPGAs, von denen jeder $102400000000$ Schl<68>ssel pro Sekunde testen kann. Der gesamte
COPACOBANA kann also $120 * 102400000000 = 12288000000000$ Schl<68>ssel pro Sekunde testen.
15000 COPACOBANA kommen also auf $15000 * 12.288.000.000.000 = 184.320.000.000.000.000$ Schl<68>ssel pro Sekunde.
Eine Blockchiffre mit einer Schl<68>ssell<6C>nge von 128-bit hat $2^{128}$ M<>gliche Schl<68>ssel. Eine durchschnittliche
Schl<68>sselsuche muss also $2^{128} / 2$ Schl<68>ssel testen.
Sei $p = 184.320.000.000.000.000 \frac{k}{s}$ (Schl<68>ssel pro Sekunde) die Leistung des COPACOBANA Clusters und
$r = (2^{128} / 2) k$ die Anzahl der zu testenden Schl<68>ssel, ergibt sich die Dauer des Angriffs mit $\frac{r}{p}
= \frac{(2^{128} / 2)}{184.320.000.000.000.000} s \approx 9.231 * 10^{20} \approx 2.564 * 10^{17} h \approx
1.068 * 10^{16} d \approx 29271308980213 y$
\item Ben<65>tigte Rechenleistung $p$ (in Schl<68>ssel pro Sekunde) um eine 128-bit Blockchiffre mit einer durchschnittlichen
Suchzeit von 24 Stunden zu brechen:
$86400 = \frac{2^{128}/2}{p} \Rightarrow p = 1.969.226.660.422.097.589.487.121.570.785.695 \approx 1.969 *
10^{30}$
\begin{align*}
12288000000000 * (2^x) &> 1.969 * 10^{30} \\
\Rightarrow x &> 57153
\end{align*}
Nach $57153$ Iterationen von Moore's Law, also $57153 * 18m = 1028754m \approx 85730y$, l<>sst sich eine 128-bit
Blockchiffre in weniger als 24 Stunden brechen. Das ist im Jahr $85730 + 2019 = 87749$
\end{enumerate}
\section*{Aufgabe 2}
\begin{enumerate}[a)]
\item
\begin{enumerate}[1.]
\item Ausgabe der f-Box $f_{out} = R_1 \oplus L_0$
\item Ausgabe der S-Boxen $s_{out} = P^{-1}(f_{out})$
\item Mit $s_{out}$ l<>sst sich der Input der S-Boxen $s_{in}$ einschr<68>nken
\item $k_1 = E(R_0) \oplus s_{in}$
\end{enumerate}
\item Jede S-Box hat $2^6 = 64$ M<>gliche Eingangswerte und $2^4 = 16$ M<>gliche Ausgangswerte
$\Rightarrow 64/16 = 4 \Rightarrow$ ca $4^8 = 65536$ Kandidaten
\item Berechnungen wurden mit dem im Anhang befindlichen Code durchgef<65>hrt. Die inverse der P-Box wurde per Hand
erstellt.
$s_{out_1}$ f<>r $X_1,Y_1$: 0111 1101 1001 0101 1011 1100 1001 0000 $\Rightarrow$ 7 13 9 5 11 12 9 0
M<>gliche Werte f<>r $s_{in_1}$: $\{011110,000101,110110,101111\}$ $\{011010,000011,101100,100001\}$
$\{000100,000111,100110,101011\}$ $\{010110,000111,111000,110101\}$ $\{001100, 000011, 100110,100001\}$
$\{000000,001011,101100,100111\}$ $\{010100, 001011,111100, 110001\}$ $\{011010,011001,110000,110111\}$
$s_{out_2}$ f<>r $X_2,Y_2$: 1000 0101 1101 0011 0010 0010 0110 1000 $\Rightarrow$ 8 5 13 3 2 2 6 8
M<>gliche Werte f<>r $s_{in_2}$: $\{001110, 011111,100110,100101\}$ $\{011100,011111,110000,111011\}$ $\{010010,
000001,100000,100101\}$ $\{000110, 001111,110100,100001\}$ $\{000000,000101,100010,101101\}$
$\{001010,000111,101000,100101\}$ $\{011100,011111,110100,100001\}$ $\{010000, 000111,111110,101101\}$
$e_{out_1} =$ 011101010011001011101000000000010000000000000000
$e_{out_2} =$ 101010000001001001111000000000010000000000000000
Weiterer Ansatz: Alle $4^8$ Permutationen von $s_{in_1}$ und $s_{in_2}$ erzeugen und die Ergebnisse $\oplus
e_{out_1}$ bzw. $e_{out_2}$ rechnen. Die Schnittmenge aus dem ersten und zweiten Schritt bilden. Diese
Schnittmenge enth<74>lt die Schl<68>sselkandidaten.
\item PC-2 hat $2^{56}$ m<>gliche Inputs und $2^{48}$ m<>gliche Outputs.
$2^{56} / 2^{48} = 1024$ Kandidaten
\end{enumerate}
% \section*{Code}
% \inputminted{rust}{./school/intro-crypto/uebung/06/des/src/main.rs}
\end{document}