\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{\mcd}{\mathsf{mcd}}

\newcommand{\NN}{\mathbb{N}}
\newcommand{\ZZ}{\mathbb{Z}}
\newcommand{\GG}{\mathbb{G}}
\newcommand{\HH}{\mathbb{H}}
\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: 2/04/2016}
{}{Tarea 3: 19/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}, y con copia a \texttt{jsnavar1@uc.cl}, con el asunto 
\texttt{[cripto] Entrega Tarea2} a más tardar el día Lunes 2 de Mayo de 2016 a las 23:59. Cada estudiante sólo puede asumir que su tarea ha sido correctamente entregada si recibe un confirmación del profesor o del ayudante. Usted debe entregar un archivo formato PDF generado en \LaTeX. Para su conveniencia puede usar el template en la página web del curso. 

{\Large Si utiliza referencias, es obligaci\'on agregarlas al final de su soluci\'on}.

\section*{Problema 1 (10pts)}

Calcule a mano lo siguiente, 

\begin{enumerate}
\item (3pts) Los \'ultimos 2 d\'igitos de $5^{35688}$. Hint: $\phi(\prod P_i^{e_i})= \prod P_i^{e_i-1}(P_i-1)$, para $P_i$ primo y $e_i \in \NN$. 
\item (4pts) $[233^{230000022} \mod 35]$
\item (4pts) $[46^{51} \mod 55]$ usando el Teorema del resto chino.
\end{enumerate}

\section*{Problema 2 (10pts)}

Sean $p,N\in \ZZ$ tales que $p\mid N$. Demuestre que para cualquier entero $x$,
$[[x \mod N]\mod p] = x\mod p$, pero que no es necesariamente cierto que 
$[[x \mod p]\mod N] = x\mod N$.

\section*{Problema 3 (10pts)}

Sean $N,e$ tales que $\mcd(e,\phi(N))$ = 1 y asuma que existe un adversario probabilista $\calA$ que corre en tiempo $t$ tal que 

\[\Pr[\calA(e, N, x^e \mod N) = x]=0.01\]

en donde $x$ es uniforme en $\ZZ_N^*$. Construya un adversario probabilista $\calA'$ que corra en tiempo polinomial en $t$ y $||N||=\log N$ tal que:

\[\Pr[\calA'(e, N, x^e \mod N) = x]=0.99\]  

\emph{para todo} $x$ (es decir, $x$ no es necesariamente elegido uniformemente, por lo que no hay ninguna garant\'ia de que $\calA$ retorne $x$ con probabilidad 0.01).

Hint: dado $x^e\mod N$ para cualquier $x$ en $\ZZ_N^*$, genere un elemento $y^e$ tal que $y$ sea uniformemente aleatorio en $\ZZ_N^*$.
  
\section*{Problema 4 (20pts)}

En este problema construiremos un test aleatorio para determinar si un n\'umero es primo. Si el n\'umero es primo, entonces el test siempre retorna ``primo''. En cambio, si el numero es compuesto, el test retorna ``compuesto'' con alta probabilidad.

Sabemos que si $N$ es primo, entonces $a^{N-1} = 1 \mod N$ para todo $a\in \ZZ_N^*$.
Un posible test seria entonces elegir $a$ uniforme es $\ZZ_N^*$ y ver si $a^{N-1}\neq 1$ (en tal caso decimos que $a$ es un \emph{testigo} de que $N$ es compuesto). Si $a^{N-1}\neq 1$ retornamos ``compuesto'', en otro caso repetimos. Si al cabo de varias repeticiones no hemos retornado compuesto, entonces retornamos ``primo''.

Lamentablemente, el test no necesariamente funciona para todo $N$ funciona pues, para infinitos n\'umeros compuestos $N$ no existe ning\'un testigo. Por lo que construiremos un test mejor.

Usaremos los siguientes resultados:

\begin{itemize}
\item Sea $\GG$ es un grupo finito. Sea $\HH\neq\emptyset$, tal que $\HH\subseteq\GG$ y todo $x,y\in\HH$, $xy\in\HH$. Entonces $\HH$ es un subgrupo de $\GG$.

\item Si $\HH$ es un subgrupo estricto de $\GG$, entonces $|\HH |\leq |\GG|/2$.
 
\end{itemize}

Sea $N$ impar. %y  $N\neq p^e$ para ning\'un primo $p$ y para ning\'un entero $e$.
$N-1$ puede ser descrito como $2^ru$ con $u\in\NN$ impar y $r\geq 1\in\NN$. 
Notar que si para alg\'un $i$ $a^{2^iu}=\pm 1$, entonces $a^{2^ju}=1 \mod N$ para todo $j > i$, pues $a^{2^ju} =((a^{u2^{i}})^{2^{j-i}}$.

\begin{definition}
Decimos que $a\in \ZZ_N^*$ es un \emph{testigo fuerte} de que $N$ es compuesto si $a^u\neq\pm 1 \mod N$ y para todo $i\in\{1,...,r-1\}$, $a^{2^i}\neq -1 \mod N$.
\end{definition}

\begin{enumerate}

\item Describa un algoritmo de tiempo polinomial que dado $N$ impar retorne $r\geq 1$ y $u$ impar, tal que $N-1=2^ru$.

\item Demuestre que si $N$ es primo, entonces los \'unicos elementos $x$ tales que $x^2 =1$ son $\{-1,1\}$ (raices cuadradas de $1 \mod N$). Hint: Si $N$ es primo y  $N\mid ab$ entonces $N\mid a$ o $N\mid b$.
 

\item Demuestre que si $N$ es primo impar, entonces $N$ no tiene testigos fuertes. Es decir, para todo $a$ o bien $a^u=\pm 1$, o $a^{{2^i}u}=-1$ para alg\'un $i \in {1,...,r}$. Hint: para $a$ arbitrario en $\ZZ_N^*$, defina $j$ como el m\'inimo entero tal que $a^{2^ju}=1\mod N$. Demuestre por inducci\'on en $j$ y use el resultado anterior.

Sea $M$ el conjunto que contiene los elementos de $\ZZ_N^*$ que no son testigos fuertes.

\item Demuestre que $[-1\mod N] \in M$.

\item Sea $i$ el m\'aximo entero tal que existe $a\in M$ tal que $a^{2^iu}=-1 \mod N$, y definamos $M'=\{a| a^{2^iu}=\pm 1\}$. Demuestre que $M\subseteq M'$.

\item Demuestre que $M'$ es un subgrupo de $\ZZ_N^*$.

\item Considere $N=N1\cdot N2$ tal que $\mcd(N1,N2)$. Sea $a\in M'$ tal que $a^{2^iu}=-1\mod N$ ($a\in M'$). Use el teorema del resto chino sobre $-1 \mod N$.
Considere tambi\'en el elemento $b\in \ZZ_N^*$ que se puede describir como
$(a\mod N1, 1)$ usando el teorema del resto chino. Demuestre que $b$ no pertenece a
$M'$.

\item Concluya que si $N$ es compuesto impar y no es potencia potencia perfecta de un entero($N\neq Y^i$, para todo $Y,i\in \NN$), entonces $\ZZ_N^*$ tiene al menos $|\ZZ_N^*|/2$ testigos fuertes.

\item Asumiendo la existencia de un algoritmo $\mathsf{PerfectPower}$ que determina si $N$ es potencia perfecta de un entero, construya un test de tiempo polinomial en el largo de $N$ tal que si $N$ es primo, el test siempre retorne ``primo'', pero si $N$ es compuesto, el test retorna ``primo'' con probabilidad negligible en el largo de $N$.

\end{enumerate}

\section*{Problema 5 (Opcional)}
Describa un algoritmo de tiempo polinomial para determinar si un n\'umero es potencia perfecta de un entero.
\end{document}
