Escolar Documentos
Profissional Documentos
Cultura Documentos
Facultad de Ingenierı́a
Criptografı́a
Matemática Discreta 2
Curso 2007
1
Criptografı́a de Clave Pública
1.1. Método de cifrado César. Lleva este nombre en honor a Julio César, que lo
usaba para comunicarse con sus generales. El método comienza enumerando las letras del
abecedario, por ejemplo la letra A tiene asignado el 0, la letra B el 1, . . ., la letra Z el 25.
Luego definimos la clave k como un número entre 0 y 25. Para encriptar un mensaje lo
que hacemos es sumarle a cada letra la clave k y reducir módulo 26. Para desencriptar el
mensaje debemos restar k a cada letra y reducir módulo 26.
A T A C A R E M O S P O R L A N O C H E
0 19 0 2 0 17 4 12 14 18 15 14 17 11 0 13 14 2 7 4
15 8 15 17 15 6 19 1 3 7 4 3 6 0 15 2 3 17 22 19
P I P R P G T B D H E D G A P C D R W T
Para evitar que se vean en el texto cifrado los tamaños de las palabras originales se le
puede asignar también un número al caracter espacio, por ejemplo el 26, y tratarlo como
una letra más, esta vez eligiendo una clave k entre 0 y 26 y realizando las operaciones
módulo 27.
De todas formas, es muy sencillo romper este criptosistema por fuerza bruta, pues solo
habrı́a que chequear con las 27 posibles claves y ver cuál tiene sentido.
3
4 CRIPTOGRAFÍA DE CLAVE PÚBLICA
Para desencriptar, restamos a cada letra la clave k, con lo que la función de desencrip-
tado viene dada en este caso por:
D : Zn → Zn , E(x) = x − k (mód n)
Pero para poder desencriptar el mensaje original la función de encriptado debe ser
inyectiva. Queda como ejercicio para el lector probar que la inyectividad de la función de
encriptado definida anteriormente es equivalente a pedirle que mcd(a, n) = 1.
A T A C A R E M O S P O R L A N O C H E
0 19 0 2 0 17 4 12 14 18 26 15 14 17 26 11 0 26 13 14 2 7 4
2 16 2 12 2 6 22 8 18 11 24 23 18 6 24 3 2 24 13 18 12 10 22
C Q C M C G W I S L Y X S G Y D C Y N S M K W
1.2. Método de cifrado Vigenere. Aquı́ la clave consiste en una palabra, el méto-
do consiste en repetir debajo del texto cifrado la palabra clave, luego sumar cada letra del
texto plano, con la letra de la palabra clave que está debajo de ella (codificando cada letra
con un natural como vimos anteriormente) y reduciendo módulo la cantidad de caracteres
codificados (por ejemplo 27 en el caso que utilizemos la letras de la A a la Z y el caracter
espacio).
A T A C A R E M O S P O R L A N O C H E
P R U E B A P R U E B A P R U E B A P R U E B
P J U G B R T C H W A P C H T P B B E W L F
donde la primer fila consiste en el texto plano, en la segunda hemos repetido la palabra
clave varias veces, en este caso “PRUEBA”. En la tercera aparece el texto cifrado, que
fue construido sumando las dos letras que aparecen arriba en la misma columna. De esa
forma obtenemos el texto cifrado “PJUGBRTCHWAPCHTPH BEWLF”. Para sumar las
letras lo que hemos hecho es sumar sus valores númericos correspondiente módulo 27 y
luego sustituimos este valor por su caracte correspondiente, por ejemplo:
A+P= 0 + 15 ≡ 15 (mód 27), la letra que corresponde a 15 es P, luego A+P=P.
T+R= 19 + 17 = 36 ≡ 9 (mód 27), la letra que corresponde a 9 es J, luego T+R=J y
ası́ sucesivamente.
Para desencriptar el texto simplemente repetimos la palabra clave debajo del texto
plano, pero esta vez en vez de sumar, restamos.
Observemos que ahora no es tan fácil chequear a fuerza bruta, la cantidad de claves
posibles crece exponencialmente con el tamaño del texto. Este método de cifrado fue
bastante utilizado e incluso considerado invulnerable hasta el siglo XIX, cuando fueron
introducido algunos métodos para romper este criptosistema.
Una mejora sobre el cifrado Vigenere fue introducida por el sistema de Vernam, uti-
lizando una clave aleatoria de longitud igual a la del mensaje; la confianza en este nuevo
criptosistema hizo que se utilizase en las comunciaciones confidenciales entre la Casa Blan-
ca y el Kremlin, hasta, por lo menos, el año 1987.
Entonces en estos sistemas, la clave de encriptar ha de ser confidencial entre las per-
sonas que llevan la comunicación, dado que a partir de ellas un espı́a puede calcular la
clave de desencriptar con facilidad. Pero: ¿cómo hacer para intercambiar claves a distancia
para que alguien que intercepte la conversación no descubra la clave?
Existen varios métodos para intercambiar claves entre dos personas, entre ellos el que
veremos a continuación denominado Método de Diffie-Hellman de intercambio de clave.
1Estamos suponiendo que los espı́as son atacantes pasivos, es decir, tienen la capacidad de acceder a
la información, pero no de modificarla
2. CRIPTOSISTEMAS DE CLAVE PRIVADA - MÉTODOS DE INTERCAMBIO DE CLAVE 7
Hay que observar que el problema del logaritmo discreto puede ser fácil de resolver si
no se escogen bien los parámetros, por ejemplo el primo p debe elegirse grande (200 dı́gitos
o más es razonable). También hay que cuidar que el orden de g módulo p no sea pequeño,
sabemos por el Pequeño Teorema de Fermat que ese orden es a lo sumo p − 1, se puede
probar que para todo primo p, siempre es posible hallar elementos de orden exactamente
p − 1 (a esos elementos se lo conocen como raı́z primitiva módulo p).
Otra cosa a observar es que tanto Alicia en el paso 4 como Bob en el paso 5 necesitan
calcular g n (mód p) (y g m (mód p) respectivamente). Un algoritmo eficiente es el algo-
ritmo egipcio de exponenciación rápida (antes podemos utilizar Fermat para achicar aún
más el exponente) visto en el curso que es un algoritmo lineal en la cantidad de bits de n
y por lo tanto muy eficiente en la práctica.
Bob y Alicia eligen p = 97 y g = 5. Alicia elige n = 31, calcula 531 ≡ 7 (mód 97) y
le comunica el 7 a Bob por el canal. Bob elige m = 95, calcula 595 ≡ 39 (mód 97) y le
comunica el 39 por el canal. Ahora Alicia calcula 3931 ≡ 14 (mód 97) y Bob 795 ≡ 14
(mód 97), ası́ que ambos tienen a k = 14 como su clave secreta.
n = 18319922375531859171613379181
y
m = 82335836243866695680141440300
Alicia le envia a Bob:
g n = 45416776270485369791375944998
Bob le envia a Alicia:
g m = 15048074151770884271824225393
La clave secreta común viene dada por:
g nm = 85771409470770521212346739540
8 CRIPTOGRAFÍA DE CLAVE PÚBLICA
Los criptosistema de clave pública basan su seguridad en que no haya un método efi-
ciente de calcular la clave de desencriptado, aún conociendo la clave de encriptar. Estos
sistemas tienen la ventaja de que, como la clave de encriptar no nos ayuda a calcular la
clave de desencriptar, puede almacenarse todas las claves de encriptar de muchos usuar-
ios en una guı́a pública a la cual todos tengan acceso, evitando ası́ que cada vez que dos
usuarios quieran comunicarse tengan que ponerse de acuerdo en una clave común. Veremos
como ejemplo de criptosistema de clave pública el RSA.
3.1. Criptosistema RSA. Este criptosistema creado por Rivest, Shamir y Adle-
man (RSA) es uno de los criptosistemas de clave pública más famosos. La idea atrás de
este criptosistema es construir una función que sea fácil de calcular (en este caso multi-
plicar dos primos), pero que su inversa sea difı́cil de calcular (en este caso dado un número
que es producto de 2 primos, hallar esos primos). Veamos en que consiste.
Por otra parte observemos que Alicia, conociendo d no tiene problema en, dado x, cal-
cular D(x), pues cuenta para ello con algoritmos eficientes para calcular potencias módulo
n con el método de exponenciación rápida.
3. CRIPTOSISTEMAS DE CLAVE PÚBLICA 9
Dem. Como D(E(x)) = xde (mód n), debemos probar que xde ≡ x (mód n) para
todo x ∈ Z. Conviene aquı́ separar en casos.
Caso 1: p y q dividen a x.
En este caso tenemos que pq = n|x y por lo tanto también n|xde , luego xde ≡ 0 ≡ x
(mód n).
Para los siguientes casos conviene recordar que d fue elegido tal que de ≡ 1 (mód ϕ(n)),
donde ϕ(n) = (p − 1)(q − 1), por lo tanto existe un k entero tal que de = (p − 1)(q − 1)k + 1.
Luego por la unicidad del Teorema Chino del Resto xde ≡ x (mód n).
Caso 3: Ni p ni q dividen a x.
Tenemos que x y n son coprimos, luego por el Teorema de Fermat-Euler:
xϕ(n) ≡ 1 (mód n)
ası́ que:
xde = xϕ(n)k+1 = (xϕ(n) )k x ≡ 1 · x = x (mód n)
.
Otra forma es usando un método de cifrado de bloques, si bien existen varios métodos
nos centraremos en el ECB (Electronic Codebook), no por ser el más eficiente, sino por
10 CRIPTOGRAFÍA DE CLAVE PÚBLICA
Éste como los otros métodos de cifrado en bloques es independiente del cirptosistema
utilizado, aunque aquı́ a modo de ejemplo veamos como se emplea para un cifrado RSA.
El esquema para RSA serı́a el siguiente, supongamos que tenemos la clave pública
(n, e) y que los caracteres que aparecen en nuestro texto son las 26 letras del alfabeto y
el espacio en blanco (en total 27 caracteres) y sea k entero tal 27k < n < 27k+1 (observar
que ambas desigualdades son estrictas pues n es producto de 2 primos). Ahora separamos
nuestro texto en bloques de tamaño k:
←− b1 −→ ←− b2 −→ ←− b3 −→ . . . ←− bt −→
Donde bi es el bloque i-ésimo, supongamos que bi = lk−1 lk−2 lk−3 . . . l1 l0 donde los li
son caracteres (en nuestro caso las letras del alfabeto y el espacio). Para cada caracter li ,
sea li el número asociado, es decir A = 0, B = 1, C = 2, . . . Z = 25 y Space = 26.
←− b1 −→ ←− b2 −→ ←− b3 −→ . . . ←− bt −→
↓
←− b1 −→ ←− b2 −→ ←− b3 −→ . . . ←− bt −→
↓
←− c1 −→ ←− c2 −→ ←− c3 −→ . . . ←− ct −→
↓
←− c1 −→ ←− c2 −→ ←− c3 −→ . . . ←− ct −→
En la primer fila está el texto plano separado en bloques, en la segunda fila cada bloque
ha sido sustituido por su valor correpondiente, en la tercer fila se ha aplicado la función
de encriptado E, a cada bloque, es decir E(bi ) = ci (recordemos que como E : Zn → Zn
tenemos que 0 ≤ E(bi ) < n).
Se puede afirmar que E(bi ) < 27k+1 puesto que n < 27k+1 , pero podrı́a suceder que
E(bi ) ≥ 27k+1 ası́ que podemos escribir:
ci = sk · 27k + . . . + s1 · 27 + s0
donde cada sj es un entero entre 0 y 26 (sj es su caracter correspondiente). Finalmente
el (k + 1)-bloque ci se define como ci = sk sk−1 . . . s1 s0 y concatenando dichos bloques
obtenemos la cuarta fila que es el texto cifrado.
Ejemplo. Supongamos que Ana tiene la clave pública (n, e) = (25573, 1089) y que le
queremos enviar a Ana el mensaje “PEPITO PIDE PAPA PELADA” utilizando el método
3. CRIPTOSISTEMAS DE CLAVE PÚBLICA 11
de encriptado en bloque ECB codificando cada letra y cada bloque como más arriba.
Primero observamos que 273 < 25573 < 274 y procedemos a partir el texto plano en
3-bloques:
PEP ITO PI DE PAP A P ELA DA
Ası́ que el primer pasaje del texto plano a bloques de números nos queda:
PEP ITO PI DE
PAP A P ELA DA
↓
11058 6359 19367 2321 10950 717 3213 2213
Ası́ construimos la tercer fila, formada por el texto cifrado dado como bloques de
números:
PEP ITO PI DE
PAP A P ELA DA
↓
11058 6359 19367 2321 10950 717 3213 2213
↓
18461 2977 4494 7817 7311 6453 10431 19891
PEP ITO PI DE
PAP A P ELA DA
↓
11058 6359 19367 2321 10950 717 3213 2213
↓
18461 2977 4494 7817 7311 6453 10431 19891
↓
AZIU AECH AGEM AKTO AKAV AIXA AOIJ BAHT
Ası́ que el texto cifrado enviado a Alicia nos queda: “AZIUAECHAGEMAKTOAKAVAIX-
AAOIJBAHT”.
Hay que aclarar que lo expuesto aquı́ es solo una simplificación de la realidad. Por
ejemplo vimos que los bloques del texto plano y los del texto cifrado nos quedaron de
distinta longitud, para evitar esto lo que se hace es agrandar el tamaño de los bloques, a
los bloques del texto plano se le agrega “para rellenar” un número aleatorio, esto tiene la
ventaja de que bloques asociados a números pequenños ya no son tan fáciles de descifrar
a fuerza bruta. Otra cuestión es que nosotros utilizamos en general un sistema en base 27,
pues fueron la cantidad de caracteres que usamos en nuestro texto, en la práctica suele
usarse la base 128 (cantidad de caracteres del código ASCII) o 256 (cantidad de caracteres
del código ASCII extendido).
Este método de cifrado en bloques (nos referimos al ECB) tiene la debilidad de que
un espı́a podria buscar la manera de descifrar cada bloque por separado. Como descifrar
cada bloque puede ser (y lo será en general) más fácil que descifrar el texto entero esto
puede ser una desventaja.
3.3. Ataques al RSA. Observemos que si podemos factorizar n, es decir hallar los
primos p y q tales que n = pq entonces podemos calcular ϕ(n) = (p − 1)(q − 1) y usar el
Algoritmo de Euclides para calcular d tal que:
de ≡ 1 (mód ϕ(n))
y de esa forma poder desencriptar todos los mensajes que le llegan a Alicia. Vale resaltar
que existe un Algoritmo probabilı́stico que permite factorizar n conociendo la función de
desencriptado D (es decir, conociendo d). De forma que resulta equivalente encontrar la
función de desencriptado D a factorizar n.
3. CRIPTOSISTEMAS DE CLAVE PÚBLICA 13
Hace pocos años se ha obtenido un gran avance al descubrirse un algoritmo que fac-
toriza n en tiempo polinomial en la cantidad de bits de n, aunque los coeficientes son tan
grandes que todavı́a no es muy eficiente en la práctica. Por otro lado en los años 80 se ha
creado el modelo de las computadoras cuánticas, que junto a un algoritmo de Shor nos
otorgarı́a un método efectivo para la factorización de un entero. Todavı́a no se sabe si es
posible en la práctica la construcción de dichos computadores cuánticos.
Regresando a la parte matemática, si hubiese algún método efectivo para calcular ϕ(n)
entonces serı́a posible factorizar n en forma efectiva, esto queda como ejercicio para el lec-
tor.
Otra debilidad del criptosistema puede surgir si no son bien elegidos los parámetros.
Por ejemplo si p y q son primos cercanos entonces el Método de Fermat nos otorga un
método efectivo de factorizar n.
Por otra parte sean s y t los enteros positivos que nos otorga el algoritmo. Observemos
que q − p < n − p < n − 1 ası́ que por la observación previa s < (n − 1)/2.
Para terminar, si volvemos a analizar detalladamente los pasos a seguir por Alicia para
la creación de su clave pública, nos topamos con un posible inconveniente en la primer
parte.
Alicia debe elegir dos primos grandes p y q para formar su número n = pq. El proble-
ma es que como dijimos, no se conoce ningún algoritmo realmente efectivo para factorizar
números grandes en tiempo razonable, entonces ¿Cómo hace Alicia para saber elegir los
14 CRIPTOGRAFÍA DE CLAVE PÚBLICA
primos p y q que forman n? Alicia podria tomar dos números al azar p y q y luego factor-
izarlos para ver si es primo, pero eso podrı́a llevarle mucho tiempo (años o inclusive siglos!).
3.5. Test de primalidad Miller-Rabin. Tomamos como entrada del test un en-
tero positivo n > 1 impar del cual queremos determinar si es primo o no, los pasos del
algoritmo son los siguientes:
Antes de comenzar a analizar el algoritmo vale recalcar que en el momento que este
retorna “n es probablemente primo” ó “n es compuesto” entonces se detiene (es decir, no
seguimos con los siguientes pasos), entonces si hemos llegado a un paso, es porque en los
pasos anteriores no ha retornado nada el algoritmo. En el paso 6, el i + + significa que se
incrementa el valor de la variable en 1, es decir si en determinado paso i = j y nos toca el
paso 6, entonces en el siguiente paso el valor de i es i = j + 1.
Ahora veamos la eficiencia del algoritmo, primero observemos que para el paso 1, lo
que se puede hacer para hallar el α y el m es simplemente dividir sucesivamente entre 2
comenzando por n − 1 hasta que de un resultado impar (que es el m), la cantidad de veces
que se ha divido entre 2 es α. Entonces escribir a n de la forma que lo estipula el paso 1,
lleva a lo sumo log2 (n) pasos.
Luego en las iteraciones de los pasos 6,7,8 y 9 lo que se hace es ir calculando la lista de
i
números a2 m (mód n) con i = 1, 2, . . . , α − 1, observando que cada término de la lista es
i i+1
el cuadrado del anterior (es decir (a2 m )2 = a2 m ). Entonces para calcular cada término a
partir del anterior solo hay que elevar al cuadrado y reducir módulo n, tomando esto como
una sola operación. Ası́ calcular los números de la lista lleva a lo sumo α − 1 < log2 (n)
pasos, ası́ el algoritmo en sı́ lleva un total de 2log2 (n) pasos, ası́ que es lineal en la cantidad
de bits de n.
3. CRIPTOSISTEMAS DE CLAVE PÚBLICA 15
Ahora finalmente veamos que el algoritmo funciona, es decir que si retorna “n es com-
puesto” entonces n es compuesto, antes de ver esto veamos un lema previo.
Para culminar, dejaremos al lector como ejercicio sencillo que pruebe que el test de
Rabin-Miller es efectivamente una generalización del criterio de de primalidad de Fermat.