%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{\GG}{\mathbb{G}}

\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}[h!]
\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}

\newcommand{\genmod}{\mathsf{GenMod}}
\newcommand{\genrsa}{\mathsf{GenRSA}}
\newcommand{\ExpFactor}{\mathsf{Factor}_{\calA,\genmod}}
\newcommand{\ExpRSA}{\mathsf{ExpRSA}_{\calA,\genrsa}}
\newcommand{\ExpPub}{\mathsf{Pub}_{\calA,\Pi}^{\mathsf{ind}}}
\newcommand{\ExpPubmul}{\mathsf{Pub}_{\calA,\Pi}^{\mathsf{DI-CPA}}}
\newcommand{\ExpDlog}{\mathsf{DLog}_{\calA,\calG}}
\newcommand{\Gen}[1]{\langle #1 \rangle}
\DeclareMathOperator{\Prob}{Pr}
\floatname{algorithm}{Algoritmo}

\begin{document}
\suppressfloats

\handout{Criptografía y Seguridad Computacional}{2016-01}
{Profesor: Fernando Krell}
{Notas: Francisco Maturana}{Clase 8: 20/04/2016}

\thispagestyle{plain}

\section{Supuestos criptográficos no genericos}

\subsection{Factorizar es difícil}
Sea:
\begin{equation*}
  \genmod(1^{\lambda}) \rightarrow N,P,Q \;\text{tal que}\; P,Q \;\text{primos
  y}\; N = PQ
\end{equation*}
Se define el experimento~\ref{exp:factor}, $\ExpFactor$. Luego, el supuesto es
que existe $\genmod$ tal que para todo PPT $\calA$ se cumple
$\Prob[\ExpFactor(1^{\lambda})=1] \leq \negl(\lambda)$.

\experiment{$\ExpFactor(\lambda)$}
{Experimento $\ExpFactor$}
{exp:factor}
{%
  \begin{enumerate}
    \item $N,P,Q \leftarrow \genmod(1^{\lambda})$
    \item $P',Q' \leftarrow \calA(N)$
    \item $\text{output}\; 1 \Leftrightarrow P'Q' = N$
  \end{enumerate}
}

\subsection{El supuesto RSA}
Sea:
\begin{align*}
  \genrsa(1^{\lambda}) \rightarrow N,e,d \;&\text{tal que}\;
  N = PQ,\;\text{donde}\; P,Q \;\text{son primos}\\
  &\text{y}\; e \in \mathbb{Z}_{\Phi(N)}^{*},\;
  d = e^{-1} \mod \Phi(N),\;\\
  &\Phi(N) = (P-1)(Q-1)
\end{align*}
Se define el experimento~\ref{exp:rsa}, $\ExpRSA$. Luego, el supuesto es
que existe $\genrsa$ tal que para todo PPT $\calA$ se cumple
$\Prob[\ExpRSA(1^{\lambda})=1] \leq \negl(\lambda)$.

\experiment{$\ExpRSA(\lambda)$}
{Experimento $\ExpRSA$}
{exp:rsa}
{%
  \begin{enumerate}
    \item $N,e,d \leftarrow \genrsa(1^{\lambda})$
    \item $y \leftarrow \mathbb{Z}_N^{*}$
    \item $x \leftarrow \calA(N,e)$
    \item output $1 \Leftrightarrow x^e = y \mod N$
  \end{enumerate}
}

El algoritmo $\genrsa$ puede ser construido a partir del algoritmo $\genmod$
como se detalla en el algoritmo~\ref{alg:genrsa}.

\begin{algorithm}
  \caption{$\genrsa(1^{\lambda})$}\label{alg:genrsa}
  \begin{algorithmic}
    \State $N,P,Q \gets \genmod(1^{\lambda})$
    \State $\Phi(N) = (P-1)(Q-1)$
    \State $e \gets \mathbb{Z}_{\Phi(N)}^{*}$
    \State $d \gets e^{-1} \mod \Phi(N)$
    \State output $N,e,d$
  \end{algorithmic}
\end{algorithm}

\subsection{Supuestos en grupos cíclicos}

Sea $\mathbb{G}$ un grupo y $g \in \mathbb{G}$. Definimos $\Gen{g} =
g^{0}, g^{1},g^{2},\ldots$. Diremos que el orden de $g$ es el mínimo $i>0$ tal que
$g^i = 1$. En otras palabras, el número de elementos distintos en $\Gen{g}$.

\begin{proposition}
  Sea el grupo $\mathbb{G}$ y $g \in \mathbb{G}$. Si $g^{x} = g^{y}$ entonces
  $x = y \mod i$, donde $i$ es el orden de $g$.
\end{proposition}

\begin{proof}
  \[
    g^x = g^y \Leftrightarrow g^{x-y} = 1 = g^{x-y \mod i}
  \]
  Sabemos que $x-y \mod i < i$ por definición de reducción modular, pero $i$ es el mínimo tal que $g^i = 1$. Por lo
  tanto, $x-y \mod i = 0$.
\end{proof}

\begin{definition}
Sea $q$ el orden de $\mathbb{G}$. Si $|\Gen{g}| = q$ entonces diremos que $g$ es
un generador de $\mathbb{G}$. Es decir, para todo $h \in \mathbb{G}$ tendremos
que existe un $x \in \{0,\ldots,q-1\}$ tal que $g^x = h$.
\end{definition}

\begin{proposition}
  Sea el grupo $\mathbb{G}$ de orden $q$. Si $|\Gen{g}| = i$, entonces $i|q$.
\end{proposition}

\begin{proof}
  \begin{equation*}
    g^q = 1 = g^0 \Rightarrow q = 0 \mod i
  \end{equation*}
\end{proof}

\begin{corollary}
  Si $\mathbb{G}$ es de orden primo $p$, entonces $\mathbb{G}$ is cíclico y
  todo $g \in \mathbb{G} \setminus \{1\}$ es generador.
\end{corollary}

\subsection{Logaritmo Discreto}

Dado un grupo $\mathbb{G}$ de orden $q$, $g$ el generador de $\mathbb{G}$ y $g^x$, el problema del logaritmo discreto es encontrar $x$. El supuesto del logaritmo discreto es que existe un grupo $\GG$ (o más bien que existe un un algoritmo $\mathcal{G}$ que nos entrega $\GG$ y un generador $g$) tal que el problema del logaritmo discreto  es difícil. Para formalizar esto, definimos el
experimento~\ref{exp:dlog}.

\experiment{$\ExpDlog(\lambda)$}
{Experimento $\ExpDlog$}
{exp:dlog}
{%
  \begin{enumerate}
    \item $\mathbb{G},q,g \leftarrow \calG{1^\lambda}$
    \item $x \xleftarrow{\$} \mathbb{Z}_{q-1}$
    \item $x' \leftarrow \calA(\mathbb{G},q,g,q^x)$
    \item output $1 \Leftrightarrow g^{x'} = g^x$
  \end{enumerate}
}

Luego, consideraremos el supuesto de que existe $\calG$ tal que
$\Prob[\ExpDlog(\lambda) = 1] \leq \negl(\lambda)$.

\subsection{Problemas de Diffie-Hellman}

\subsubsection{Diffie Hellman Computacional (CDH)}

Dado un grupo $\mathbb{G}$ de orden $q$, $g \in \mathbb{G}$, $g^x$, $g^y$, el problema de Diffie-Hellman computacional es computar computar $g^{x\cdot y}$. El supuesto CDH, es que existe $\GG$ tal que computar $g^{x\cdot y}$ es difícil (i.e. probabilidad negligible en rtiempo polinomial para cualquier algoritmo)

\subsubsection{Diffie Hellman Desicional (DDH)}

Dado un grupo $\mathbb{G}$ de orden $q$, $g \in \mathbb{G}$, $g^x$, $g^y, T$, en donde $x,y$ son uniformes en $\ZZ_q$, el problema de Diffie-Hellman desicional es distinguir si $T$ es uniforme en $\GG$ o $T = g^{x\cdot y}$.
El supuesto es que distinguir en tiempo polinomial es difícil para ciertos grupos, y por lo tanto, el elemento $g^{x\cdot y}$ es pseudo-aleatorio.

Claramente si DLog es fácil, tambien lo es CDH,  y si CDH es fácil, también lo es DDH. Decimos entonces que DLog es un supuesto mas débil que CDH, y a la vez, CDH es mas débil que DDH.

\subsubsection{Funciones de hash resistentes a colisiones}
Una aplicación del supuesto DLog es la creación de funciones de hash resistentes a
colisiones, como muestra el algoritmo~\ref{alg:hash}.

\begin{algorithm}
  \caption{Función de hash resistente a colisiones}\label{alg:hash}
  \begin{algorithmic}
    \State $\gen(1^{\lambda})$:
    \State $\quad \mathbb{G},q,g \gets \calG(1^{\lambda})$
    \State $\quad h \xleftarrow{\$} \mathbb{G}$
    \State $\quad \text{output}\; (\mathbb{G},q,g,h)$
    \State
    \State $H^s(x_1||x_2)$:
    \State $\quad x_1, x_2 \in \mathbb{Z}_q$
    \State $\quad \text{output}\; g^{x_1} h^{x_2}$
  \end{algorithmic}
\end{algorithm}

Para ver que esta función es resistente a colisiones, reduciremos al
problema del logaritmo discreto. Sea el adversario $\calA$ que encuentra
$Y_1, Y_2$ tal que $H^s(Y_1) = H^s(Y_2)$. Tenemos que:
\[Y_1 \rightarrow Y_{11}||Y_{12} \qquad Y_2 \rightarrow Y_{21}|| Y_{22}\]

\begin{align*}
H^s(Y_1) &= H^s(Y_2)\\
&\Leftrightarrow\\
g^{Y_{11}} h^{Y_{12}} &= g^{Y_{21}} h^{Y_{22}}\\
&\Leftrightarrow\\
g^{(Y_{11}-Y_{21})} &= h^{(Y_{22}-Y_{12})}\\
&\Leftrightarrow\\  
g^{(Y_{11}-Y_{21}){(Y_{22}-Y_{12})}^{-1}} &= h = g^x\\
&\Leftrightarrow\\  
  x &= (Y_{11}-Y_{21}){(Y_{22}-Y_{12})}^{-1} \mod q
\end{align*}
Por lo tanto, si el problema de logaritmo discreto es difícil, entonces esta
función será resistente a colisiones.

\section{Grupos de orden primo}

El problema del logaritmos discreto y los problemas de Diffie-Hellman son más difíciles en grupos de orden primo. Además, encontrar un generador en tales grupos es trivial.¿Cómo
generamos estos grupos?

Supongamos que tenemos un grupo $\mathbb{Z}_p^{*}$. Sin embargo, $|\mathbb{Z}_p^{*}| =
p - 1$ no es primo. Vamos ahora a encontrar un subgrupo de $\mathbb{Z}_p^{*}$ de orden
primo cuando es de cierta forma especial.

\begin{theorem}
  Sea $p = rq + 1$ con $p$ y $q$ primos y $r\in \NN$. El grupo $\mathbb{G} = \{ h^r \mod p
  \mid h \in \mathbb{Z}_p^{*} \}$ es un subgrupo de $\mathbb{Z}_p^{*}$ de orden
  $q$.
\end{theorem}

\begin{proof}
  Recordemos que si $a \in \mathbb{G}$ y $b \in \mathbb{G}$, entonces $ab \in \mathbb{G}\Rightarrow \mathbb{G}$ es un grupo.
  
  Sea $a,b\in \GG$, entones exiten $h_a,h_b\in \ZZ_p^*$ tales que 
  \[
    a = h_a^r \mod p, \qquad b = h_b^r \mod p\\
\]
Por lo tanto,
\[
    ab = {(h_a h_b)}^r \mod p \quad\Rightarrow\quad ab \in \mathbb{G}
\]

  Ahora, demostraremos que el tamaño de $\GG$ es $q$. Consideremos, la función $f_r:\; f_r(g) = g^r \mod p$. Notemos que para un generador
  $g$, el grupo $\mathbb{Z}_p^{*}$ se puede describir como $\{g^0,g^1,\ldots,g^{p-2}\}$. Sean $g^i \neq g^j\neq 1$ elementos de $\ZZ_p$. 
  \begin{align*}
    {(g^i)}^r = {(g^j)}^r &\;\text{si}\; ir = jr \mod p - 1\\
    &\Leftrightarrow (p - 1) \mid (ir - jr)\\
    &\Leftrightarrow q \mid (i-j)
  \end{align*}
  Fijemos $j \in \{0,1,\ldots,p-2\}$. ¿Cuáles son los $i$ tal que ${(g^i)}^r =
  {(g^j)}^r$ o, más bien, $q \mid (i-j)$? Esos son $q+j,2q+j,\ldots,rq+j$. Por
  lo tanto, tenemos $r$ elementos para cada $j$. Esto implica que la función $f_r$ mapea $r$ elementos distintos de $\ZZ_p^*$ en un único elemento en $\GG$, y la imagen de $g^0=1$ es $1$. Por lo tanto, el orden de $\GG$ es $q = (p-1)/r$
\end{proof}

\section{Cifradores de llave pública}

\begin{align*}
  \gen(1^{\lambda}) &\rightarrow (pk,sk)\\
  \enc_{pk}(m) &\rightarrow c\\
  \dec_{sk}(c) &= m \;\text{o $\bot$ con baja probabilidad.}
\end{align*}

Definimos el experimento~\ref{exp:pub} $\ExpPub$ de llave pública.

\experiment{$\ExpPub(\lambda)$}
{Experimento $\ExpPub$}
{exp:pub}
{%
  \begin{enumerate}
    \item $(pk, sk) \leftarrow \gen(1^{\lambda})$
    \item $b \xleftarrow{\$} \{0,1\}$
    \item $m_0, m_1 \leftarrow \calA(pk)$
    \item $b' \leftarrow \calA(\enc_{pk}(m_b))$
    \item output $1$ si $b' = b$
  \end{enumerate}
}

Diremos que $\Pi$ tiene cifrados indistinguibles si para todo PPT $\calA$
tenemos que:
\begin{equation*}
  \Prob[\ExpPub(\lambda) = 1] \leq \frac{1}{2} + \negl{\lambda}
\end{equation*}

\begin{theorem}
  $\Pi$ tiene cifrados indistinguibles si y solo si $\Pi$ es cpa-seguro.
\end{theorem}

\begin{proof}
  Trivial, si $\calA$ tiene $pk$, entonces tiene acceso al oráculo.
\end{proof}

También definimos el experimento~\ref{exp:pubmul} $\ExpPubmul$ para múltiples
mensajes. Es posible demostrar que si $\Pi$ es cpa-seguro, entonces es seguro frente a múltiples mensajes.

\experiment{$\ExpPubmul(\lambda)$}
{Experimento $\ExpPubmul$}
{exp:pubmul}
{%
  \begin{enumerate}
    \item $(pk,sk) \leftarrow \gen(1^{\lambda})$
    \item $b \xleftarrow{\$} \{0,1\}$
    \item $b' \leftarrow \calA^{\enc_{pk,b}(\cdot,\cdot)}(pk)$
    \item output $1 \Leftrightarrow b = b'$
  \end{enumerate}
  donde $\enc_{pk,b}(m_0,m_1)$ retorna $\enc_{pk}(m_b)$.
}

\section{Cifrador de El Gamal}

El cifrador de El Gamal sigue el algoritmo~\ref{alg:elgamal}.
\begin{algorithm}
  \caption{Cifrador de El Gamal}\label{alg:elgamal}
  \begin{algorithmic}
    \State $\gen(1^{\lambda})$:
    \State $\quad (\mathbb{G},q,g) \gets \calG(1^{\lambda})$
    \State $\quad x \gets \mathbb{Z}_q$
    \State $\quad h = g^x$
    \State $\quad pk = (\mathbb{G},q,g,h)$
    \State $\quad sk = (\mathbb{G},q,g,x)$
    \State
    \State $\enc(pk,m)$:
    \State $\quad y \gets \mathbb{Z}_q$
    \State $\quad \text{output}\; (g^y, m h^y)$
    \State
    \State $\dec_{sk}(c=\langle c_1, c_2 \rangle)$:
    \State $\quad h^y = {(g^x)}^y = g^{xy}$
    \State $\quad \text{output}\; c_2{(c_1^x)}^{-1}$
  \end{algorithmic}
\end{algorithm}

¿Es este esquema seguro?

\begin{proposition}
  Si DDH se cumple en $\mathbb{G}$, entonces El Gamal es cpa-seguro.
\end{proposition}

\begin{proof}
  Sea $\calA$ un adversario exitoso para El Gamal en el sentido CPA (es decir, gana en el experimento con probabilidad $1/2 + 1/\poly(\lambda)$. Definimos el siguiente distinguidor para $\mathbb{G},q,g,g^x,g^y,T$. Sea:
  \begin{gather*}
    pk = \mathbb{G},q,g,g^x\\
    \calA(pk) \rightarrow m_0,m_1\\
    b \xleftarrow{\$} \{0,1\}\\
    b' \leftarrow \calA(g^y, m_b T)\\
    \text{output}\; 1 \Leftrightarrow b = b'
  \end{gather*}

  Si $T$ es uniforme, entonces $\Prob[b = b'] = \frac{1}{2}$. Si $T$ es $g^{xy}$
  entonces $\Prob[b = b'] = \Prob[\ExpPub(\lambda) = 1] = \frac{1}{2} +
  \frac{1}{\poly(\lambda)}$. Concluimos entonces que El Gamal es CPA seguro.
\end{proof}

\section{Cifrador RSA plano}
El cifrador RSA sigue el algoritmo~\ref{alg:rsa}.
\begin{algorithm}
  \caption{Cifrador RSA}\label{alg:rsa}
  \begin{algorithmic}
    \State $\gen(1^{\lambda})$:
    \State $\quad N,e,d \gets \genrsa(1^{\lambda})$
    \State $pk = N,e$
    \State $sk = N,d$
    \State
    \State $\enc_{pk}(m)$:
    \State $\quad \text{output}\; m^e \mod N$
    \State
    \State $\dec_{sk}(c)$:
    \State $\quad \text{output}\; c^d \mod N$
  \end{algorithmic}
\end{algorithm}

¿Es este algoritmo seguro frente a múltiples mensajes? No, ya que es
determinista.

\end{document}
