%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}
\usepackage{mathtools}
\usepackage{graphicx}

% 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{\mac}{\mathsf{Mac}}
\newcommand{\vrfy}{\mathsf{Vrfy}}
\newcommand{\hash}{\mathsf{Hash}}
\newcommand{\Exp}{\mathsf{Exp}}
\newcommand{\mcd}{\mathsf{mcd}}

\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{\GG}{\mathbb{G}}
\newcommand{\HH}{\mathbb{H}}
\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}

\begin{document}

\handout{Criptografía y Seguridad Computacional}{2016-01}
{Profesor: Fernando Krell} {Notas: Tomás Andrighetti}{Clase 7: 13/04/2016}

\section{Algoritmos para teoría de números}

En esta clase introduciremos algunos algoritmos básicos en teoría de números.

\subsection{Algoritmo de Euclides}
 El algoritmo de euclides permite calcular el máximo común divisor entre 2 enteros.
$\mcd(a,b)$ es máximo entero $d$ tal que $d \mid a \wedge d \mid b$.

Para computar el $\mcd$ utilizaremos la siguiente proposición.

\begin{proposition}
Sean a,b enteros mayores a 1. Si $b\nmid a$, entonces $\mcd(a,b) = \mcd (b,[a \mod b])$.
\end{proposition}
    \begin{proof}
        Si $a<b$, $a \mod b = a$. Si, en cambio, $a>b$, entonces computamos enteros $q,r$ tales que $a = qb+r$, con $0\leq r<b$. Veremos que $\mcd(qb+r, b) = \mcd(r,b)$. Como $b\nmid a$, $r$ es mayor a 0. Sea d=$\mcd(a,b)$, por lo tanto $d\mid a$ y $d \mid b$, por lo tanto $d|r=a-qb$.
            Sea $d'=\mcd(b,r)$ es el \emph{máximo} entero que divide a $r$ y a $b$, $d\leq d'$. Análogamente,  $d'$ divide a $b$ y tambien a $r$, por lo tanto también divide a $a=qb +r$. Como $d$ es el $\emph{máximo}$ divisor de $a$ y $b$, $d \geq d'$.$\therefore \mcd(r,b) =d'= d=\mcd(a,b)$.
            \end{proof}

\experiment{\underline{$\mcd(\cdot,\cdot)$}}{Algoritmo de Euclides para calcular el máximo común divisor}{alg:ecu}{
input: $(a,b)$
\newline
output: $\mcd(a,b)$\\
\\
1. Si $b \mid a$, output $b$
\\
2. Si $b \nmid a$, output $\mcd(b, a \mod b)$
}

\subsection{Algoritmo extendido de Euclides}

Sabemos que $\forall a,b \exists X,Y$ tal que $aX+bY = \mcd(a,b)$. Como veremos más adelante, es util saber el valor de $X$ e $Y$. ¿Cómo encontrarlos?

\experiment{$e\mcd(\cdot,\cdot)$}{Algoritmo extendido de Ecuclides}{elg:emcd}{
input: $a,b$
\\
output: $MCD(a,b)$, $X,Y$ tal que $aX+bY = MCD(a,b)$
\\

    1. Si $b \mid a$, output $\underbrace{b}_{MCD}, \underbrace{0}_{X}, \underbrace{1}_{Y}$
\\    
    2. Si $b \nmid a$, $d,X,Y \leftarrow e\mcd(b, \overbrace{a \mod b}^{r}) \qquad\qquad a = qb+r$
    \\
    output $d, Y, X-Yq$
}

¿Por qué funciona?

$Xb+Y\underbrace{r}_{a-qb} = d = Xb+Ya-qYb = \underbrace{Y}_{X}a+\underbrace{(x-qY)}_{Y}b$

\subsection{Cálculo de inversos modulo $N$}

¿Cómo invertimos $a \mod N$?

