%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}
\newtheorem{demonstration}[theorem]{Demostración}

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

\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: Alejandro Pimentel}{Clase 2: 09/03/2016}

\thispagestyle{plain}

\section{Mundo Computacional}

Dada las limitaciones que tienen los cifrados perfectamente secretos vistos en la clase anterior, introduciremos hoy una nueva definici\'on de seguridad para esquemas de cifrado. 
Esta nueva definici\'on relaja el requirimiento de que los cifrados sean {\em perfectamente} indistinguibles a que sean indistinguibles frente a un algoritmo efficiente (es decir, que corre en tiempo polinomial). Entonces, asumiremos que el adversario tiene un poder limitado computacionalmente. Para formalizar esta intuici\'on, introduciremos  un parametro que llamamos par\'ametro de seguridad y que en esta clase notaremos con $\lambda$. Intuitivamente, el parametro $\lambda$ nos permite definir que tan seguro es nuestro esquema. Dejaremos que todos los algoritmos (incluido el adversario) corran en tiempo polinomial en $\lambda$, pero requerimos que la probabilidad de que el adversario gane sea negligible en $\lambda$.

  Sea $\Pi = \langle \gen(\cdot), \enc(\cdot), \dec(\cdot)\langle$ un esquema de cifrado, es decir:
  \begin{itemize}
    \item $\gen(1^\lambda):$ Algoritmo aleatorio que genera una llave $k$. (por el momento, pensemos que $k$ es uniformemente aleatorio en $\{0,1\}^\lambda$
    \item $\enc(k,m):$ Algoritmo posiblemente aleatorio que dado una llave $k$ y un mensaje $m$ (de tama\~no polinomial en $\lambda$) genera un texto cifrado $c$.
    \item $\dec(k,c):$ Algoritmo determinista que descifra $c$ (si $c\in \enc(k,m)$ entonces retorna $m$).
  \end{itemize}
  Todos los algoritmos corren en tiempo polinomial en $\lambda$.
  
  Intuitivamente queremos lo siguiente: $\Pi$ es $(t,\varepsilon)$-seguro si $\forall$ adversario que corre en tiempo $t$, no puede quebrar $\Pi$ con probabilidad $> \varepsilon$.
  
  \begin{example} Sea $\lambda$ 128.
  Estrategias del adversario:
    \begin{itemize}
      \item Probar todas las llaves: $|k| = 2^\lambda$, gana con $\Pr = 1$. Tiempo es exponencial en $\lambda$
      \item Probar una llave (aleatoria): tiempo es constante $\bigO{1}$, gana con $\Pr = 2^{-128}$.
      \item Probar un numero polinomial de llaves. Gana con $\Pr = \frac{\poly(\lambda)}{2^\lambda} = \frac{\poly(\lambda)}{2^{|k|}} = \negl(\lambda)$
    \end{itemize}
  \end{example}
  
  \section{Seguridad} % (?)
    Definimos seguridad mediante el experimento en figura \ref{fig:exp-ind}
    
    \experiment{\large \underline{$\mathsf{\Exp}^{\texttt{ind}}_{\Pi,\calA}$}:}
    {Experimento $\mathsf{\Exp}^{\texttt{ind}}_{\Pi,\calA}$}
    {fig:exp-ind}
    {
    %\begin{enumerate}
    1. $k\leftarrow \gen(1^\lambda)$\\
    2. $m_0,m_1\leftarrow \calA(1^\lambda)$\\
    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$ tiene \emph{cifrados computacionalmente indistinguibles} si $\forall$ PPT\footnote{Probabilista de tiempo polinomial} $\calA\,~ \forall \lambda$ suficientemente grande:
      
      \[
      \Pr[\Exp_{\Pi,A}^{ind}(A) = \text{``A gana''}] \leq \frac{1}{2} + \negl(\lambda)
      \]
    \end{definition}
    Alternativamente, podemos dar el bit $b$ como entrada al experimento $\Exp_{\Pi,A}^{\texttt{ind}}(\lambda,b)$ y definir seguridad como:
      
      \[
      |\Pr[\Exp_{\Pi,A}^{{\tt ind}}(\lambda,0) = 0] - \Pr[\Exp_{\Pi,A}^{\texttt{ind}}(\lambda,1) = 0]| \leq \negl(\lambda)
      \]
    
    Para todo adversario PPT $\calA$ y para todo $\lambda$ suficientemente grande.

    \subsection{Implicancias 1}
    Demostraremos ahora que si un esquema $\Pi$ tiene cifrados computacionalmente indistinguibles, entonces ning\'un adversario puede adivinar cualquier bit de un mensaje uniformemente 
    aleatorio con probabilidad significativamente mayor a 1/2.
    \begin{theorem}
        Si $\Pi$ tiene cifrados indistinguibles, entonces para todo adversario $\calA$ y para todo $\lambda$ suficientemente grande
          \[
          \Pr[\calA(\enc_k(m)) = m^i] \leq \frac{1}{2} + \negl(\lambda)
          \] 
          para todo $i$, en done la probilidad esta tomada sobre la elecci\'on aleatoria de la llave $k$ y la elecci\'on uniformemente aleatoria de el mensaje $m$.
          \end{theorem}
        
          \begin{proof}
            Supongamos que $\exists \calA$ tal que para alg\'un $i$ $\Pr[\calA(\enc_k(m)) = m^i] \geq \frac{1}{2} + \frac{1}{\poly(\lambda)}$.\\
            Construiremos un adversario $\calA'$ tal que $\Pr[\Exp_{\Pi,A'}^{\text{ind}}(\lambda) = \text{``A gana''}] \geq \frac{1}{2} + \frac{1}{\poly(\lambda)}$.
            
            
            Sea $I_b^i$ la distribuci\'on sobre $\{0,1\}^n$ tal que todos los bits son elegidos uniformente aleatorios exceptio el $i$-\'esimo el cual es fijado en $b$.
            
            El algoritmo $\calA'$ elige $m_0$ acorde a $I^i_0$ e $m_1$ acorde a $I_1^i$. Luego recibe el cifrado de $m_b$ y llama a $\calA$ para que adivine el $i$-\'esimo bit. Si $\calA$
            retorna $0$ entonces el cifrado corresponde a $m_0$. Si $\calA$ responde 1, entonces el texto cifrado corresponde a $m_1$.
            
            \begin{enumerate}
              \item $A': m_0 \sim I_0; m_1 \sim I_1$
              \item $A'(enc_k(m_b))$. Ejecutamos $A \rightarrow m^i$
              \begin{itemize}
                \item Si $m^i = 1$: output 1
                \item Si $m^i = 0$: output 0
              \end{itemize}
            \end{enumerate}
            
            Análisis:
            
            \begin{align*}
              \Pr[\Exp_{\Pi',A}^{ind}(\lambda) = \text{``A gana''}] &= \Pr[b=b']\\
              &= \Pr[m^i = b]\\
              &= \underbrace{\Pr[A(\enc_k(m_b)) = b]}_{\frac{1}{2} + \frac{1}{\poly(\lambda)}}
            \end{align*}
            Llegamos a una contradicción, porque $\calA'$ gana con 
            $\Pr \geq \frac{1}{2} + \poly(\lambda)$ 
          \end{proof}
        \subsection{Implicacia 2}
        Si $\Pi$ tiene cifrados indistinguibles, un adversario no puede obtener ninguna función sobre el mensaje:
          Si $A(c = enc_k(m)) = f(m), \exists \mathcal{B} \text{ tq. } \mathcal{B}(1^\lambda)\footnote{$1^\lambda = |m|$} = f(m)$\\
          Si el adversario puede obtener a partir del texto cifrado alguna función del mensaje, entonces f(m) se puede obtener sin conocer el mensaje.
          $$|\Pr[A(enc_k(m)) = f(m)] = \Pr[\mathcal{B}(|m|) = f(m)]| = \negl(\lambda)$$
          \begin{proof}
            (Idea)\\
            $enc_k(m) \cong enc_k(1^\lambda)$\\
            Si $\mathcal{A}$ puede obtener $f(m)$ a partir de $enc_k(m)$, también la puede obtener de $enc_k(1^\lambda)$.\\
            Si no, usaremos $\mathcal{A}$\footnote{$\exists \mathcal{A}$ tq. $|\Pr[A(enc_k(m)) = f(m)] - \Pr[A(enc_k(1^n)) = f(m)]| \geq \frac{1}{\poly(\lambda)}$} para distinguir entre $enc_k(m_0)$ y $enc_k(1^\lambda)$.
            \begin{itemize}
              \item $A'$ que gana en $\mathsf{Exp}_{\Pi,A'}^{ind}$
              \item $A': m_0 \xleftarrow{}{\$} \{0,1\}^n; m_1 = 1^n$
              \item $a'(c = enc_k(m_b))$
              \item Ejecuto A(c) $\rightarrow$ g\\
              Si $g = f(m_0)$, entonces output 0; sino output 1.
            \end{itemize}
          Análisis:
          
          \begin{align*}
            &\Pr[\mathsf{Exp}_{\Pi,A'}^{ind}(\lambda) = \text{``A gana''}]\\
            &= \Pr[b' = b] = \Pr[b' = b \wedge b = 1] + \Pr[b' = b \wedge b = 0]\\
            &= \underbrace{\underbrace{\frac{1}{2} \Pr[b' = b | b = 1]}_{\frac{1}{2}-\Pr[b' = 0 | b = 1]}}_{\Pr[A(enc_k(1^n)) = f(m)]} + \underbrace{\underbrace{\frac{1}{2} \Pr[b' = b | b = 0]}_{\Pr[A(m) = f(m)]}}_{\Pr[A(enc_k(1^n)) = f(m)]}\\
            &= \frac{1}{2} + \frac{1}{2}\Pr[A(enc_k(m)) = f(m)] - \frac{1}{2}\Pr[A(enc_k(1^\lambda)) = f(m)]\\
            &\geq \frac{1}{2} + \frac{1}{\poly(\lambda)}
          \end{align*}
        \end{proof}
    
      \subsection{Seguridad Semántica}
        $\Pi$ es \emph{semánticamente seguro}, si $\forall PPT \mathcal{A}\ \exists PPT \mathcal{A}'$ tal que $\forall m \forall f \forall h\ \exists \negl(\lambda):$
        \begin{center}
          $|\Pr[\mathcal{A}(1^\lambda,\enc_k(m),h(m)) = f(m)] - \Pr[\mathcal{A}'(1^\lambda,h(m)) = f(m)]| \leq \negl(\lambda)$
        \end{center}
        En palabras simples, significa que cualquier información que se puede obtener a partir del texto cifrado, no requiere del texto cifrado.
        
        \begin{theorem}
            Seguridad semántica $\equiv$ cifrados indistinguibles
        \end{theorem}
    
    \section{Pseudoaleatoriedad}
      
        Sea $\calX_n$ una distribuci\'on sobre $\{0,1\}^n$. Decimos que $\calX$ es una distribuci\'on pseudo-aleatoria si nung\'un algoritmos puede distringuir entre strings elegidos adorde a $X_n$ y strings elegidos acorde a la distribuci\'on uniforme $U_n$. En otras palabras, un string es pseudoaleatorio si se ve aleatorio para todo algoritmo de tiempo polinomial.
        
        
        \begin{observation} Si $c = enc_k(m)$ es pseudoaleatorio, entonces tenemos cifrados computacionalmente indistinguibles. Idea: Podemos usar el one-time pad en donde la llave la obtenemos de una distribuci\'on pseudo-aleatoria $X_n$.
        \end{observation}
        
        Lo que necesitamos es una funci\'on $G$ que dado un string de largo $\lambda$ (la llave), genere un string de largo $n$ (largo de los mensages) y que este string sea pseudo-aleatorio.
        
        \begin{definition}[Generadores Pseudo-aleatorios (PRF)]
          Una funci\'on $G$ es un generador pseudoaleatorio de expansión $l(\cdot)$ si:
          \begin{itemize}
          \item Expande. $G: \{0,1\}^\lambda \rightarrow \{0,1\}^{\ell(\lambda)}$ para un polinomio $\ell(\lambda)>\lambda$
          \item Efficientemente computable. Existe un algoritmo de tiempo polinomial talque dado $x$ genere $G(x)$.
          \item Pseudo-aleatorio. Para todo algoritmo PPT distinguidor $\calD$, existe una funci\'on negligible $\negl$ tal que
          \[
          |\underset{x \sim U_\lambda}{\Pr}[\calD(1^\lambda,G(x)) = 1] - \underset{u \sim U_{l(\lambda)}}\Pr[\calD(1^\lambda,u) = 1]| \leq \negl
          \]
          \end{itemize}
        \end{definition}
        
        El conjunto generado por $G$ es un subconjunto peque\~no de $\{0,1\}^\ell{\lambda}$ (tiene solo $2^{\lambda}$ elementos).
        Es decir, estadisticamente la distribuci\'on inducida por $G$, aun cuando su input es uniformemente aleatorio,  es extremadamente diferente a $U_n$.
      \begin{center}
        \includegraphics[width=.5\linewidth]{psd}
      \end{center}
      
      Sin embargo, la pseudo-aleatoriedad de $G$ nos asegura que cualquier algoritmo  pude usar $G(x)$ como si fuera 100\% aleatorio sin perder seguridad de nuestro sistemas.

\end{document}
