\documentclass[11pt,a4paper]{article}

% \usepackage{fontspec}
\usepackage{amssymb,latexsym,amsmath,amsthm,graphicx}
\usepackage{xltxtra,xunicode,xgreek}
\usepackage[colorlinks=true,citecolor=blue]{hyperref}

\newtheorem*{lemma}{Λήμμα}
\newtheorem*{theorem}{Θεώρημα}
\newcommand{\HRule}{\rule{\linewidth}{0.5mm}}
\newcommand{\defeq}{\overset{\underset{\mathrm{def}}{}}{=}}
\newcommand{\nat}{\ensuremath{\mathbb{N}}}

\makeatletter
%\def\imod#1{\allowbreak\mkern10mu({\operator@font mod}\,\,#1)}

\setlength{\parindent}{0pt}
\setlength{\parskip}{3pt}

\makeatother
\raggedbottom

% Windows και Linux(πακέτο corefonts ή κάπως έτσι θα λέγεται)
% αλλά μπορείτε να επιλέξετε διαφορετικά fonts
\setmainfont[Mapping=tex-text]{Times New Roman}
\setmonofont{Courier New}


\begin{document}

\begin{titlepage}
\begin{center}

\includegraphics[width=0.15\textwidth]{pyrforos.pdf}\\[1.cm]
\textsc{\Large Εθνικό Μετσόβιο Πολυτεχνείο}\\[.5cm]
\textsc{Σχολή Ηλεκτρολόγων Μηχανικών \& Μηχανικών Υπολογιστών}\\[1.5cm]

\textsl{\Large Σημειώσεις Διαλέξεων }\\[0.5cm]

% Title
\HRule \\[0.8cm]

{\LARGE \bfseries
Στοιχεία Θεωρίας Αριθμών
\begin{center} \& \end{center}
Εφαρμογές στην Κρυπτογραφία
}\\[0.8cm]


\HRule \\[1.5cm]

\begin{minipage}{0.4\textwidth}
\begin{flushleft} \large
\emph{Επιμέλεια σημειώσεων:}\\
\textsc{Ελένη Μπακάλη}\\
\textsc{Άρης Παγουρτζής}
\end{flushleft}
\end{minipage}
\begin{minipage}{0.4\textwidth}
\begin{flushright} \large
\emph{Διδάσκοντες:} \\
\textsc{Στάθης Ζάχος}\\
\textsc{Άρης Παγουρτζής}
\end{flushright}
\end{minipage}

\vfill

\textsl{\large 8 Οκτωβρίου 2012}
\end{center}
\end{titlepage}

% ***************************** % 
\section{Επισκόπηση Κρυπτολογίας}

Ο όρος \emph{Κρυπτολογία (Cryptology)} συμπεριλαμβάνει την \emph{Κρυπτογραφία (Cryptography)},
την \emph{Κρυπτανάλυση (Cryptanalysis)} και τις εφαρμογές τους. Πολλές φορές λέμε Κρυπτογραφία, εννοώντας
Κρυπτολογία.

\textbf{Αντικείμενα της Κρυπτολογίας}
\begin{itemize}
\item Μυστικότητα / Ιδιωτικότητα (Secrecy / Privacy)
    \begin{itemize}
        \item Κρυπτογράφηση: μετασχηματισμός \emph{απλού αρχικού κειμένου (plaintext)} σε \emph{κρυπτοκείμενο (ciphertext)}, συνήθως με χρήση κλειδιού.
        \item Αποκρυπτογράφηση: μετασχηματισμός κρυπτοκειμένου στο αρχικό κείμενο, συνήθως με χρήση κλειδιού.
        \item Παραγωγή / Διανομή κλειδιού
        \item Συμμετρικά κρυπτοσυστήματα / Ιδιωτικού κλειδιού (κρυπτογραφία διπλής κατεύθυνσης): μονοαλφαβητικά,
          πολυαλφαβητικά, τμήματος, ροής, DES, AES
        \item Μη συμμετρικά κρυπτοσυστήματ / Δημοσίου κλειδιού (κρυπτογραφία μονής κατεύθυνσης): Knapsack, RSA, ElGamal, Elliptic Curves
    \end{itemize}    

\item Αυθεντικοποίηση (Authentication)
    \begin{itemize}
        \item Data / message origin: υπογραφές, κυρίως βασισμένα σε συστήματα
          δημοσίου κλειδιού αλλά και Message Authentication Codes (MACs)
        \item Entity / User: Identification Schemes, πρωτόκολλα ταυτοποίησης
          (Interactive Proofs (IP), Zero Knowledge (ZK)) 
    \end{itemize}

\item Ακεραιότητα (Integrity)
    \begin{itemize}
        \item Συνήθως περιλαμβάνεται στην αυθεντικοποίηση
        \item Hash Functions (επίσης έχουν μεγάλη χρήση στις ψηφιακές υπογραφές)
        \item Συνδυασμός με αυθεντικοποίηση (MACs = keyed hash functions)
    \end{itemize}


\item  Διαχείριση κλειδιών (Key Management)
    \begin{itemize}
        \item Παραγωγή 
        \item Διανομή
        \item Έμπιστη αρχή
    \end{itemize}