Dado $a,N$ calcular $a^{-1} \mod N$. Sabemos que $a^{-1}\mod N$ existe si $\mcd(a,N)=1$

\experiment{Invert}{Algortimo para invertir mod $N$}{alg:inv}{

input: $a,N$
\\
output: $\bot$ si $a$ no es invertible o $b$ tal que $ba=1\mod N$.

1. $d,X,Y \leftarrow e\mcd(a,N)$\\
2. si $d \neq 1$, output $\bot$\\
3. output $X$
%\end{itemize}


}
Dado que $aX+NY=d$, tenemos que si $d=1$, entonces $aX=1 \mod N$

\subsection{Exponenciación modular}

A continuación describimos 3 algoritmos de exponenciación modular.

\experiment{$\mathsf{ExpMod(\cdot,\cdot)}$}{Algoritmo lineal de exponenciación modular}{alf:exp1}{
input: $a,b,N$

output: $a^b \mod N$

1. $r = 1$\\
2. For $i=1$ to $b$:\\
3. ~~$r=r\cdot a\mod N$\\
4. \textbf{output} $r$
}

Tiempo: $O(b)$ operaciones.


El siguiente algoritmo aprovecha el hecho de que $a^{2k}$ es igual a $(a^k)^2$.

\experiment{$\mathsf{ExpMod}(\cdot,\cdot)$}{Algoritmo logaritmico de exponenciación modular}{alf:exp2}{
input: $a,b,N$

output: $a^b \mod N$

1. Si $b$ es par: \\
2. ~~$r=\mathsf{ExpMod}(a,b/2)$\\
3. ~~\textbf{output} $r\cdot r \mod N$\\
4. Si $b$ es impar:\\
5. ~~$r=\mathsf{ExpMod}(a,(b-1)/2)$\\
6. ~~\textbf{output} $a\cdot r\cdot r \mod N$\\
}

Tiempo: $O(\log b)$ operaciones.

