%compile with pdflatex
\documentclass[12pt]{article}
\parindent=.25in

\setlength{\oddsidemargin}{0pt}
\setlength{\textwidth}{440pt}
\setlength{\topmargin}{0in}

\usepackage{lmodern}
\usepackage{xspace}
\usepackage[protrusion=true,expansion=true]{microtype}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{latexsym}
\usepackage[center]{subfigure}
\usepackage{epsfig}
\usepackage{hyperref}

% Inline bibliographies
\usepackage{filecontents}
% Algorithm environment
\usepackage{algorithmicx,algpseudocode,  algorithm}
% Diagrams and figures in TikZ
\usepackage{tikz}

\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}

\usetikzlibrary{arrows}
\newcommand{\marginrk}[1]{\marginpar{\tiny#1}}

\newtheorem{theorem}{Teorema}
\newtheorem{lemma}[theorem]{Lema}
\newtheorem{fact}[theorem]{Hecho}
\newtheorem{definition}[theorem]{Definición}
\newtheorem{corollary}[theorem]{Corolario}
\newtheorem{proposition}[theorem]{Proposición}
%\newtheorem{claim}[theorem]{Claim}
\newtheorem{conjecture}[theorem]{Conjectura}
\newtheorem{observation}[theorem]{Observación}
\newtheorem{assumption}[theorem]{Supuesto}
\newtheorem{example}[theorem]{Ejemplo}

\newcommand{\gen}{\mathsf{Gen}}
\newcommand{\enc}{\mathsf{Enc}}
\newcommand{\dec}{\mathsf{Dec}}

\newcommand{\la}{\langle}
\newcommand{\ra}{\rangle}
\newcommand{\calA}{\mathcal{A}}
\newcommand{\calB}{\mathcal{B}}
\newcommand{\calC}{\mathcal{C}}
\newcommand{\calD}{\mathcal{D}}
\newcommand{\calE}{\mathcal{E}}
\newcommand{\calG}{\mathcal{G}}
\newcommand{\calH}{\mathcal{H}}
\newcommand{\calI}{\mathcal{I}}
\newcommand{\calJ}{\mathcal{J}}
\newcommand{\calK}{\mathcal{K}}
\newcommand{\calL}{\mathcal{L}}
\newcommand{\calM}{\mathcal{M}}
\newcommand{\calN}{\mathcal{N}}
\newcommand{\calO}{\mathcal{O}}
\newcommand{\calP}{\mathcal{P}}
\newcommand{\calQ}{\mathcal{Q}}
\newcommand{\calR}{\mathcal{R}}
\newcommand{\calS}{\mathcal{S}}
\newcommand{\calT}{\mathcal{T}}
\newcommand{\calU}{\mathcal{U}}
\newcommand{\calV}{\mathcal{V}}
\newcommand{\calW}{\mathcal{W}}
\newcommand{\calX}{\mathcal{X}}
\newcommand{\calY}{\mathcal{Y}}
\newcommand{\calZ}{\mathcal{Z}}

\newcommand{\ZZ}{\mathbb{Z}}
\newcommand{\NN}{\mathbb{N}}
\newcommand{\RR}{\mathbb{R}}
\newcommand{\QQ}{\mathbb{Q}}

\newcommand{\sign}{\mathrm{sign}}
\newcommand{\poly}{\mathrm{poly}}
\newcommand{\size}{\mathrm{size}}
\newcommand{\depth}{\mathrm{depth}} 

\newcommand{\experiment}[4]{
{\begin{figure}[tbp]
\begin{center}
\fbox{
\small
\hbox{
\begin{minipage}{.90\columnwidth}
{\bf #1}
\bigskip

#4

\end{minipage}
}
}
%\if\full
\vspace{-3pt}
\caption{\label{#3}#2}%\fi
\end{center}
\end{figure}
%\vspace{-10pt}
} }

%% New stuff
% Shortcuts
\newcommand{\eps}{\ensuremath{\epsilon}\xspace}
\newcommand{\negl}{\ensuremath{\mathsf{negl}}\xspace}
\newcommand{\Adv}{\ensuremath{\mathcal{A}}\xspace} % Adversarial algorithm A
\newcommand{\eqdef}{\stackrel{\rm def}{=}}
\newcommand{\accept}{\textsf{ACEPTO}\xspace}
\newcommand{\fail}{\textsf{FALLA}\xspace}
\newcommand{\reject}{\textsf{RECHAZO}\xspace} 
% Complexity
\newcommand{\littleO}[1]{{o\!\left({#1}\right)}}
\newcommand{\bigO}[1]{{O\!\left({#1}\right)}}
\newcommand{\bigTheta}[1]{{\Theta\!\left({#1}\right)}}
\newcommand{\bigOmega}[1]{{\Omega\!\left({#1}\right)}}
\newcommand{\tildeO}[1]{\tilde{O}\!\left({#1}\right)}
\newcommand{\tildeTheta}[1]{\operatorname{\tilde{\Theta}}\!\left({#1}\right)}

\pagestyle{headings}    % Go for customized headings

\newcommand{\handout}[5]{
   \noindent
   \begin{center}
   \framebox{
      \vbox{
    \parbox[t]{4in} {\bf #1 } \vspace{3mm}  {\hfill \bf #2 }
       \vspace{2mm}
       \hbox to 6.00in { {\Large \hfill #5  \hfill} }
       \vspace{1mm}
       \hbox to 6.00in { {\it #3 \hfill #4} }
      }
   }
   \end{center}
   \vspace*{1mm}
}

% compact lists, and handy shortcuts for items
\usepackage[shortlabels]{enumitem}

\begin{document}

\handout{Criptografía y Seguridad Computacional}{2016-01}
{Profesor: Fernando Krell}
{Notas: Pedro Pablo Aste Kompen}{Clase 1: 02/03/2016}

\thispagestyle{plain}

\section{Seguridad Perfecta}

Empezaremos el curso definiendo que entendemos por un esquema de cifrado.
Por el momento nos enfocaremos en esquemas simétricos, en donde la llave
para cifrar el mensaje, es la misma que descifra el texto cifrado.
Un esquema de cifrado esta compuesto por los siguientes 3 algoritmos:

\begin{itemize}

\item $\gen$: Es un algoritmo aleatorizado que genera una llave de cifrado $k$.
\item $\enc(k,m)$: Es el algoritmo de encriptación. Como entrada toma una llave
 $k$, generada por $\gen$ y un mensaje $m$, y genera en su salida un mensaje $c$. 
$m$ pertenece a un conjunto $\calM$ que denominaremos espacio de textos planos. 
$c$ pertenece a un conjunto $\calC$ que denominaremos espacio de textos cifrados. 
Por el momento, $\enc$ puede ser determinístico o aleatorizado.
\item $\dec(k,c)$: Es el algoritmo de desencriptaci\'on, Dado la llave $k$ y el texto cifrado
$c$ retorna un mensaje de texto plano $m$ si y sólo si $c\in \enc(k,m)$.\footnote{Si $\enc$ es aleatorizado, $\enc(k,m)$ define un conjunto. En cambio, si $\enc$ es determinístico, existe un único $c$ para $k$ y $m$, y sería correcto escribir $c=\enc(k,m)$.}

\end{itemize}

$\gen$ induce un conjunto $\calK$ de posibles llaves definido por $\calK=\{k | \Pr[\gen\rightarrow k]>0\}$.

Hemos definido los algoritmos de un esquema de cifrado, pero no hemos descrito las propiedades deben cumplir estos para que el esquema sea seguro.

A continuación describiremos 4 definiciones de seguridad equivalentes.
Intuitivamente, queremos que si el adversario logra obtener un texto cifrado $c$, este no sirva para obtener ninguna información sobre el respectivo texto plano (a menos que tenga la llave $k$), 
más allá de la información a-priori que el adversario tenga.
Para modelar el hecho que el adversario puede tener información a-priori sobre el texto plano, asociaremos el espacio de textos planos $\calM$ 
a una distribución de probabilidad. Es decir, asumiremos que cada mensaje $m\in \calM$ tiene asociada una probabilidad de ser escogido, y esta probabilidad es públicamente conocida.
Por ejemplo, $\Pr[{\tt atacar}]= 0.2$ y $\Pr[{\tt no\ attacar}] = 0.8$. 

Abusando la notación, denominaremos la distribución de probabilidad sobre textos planos como $\calM$.
Por lo tanto, denotaremos la probabilidad de que una variable aleatoria $M$ distribuida acorde a $\calM$ tenga valor $m$ como:
$\Pr_{M\sim\calM}[M=m]$, o sencillamente $\Pr[M=m]$. Denotaremos como $C$ a la variable aleatoria que define el procedimiento de 
obtener la llave $K$ y después computar $\enc(K,M)$

\begin{definition}
Sea $\Pi=(\gen,\enc,\dec)$ un esquema de cifrado. Diremos que $\Pi$ es \emph{perfectamente secreto} si $\forall m\in \calM$ $\forall c\in \calC$
\[\Pr[M=m|C=c] = \Pr[M=m]\]
\end{definition}

La definición anterior captura precisamente nuestra intuición anterior. La probabilidad de que $M$ tome un valor específico $m$.
dado que se sabe que su texto cifrado respectivo  es $c$, es exactamente igual a la probabilidad de que $M$ sea $m$ sin saber el valor
que toma $C=\enc_{K,m}$. Es decir, $c$ no revela información alguna sobre $m$.

\begin{lemma}
\label{lem1}
$\Pi$ es perfectamente seguro si y sólo si, $\forall c\in \calC, \forall m\in \calM$
\[\Pr[C=c | M = m] = \Pr[C=c]\]
\end{lemma}

El lema anterior nos da una definición alternativa para esquemas perfectamente secretos.
Intuitivamente, la probabilidad de que el texto cifrado tenga un valor específico $c$ no debería cambiar por el hecho que 
se sepa cual es el texto plano. Formalmente, la demostración esta a continuación.

\begin{proof}
Usaremos Bayes.
($\Rightarrow$)
\begin{align}
\nonumber \Pr[C=c | M = m] \stackrel{\tt bayes}{=} & \frac{\Pr[M=m | C = c]\cdot \Pr[C=c]}{\Pr[M=m]}\\
\nonumber \stackrel{\tt def\ 1}{=} & \Pr[C=c]
\end{align}

($\Leftarrow$)Para el otro sentido, la demostración es análoga.
\end{proof}


\begin{lemma}
\label{lem:m0m1}
$\Pi$ es perfectamente seguro si, y sólo si, $\forall c\in \calC, \forall m_0,m_1\in \calM$
\[\Pr[\enc(k,m_0) = c] = \Pr[\enc(k,m_1) = c]\]
\end{lemma}

\begin{proof}
Si $\Pi$ es perfectamente seguro, entonces por lema~\ref{lem1} tenemos que 
\[\Pr[C=c | M = m] = \Pr[C=c]\] para todo $m$ y para todo $c$. Por lo tanto
\[\Pr[C=c | M = m_0] = \Pr[C=c]=\Pr[C=c|M=m_1]\].

En el otro sentido, tenemos que $\Pr[C=c | M = m_0] = \Pr[C = c | M = m_1]$ para todo $c$, $m_0$ y $m_1$
Por lo tanto podemos definir la constante $\delta \stackrel{\texttt{def}}{=} \Pr[C=c | M=m]$.
Ahora demostraremos que para todo $c$, $m$, $\Pr[C=c] = \Pr[C=c|M=m](=\delta)$ y por lo tanto el esquema es perfectamente secreto.

\begin{align}
\nonumber \Pr[C=c] &= \sum_{m \in \calM} \Pr[C = c \wedge M = m]\\
\nonumber &= \sum_{m\in\calM} \Pr[C=c | M=m]\Pr[M=m]\\
\nonumber &= \delta \sum \Pr[M=m]\\
\nonumber &= \delta
\end{align}

\end{proof}

\subsection{Definición basada en experimentos}

La última definición equivalente que daremos para esquemas de cifrado perfectamente secretos introduce el concepto de adversario y experimento.

El experimento consiste en un juego contra el adversario. Generamos una llave $k$ y dejaremos al adversario elegir 2 mensajes, $m_0$ y $m_1$. Luego elegimos un bit $b$ uniformemente
($\Pr[b=1] = \Pr[b=2] = 1/2$) y daremos al adversario el texto cifrado $\enc(k,m_b)$. El adversario gana en este experimento si puede adivinar $b$.
Claramente, cualquier adversario puede ganar con probabilidad 1/2 (por ejemplo, puede elegir b' = 0 sea cual sea el texto cifrado). Lo que queremos del 
esquema, en términos de seguridad, es que la probabilidad de que el adversario gane NO sea más que 1/2.

\experiment{\large \underline{$\mathsf{Exp}^{ind}_{\Pi,\calA}$}:}
{Experimento $\mathsf{Exp}^{ind}_{\Pi,\calA}$}
{fig:exp}
{
%\begin{enumerate}
1. $k\leftarrow \gen$\\
2. $m_0,m_1\leftarrow \calA$\\
3. $b \stackrel{\$}{\gets} \{0,1\}$\\
4. $b'\gets A(\enc(k,m_b))$\\
\textbf{output} ``$\calA$ gana'' sii $b' = b$
%\end{enumerate}
}

\begin{definition}
$\Pi$ es perfectamente indistinguible si para todo adversario $\calA$ $\Pr[\mathsf{Exp}^{\texttt{ind}}_{\Pi,A}= \text{``}\calA\text{ gana''}] = 1/2$ 
\end{definition}

\begin{lemma}
$\Pi$ es perfectamente secreto si y sólo si $\Pi$ es perfectamente indistinguible.
\end{lemma}

\section{El One-Time Pad}

En esta sección construiremos un esquema perfectamente secreto, llamado one-time pad (OTP).
Usaremos la función ``o exclusivo'' la cual usualmente se denota con el 
símbolo $\oplus$.

\begin{center}
\begin{tabular}{c|c|c}
$\oplus$ & 0 & 1\\
\hline
0 & 0 & 1\\
\hline
1& 1 & 0
\end{tabular}
\end{center}

La propiedad que usaremos es que si $b$ es uniformemente aleatorio en $\{0,1\}$, entonces $\Pr[b\oplus b' = 0] = \Pr[b \oplus b' = 1] = 1/2$, para $b'\in\{0,1\}$.
Describimos el esquema a continuación para mensajes en $\calM=\{0,1\}^n$
  
\begin{itemize}
  \item $\gen$: elegir una llave $k$ uniformemente aleatoria $\{0,1\}^n$
  \item $\enc(k,m)$: output $c = m\oplus k$ ($\oplus$ bit a bit)
  \item $\dec(k,c)$: output $m = c\oplus k$
\end{itemize}

Primero vemos que el esquema es correcto: si $c = m\oplus k$, entonces $c\oplus k = m\oplus k \oplus k = m$.

Ahora analizamos su seguridad. 

\begin{theorem}
El One-Time Pad es un cifrador simétrico perfectamente secreto.
\end{theorem}
\begin{proof}
Utilizaremos lema~\ref{lem1} para demostrar que OTP es perfectamente secreto.
Esto es, mostraremos que $\Pr[C = c | M = m ] = \Pr[C = c]$.
\end{proof}

\begin{align}
\nonumber \Pr[C = c | M = m] &= \Pr[M\oplus K = c | M = m]\\ 
\nonumber &= \Pr[m\oplus K = c]\\ 
\nonumber &= \Pr[K = c\oplus m] = 2^{-n}
\end{align}

En donde la \'ultima igualdad utilizamos el hecho de que $K$ es uniformemente distribuido en $\{0,1\}^n$.
Ahora demostraremos que $\Pr[C= c]$ también es $2^{-n}$
\begin{align}
\nonumber \Pr[C = c] &= \Pr[M\oplus K = c]\\ 
\nonumber &= \Pr[K = c\oplus M]\\ 
\nonumber &= 2^{-n}\\ 
\end{align}

pues la probabilidad de que K sea exactamente $c\oplus M$ para cualquier valor de $M$ es $2^{-n}$ ($M$ y $K$ son variables aleatorias independientes).


Este cifrador es llamado one-time pad debido a que el pad (la llave $k$) puede ser utilizado una sola vez.
Si la misma llave es utilizada para más mensajes, entonces el esquema deja de ser seguro.
En particular, si un adversario obtiene $c_0 = m_0\oplus k$ y $c_1 = m_1\oplus k$, este puede computar el valor $m_0 \oplus m_1$ lo cual es claramente inseguro.

Una segunda desventaja, que esta relacionada con la anterior,  es que la llave $k$ tiene que ser tan larga como el mensaje $m$. Esto implica que en la pr\'actica
el OTP no puede ser usado regularmente.

Esta segunda desventaja es intrínseca para cualquier cifrador perfectamente seguro:

\begin{theorem}
Sea $\Pi = (\gen,\enc,\dec)$ un cifrador, $\calK$ el espacio de llaves generado por $\gen$, y $\calM$
el espacio de mensajes. Si $\Pi$ es perfectamente secreto, entonces $|\calK| \geq |\calM|$ (en donde $|S|$ denota la cantidad de elementos de un conjunto $S$).
\end{theorem}

\begin{proof}
Demostraremos que si $|\calK| < |\calM|$ entonces existe $c$ y $m$ tales que $\Pr[M=m | C=c] \neq \Pr[M=m]$ y por lo tanto $\Pi$ no es perfectamente secreto.

Sea $c$ arbitrario. Definimos el siguiente conjunto que contiene todos los mensajes para los cuales existe una llave $k$ que cifra $m$ hacia $c$:

\[
\calM(c) = \{m | \exists k\in\calK \text{ tal que } \enc(k,m) = c\}
\]

Claramente $|\calM(c)| \leq |\calK|$, como asumimos por contradicción que $|\calK|<|\calM|$ sabemos que $|\calM(c)| < |\calM|$.
Es decir, existe $m$ en $\calM$ tal que $m\not\in\calM(c)$. Por lo tanto, 

\[\Pr[M = m | C = c] = 0 \neq \Pr[M=m]\]
\end{proof}

\end{document} 