\item Πρωτόκολλα (πολλών συμμετεχόντων)
    \begin{itemize} 
        \item Broadcast
        \item Consensus
        \item Mental poker
        \item Secure Function Evaluation (SFE), Secure Multiparty Computation
          (S-MPC)
        \item Voting / Elections
        \item  Interactive Proofs / Zero Knowledge
    \end{itemize}

\item Μαθηματικό υπόβαθρο
    \begin{itemize}
        \item Θεωρία αριθμών 
        \item Άλγεβρα (θεωρία ομάδων, πολυώνυμα)
        \item Υπολογιστική πολυπλοκότητα
	\item Σημαντικά προβλήματα: έλεγχος πρώτων αριθμών (primality), παραγοντοποίηση (factoring), διακριτός λογάριθμος (discrete logarithm)
    \end{itemize}

\end{itemize}
% τέλος επισκόπησης

\section{Κλασικά κρυπτοσυστήματα}

\begin{itemize}
\item
\emph{Μονοαλφαβητικά}: κάθε γράμμα του αρχικού κειμένου κωδικοποιείται με
το ίδιο γράμμα πάντοτε (γενικότερα με τον ίδιο τρόπο).
Περιλαμβάνονται τα κρυπτοσυστήματα: ολίσθησης (shift cipher:
γενίκευση του κρυπτοσυστήματος Καίσαρα), παραλλαγή shift cipher
με χρήση λέξης-κλειδί, αντικατάστασης (substitution
cipher), PLAYFAIR, affine cipher.

