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

\setlength{\oddsidemargin}{0pt}
\setlength{\textwidth}{440pt}
\setlength{\topmargin}{0in}
\usepackage{graphicx}
\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}
\graphicspath{ {images/} }
% 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{\cpa}{\mathsf{(cpa)}}
\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{\calF}{\mathcal{F}}
\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{\Exp}{\mathsf{Exp}} 


\newcommand{\experiment}[5]{
{\begin{figure}[#5]
\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: Iván Rubio Venegas}{Clase 6: 6/04/2016}

\thispagestyle{plain}

\section*{Recuerdo: Cipher Block Chaining (CBC)}
El modo de operación CBC para cifradores de bloque requiere inicializar de forma uniforme un vector $IV$ de un largo $n$. El cifrado de cada bloque del texto plano se lleva a cabo aplicando la función pseudo aleatoria sobre el XOR entre el bloque anterior cifrado (usando IV si es el primer bloque) y el bloque actual de texto plano. Los siguientes, son los pasos a llevar a cabo:
\begin{itemize}
%1)
\item
Se define $c_0 := IV$
%2)
\item
Por cada $i$ de 1 a $l$, con $l$ la cantidad de bloques, se define $c_i := F_k(c_{i-1} \oplus m_i)$
%3)
\item
La texto cifrado final es $\langle c_0,c_1,...,c_l \rangle$

\end{itemize}

%Imagen de CBC

\begin{figure}[h!]
\includegraphics[scale=0.3]{cbc}
\caption{Modo CBC}
\end{figure}

Padding: PKCS \#5. Si faltan $b$ bytes para completar el último bloque, se rellena con $b$ bytes que representan el número $b$. Cada uno $1 < b \leq l$.
Al decifrar un mensaje, si el padding es correcto se entrega el mensaje, si no, se entrega error.\\

¿Qué puede hacer un adversario activo que ve $c$? Puede modificarlo y ver la reacción del servidor. \\

Supongamos que el adversario ve un texto cifrado de 3 bloques $IV$, $c_1$ y $c_2$. Con esta información, lleva a cabo los siguientes pasos:

\begin{enumerate}
%1)
\item
Obtener $b$. Partiendo por del último byte de $c_1$, se modifica tal byte de $c_1$ y se observa si el servidor arroja error, intentamos con el byte que lo precede, y repetimos hasta que el servidor acepta. Luego se define: $m_2= F_k^{-1}(c_2) \oplus c_1$. Si se modifican bytes correspondientes al padding, el servidor enviará error. Al encontrar el primer byte que arroja, se puede computar $b$.

%2)
\item Teniendo $b$ se obtiene el mensaje $m_2$ de la siguiente manera. Sea $m_2=x_1x_2...bbbb...b$, con $b$ repetido $b$ veces, se modifican $c_{n-b}...n$, osea los últimos $b$ bytes del mensaje $m_2$. De forma tal que, $m_2$ termine con $b+1$ en vez de $b$. Es decir el mensaje será $m_2=x_1...x_{n-b}...b+1,...b+1$ con $b+1$ repetido $b$ veces .

%3)
\item
Se modifica el byte $x_{n-b-1}$ varias veces hasta que el resultado sea $b+1$. Se obtiene $b+1=x_{n-b-1} \oplus {\Delta}_i$. Siendo ${\Delta}_i$ elegido por el adversario para modificar $x_{n-b-1}$. Finalmente, aplicando XOR en los dos lados de la ecuación, se obtiene $x_{n-b-1}= {b+1} \oplus  {\Delta}_i$

%4)
\item
Se hace lo mismo para los demás valores de entre $x_{n-b-2}$ y $x_n$.

\end{enumerate}

Ejercicio: ¿Cómo el adversario puede decifrar $m_1$ también?

\section*{Modelo de seguridad}
Seguridad bajo ataques de texto \emph{cifrado} escogido. (Chosen Ciphertext Attacks, CCA)\\