El último algoritmo que mostramos es utilizado cuando la base es  usada en multiples evaluaciones. Dada la base $a$ podemos preprocesar los valores de $a^{2^i}$ para $i=1,..., \log N$ . De esta forma, para cada exponente $b$ podemos tomar su decomposición binaria y utilizar los valores precomputados anteriormente. Es decir, sea $b_0,....,b_{\log N}$ los bits de $b$ ((veremos más adelante que $\log N$ es una buena cota superior para el largo de $b$), entonces 
\[a^b = a^{\sum_{i=0}^{\log N}}2^i\cdot b_i = \prod_{i|b_i=1}a^{2^i}\mod N\]


\experiment{$\mathsf{ExpMod}(\cdot,\cdot)$}{Algoritmo logaritmico de exponenciación modular con preprocesamiento de la base}{alf:exp3}{
input: $a,b,N$

output: $a^b \mod N$
\\

\noindent\textbf{Preprocesamiento:}
Computar el conjunto $\{a^{2^i}\mod N\}_{i=1}^{\log N}$. (Tiempo $\log N$ operaciones).
\\

\noindent\textbf{Exponenciación}

1. $r=1$\\
2. For $i = 1$ to $|b|$: \\
2. ~~si $b_i=1$:\\
3. ~~$r=r\cdot a^{2^i} \mod N$\\
4. \textbf{output} $r$\\
}

        
Tiempo fase de exponenciación: $\bigO{||b||=\text{peso de hamming o cantidad de 1's en }b}$
        
         
\section{Grupos Abelianos}

Sea $\GG$ un conjunto y $\circ$ una operacón binaria. 

\begin{definition}

$(\GG,\circ)$ es un grupo si:

\begin{enumerate}
    \item $\circ$ es cerrada para $\GG$: $g \circ h \in \GG\qquad\forall g,h \in \GG$
    
    \item $\exists$ elemento neutro $e$: $g \circ e = e \circ g = g \qquad \forall g \in \GG$
    
    \item inversos: $\forall g \in \GG \exists g'\in \GG$ tal que $g \circ g' = e$
    
    \item asociatividad: $g_1 \circ (g_2 \circ g_3) = (g_1 \circ g_2) \circ g_3\qquad\forall g_1,g_2,g_3 in \GG$
    
    \item conmutatividad: $g_1 \circ g_2 = g_2 \circ g_1$ \qquad (Para grupos abelianos abelianos)
\end{enumerate}
\end{definition}

En muchas ocaciones la operación se puede obtener del contexto, y en tales casos denotaremos al grupo simplemente por su conjunto.

\begin{definition}
Si $\GG$ es finito, entonces $m = |\calG|$ es el \emph{orden} del grupo.
\end{definition}

\begin{example}

\begin{itemize}
    \item $(\ZZ, +)$ sí es grupo abeliano.
    
    \item $(\ZZ, \times)$ no es grupo
  
    \item Sea $\ZZ_N = \{0,1,...,N-1\}$, $(\ZZ_N, +_N)$ sí es grupo abeliano ($+_N$: suma $\mod N$).
 
    \item Sea $\ZZ_N^* = \{x \in \ZZ_N | \mcd(x,N)=1\}$. $(\ZZ_N^*, \times_N )$ sí es grupo abeliano. ($\times_N$: multiplicación $\mod N$).
    \item $(\RR, \times)$ no es grupo, ya que 0 no tiene inverso.
    
    \item $(\RR\setminus\{0\}, \times)$ sí es grupo.
    \end{itemize}
\end{example}


\subsection{Exponenciación en grupos}

$m \cdot g = \underbrace{g \circ g \circ ... \circ g}_{m \text{ veces}}$ \qquad (notación aditiva)

$g^m = g \circ g \circ ... \circ g$ \qquad (notación multiplcativa)
\\
Podemos demostrar que la notación se ``comporta bien'':
\begin{align*}
g^{m+m'} &= g^m \circ g^{m'}\\
(g^m)^{m'} &= g^{m \cdot m'}\\
g^m \circ h^m &= (g \circ h)^m
\end{align*}

En la clase anterior vimos los siguientes resultados.

\begin{theorem} Si $\GG$ es un grupo de orden $m$, entonces $g^m=1\forall g \in \GG$ (en donde 1 es el elemento neutro para $\GG$)
\end{theorem}

\begin{corollary} Sea $\GG$ un grupo de orden $m$, entonces para todo $g\in\GG$, y para todo $x\in\NN$, $g^x = g^{x \mod m}$
\end{corollary}

\begin{corollary}
    Sea $f_e : \calG \rightarrow \calG$ una función definida como $f_e(g) = g^e$.
    $f_e$ es una biyección si $\mcd(e,m)=1$, y más aun, si $d=e^{-1} \mod m$, entonces $f_d$ es su función inversa.
\end{corollary}

------------------------------


Un grupo muy importante es $\ZZ_N^*$ (todos los elementos de $\ZZ_N$ que tienen inversos multiplicativos.

\begin{definition}
La función de Euler es $\phi(N) = |\ZZ_N^*|$.
\end{definition}

\begin{itemize}
    \item
        si $P$ es primo, ¿cuánto es $\phi(P)$?
        \[\ZZ_P^* = \{1,...,P-1\} \Rightarrow \phi(P) = P-1\] pues todo elemento positivo menor a $P$ tiene inverso mod $P$ ($\mcd(x,P)=1$).
    \item
        si $N = P \cdot Q$, $P \neq Q$, ambos primos
        
        $|\ZZ_N^*| =$ ?
        
        elementos divisibles por $P$: $P, 2P, 3P, ..., (Q-1)P$
        
        elementos divisibles por $Q$: $Q, 2Q, 3Q, ..., (P-1)Q$
        
        $\therefore \phi(PQ) = PQ - (P-1) - (Q-1) = (P-1)(Q-1)$
        
     \item EN general si, $N=\prod P_i^{e_i}$ (decomposición única de $N$ en numeros primos $\{P_i\}$), entonces $\phi(N)=\prod P_i^{e_i -1}(P_i-1)$.
\end{itemize}

(A continuación los mismos corolarios anteriores aplicados a $\ZZ_N^*$)

\begin{corollary}
    $\forall a \in \ZZ_N^*$
    $$a^{\phi(N)} = 1 \text{ mod } N$$
\end{corollary}

\begin{corollary}
    $f_e(a)$: $a^e \mod N$ es biyección si $e \in \ZZ_{\phi(N)}^*$
    
    Sea $d = e^{-1} \mod \phi(N)$, entonces
    \[f_d(f_e(a)) = f_d(a^e \mod N) = a^{e \cdot d} \mod N = a^{e \cdot d \mod \phi(N)} \mod N = a \mod N\]
\end{corollary}


\section{Isomorfismos}

En esta sección veremos que si $N=pq$, entonces el grupo $\ZZ_N$, se pueden representar en base a $\ZZ_p$ y $\ZZ_q$ (análogo para $\ZZ_N^*$ también).

\begin{definition}
$f : \GG \rightarrow \HH$ es isomorfismo de $\GG$ a $\HH$ si
\begin{enumerate}
    \item $f$ es biyección
    \item $f(g_1 \circ_\calG g_2) = f(g_1) \circ_\calH f(g_2)$
\end{enumerate}

Si existe tal función $f$ entonces decimos que $\GG$ y $\HH$ son \emph{isomorfos}, y lo denotamos como $\GG \cong \HH$.
\end{definition}

\subsection{Teorema del resto chino}

Si $\mcd(p,q)=1 \wedge N=pq$, entonces $\ZZ_N \cong \underbrace{\ZZ_P \times \ZZ_Q}_{(X,Y) : X \in \ZZ_P \wedge Y \in \ZZ_Q} \wedge~\ZZ_N^* \cong \ZZ_P^* \times \ZZ_Q^*$.

$f(X) = (X \mod P, X \mod Q)$ es el isomorfismo.

operaciones:

\begin{itemize}

\item $\ZZ_p\times ZZ_q$: $(X_1, Y_1) \boxplus (X_2, Y_2) = (X_1+X_2 \mod p, Y_1 + Y_2 \mod q)$

\item $\ZZ_p^*\times ZZ_q^*$: $(X_1, Y_1) \boxtimes (X_2, Y_2) = (X_1\cdot X_2 \mod p, Y_1 \cdot Y_2 \mod q)$

\end{itemize}

\begin{example}
Calculemos $18^{25} \mod 35$.\\

\begin{align*}
18^{25} \mod \underbrace{35}_{5 \cdot 7}&\leftrightarrow ((18 \mod 5)^{25}, (18 \mod 7)^{25})\\
    &=(3^{25} \mod 5, 4^{25} \mod 7)\\
    &=(3^{25 \mod \overbrace{4}^{|\ZZ_5^*|}} \mod 5, 4^{25 \mod \overbrace{6}^{|\ZZ_7^*|}} \mod 7)\\
    &=(3 \mod 5, 4 \mod 7)\\
\end{align*}
    ¿Cómo invertimos $(3\mod 5,4 \mod 7)$ a $\ZZ_{35}^*$?
    
    En general, sea $X_p = X\mod p$, $X_q = X\mod q$.
Queremos converir $(X_p, X_q)$ a $X \in \ZZ_N^*$. Por teorema del resto chino, sabemos que 
    \[(X_p, X_q) \rightarrow X_p\cdot (1,0) + X_q \cdot (0,1)\]
    
    ¿Cuál es la representación de $(1,0) \wedge (0,1)$ en $\ZZ_N^*$?
    
    Como $\mcd(p,q)=1$, entonces  $\hat{X} \cdot p + \hat{Y} \cdot Q = 1$ \qquad / mod $p$, por lo que, $\hat{Y} \cdot q = 1\mod p$. De forma análoga, obtenemos que $\hat{X} \cdot p = 1$. Por lo tanto, podemos concluir que:    $(1,0) \leftrightarrow \hat{Y} \cdot q \mod N$ y     
    $(0,1) \leftrightarrow X \cdot p\mod N$. 
    
    Volviendo al ejemplo, necesitamos $X,Y$ tal que $X \cdot 5 + Y \cdot 7 = 1 \mod 35$
    
    Por ejemplo, $X=3$ e $Y = -2 \mod 35 = 33$. Calculamos entonces, 
    $33 \cdot 7 = 34 \cdot 7 \mod 35 = 21$ y $3 \cdot 5 = 15$. Por lo tanto, el resultado es 
    $3\cdot 21 + 15\cdot 4 \mod 35 = 18$.
    
\end{example}


\subsection{Demostración del teorema del resto chino}

Está claro que para cualquier $x \in \ZZ_N$ el output $f(x)$ es un par de elementos $(x_p, x_q)$ con $x_p \in \ZZ_p$ y $x_q \in \ZZ_q$. Además, decimos que si $x \in \ZZ_N^*$ entonces $(x_p, x_q) \in \ZZ_p^* \times \ZZ_q^*$. Es más, si (por ejemplo) $x_p \notin \ZZ_p^*$ entonces esto significa que el $\mcd([x \mod p], p) \neq 1$. Pero entonces $\mcd(x,p) \neq 1$. Esto implica que $\mcd(x,N) \neq 1$, contradiciendo el supuesto de que $x \in \ZZ_N^*$.

Ahora mostramos que $f$ es un isomorfismo de $\ZZ_N$ a $\ZZ_p \times \ZZ_q$. (La demostración de que es un isomorfismo de $\ZZ_N^*$ a $\ZZ_p^* \times \ZZ_q^*$ es similar.) Comenzamos probando que $f$ es inyectiva. Sean $x\neq x'\in ZZ_N$, tal que $f(x) = (x_p, x_q) = f(x')$. Entonces $x = x_p = x' \mod p$ y $x = x_q = x' \mod q$. Esto implica que $(x-x')$ es divisible por $p$ y por $q$. Como $\mcd(p,q)=1$, $pq=N$ divide a $(x-x')$. Pero entonces $x = x' \mod N$. Por lo tanto $f$ es inyectiva.

Como $|\ZZ_N| = N = p \cdot q = |\ZZ_p| \cdot |\ZZ_Q|$, los conjuntos $\ZZ_N$ y $\ZZ_p \times \ZZ_q$ son del mismo tamaño. Esto, junto con el hecho de que $f$ es inyectiva implica que $f$ es biyectiva.

En el siguiente párrafo, sean $+_N$, $+_p$, $+_q$ adición módulo $N$, $p$ y $q$ respectivamente. $\boxplus$ denota la operación de grupo en $\ZZ_p \times \ZZ_q$ (es decir, adición módulo $p$ en la primera componente y módulo $q$ en la segunda). Para concluir la demostración de que $f$ es un isomorfismo de $\ZZ_N$ a $\ZZ_p \times \ZZ_q$, tenemos que mostrar que para todo $a,b \in \ZZ_N$ se cumple que $f(a +_N b) = f(a) \boxplus f(b)$. Para ver que esto es cierto, note que

$$f(a +_N b) = \big( [(a +_N b) \mod p], [(a +_N b) \mod q] \big)$$
$$= \big( [(a +_p b) \mod p], [(a +_q b) \mod q] \big)$$
$$= \big( [a \mod p], [a \mod q] \big) \boxplus \big( [b \mod p], [b \mod q] \big) = f(a) \boxplus f(b).$$

Ejercicio: Demostrar para $\ZZ_N^*$

\end{document}