\item
\emph{Πολυαλφαβητικά}: κάθε γράμμα του αρχικού κειμένου μπορεί να
κωδικοποιείται με διαφορετικό τρόπο σε διαφορετικά σημεία του
κειμένου. Περιλαμβάνονται τα κρυπτοσυστήματα Vigen\`{e}re,
AUTOCLAVE, Hill, permutation, Vernam (one-time pad), block ciphers,
stream ciphers.
\end{itemize}

Λεπτομέρειες για τα παραπάνω συστήματα: [Zac12, κεφ.1] και [Sti06,
ch.1].

\section{Κρυπτανάλυση του κρυπτοσυστήματος Vigen\`{e}re}

\paragraph{Ορισμός του κρυπτοσυστήματος.} \mbox{} \\

$K=(k_{0},k_{1},...,k_{r-1})$: κλειδί, $r$ χαρακτήρων\\
$X=(x_{0},x_{1},...,x_{n-1})$: αρχικό κείμενο (plaintext), $n$ χαρακτήρων\\
$C=(c_{0},c_{1},...,c_{n-1})$: κρυπτοκείμενο (ciphertext), $n$ χαρακτήρων\\
$c_i = E_{K}(x_{i})=(x_{i}+k_{i \bmod r})\bmod 26, 0\le i \le n-1$: κρυπτογράφηση  \\
$x_i = D_{K}(c_{i})=(c_{i}-k_{i \bmod r})\bmod 26, 0\le i \le n-1$:  αποκρυπτογράφηση \\

Τα κείμενα και το κλειδί αποτελούνται από κεφαλαία γράμματα της Αγγλικής γλώσσας (χωρίς κενά), 
τα οποία αντιστοιχίζουμε στους αριθμούς από 0 έως 25. 

\paragraph{Κρυπτανάλυση.} \mbox{} \\

Η κρυπτανάλυση συνίσταται στην εύρεση του μήκους του κλειδιού πρώτα και κατόπιν στην εύρεση
του ίδιου του κλειδιού.

\begin{enumerate}
\item Εύρεση μήκους κλειδιού. Αυτό μπορεί να γίνει με δύο τρόπους:

\begin{itemize}
\item Kasiski test: εύρεση patterns που επαναλαμβάνονται, πιθανή
περίοδος: ΜΚΔ των αποστάσεων μεταξύ επαναλαμβανόμενων patterns.
Στηρίζεται στο ότι ίδιες λέξεις του αρχικού κειμένου που η απόστασή
τους είναι πολλαπλάσιο του $m$ (μήκος κλειδιού), κωδικοποιούνται με
τον ίδιο τρόπο.

\item Index of Coincidence (δείκτης σύμπτωσης): εκφράζει την πιθανότητα δύο
τυχαίοι χαρακτήρες ενός κειμένου να ταυτίζονται.

Σε δοσμένο κείμενο με $f_{i}$ το πλήθος εμφανίσεων του γράμματος
$i$:
\[IC(X)=\sum_{i=0}^{25}\frac{{f_{i} \choose 2}}{{n \choose 2}}=\sum_{i=0}^{25}\frac{f_{i}(f_{i}-1)}{n(n-1)}\]

Σημαντική ιδιότητα: η τιμή του δείκτη σύμπτωσης θα παραμείνει ίδια αν κάνουμε
shift τους χαρακτήρες κατά $k$ (γενικότερα κάτω από οποιαδήποτε μετάθεση).

Σε άγνωστο κείμενο αγγλικής $E[IC(X)] \cong \sum_{i=0}^{25} p_{i}^2
\cong 0.065,$ όπου $p_{i}$ η στατιστική συχνότητα του γράμματος $i$
στην αγγλική.

Σε εντελώς τυχαίο κείμενο με αγγλικούς χαρακτήρες:
\[
E[IC(X)]\cong \sum_{i=0}^{25} \left(\frac{1}{26}\right)^2 = \frac{1}{26}\cong
0.038.
\]

Άρα μπορούμε με μεγάλη πιθανότητα να ξεχωρίσουμε ένα τυχαίο κείμενο με αγγλικούς
χαρακτήρες από ένα κανονικό αγγλικό κείμενο.


Κάνουμε δοκιμές για να βρούμε το μήκος $r$ του κλειδιού. Δοκιμάζουμε διαδοχικά τις τιμές $r
= 1, 2, \ldots $. Χωρίζουμε το κρυπτοκείμενο σε $r$ στήλες, όπου κάθε στήλη $i$
περιλαμβάνει τα γράμματα που βρίσκονται στις θέσεις $i+jr, 0\le j\le \lceil n/r \rceil -1,$
και παίρνουμε το $IC$ της κάθε στήλης. Αν έχουμε πετύχει το σωστό μήκος κλειδιού τότε
πιθανότατα κάθε στήλη θα έχει $IC$ αρκετά κοντά στο $0.065$ (αλλιώς όλες οι στήλες θα έχουν
λίγο-πολύ συμπεριφορά ``τυχαίου'' κειμένου και άρα $IC$ κοντά στο $0.038$ -- στην πράξη
μπορεί να είναι λίγο μεγαλύτερο αν το κείμενο δεν είναι πολύ μεγάλο, συνήθως όμως είναι
$<0.050$).
\end{itemize}


\item Εύρεση κλειδιού. Και αυτό το βήμα μπορεί να γίνει με δύο τρόπους:

\begin{itemize}

\item 1ος τρόπος: στατιστική κρυπτανάλυση στις στήλες με βάση τη συχνότητα εμφάνισης των
γραμμάτων, διγραμμάτων, κ.λπ. της αγγλικής (ή γενικότερα της γλώσσας του αρχικού κειμένου).

\item 2ος τρόπος: με χρήση ενός δείκτη παρόμοιου με τον $IC$ βρίσκουμε το σχετικό shift μεταξύ της πρώτης στήλης
και της $m$-οστής στήλης (για $2\le m\le r$). 

Για να γίνει αυτό δοκιμάζουμε διαδοχικά shifts της πρώτης στήλης ως εξής:
για $0\le j \le 25$ κάνουμε shift στους δείκτες των παρατηρημένων εμφανίσεων των γραμμάτων της στήλης κατά $j$
ως εξής:

έστω ότι το πλήθος εμφανίσεων του χαρακτήρα $i$ στην πρώτη στήλη συμβολίζεται με
$f^{(1)}_i$): τότε το πλήθος εμφανίσεων του χαρακτήρα $i$ στην πρώτη στήλη όπου
κάθε χαρακτήρας έχει ολισθήσει κατά $j$, δίνεται από τον τύπο:
$$f^{(1)'}_i = f^{(1)}_{(i-j)\bmod 26}$$

Στη συνέχεια υπολογίζουμε τον
\emph{Δείκτη Αμοιβαίας Σύμπτωσης (Index of Mutual Coincidence -- IMC)}: 

\[
IMC(C_1,C_m)=\sum_{i=0}^{25} \frac{f^{(1)'}_{i} f^{(m)}_{(i)}}{s^2}
\]

όπου $s$ το πλήθος των χαρακτήρων των στηλών του κειμένου ($s = \lceil n/r \rceil$).

Ο δείκτης αυτός αντιστοιχεί στην πιθανότητα δύο τυχαίοι χαρακτήρες από δύο κείμενα να
ταυτίζονται, και έχει παρόμοιες ιδιότητες με τον δείκτη σύμπτωσης ως προς το ότι
παρατηρώντας την τιμή του μπορούμε να συμπεράνουμε με μεγάλη πιθανότητα αν τα κείμενα είναι
κανονικά αγγλικά κείμενα (ή προέρχονται από αγγλικό κείμενο, με την ίδια ολίσθηση). 
Έτσι, θα έχουμε πετύχει το σωστό σχετικό shift αν το
$IMC$ των δύο στηλών είναι ``κοντά'' στο $0.065$.

Έχοντας τα σχετικά shift της πρώτης στήλης με τις υπόλοιπες τα πιθανά κλειδιά είναι 26, οπότε με 26 δοκιμές
βρίσκουμε το σωστό κλειδί.
\end{itemize}

\end{enumerate}

Η μέθοδος αυτή περιγράφεται (με κάποιες παραλλαγές) στο [Sti06,ch.1].



\section*{Βιβλιογραφία}

\begin{enumerate}
\item
[Zac12]: Σημειώσεις Ζάχου, ΕΜΠ, 2012.


\item
[Sti06]: D. Stinson: Cryptography: Theory and Practice, 3rd
edition, CRC Press, 2005.
\end{enumerate}

\end{document}