\experiment{\large \underline{$\Exp^{\texttt{ind}}_{\Pi,\calA}(\lambda)$}:}
{Experimento $\Exp^{\texttt{ind-CCA}}_{\Pi,\calA}(\lambda)$}
{fig:expCCA}
{
1. $k\leftarrow \gen(1^{\lambda})$\\
2. $m_0,m_1\leftarrow {\calA(1^{\lambda}}^{\enc_k(\cdot),\dec_k(\cdot)})$\\
3. $b \stackrel{\$}{\gets} \{0,1\},c \leftarrow \enc_k(m_b) $\\
4. $b'\gets {\calA(c}^{\enc_k()\dec_k()}$\\
{\bf output} ``$\calA$ gana'' sii $b' = b$ y $c$ no fue consultado a $\dec_k()$.
}{h!}

\begin{definition}
Un esquema de encriptación de llave privada es CCA-seguro si para todo adversario PPT $\calA$ existe una función negligible $\negl$, tal que:
\[
\Pr[\Exp^{\texttt{ind-CCA}}_{\Pi,\calA}(\lambda)=\text{``A gana'' }]\leq \negl(\lambda)
\]

\end{definition}

Ningún esquema visto hasta ahora es CCA-seguro. Cualquier modificación al texto cifrado da un texto plano relacionado al original, lo cual permite que el adversario utilize su oráculo sobre alguna modificación del texto cifrado recibido $c$ y reconocer si $c$ corresponde a $m_0$ o a $m_1$.

\section*{Cifrados autenticados}
Sea $\Pi=(\gen,\enc,\dec)$ un esquema de cifrado, se quiere que tenga privacidad de mensajes (CCA), e integridad de mensajes. Recordemos del concepto de integridad:\\

Integridad: textos cifrados no pueden ser falsificables \\

\experiment{\large \underline{$\Exp^{\texttt{ind}}_{\Pi,\calA}(\lambda)$}:}
{Experimento $\Exp^{\texttt{enc-fals}}_{\Pi,\calA}(\lambda)$}
{fig:expCCA}
{
1. $k\leftarrow \gen(1^{\lambda})$\\
2. $c \leftarrow {\calA}^{\enc_k()} $\\
3. $m \leftarrow \dec_k(c)$\\
{\bf output} ``$\calA$ gana'' si, y sólo si, $m\neq\bot$ y $m$ no fue consultado al oráculo $\enc_k(\cdot)$.
}{h!}

Posibles construcciones para un sistema de encriptación que cumpla ambas propiedades:

\begin{enumerate}
%1)
\item
{\bf Cifrar y autenticar (CPA-enc + MAC)}\\
Se llevan a cabo de forma independiente, dado un mensaje $m$:\\
$\enc_k(m):$ $c \leftarrow {\enc_{k_1}}^{\cpa}(m), t \leftarrow \mac_{k_2}(m)$\\
Output: $\langle c,t\rangle$ \\
No es seguro pues MAC no asegura privacidad.

%2)
\item
{\bf Autenticar y después cifrar (MAC y después CPA-enc)} \\
$\enc_k(m):$ $t \leftarrow \mac_{k_1}(m), c \leftarrow \enc_{k_2}^{\cpa}(m||t)$\\
$\dec_k(c):$
	\begin{enumerate}
	\item
	$\dec_{k_2}^{\cpa}(c) = m||t$
	
	\item
	Si $\vrfy_{k_{1}}(m,t)=1$, output $m$
	\end{enumerate}
	
Este sistema tampoco es seguro, pués el algoritmo de descifrado $\dec^{\cpa}(c)$ puede arrojar error, y por lo tanto, es vulnerable a un ataque de padding como fue visto en la sección anterior.

%3)
\item
{\bf Cifrar y depués autenticar (CPA-enc y luego MAC)}\
$\enc_k(m): c \leftarrow \enc_{k_2}^{\cpa}(m), t \leftarrow \mac_{k_{1}}(c)$

Este sistema sí es seguro pues al aplicar MAC sobre $c$ no se modifica su valor (es decir se mantiene la propiedad de seguridad de CPA), y se tiene la propiedad de integridad por usar MAC.
\end{enumerate}


\end{document} 