\documentclass[11pt]{article}
\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}
\usepackage{url}

\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{\mac}{\mathsf{Mac}}
\newcommand{\vrfy}{\mathsf{Vrfy}}

\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{\experiment}[4]{
%{\begin{figure}[tbp]
{\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}
} }


\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}
{Entrega: 15/03/2016}
{}{Tarea 2: 3/04/2016}

\thispagestyle{plain}


\section*{Reglas}

Las tareas se pueden discutir de a 2 personas. Sin embargo, cada estudiante tiene la obligación de escribir su propia solución.
La entrega de la tarea se realiza mediante correo electrónico a \texttt{fkrell@gmail.com} con el asunto 
\texttt{[cripto] Entrega Tarea2} a más tardar el día Viernes 15 de Abril de 2016 a las 6:00 pm. Cada estudiante sólo puede asumir que su tarea ha sido correctamente entregada si recibe un confirmación del profesor. Usted debe entregar un archivo formato PDF generado en \LaTeX. Para su conveniencia puede usar el template en la página web del curso.

\section*{Problema 1 (10pts)}
Implemente una función pseudo-aleatoria con llaves de largo $n^2$ bits, 
entrada de largo $\log n$ bits y output de largo $n$ bits. Muestre que la ventaja de cualquier algoritmo distinguidor para su función es 0.

\section*{Problema 2 (10pts)} 
Sea $F$ un cifrador de bloque ($F$ es una permutación pseudo-aleatoria) con llaves de largo $n$ bits (ejemplo $n = 64$) para bloques de largo $n$. 
Dado la actual velocidad de los procesadores y la capacidad de almacenamiento, 
la comunidad criptográfica  ha recomendado utilizar cifradores de bloque con llaves de largo $2n$ bits. Un ``experto'' en seguridad  a recomendado usar el siguiente cifrador de bloque $F'$ basado en $F$: Obtener 2 llaves $k_1$, $k_2$ independientes para $F$, obteniendo una llave final $k=\langle k_1,k_2\rangle$ de $2n$ bits y computar el cifrador  como 
$F'_{k_1,k_2}(x)=F_{k_1}(F_{k_2}(x))$.

Explique por qué el esquema propuesto por el ``experto'' no provee la seguridad deseada. Es decir, muestre un algoritmo distinguidor (no necesariamente de tiempo polinomial) para $F$ que requiera tiempo significativamente menor a $2^{2n}$.

\section*{Problema 3: seguridad CPA (10pts)}

Sea $G$ un PRG y $F$ una PRF.  Determine si los siguientes esquemas de cifrado son CPA-seguros. Justifique su respuesta formalmente.

\begin{itemize}
\item (3pts) $\enc(k,m)$: output $\langle r,G(r)\oplus m \rangle$, para $r$ uniforme en $\{0,1\}^\lambda$.
\item (4pts) $\enc(k,m):$ output $m\oplus F_k(0^n)$.
\item (4pts) $\enc(k,m):$ $m\in\{0,1\}^{2n}$, $m = m_1||m_2$, $|m_1| = |m_2| = n$. 
output $\langle r, F(r)\oplus m_1, F(r+1)\oplus m_2 \rangle$. 

\end{itemize}
\section*{Problema 4: naive HMAC (10pts)}

Sea $H^s:\{0,1\}^*\rightarrow\{0,1\}^{n}$ una funci\'on de hash resistente a colisiones. 

\begin{enumerate}
\item a) Demuestre que el siguiente código de autenticación de mensajes NO es necesariamente seguro.
\begin{itemize}
\item $\gen(1^\lambda)$: Output $k\sim U_\lambda$.
\item $\mac_k(m)$: Output $t=H^s(k||m)$.
\item $\vrfy_k(m,t)$: Output 1 si y sólo si $t = H^s(k||m)$.
\end{itemize}

Hint: Piense que $H$ esta construida usando la transformación de Merkle-Damg\"{a}rd sobre una función $h^s:\{0,1\}^{n'}\rightarrow\{0,1\}^n$ resistente a colisiones.

\item b) Un oráculo aleatorio $O(\cdot)$ es una función pública (todos los participantes, incluyendo al adversario tienen acceso a ella) que puede ser consultada como ``caja negra'' y que tiene la propiedad de que para cada consulta nueva $x$, el valor $O(x)$ es uniformemente aleatorio. Demuestre que si asumimos que $H$ es un oráculo aleatorio, entonces la construcción anterior sí es un código de auntenticación de mensajes seguro.

\end{enumerate}



\section*{Problema 5: Definiciones de Funciones Hash (10pts)}

Demuestre que cualquier función de hash $H^s:\{0,1\}^m\rightarrow \{0,1\}^n$ resistente a colisiones, es resistente a segunda preimagen, y que cualquier función resistente a segunda preimagen es resiste a preimagen.
Es decir, si para $H^s$ es infactible encontrar $x_1\neq x_2$ tales que 
$H^s(x_1)=H^s(x_2)$, entonces dado $x$ uniforme en $\{0,1\}^m$ es infactible también encontrar $x'\neq x$ tal que $H^s(x)=H^s(x')$. A la vez, si dado $x$ uniforme en $\{0,1\}^m$ es infactible encontrar $x'\neq x$ tal que $H^s(x)=H^s(x')$, entonces si $y$ es uniforme en $\{0,1\}^n$ también es infactible encontrar $x$ tal que $H^s(x)=y$.


\section*{Problema 6: \'Arboles de Merkle (10pts)}

\begin{enumerate}
\item Describa el escenario de interés visto en clases para árboles de Merkle.
\item De una definici\'on formal de seguridad para este escenario.
\item Describa formalmente la construcci\'on vista en clases.
\item Demuestre su seguridad.
\end{enumerate}


\section*{Problema (Opcional)}

Implemente el ataque del problema 2 sobre algún cifrador de bloque (reduciendo su espacio de llaves). ¿Hasta que largo de llaves pudo realizar su ataque? 

\end{document}
