Sei sulla pagina 1di 51

Prefacio

La creación de criptografía de clave pública por Diffie y Hellman en 1976 y el

invención posterior del criptosistema de clave pública RSA por Rivest, Shamir,

y Adleman en 1978 son eventos decisivos en la larga historia de las comunicaciones secretas.
Es difícil sobreestimar la importancia de los criptosistemas de clave pública y sus esquemas de
firma digital asociados en el mundo moderno de computadoras e Internet. Este libro
proporciona una introducción a la teoría de la criptografía de clave pública y las ideas
matemáticas subyacentes

Esa teoría, La criptografía de clave pública se basa en muchas áreas de las matemáticas,
incluidas teoría de números, álgebra abstracta, probabilidad y teoría de la información. Cada

de estos temas se presenta y desarrolla con suficiente detalle para que esto

El libro proporciona un curso autónomo para el alumno principiante. Lo único

prerrequisito es un primer curso en álgebra lineal. Por otro lado, los alumnos

Con una base matemática más sólida puede pasar directamente a la criptografía.

aplicaciones y todavía tiene tiempo para temas avanzados como la curva elíptica

emparejamientos y algoritmos de reducción de celosía.

Entre las muchas facetas de la criptografía moderna, este libro elige concentrarse
principalmente en criptosistemas de clave pública y esquemas de firma digital.

Esto permite un desarrollo en profundidad de las matemáticas necesarias necesarias para la


construcción de estos esquemas y un análisis de sus

seguridad. El lector que domine el material de este libro no solo será

bien preparado para futuros estudios en criptografía, pero habrá adquirido un verdadero

comprensión de los principios matemáticos subyacentes en los que moderno

Se basa la criptografía.

Los temas tratados en este libro incluyen el intercambio de claves Diffie-Hellman, discreto

criptosistemas basados ​en logaritmos, el criptosistema RSA, pruebas de primalidad, algoritmos


de factorización, firmas digitales, teoría de la probabilidad, teoría de la información, algoritmos
de colisión, curvas elípticas, criptografía de curva elíptica, criptografía basada en
emparejamiento, celosías, criptografía basada en celosía y el criptosistema NTRU. Un capítulo
final describe muy brevemente algunos de los muchos otros aspectos.

de la criptografía moderna (funciones hash, generadores de números pseudoaleatorios,

pruebas de conocimiento cero, efectivo digital, AES, etc.) y sirve para dirigir al lector hacia
áreas para su posterior estudio.

Recursos electrónicos: el lector interesado encontrará material adicional y una lista de erratas
en la página de inicio de Criptografía matemática:
www.math.brown.edu/~jhs/MathCryptoHome.html

Esta página web incluye muchos de los ejercicios numéricos del libro, lo que permite al lector
cortarlos y pegarlos en otros programas, en lugar de tener que volver a escribirlos.

Ningún libro está libre de errores o no puede ser mejorado. Estaríamos encantados de recibir
comentarios, buenos o malos, y correcciones de nuestros lectores. Puede enviarnos un correo
a

mathcrypto@math.brown.edu

Agradecimientos: A nosotros, los autores, nos gustaría agradecer lo siguiente

individuos por probar este libro y por las muchas correcciones y sugerencias útiles que ellos y
sus estudiantes proporcionaron: Liat Berdugo, Alexander

Collins, Samuel Dickman, Michael Gartner, Nicholas Howgrave-Graham, SuIon Ih, Saeja Kim,
Yuji Kosugi, Yesem Kurt, Michelle Manes, Victor Miller, David Singer, William Whyte. Además,
nos gustaría agradecer a los muchos estudiantes de la Universidad Brown que tomaron Math
158 y nos ayudaron a mejorar la exposición de este libro.

Agradecimientos por la segunda edición: nos gustaría agradecer

las siguientes personas para las correcciones y sugerencias que se han incorporado a la
segunda edición: Stefanos Aivazidis, Nicole Andre, John B. Baena, Carlo Beenakker, Robert
Bond, Reinier Broker, Campbell Hewett, Rebecca Constantine, Stephen Constantine,
Christopher Davis, Maria Fox , Steven Galbraith, Motahhareh Gharahi, David Hartz, Jeremy
Huddleston, Calvin Jongsma, Maya Kaczorowski, Yamamoto Kato, Jonathan Katz, Chan-Ho Kim,
Ariella Kirsch, Martin M. Lauridsen, Kelly McNeilly, Ryo Masuda, Shahab Mirzadeh, Kenneth
Ribet, Jeremy Roach, Hemlal Sahum, Ghassan Sarkis, Frederick Schmitt, Christine Schwartz,
Wei Shen, David Singer, Michael Soltys, David Spies, Bruce Stephens, Paulo Tanimoto, Patrick
Vogt, Ralph Wernsdorf, Sebastian Welsch, Ralph Wernsdorf, Edward White, Pomona College
Math 113 (Spring 2009), Universidad de California en

Berkeley Math 116 (primavera de 2009, 2010).

Providence, Estados Unidos Jeffrey Hoffstein

Jill Pipher

Joseph H. Silverma

Introducción

Introducción

Objetivos principales de la criptografía (clave pública)

• Permitir que dos personas intercambien información confidencial,

incluso si nunca se han conocido y solo pueden comunicarse

a través de un canal que está siendo monitoreado por un adversario.

• Permitir que una persona adjunte una firma digital a un documento,


para que cualquier otra persona pueda verificar la validez del

firma, pero nadie puede falsificar una firma en ningún otro

documento.

La seguridad de las comunicaciones y el comercio en una era digital se basa en la encarnación


moderna del antiguo arte de los códigos y las cifras. Subyacente al nacimiento de la
criptografía moderna hay una gran cantidad de matemáticas fascinantes, algunas de las cuales
se han desarrollado para aplicaciones criptográficas, pero gran parte de las cuales se han
tomado del canon matemático clásico. El objetivo principal

de este libro es presentar al lector una variedad de temas matemáticos al mismo tiempo que
integra las matemáticas en una descripción de la criptografía de clave pública moderna.

Durante miles de años, todos los códigos y cifras se basaron en la suposición de que las
personas que intentan comunicarse, los llaman Bob y Alice, comparten una clave secreta que
su adversario, la llaman Eva, no posee. Bob usa la clave secreta para cifrar su mensaje, Alice
usa la misma clave secreta para descifrar el mensaje, y la pobre Eva, que no conoce la clave
secreta, no puede realizar el descifrado. Una desventaja de estos criptosistemas de clave
privada es que Bob y Alice necesitan intercambiar la clave secreta antes de comenzar.

Durante la década de 1970, la sorprendente idea de la criptografía de clave pública apareció en


escena.1 En un criptosistema de clave pública, Alice tiene dos claves, una clave de cifrado
pública KPub y una clave de descifrado privada (secreta) KPri. Alice publica su clave pública
KPub, y luego Adam, Bob y Carl y todos los demás pueden usar KPub para cifrar mensajes y
enviárselos a Alice. La idea subyacente en la criptografía de clave pública es que, aunque todos
en el mundo conocen KPub y pueden usarlo para cifrar mensajes, solo Alice, que conoce la
clave privada KPri, puede descifrar mensajes.

Las ventajas de un criptosistema de clave pública son múltiples. Por ejemplo, Bob puede enviar
a Alice un mensaje cifrado incluso si nunca antes han estado en contacto directo. Pero aunque
la criptografía de clave pública es un concepto teórico fascinante, no está del todo claro cómo
se podría crear un criptosistema de clave pública. Resulta que los criptosistemas de clave
pública pueden basarse en problemas matemáticos difíciles. Más precisamente, uno busca un
problema matemático que inicialmente es difícil de resolver, pero que se vuelve fácil de
resolver si conoce alguna información adicional. Por supuesto, los criptosistemas de clave
privada no han desaparecido. De hecho, son más importantes que nunca, ya que tienden a ser
significativamente más eficientes que los criptosistemas de clave pública. Por lo tanto, en la
práctica, si Bob quiere enviar un mensaje largo a Alice, primero usa un criptosistema de clave
pública para enviar a Alice

la clave para un criptosistema de clave privada, y luego usa el criptosistema de clave privada
para encriptar su mensaje. Los criptosistemas de clave privada modernos más eficientes, como
DES y AES, confían en su seguridad en la aplicación repetida de varias operaciones de mezcla
que son difíciles de mezclar sin la clave privada. Por lo tanto, aunque el tema de la criptografía
de clave privada es de importancia teórica y práctica, la conexión con ideas matemáticas
fundamentales fundamentales es mucho menos pronunciada que con los criptosistemas de
clave pública. Por esa razón, este libro se concentra casi exclusivamente en criptografía de
clave pública, especialmente en criptosistemas de clave pública y digital.

firmas
La criptografía matemática moderna se basa en muchas áreas de las matemáticas, incluida
especialmente la teoría de números, el álgebra abstracta (grupos, anillos, campos), la
probabilidad, la estadística y la teoría de la información, por lo que los requisitos previos para
estudiar el tema pueden parecer formidables. Por el contrario, los requisitos previos para leer
este libro son mínimos, porque nos tomamos el tiempo para presentar cada tema matemático
requerido con la suficiente profundidad como sea necesario. Así, este libro proporciona un
tratamiento autónomo de la criptografía matemática para

El lector con antecedentes matemáticos limitados. Y para aquellos lectores que han tomado un
curso en, digamos, teoría de números o álgebra abstracta o probabilidad, sugerimos revisar
brevemente las secciones relevantes a medida que se alcanzan y luego pasar directamente a
las aplicaciones criptográficas.

Este libro no pretende ser una fuente integral de todas las cosas criptográficas. En primer
lugar, como ya se señaló, nos concentramos en la criptografía de clave pública. Pero incluso
dentro de este dominio, hemos optado por buscar una pequeña selección de temas a una
profundidad matemática razonable, en lugar de proporcionar una descripción más superficial
de una gama más amplia de temas. Creemos que cualquier lector que haya dominado el
material de este libro no solo estará bien preparado para futuros estudios en criptografía, sino
que habrá adquirido una comprensión real de los principios matemáticos subyacentes sobre
los cuales

Se basa la criptografía. Sin embargo, esto no significa que los temas omitidos no sean
importantes. Simplemente significa que hay un límite en la cantidad de material que se puede
incluir en un libro (o curso) de longitud razonable. Como en cualquier texto, el la elección de
temas particulares refleja los gustos e intereses de los autores. Para conveniencia del lector, el
capítulo final contiene una breve encuesta de áreas para estudio adicional.

Una guía de temas matemáticos: este libro incluye una cantidad significativa de material
matemático sobre una variedad de temas que son útiles en criptografía.

La siguiente lista está diseñada para ayudar a coordinar los temas matemáticos que cubrimos
con temas que la clase o el lector pueden haber estudiado.

Congruencias, primos y campos finitos - Sectas. 1.2, 1.3, 1.4, 1.5, 2.10.4

El teorema del resto chino - Sect. 2.8

La fórmula de Euler - Sect. 3.1

Prueba de primalidad - Sect. 3.4

Reciprocidad cuadrática - Sect. 3.9

Métodos de factorización - Sectas. 3.5, 3.6, 3.7, 6.6

Logaritmos discretos - Sectas. 2.2, 3.8, 5.4, 5.5, 6.3

Teoría de grupo - Sect. 2.5

Anillos, polinomios y anillos de cociente - Sectas. 2.10 y 7.9

Combinatoria y probabilidad - Sectas. 5.1 y 5.3

Teoría de la información y la complejidad - Sectas. 5.6 y 5.7


Curvas elípticas - Sectas. 6.1, 6.2, 6.7, 6.8

Álgebra lineal - Sectas. 7.3

Enrejados - Sectas. 7.4, 7.5, 7.6, 7.13

Audiencia prevista y requisitos previos: este libro proporciona una introducción independiente
a la criptografía de clave pública y a las matemáticas subyacentes que se requieren para la
asignatura. Es adecuado como texto para estudiantes universitarios avanzados y estudiantes
de posgrado principiantes. Proporcionamos suficiente material de fondo para que el libro
pueda usarse en cursos para estudiantes sin

exposición previa a álgebra abstracta o teoría de números. Para las clases en las que los
estudiantes tienen una formación más sólida, se puede omitir el material matemático básico,
dejando tiempo para algunos de los temas más avanzados.

Los prerrequisitos formales para este libro son pocos, más allá de una instalación con

álgebra de secundaria y, en cap. 6, geometría analítica. El cálculo elemental se usa aquí y allá
de una manera menor, pero no es esencial, y el álgebra lineal se usa de manera pequeña en el
Capítulo. 3 y más extensamente en el cap. 7. No se asume ningún conocimiento previo para
temas matemáticos como la teoría de números, el álgebra abstracta y la teoría de probabilidad
que juegan un papel fundamental en la criptografía moderna. Están cubiertos en detalle según
sea necesario. Sin embargo, debe enfatizarse que este es un libro de matemáticas con su

parte de definiciones formales y teoremas y pruebas. Por lo tanto, se espera que el lector
tenga un cierto nivel de sofisticación matemática. En particular, los estudiantes que hayan
tomado previamente un curso de matemáticas basado en pruebas encontrarán el material más
fácil que aquellos sin esos antecedentes. Por otro lado, el tema de la criptografía es tan
atractivo que este libro es un buen texto para un curso de introducción a las pruebas, con el
entendimiento de que el instructor deberá cubrir el material más lentamente para que los
estudiantes tengan tiempo de sentirse cómodos con las matemáticas basadas en pruebas.

Programa sugerido: este libro contiene considerablemente más material del que pueden cubrir
cómodamente los estudiantes principiantes en un curso de un semestre.

Sin embargo, para los estudiantes más avanzados que ya han tomado cursos de teoría de
números y álgebra abstracta, debería ser posible hacer la mayor parte del material restante.
Sugerimos cubrir la mayoría de los temas en Chaps. 1–4, posiblemente omitiendo algunos de
los temas más técnicos, el material opcional sobre el cifrado Vig`enere y la sección sobre teoría
de anillos, que no se utiliza hasta mucho más adelante en el libro. Los siguientes tres capítulos
sobre teoría de la información (Capítulo 5), curvas elípticas (Capítulo 6) y retículas (Capítulo 7)
son en su mayoría independientes entre sí, por lo que el instructor tiene la opción de cubrir
uno o dos

de ellos en detalle o todos en menos profundidad. Ofrecemos el siguiente programa de


estudios como ejemplo de una de las muchas posibilidades. Hemos indicado que algunas
secciones son opcionales. Cubrir el material opcional deja menos tiempo para los capítulos
posteriores al final del curso.

Capítulo 1. Introducción a la criptografía. Cubra todas las secciones.

Capítulo 2. Logaritmos discretos y Diffie – Hellman.


Cubra las sectas. 2.1–2.7. Opcionalmente, cubre las Sectas más sofisticadas matemáticamente.
2.8–2.9 en el algoritmo de Pohlig – Hellman. Omitir la secta. 2.10 en primera lectura.

Capítulo 3. Factorización entera y RSA.

Cubra las sectas. 3.1–3.5 y 3.9–3.10. Opcionalmente, cubra las Sectas más sofisticadas
matemáticamente. 3.6–3.8, que trata con números lisos, tamices y el cálculo del índice.

Capítulo 4. Firmas digitales. Cubra todas las secciones.

Capítulo 5. Teoría de la probabilidad y teoría de la información.

Cubra las sectas. 5.1, 5.3 y 5.4. Opcionalmente, cubra las secciones matemáticamente más
sofisticadas sobre el método ρ de Pollard (sección 5.5), la teoría de la información (sección
5.6) y la teoría de la complejidad (sección 5.7). El material en el cifrado Vigen`ere en la sección.
5.2 ilustra muy bien el uso de estadísticas en el criptoanálisis, pero está algo alejado del
camino principal.

Capítulo 6. Curvas elípticas.

Cubra las sectas. 6.1–6.4. Cubra otras secciones según lo permita el tiempo, pero tenga en
cuenta que

Sectas 6.7–6.10 en emparejamientos requieren campos finitos de orden de potencia principal,

que se describen en la sección. 2.10.4.

Capítulo 7. Enrejados y criptografía. Cubra las sectas. 7.1–7.8. (Si el tiempo es corto, uno puede
omitir una o ambas Secciones. 7.1 y 7.2.) Cubra cualquiera de las Sectas. 7.13–7.14 en el
algoritmo de reducción de celosía LLL o Sectas. 7.9–7.11 en el criptosistema NTRU, o ambos,
según lo permita el tiempo. (Las secciones de NTRU requieren el material en

anillos polinómicos y anillos cocientes cubiertos en la sección. 2.10.)

Capítulo 8. Temas adicionales en criptografía.

El material en este capítulo apunta al lector hacia otros importantes

áreas de criptografía. Proporciona una buena lista de temas y referencias.

para trabajos y presentaciones de término estudiantil.

Notas adicionales para el instructor: Dependiendo de la cantidad de material matemático más


difícil en Chaps. 2–5 está cubierto, puede que no haya tiempo para profundizar en ambos
capítulos. 6 y 7, por lo que el instructor puede necesitar omitir curvas elípticas o celosías para
ajustar el otro material en un semestre.

Creemos que es útil para los estudiantes obtener una apreciación de los orígenes de su
materia, por lo que hemos dispersado un puñado de secciones en todo el libro que contienen
algunos breves comentarios sobre la historia de la criptografía. Los instructores que quieran
pasar más tiempo en matemáticas pueden omitir estas secciones sin afectar la narrativa
matemática.

Cambios en la segunda edición:

• El capítulo sobre firmas digitales se ha movido, ya que sentimos que


Este importante tema debe tratarse anteriormente en el curso. Más precisamente, las firmas
RSA, Elgamal y DSA se describen ahora en el resumen

Cap. 4, mientras que el material en las firmas de la curva elíptica está cubierto en la breve
sección. 6.4.3. Las dos secciones sobre firmas basadas en celosía de la primera edición se han
reescrito ampliamente y ahora aparecen como Sect. 7.12.

• Se han incluido numerosos ejercicios nuevos.

• Se han corregido numerosos errores matemáticos tipográficos y menores, y la notación se ha


hecho más coherente de un capítulo a otro.

• Se han reescrito o ampliado varias explicaciones para mayor claridad, especialmente en los
capítulos. 5–7.

• Se han creado nuevas secciones sobre efectivo digital y encriptación homomórfica

añadido a los temas adicionales en el cap. 8; ver Sectas. 8.8 y 8.9.

Capítulo 1
Una introducción a la criptografía
1.1 Cifrados de sustitución simple
Mientras Julio César examina la batalla que se desarrolla desde su puesto avanzado de la
colina, un mensajero agotado y desaliñado irrumpe en su presencia y le entrega una hoja de
pergamino que contiene galimatías:

jsjrdkfqqnslgfhpgwjfpymwtzlmnrrnsjsyqzhnzx

En unos instantes, Julius envía una orden para que una unidad de reserva de aurigas corra
alrededor del flanco izquierdo y explote una brecha momentánea en la formación del
oponente.

¿Cómo esta cadena de letras aparentemente aleatorias transmitía información tan


importante? El truco es fácil, una vez que se explica. Simplemente tome cada letra del mensaje
y muévala cinco letras hacia arriba en el alfabeto. Así, j en el texto cifrado se convierte en e en
el texto plano,

1 porque e es seguido en el alfabeto por f, g, h, i, j.

Aplicando este procedimiento a todo el texto cifrado produce

jsjrdkfqqnslgfhpgwjfpymwtzlmnrrnsjsyqzhnzx

enemigo retroceso avance a través de inminentlucius

La segunda línea es el texto plano descifrado, y dividiéndolo en palabras y proporcionando la


puntuación apropiada, Julius lee el mensaje

Enemigo cayendo hacia atrás. Avance inminente. Lucius Queda una peculiaridad menor que
debe abordarse. ¿Qué sucede cuando Julius encuentra una letra como d? No hay una letra que
aparece antes de cinco letras en el alfabeto d. La respuesta es que debe terminar hasta el final
del alfabeto. Por lo tanto, d se reemplaza por y, ya que y es seguido por z, a, b, c, d.

Este efecto envolvente se puede visualizar convenientemente colocando el

alfabeto abcd ... xyz alrededor de un círculo, en lugar de en una línea. Si un segundo círculo
alfabeto se coloca entonces dentro del primer círculo y el círculo interior se hace girar cinco
letras, como se ilustra en la Fig. 1.1, la disposición resultante se puede utilizar para fácilmente
cifrar y descifrar mensajes de César. Para descifrar una carta, sólo tiene que encontrar en la
rueda interior y leer la letra de texto plano correspondiente de la rueda exterior. Para cifrar,
invierta este proceso: busque la letra de texto sin formato en

la rueda exterior y lea la letra de texto cifrado de la rueda interior. Y tenga en cuenta que si
construye una rueda de cifrado cuya rueda interior gira, entonces ya no está restringido a
cambiar siempre exactamente por cinco letras. Las ruedas de cifrado de este tipo se han
utilizado durante siglos.

Aunque los detalles de la escena anterior son totalmente ficticios, y en todo caso es poco
probable que un mensaje a un general romano habría sido escrito en Inglés moderno (!), Hay
evidencia de que César empleó este método a principios de la criptografía, la cual es a veces
llamado el cifrado César en su honor. También se refiere a veces como un cifrado de
desplazamiento, ya que cada letra del alfabeto se desplaza hacia arriba o hacia abajo. La
criptografía, la metodología para ocultar el contenido de los mensajes, proviene de las
palabras raíz griegas kryptos, que significa oculto, 3 y graphikos, que significa escritura. El
estudio científico moderno de criptografía a veces se denomina criptología.

En el cifrado César, cada letra se reemplaza por un sustituto específico

letra. Sin embargo, si Bob encripta un mensaje para Alice4 usando un cifrado César y permite
que el mensaje encriptado caiga en manos de Eve, a Eve le tomará muy poco tiempo
descifrarlo. Todo lo que necesita hacer es probar cada uno de los 26 turnos posibles.

Bob puede hacer que su mensaje sea más difícil de atacar usando un esquema de reemplazo
más complicado. Por ejemplo, podría reemplazar cada aparición de a por z y cada aparición de
z por a, cada aparición de b por y y cada aparición de y por b, y así sucesivamente,
intercambiando cada par de letras c ↔ x ,. . . , m ↔ n.

Este es un ejemplo de un cifrado de sustitución simple, es decir, un cifrado en cualquier letra


que se reemplaza por otra letra (o algún otro tipo de símbolo). Los
El cifrado César es un ejemplo de un cifrado de sustitución simple, pero hay muchos cifrados
de sustitución simples además del cifrado César. De hecho, un cifrado de sustitución simple
puede verse como una regla o función

{a, b, c, d, e, ..., x, y, z} - → {A, B, C, D, E, ..., X, Y, Z}

asignando a cada letra de texto plano en el dominio una letra de texto cifrado diferente en el
rango. (Para que sea más fácil distinguir el texto sin formato del texto cifrado, escribimos el
texto sin formato con letras minúsculas y el texto cifrado con letras mayúsculas). Tenga en
cuenta que para que el descifrado funcione, la función de cifrado debe tener la propiedad de
que no van dos letras de texto sin formato. a la misma letra de texto cifrado. Se dice que una
función con esta propiedad es uno a uno o inyectiva.

Una forma conveniente de describir la función de cifrado es crear una tabla escribiendo el
alfabeto de texto sin formato en la fila superior y colocando cada letra de texto cifrado debajo
de la letra de texto sin formato correspondiente.

Ejemplo 1.1. En la tabla 1.1 se proporciona una tabla de cifrado de sustitución simple. El
alfabeto de texto cifrado (las letras mayúsculas en la fila inferior) es una permutación elegida al
azar de las 26 letras del alfabeto. Para cifrar el mensaje de texto sin formato Cuatro puntajes y
hace siete años, juntamos las palabras, buscamos cada letra de texto sin formato en la tabla de
cifrado y escribimos la correspondiente letra de texto cifrado a continuación.

Entonces se acostumbra escribir el texto cifrado en bloques de cinco letras:

NURBK SUBVC GQKVE VGZVC BKCFU

El descifrado es un proceso similar. Supongamos que recibimos el mensaje

GVVQG VYKCM CQQBV KKWGF SCVKC B


y que sabemos que se cifró con la Tabla 1.1. Podemos revertir el proceso de cifrado
encontrando cada letra de texto cifrado en la segunda fila de la Tabla 1.1 y escribiendo la letra
correspondiente de la fila superior. Sin embargo, dado que las letras en la segunda fila de la
Tabla 1.1 están todas mezcladas, este es un proceso algo ineficiente. Es mejor hacer una tabla
de descifrado en la que las letras de texto cifrado en la fila inferior se enumeran en orden
alfabético y las letras de texto sin formato correspondientes en la fila superior se mezclan.
Hemos hecho esto en la Tabla 1.2. Usando esta tabla, desciframos fácilmente el mensaje.

¡Poner los saltos de palabra apropiados y algunos signos de puntuación revela una solicitud
urgente!

1.1.1 Criptoanálisis de cifrados de sustitución simple

¿Cuántos cifrados de sustitución simple diferentes existen? Podemos contarlos enumerando


los posibles valores de texto cifrado para cada letra de texto sin formato. Primero asignamos la
letra de texto sin formato a una de las 26 letras de texto cifrado posibles de la A a la Z.
Entonces hay 26 posibilidades para a. A continuación, dado que no podemos asignar b a la
misma letra que a, podemos asignar b a cualquiera de las 25 letras de texto cifrado restantes.
Por lo tanto, hay 26 · 25 = 650 formas posibles de asignar ay b. Ahora hemos usado dos de las
letras de texto cifrado, por lo que podemos asignar c a cualquiera de las restantes 24 letras de
texto cifrado. Y así. . . . Por lo tanto, el número total de formas de asignar las 26 letras de texto
sin formato a las 26 letras de texto cifrado, utilizando cada letra de texto cifrado solo una vez,
es

26 · 25 · 24 ··· 4 · 3 · 2 · 1 = 26! = 403291461126605635584000000.

Por lo tanto, hay más de 1026 cifrados de sustitución simple diferentes. Cada tabla de cifrado
asociada se conoce como clave.

Supongamos que Eve intercepta uno de los mensajes de Bob y que ella intenta descifrarlo
intentando cada cifrado de sustitución simple posible. El proceso de descifrar un mensaje sin
conocer la clave subyacente se llama criptoanálisis. Si Eve (o su computadora) es capaz de
verificar un millón de alfabetos cifrados por segundo, todavía le tomaría más de 1013 años
probarlos a todos.5 Pero se estima que la edad del universo es del orden de 1010 años. Por lo
tanto, Eve casi no tiene posibilidades de descifrar el mensaje de Bob, lo que significa que el
mensaje de Bob es seguro y que no tiene nada de qué preocuparse. 6 ¿O sí? Es hora de una
lección importante en el lado práctico de la ciencia de criptografía:
A pesar de la gran cantidad de cifrados de sustitución simples posibles, en realidad son
bastante fáciles de descifrar, y de hecho muchos periódicos y revistas los presentan como un
compañero del crucigrama diario. La razón por la que Eva puede criptoanalizar fácilmente un
cifrado de sustitución simple es que las letras en el idioma inglés (o cualquier otro idioma
humano) no son aleatorias. Para tomar un ejemplo extremo, la letra q en inglés está casi
siempre seguida de la letra u. Más útil es el hecho de que ciertas letras como e y t aparecen
con mucha más frecuencia que otras letras como f y c. La tabla 1.3 enumera las letras con sus
frecuencias típicas en texto en inglés. Como puede ver, la letra más frecuente es e, seguida de
t, a, o y n.

Por lo tanto, si Eve cuenta las letras en el mensaje cifrado de Bob y hace una tabla de
frecuencias, es probable que la letra más frecuente represente e, y que t, a, o, y n aparezcan
entre las siguientes letras más frecuentes. De esta manera, Eve puede probar varias
posibilidades y, después de una cierta cantidad de prueba y error, descifrar el mensaje de Bob

En el resto de esta sección, ilustramos cómo criptoanalizar un cifrado de sustitución simple


descifrando el mensaje dado en la Tabla 1.4. Por supuesto, el resultado final de derrotar un
cifrado de sustitución simple no es nuestro objetivo principal aquí. Nuestro punto clave es
presentar la idea del análisis estadístico, que demostrará tener muchas aplicaciones en la
criptografía. Aunque para completar, proporcionamos detalles completos, el lector puede
desear hojear este material. Hay 298 letras en el texto cifrado​. El primer paso es hacer una
tabla de frecuencia que enumere con qué frecuencia aparece cada letra de texto cifrado (Tabla
1.5).
La letra de texto cifrado J aparece con mayor frecuencia, por lo que hacemos la suposición
provisional de que corresponde a la letra de texto sin formato e. Las siguientes letras de texto
cifrado más frecuentes son L (28 veces) y D (27 veces), por lo que podríamos adivinar de la
Tabla 1.3 que representan ty a. Sin embargo, las frecuencias de letras en a

es poco probable que los mensajes cortos coincidan exactamente con los porcentajes de la
tabla 1.3. Todo lo que podemos decir es que entre las letras de texto cifrado L, D, G, Y y S es
probable que aparezcan varias de las letras de texto claro t, a, o, n y r.

Hay varias formas de proceder. Un método es mirar bigrams,

que son pares de letras consecutivas La Tabla 1.6a enumera los bigrams que aparecen con
mayor frecuencia en inglés, y la Tabla 1.6b enumera los bigrams de texto cifrado que aparecen
con mayor frecuencia en nuestro mensaje. El texto cifrado bigrams LO y OJ aparecen con
frecuencia. Ya hemos adivinado que J = e, y en base a su frecuencia, sospechamos que L es
probable que represente una de las letras t, a, o, n o r. Como los dos bigrams ingleses más
frecuentes son th y he, hacemos las identificaciones provisionales

LO = th y OJ = he.

Sustituimos las conjeturas J = e, L = t, y O = h, en el texto cifrado,

escribir la supuesta letra de texto sin formato debajo de la correspondiente letra de texto
cifrado.
En este punto, podemos mirar los fragmentos de texto sin formato e intentar adivinar algunas
palabras comunes en inglés. Por ejemplo, en la segunda línea vemos los tres bloques.
Recuerde que las letras más comunes en inglés (Tabla 1.3) son, en orden decreciente de
frecuencia,
e, t, a, o, n, r, i, s, h.

Ya hemos asignado valores de texto cifrado a e, t, o, n, i, h, por lo que suponemos que D y G


representan dos de las tres letras a, r, s. En la tercera línea notamos que GYLYSN da -ición,
entonces claramente G debe ser s. Del mismo modo, en la quinta línea tenemos LJQLO DLCNL
igual a te-th -tunt, entonces D debe ser a, no r. Sustituyendo estos nuevos pares G = sy D = a da

Ahora es una cuestión simple completar las pocas letras restantes y poner los saltos de palabra
apropiados, las mayúsculas y la puntuación para recuperar el texto sin formato:

El escritor afirmó con una expresión momentánea, una contracción de un músculo o una
mirada, para comprender los pensamientos más íntimos de un hombre. Sus conclusiones
fueron tan infalibles como tantas proposiciones de Euclides. Sus resultados serían tan
sorprendentes para los no iniciados que, hasta que se enteren de los procesos por los cuales
llegó a ellos, podrían considerarlo como un nigromante.

1.2 Divisibilidad y grandes divisores comunes


Gran parte de la criptografía moderna se basa en los fundamentos del álgebra y la teoría de
números. Entonces, antes de explorar el tema de la criptografía, necesitamos desarrollar
algunas herramientas importantes. En las siguientes cuatro secciones comenzamos este
desarrollo describiendo y demostrando resultados fundamentales en estas áreas. Si ya estudió
teoría de números en otro curso, bastará con una breve revisión de este material. Pero si este
material es nuevo para usted, entonces es vital estudiarlo detenidamente y resolver los
ejercicios que se proporcionan al final del capítulo.

En el nivel más básico, la teoría de números es el estudio de los números naturales 1, 2, 3, 4, 5,


6, ..., o un poco más general, el estudio de los enteros ..., −5, −4 , −3, −2, −1, 0, 1, 2, 3, 4, 5, ...

El conjunto de enteros se denota con el símbolo Z. Los enteros se pueden sumar, restar y
multiplicar de la manera habitual, y satisfacen todas las reglas habituales de aritmética (ley
conmutativa, ley asociativa, ley distributiva, etc.). El conjunto de enteros con sus reglas de
suma y multiplicación son un ejemplo de un anillo. Ver sección 2.10.1 para más información
sobre la teoría de los anillos.

Si a y b son enteros, entonces podemos sumarlos, a + b, restarlos, a - b, y multiplicarlos, a · b.


En cada caso, obtenemos un número entero como resultado. Esta propiedad de permanecer
dentro de nuestro conjunto original después de aplicar operaciones a un par de elementos es
característica de un anillo.

Pero si queremos permanecer dentro de los enteros, entonces no siempre podemos

dividir un número entero por otro. Por ejemplo, no podemos dividir 3 entre 2, ya que no hay
un número entero que sea igual a 3/2. Esto lleva al concepto fundamental de divisibilidad.

Definición.​ Deje a y b ser enteros con b = 0. Decimos que b divide a, o que a es divisible por b,
si hay un entero c tal que

a = bc.

Escribimos b | a para indicar que b divide a. Si b no divide a, entonces nosotros

escribe b| a.

Ejemplo 1.2. Tenemos 847 | 485331, ya que 485331 = 847 · 573. Por otro lado, 355 259943, ya
que cuando tratamos de dividir 259943 por 355, obtenemos un resto de 83. Más
precisamente, 259943 = 355 · 732 + 83, entonces 259943 no es un múltiplo exacto de 355.

Observación 1.3. Observe que cada entero es divisible por 1. Los enteros que son divisibles por
2 son los enteros pares, y los enteros que no son divisibles por 2 son los enteros impares.

Existen varias propiedades de divisibilidad elemental, algunas de las cuales enumeramos en la


siguiente proposición.

Proposición 1.4. Deje a, b, c ​∈​ Z ser enteros.

(a) Si a | byb | c, entonces a | C.


(b) Si a | byb | a, entonces a = ± b.

(c) Si a | by a | c, entonces a | (b + c) y a | (b - c).

Prueba. Dejamos la prueba como ejercicio para el lector; ver ejercicio 1.6

Definición​. Un divisor común de dos enteros a y b es un entero positivo d que los divide a
ambos. El mayor divisor común de a y b es, como su nombre lo indica, el mayor entero positivo
d tal que d|a y d|b si. El máximo común divisor de a y b se denota Mcd (a, b). Si no hay
posibilidad de confusión, a veces también se denota por (a, b). (Si a y b son ambos 0, entonces
gcd (a, b) no está definido).

Es un hecho curioso que un concepto tan simple como el máximo divisor(​gcd)​ común tiene
muchas aplicaciones. Pronto veremos que existe un método rápido y eficiente para calcular el
máximo divisor común de dos enteros, un hecho que tiene consecuencias poderosas y de largo
alcance.

Ejemplo 1.5. El máximo común divisor de 12 y 18 es 6, ya que 6 | 12 y 6 | 18 y no hay un


número mayor con esta propiedad. Del mismo modo, mcd (748, 2024) = 44.

Una forma de verificar que esto es correcto es hacer listas de todos los divisores positivos de
748 y de 2024.

Divisores de 748 = {1, 2, 4, 11, 17, 22, 34, 44, 68, 187, 374, 748},

Divisores de 2024 = {1, 2, 4, 8, 11, 22, 23, 44, 46, 88, 92, 184, 253,506, 1012, 2024}.

Al examinar las dos listas, vemos que la entrada común más grande es 44. Incluso a partir de
este pequeño ejemplo, está claro que este no es un método muy eficiente. Si alguna vez
necesitamos calcular los mayores divisores comunes de grandes números, tendremos que
encontrar un enfoque más eficiente.

La clave para un algoritmo eficiente para calcular los mayores divisores comunes es la división
con el resto, que es simplemente el método de "división larga" que aprendió en la escuela
primaria. Por lo tanto, si ayb son enteros positivos y si intentas dividir a por b, obtendrás un
cociente q y un resto r, donde el resto r es menor que b. Por ejemplo,

entonces 230 dividido entre 17 da un cociente de 13 con un resto de 9. ¿Qué significa


realmente esta última declaración? Significa que 230 se puede escribir como

230 = 17 · 13 + 9,

donde el resto 9 es estrictamente más pequeño que el divisor 17.

Definición.​ (División con resto) Deje a y b ser enteros positivos.Luego decimos que a dividido
por b tiene cociente q y resto r si

a = b · q + r con 0 ≤ r <b.
Los valores de q y r están determinados únicamente por a y b; ver ejercicio 1.14. Supongamos
ahora que queremos encontrar el máximo común divisor de a y b.

Primero dividimos a por b para obtener

a = b · q + r con 0 ≤ r <b………………………………………… (1.1)

Si d es cualquier divisor común de a y b, entonces está claro a partir de la ecuación. (1.1) que d
es también un divisor de r. (Ver Proposición 1.4 (c).) De manera similar, si e es un divisor
común de byr, entonces (1.1) muestra que e es un divisor de a. En otras palabras, los divisores
comunes de a y b son los mismos que los divisores comunes de byr; por lo tanto

mcd (a, b) = mcd (b, r).

Repetimos el proceso, dividiendo b por r para obtener otro cociente y resto, digamos

b = r · q + r con 0 ≤ r <r.

Entonces, el mismo razonamiento muestra que mcd (b, r) = mcd (r, r).

Continuando con este proceso, los restos se vuelven cada vez más pequeños, hasta que
finalmente obtenemos un resto de 0, en cuyo punto el valor final mcd (s, 0) = s es igual al mcd
de ay b.

Ilustramos con un ejemplo y luego describimos el método general, que se conoce con el
nombre de algoritmo euclidiano.

Ejemplo 1.6. Calculamos gcd (2024, 748) usando el algoritmo euclidiano, que no es más que
una división repetida con el resto. Observe cómo los valores de b y r en cada línea se
convierten en los nuevos valores de a y b en la línea siguiente:

Teorema 1.7 (El algoritmo euclidiano). Deje a y b ser enteros positivos con a ≥ b. El siguiente
algoritmo calcula gcd (a, b) en un número finito de pasos.

(1) Sea r​0​ = a y r​1​ = b.

(2) Conjunto i = 1.

(3) Divida r​i − 1 entre


​ ri para obtener un cociente q​i​ y el resto r​i + 1​,

r​i − 1 ​= ri · qi + ri + 1 con 0 ≤ r​i + 1 ​<ri.

(4) Si el resto ri + 1 = 0, entonces ri = mcd (a, b) y el algoritmo termina.

(5) De lo contrario, ri + 1> 0, establezca i = i + 1 y vaya al paso 3.

El paso de división (paso 3) se ejecuta como máximo


2 log2 (b) +2 veces.

Prueba. El algoritmo euclidiano consiste en una secuencia de divisiones con resto como se
ilustra en la figura 1.2 (recuerde que establecemos r0 = a y r1 = b).

Los valores de ri están disminuyendo estrictamente, y tan pronto como llegan a cero, el
algoritmo termina, lo que demuestra que el algoritmo termina en un finito numero de pasos.
Además, en cada iteración del Paso 3 tenemos una ecuación de la forma

ri − 1 = ri · qi + ri + 1.

Esta ecuación implica que cualquier divisor común de ri − 1 y ri también es un divisor de ri + 1,


y de manera similar implica que cualquier divisor común de ri y ri + 1 también es un divisor de
ri − 1.

Por lo tanto, mcd (ri − 1, ri) = mcd (ri, ri + 1) para todo i = 1, 2, 3, .... (1.2)

Sin embargo, como se señaló anteriormente, eventualmente llegamos a un ri que es cero,


digamos rt + 1 = 0.Entonces rt − 1 = rt · qt, entonces

mcd (rt − 1, rt) = mcd (rt · qt, rt) = rt.

Pero la ecuación (1.2) dice que esto es igual a mcd (r0, r1), es decir, a mcd (a, b), que completa
la prueba de que el último resto distinto de cero en el algoritmo euclidiano es igual al máximo
divisor común de a y b .

Queda por estimar la eficiencia del algoritmo. Notamos arriba que dado que los valores de ri
están disminuyendo estrictamente, el algoritmo termina y, de hecho, dado que r1 = b,
ciertamente termina en la mayoría de los pasos b. Sin embargo, este límite superior está lejos
de la verdad. Afirmamos que después de cada dos iteraciones del Paso 3, el valor de ri se
reduce al menos a la mitad. En otras palabras:

Reclamación: ri + 2 <1/2 ri para todo i = 0, 1, 2, ....

Probamos el reclamo considerando dos casos.

Caso I: ri + 1 ≤ 1/2ri

Sabemos que los valores de ri están disminuyendo estrictamente, por lo que ri + 2 <ri + 1 ≤
1/2ri.
Caso II: ri + 1> ½ ri

Considere lo que sucede cuando dividimos ri por r​i + 1​. El valor de ri + 1 es

tan grande que obtenemos

ri = r​i + 1 ·​ 1 + r​i + 2 con


​ ri + 2 = ri - r​i + 1 <r​
​ i​ – 1/2ri = 1/2ri.

Ahora hemos demostrado nuestra afirmación de que ri + 2 <1/2 ri para todo i. Usando esta
desigualdad repetidamente, encontramos que

r​2k + 1 ​<1/2 r​2k − 1 ​<1/4 r​2k − 3 ​<1/8 r​2k − 5 ​<1/6 r​2k − 7 ​<··· <(1/(2​ ^​ k))*r1 = (1/(2​ ^​ k))* b.

Por lo tanto, si 2​ ^​ k ≥ b, entonces r​2k + 1 <1,


​ lo que obliga a r​2k + 1 a​ ser igual a 0 y al algoritmo a
terminar. En términos de la figura 1.2, el valor de r ​t + 1​ es 0, por lo que tenemos t + 1 ≤ 2k + 1, y
por lo tanto t ≤ 2k. Además, hay exactamente divisiones t realizadas en la figura 1.2, por lo que
el algoritmo euclidiano termina en un máximo de 2k iteraciones. Elija el más pequeño como k,
entonces 2​k​ ≥ b> 2​k − 1​. Entonces # de iteraciones ≤ 2k = 2 (k - 1) + 2 <2 log2 (b) +2,

que completa la prueba del teorema 1.7.

Observación 1.8. Demostramos que el algoritmo euclidiano aplicado a ayb con estimación
puede ser algo mejorado. Se ha demostrado que el algoritmo euclidiano no requiere más de
1.45 log2 (b) +1.68 iteraciones, y que el número promedio de iteraciones para a y b elegidas al
azar es aproximadamente 0,85 log2 (b) +0,14; ver [66].

Observación 1.9. Una forma de calcular cocientes y residuos es por mucho tiempo división,
como hicimos en la página 12. Puede acelerar el proceso usando una calculadora simple. El
primer paso es dividir a por b en tu calculadora, lo que dará un número real. Tire la parte
después del punto decimal para obtener el cociente q. Entonces el resto r se puede calcular
como

r = a - b · q.

Por ejemplo, supongamos que a = 2387187 yb = 27573. Entonces a / b ≈ 86.57697748,


entonces q = 86 y

r = a - b · q = 2387187 - 27573 · 86 = 15909.

Si solo necesita el resto, puede tomar la parte decimal (a veces también llamada parte
fraccional) de a / b y multiplicarla por b. Continuando con nuestro ejemplo, la parte decimal de
a / b ≈ 86.57697748 es 0.57697748, y multiplicar por b = 27573 da

27573 · 0.57697748 = 15909.00005604.

Redondeando esto da r = 15909.

Después de realizar el algoritmo euclidiano en dos números, podemos retroceder el proceso


para obtener una fórmula extremadamente interesante. Antes de dar el resultado general,
ilustramos con un ejemplo.

Ejemplo 1.10. Recuerde que en el ejemplo 1.6 usamos el algoritmo euclidiano para calcular el
mcd (2024, 748) de la siguiente manera:
Dejamos a = 2024 yb = 748, entonces la primera línea dice que

528 = a - 2b.

Sustituimos esto en la segunda línea para obtener

b = (a - 2b) · 1 + 220, entonces 220 = −a + 3b.

A continuación, sustituimos las expresiones 528 = a - 2b y 220 = −a + 3b en la tercera línea para


obtener

a - 2b = (−a + 3b) · 2 + 88, entonces 88 = 3a - 8b.

Finalmente, sustituimos las expresiones 220 = −a + 3b y 88 = 3a - 8b en la penúltima línea para


obtener

−a + 3b = (3a - 8b) · 2 + 44, entonces 44 = −7a + 19b.

En otras palabras,

−7 · 2024 + 19 · 748 = 44 = mcd (2024, 748),

así que hemos encontrado una manera de escribir gcd (a, b) como una combinación lineal de a
y b usando coeficientes enteros.

En general, siempre es posible escribir gcd (a, b) como una combinación lineal entera de a y b,
un resultado de sonido simple con muchas consecuencias importantes.

Teorema 1.11 (Algoritmo euclidiano extendido). Deje a y b ser positivo enteros Entonces la
ecuación

au + bv = mcd (a, b)

siempre tiene una solución en los enteros u y v. (Consulte el ejercicio 1.12 para obtener un
algoritmo eficiente para encontrar una solución).

Si (u0, v0) es una solución única, entonces cada solución tiene la forma

Prueba. Mire hacia atrás en la figura 1.2, que ilustra el algoritmo euclidiano paso a paso.
Podemos resolver la primera línea para r2 = a - b · q1 y sustituirla en la segunda línea para
obtener

b = (a - b · q1) · q2 + r3, entonces r3 = −a · q2 + b · (1 + q1q2).

Luego sustituya las expresiones por r2 y r3 en la tercera línea para obtener


a - b · q1 =(−a · q2 + b · (1 + q1q2))q3 + r4.

Después de reorganizar los términos, esto da

r4 = a · (1 + q2q3) - b · (q1 + q3 + q1q2q3).

El punto clave es que r4 = a · u + b · v, donde u y v son enteros. No importa que las expresiones
para u y v en términos de q1, q2, q3 sean bastante desordenadas. Continuando de esta
manera, en cada etapa encontramos que ri es la suma de un múltiplo entero de a y un múltiplo
entero de b. Finalmente, llegamos a rt = a · u + b · v para algunos enteros u y v. Pero rt = gcd (a,
b), que completa la prueba de la primera parte del teorema. Dejamos la segunda parte como
ejercicio (Ejercicio 1.11).

Un caso especialmente importante del algoritmo euclidiano extendido surge cuando el


máximo común divisor de a y b es 1. En este caso le damos un nombre especial a ay b.

Definición​. Deje a y b ser enteros. Decimos que ayb son primos si gcd (a, b) = 1.

Más generalmente, cualquier ecuación

Au + Bv = mcd (A, B)

puede reducirse al caso de números primos relativamente dividiendo ambos lados mcd (A, B).
Así

donde a = A / mcd (A, B) yb = B / mcd (A, B) son relativamente primos y satisfacen au + bv = 1.


Por ejemplo, descubrimos anteriormente que 2024 y 748 tienen el mayor divisor común 44 y
satisfacen

−7 · 2024 + 19 · 748 = 44.

Dividiendo ambos lados por 44, obtenemos

−7 · 46 + 19 · 17 = 1.

Por lo tanto, 2024/44 = 46 y 748/44 = 17 son relativamente primos, y u = −7 y v = 19 son los


coeficientes de una combinación lineal de 46 y 17 que equivale a 1.

En el ejemplo 1.10 explicamos cómo sustituir los valores de Algoritmo euclidiano para resolver
au + bv = gcd (a, b). Ejercicio 1.12 describe un algoritmo eficiente orientado a la computadora
para calcular u y v. Si ayb son primos, ahora describimos una versión más conceptual de este
procedimiento de sustitución. Primero ilustramos con el ejemplo a = 73 y b = 25. El algoritmo
euclidiano da

73 = 25 · 2 + 23

25 = 23 · 1+ 2

23 = 2 · 11 + 1

2= 1 · 2+ 0
1.3 Aritmética modular
Es posible que haya encontrado "aritmética de reloj" en la escuela primaria, donde después de
llegar a 12, el siguiente número es 1. Esto lleva a ecuaciones de aspecto extraño como

6 + 9 = 3 y 2 - 3 = 11.

Parecen extraños, pero son ciertos usando la aritmética del reloj, ya que, por ejemplo, las 11
en punto son 3 h antes de las 2 en punto. Entonces, lo que realmente estamos haciendo es
calcular 2 - 3 = −1 y luego agregar 12 a la respuesta. Del mismo modo, 9 h después de las 6 en
punto son las 3 en punto, ya que 6 + 9 - 12 = 3.

La teoría de las congruencias es un método poderoso en la teoría de números que se basa en


la simple idea de la aritmética del reloj.

Definición. Sea m ≥ 1 un número entero. Decimos que los enteros ayb son congruentes módulo
m si su diferencia a - b es divisible por m. Nosotros escribimos

a ≡ b (mod m)

para indicar que ayb son congruentes módulo m. El número m se llama módulo.

Nuestros ejemplos de reloj pueden escribirse como congruencias usando el módulo m = 12:
6 + 9 = 15 ≡ 3 (mod 12) y 2 - 3 = −1 ≡ 11 (mod 12).

Ejemplo 1.12. Tenemos

17 ≡ 7 (mod 5), ya que 5 divide 10 = 17 - 7.

Por otra parte,

19 ​≠​ ​6 (mod 11), ya que 11 no divide 13 = 19 - 6.

Note que los números satisfacen

a ≡ 0 (mod m)

son los números que son divisibles por m, es decir, los múltiplos de m.

La razón por la que la notación de congruencia es tan útil es que las congruencias se
comportan de manera muy similar a las igualdades, como lo indica la siguiente proposición.

Proposición 1.13. Sea m ≥ 1 un número entero.

(a) Si a1 ≡ a2 (mod m) y b1 ≡ b2 (mod m), entonces

a1 ± b1 ≡ a2 ± b2 (mod m) y a1 · b1 ≡ a2 · b2 (mod m).

(b) Sea a un número entero. Luego

a · b ≡ 1 (mod m) para algún número entero b si y solo si mcd (a, m) = 1.

Además, si a · b1 ≡ a · b2 ≡ 1 (mod m), entonces b1 ≡ b2 (mod m). Llamamos b

el inverso (multiplicativo) de un módulo m.

Prueba. (a) Dejamos esto como un ejercicio; ver ejercicio 1.15.

(b) Supongamos primero que mcd (a, m) = 1. Luego, el teorema 1.11 nos dice que podemos
encontrar enteros u y v que satisfagan au + mv = 1. Esto significa que au - 1 = −mv es divisible
por m, entonces por definición, au ≡ 1 (mod m). En otras palabras, podemos tomar b = u.

Para la otra dirección, suponga que a tiene un módulo inverso m, digamos a · b ≡ 1 (mod m).
Esto significa que ab - 1 = cm para algún número entero c. Se deduce que gcd (a, m) divide
ab - cm = 1, entonces gcd (a, m) = 1. Esto completa la prueba de que a tiene un módulo inverso
m si y solo si gcd (a, m) = 1. Queda por demostrar que el inverso es único módulo m.

Supongamos que a · b1 ≡ a · b2 ≡ 1 (mod m). Luego

b1 ≡ b1 · 1 ≡ β1 · (a · b2) ≡ (b1 · a) · b2 ≡ 1 · b2 ≡ b2 (mod m),

que completa la prueba de la Proposición 1.13.

La Proposición 1.13 (b) dice que si gcd (a, m) = 1, entonces existe un

inverso b de un módulo m. Esto tiene la curiosa consecuencia de que la fracción a −​ 1​ = 1 / a


tiene una interpretación significativa en el mundo de los enteros módulo m, a saber, a −​ 1
módulo m es el número único b módulo m que satisface la congruencia ab ≡ 1 (mod m) .
Ejemplo 1.14. Tomamos m = 5 y a = 2. Claramente mcd (2, 5) = 1, entonces existe un inverso a
2 módulo 5. El inverso de 2 módulo 5 es 3, ya que 2 · 3 ≡ 1 (mod 5), entonces 2​−1​ ≡ 3 (mod 5).
De manera similar, mcd (4, 15) = 1, entonces 4​−1​ existe el módulo 15. De hecho, 4 · 4 ≡ 1 (mod
15), entonces 4 es su propio módulo inverso 15.

Incluso podemos trabajar con fracciones a / d módulo m siempre que el denominador sea
relativamente primo para m. Por ejemplo, podemos calcular 5/7 módulo 11 observando
primero que 7 · 8 ≡ 1 (mod 11), entonces 7​−1​ ≡ 8 (mod 11). Entonces 5

7 = 5 · 7​−1​ ≡ 5 · 8 ≡ 40 ≡ 7 (mod 11).

Observación 1.15. En los ejemplos anteriores fue fácil encontrar inversos módulo m por ensayo
y error. Sin embargo, cuando m es grande, es más difícil calcular un a −​ 1​ módulo m. Tenga en
cuenta que demostramos que existen inversas utilizando el algoritmo euclidiano extendido
(Teorema 1.11). Para calcular realmente los u y v que aparecen en la ecuación au + mv = gcd (a,
m), podemos aplicar el algoritmo euclidiano directamente como lo hicimos en el ejemplo 1.10,
o podemos usar el método de caja algo más eficiente descrito al final de la sección anterior, o
podemos usar el algoritmo dado en el ejercicio 1.12.En cualquier caso, dado que el algoritmo
euclidiano toma como máximo 2 iteraciones log2 (b) + 2 para calcular gcd (a, b), solo se
necesita un pequeño múltiplo de pasos log2 (m) para calcular un módulo a​− 1​ m.

Ahora continuamos nuestro desarrollo de la teoría de la aritmética modular.

Si una división entre m tiene cociente q y resto r, se puede escribir como

a = m · q + r con 0 ≤ r <m.

Esto muestra que a ≡ r (mod m) para algún entero r entre 0 y m - 1, por lo que si queremos
trabajar con enteros módulo m, es suficiente usar los enteros 0 ≤ r <m. Esto solicita la siguiente
definición.

Definición. Nosotros escribimos

Z / mZ = {0, 1, 2, ..., m - 1}

y llame a Z / mZ el anillo de enteros módulo m. Agregamos y multiplicamos elementos de Z /


mZ agregándolos o multiplicándolos como enteros y luego dividiendo el resultado entre m y
tomando el resto para obtener un elemento en Z / mZ.

La Figura 1.4 ilustra el anillo Z / 5Z dando tablas de suma y multiplicación completas módulo 5.

Observación 1.16. Si ha estudiado la teoría de los anillos, reconocerá que Z / mZ es el anillo


cociente de Z por el ideal principal mZ, y que los números 0, 1, ..., m - 1 son en realidad
representantes de los grupos para las clases de congruencia que comprenden los elementos de
Z / mZ. Para una discusión sobre las clases de congruencia y los anillos de cocientes generales,
vea la sección. 2.10.2.

Definición. La Proposición 1.13 (b) nos dice que a tiene un módulo inverso m si y solo si gcd (a,
m) = 1. Los números que tienen inversas se llaman unidades. Denotamos el conjunto de todas
las unidades por

(Z / mZ) ​∗​ = {a ​∈​ Z / mZ: mcd (a, m) = 1}

= {a ​∈​ Z / mZ: a tiene un módulo inverso m}.


El conjunto (Z / mZ) ​∗​ se llama el grupo de unidades módulo m.

Observe que si a1 y a2 son unidades módulo m, entonces también lo es a1a2. (¿Ves por qué
esto es cierto?) Entonces, cuando multiplicamos dos unidades, siempre obtenemos una
unidad. Por otro lado, si agregamos dos unidades, a menudo no obtenemos una unidad.

Ejemplo 1.17. El grupo de unidades módulo 24 es

(Z / 24Z) ​∗​ = {1, 5, 7, 11, 13, 17, 19, 23}.

Del mismo modo, el grupo de unidades módulo 7 es

(Z / 7Z) ​∗​ = {1, 2, 3, 4, 5, 6},

dado que cada número entre 1 y 6 es relativamente primo para 7. Las tablas de multiplicación
para (Z / 24Z) ​∗​ y (Z / 7Z) ​∗​ se ilustran en la Fig. 1.5. En muchos de los criptosistemas que
estudiaremos, es importante para saber cuántos elementos hay en el grupo de unidades
módulo m. Esta cantidad es lo suficientemente ubicua como para darle un nombre.

Definición. La función phi de Euler (también conocida a veces como función totient de Euler) es
la función φ (m) definida por la regla

φ (m) = # (Z / mZ) ​∗​ = # {0 ≤ a <m: mcd (a, m) = 1}.

Por ejemplo, vemos en el ejemplo 1.17 que φ (24) = 8 y φ (7) = 6.

1.3.1 Aritmética modular y cifrados por desplazamiento


Recordemos que el cifrado César (o cambio) estudió en la Secta. 1.1 funciona cambiando cada
letra del alfabeto un número fijo de letras. Podemos describir matemáticamente un cifrado de
turno asignando un número a cada letra como en la Tabla 1.7.

Tabla 1.7: Asignación de números a letras

Luego, un cifrado de desplazamiento con desplazamiento k toma una letra de texto sin
formato correspondiente al número p y la asigna a la letra de texto cifrado correspondiente al
número p + k mod 26. Observe cómo el uso de la aritmética modular, en este caso módulo 26,
simplifica la descripción del cifrado de turno. La cantidad de turno sirve como clave de cifrado
y clave de descifrado. El cifrado viene dado por la fórmula.

(Letra de texto cifrado) ≡ (Letra de texto sin formato) + (Clave secreta) (mod 26),

y el descifrado funciona cambiando en la dirección opuesta, (Letra de texto sin formato) Letter
(Letra de texto cifrado) - (Clave secreta) (mod 26).

Más sucintamente, si dejamos

p = letra de texto sin formato, c = letra de texto cifrado, k = clave secreta,

luego

c ≡ p + k (mod 26) Cifrado y p ≡ c - k (mod 26) Descifrado

1.3.2 El algoritmo de alimentación rápida


En algunos criptosistemas que estudiaremos, por ejemplo, los criptosistemas RSA y
Diffie-Hellman, se requiere que Alice y Bob calculen grandes potencias de un número g módulo
otro número N, donde N puede tener cientos de dígitos. La forma ingenua de calcular g​A​ es
mediante la multiplicación repetida por g. Así

g1 ≡ g (mod N), g2 ≡ g · g1 (mod N), g3 ≡ g · g2 (mod N),

g4 ≡ g · g3 (mod N), g5 ≡ g · g4 (mod N) ,. ...

Está claro que g​A​ ≡ g​A​ (mod N), pero si A es grande, este algoritmo es completamente poco
práctico. Por ejemplo, si A ≈ 2​1000​, ¡el algoritmo ingenuo tomaría más tiempo que la edad
estimada del universo! Claramente, si ha de ser útil, necesitamos encontrar una mejor manera
de calcular g​A​ (mod N).
La idea es usar la expansión binaria del exponente A para convertir.El cálculo de g​A​ en una
sucesión de cuadrados y multiplicaciones. Un ejemplo aclarará la idea, después de lo cual
daremos una descripción formal del método.

Ejemplo 1.18. Supongamos que queremos calcular 3​218​ (mod 1000). El primer paso es escribir
218 como una suma de potencias de 2,

218 = 2 + 2​3​ + 2​4​ + 2​6​ + 2​7​.

Entonces 3​218​ se convierte

ya que cada número en la secuencia es el cuadrado del anterior. Además, dado que solo
necesitamos estos valores del módulo 1000, nunca necesitamos almacenar más de tres dígitos.
.​
La tabla 1.8 enumera las potencias de 3 módulos 1000 hasta ​ Crear la Tabla 1.8 requiere

solo 7 multiplicaciones, a pesar de que el número = 3​128​ tiene un exponente bastante


grande, porque cada entrada sucesiva en la tabla es igual al cuadrado de la entrada anterior.
Paso 3. Calcule g​A​ (mod N) usando la fórmula

Tenga en cuenta que las cantidades a0, a1, ..., ar se calcularon en el Paso 2. Por lo tanto, el
producto (1.4) se puede calcular buscando los valores de ai cuyo exponente A​i​ es 1 y luego
multiplicándolos. Esto requiere como máximo otras r multiplicaciones.

Tiempo de ejecución. Se necesita como máximo 2r multiplicaciones módulo N para calcular g​A​.
Como A ≥ 2r, vemos que se necesitan como máximo 2 log2 (A) multiplicaciones9 módulo N
para calcular g​A​. Por lo tanto, incluso si A es muy grande, digamos A ≈ 21000, es fácil para una
computadora hacer aproximadamente 2000 multiplicaciones necesarias para calcular 2​A
módulo N.

Problemas de eficiencia. Hay varias formas en que el algoritmo de cuadrado y multiplicación


puede hacerse algo más eficiente, en particular con respecto a la eliminación de los requisitos
de almacenamiento; vea el ejercicio 1.25 para un ejemplo.

1.4 Números primos, factorización única y campos finitos


En la secta. 1.3 estudiamos aritmética modular y vimos que tiene sentido sumar, restar y
multiplicar enteros módulo m. Sin embargo, la división puede ser problemática, ya que
podemos dividir por a en Z / mZ solo si gcd (a, m) = 1. Pero observe que si el entero m es
primo, entonces podemos dividir por cada elemento distinto de cero de Z / mZ. Comenzamos
con una breve discusión de los números primos antes de regresar al anillo Z / pZ con p primo.

Definición. Un entero p se llama primo si p ≥ 2 y si los únicos enteros positivos que dividen p
son 1 y p.

Por ejemplo, los primeros diez primos son 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, mientras que el
centésimo milésimo es 1299709 y el millonésimo es 15485863. Hay infinitos primos, un hecho
que era conocido en la antigua Grecia y aparece como un teorema en los Elementos de
Euclides. (Ver ejercicio 1.28.)

Un primer p se define en términos de los números que dividen p. Entonces, la siguiente


proposición, que describe una propiedad útil de los números que son divisibles por p, no es
obvia y necesita ser probada cuidadosamente. Observe que la proposición es falsa para los
números compuestos. Por ejemplo, 6 divide 3 · 10, pero 6 no divide ni 3 ni 10.

Proposición 1.19. Sea p un número primo y suponga que p divide el producto ab de dos
enteros a y b. Entonces p divide al menos uno de a y b.

Más generalmente, si p divide un producto de enteros, digamos

p | a​1​a2a3a4a​5​ ··· a​n​,

entonces p divide al menos uno de los a​i​ individuales.


Prueba. Deje g = mcd (a, p). Entonces g|p, entonces g = 1 o g = p. Si g = p, entonces p|a (desde
g | a), así que hemos terminado. De lo contrario, g = 1 y el Teorema 1.11 nos dice que
podemos encontrar enteros u y v que satisfagan au + pv = 1. Multiplicamos ambos lados de la
ecuación por b para obtener

abu + pbv = b. (1.5)

Asumiendo, p divide el producto ab, y ciertamente p divide pbv, entonces p divide ambos
términos en el lado izquierdo de (1.5). Por lo tanto, divide el lado derecho, lo que muestra que
p divide b y completa la prueba de la Proposición 1.19.

Para probar la declaración más general, escribimos el producto como a1 (a2 ··· an) y aplicamos
la primera declaración con a = a1 y b = a2 ··· an. Si p|a1, hemos terminado. De lo contrario, p|
a2 ··· an, así que escribiendo esto como a2 (a3 ··· an), la primera declaración nos dice que p |
a2 o p| a3 ··· an. Continuando de esta manera, eventualmente debemos encontrar algún ai
que sea divisible por p.

Como aplicación de la Proposición 1.19, demostramos que cada entero positivo tiene una
factorización esencialmente única como producto de números primos.

Teorema 1.20 (El teorema fundamental de la aritmética). Deje que a ≥ 2 sea un número
entero. Entonces a puede factorizarse como un producto de números primos

Además, aparte de reorganizar el orden de los números primos, esta factorización en poderes
primarios es única.

Prueba. No es difícil demostrar que cada a ≥ 2 puede factorizarse en un producto de primos. Es


tentador suponer que la singularidad de la factorización también es obvia. Sin embargo, éste
no es el caso; La factorización única es una propiedad algo sutil de los enteros. Lo
demostraremos utilizando la forma general de

Proposición 1.19. (Para ver un ejemplo de una situación en la que la factorización única no es
verdadera, consulte la zona E descrita en [137, Capítulo 7]).

Supongamos que a tiene dos factorizaciones en productos de primos,

a = p1p2 ··· ps = q1q2 ··· qt, (1.6)

donde pi y qj son todos primos, no necesariamente distintos, y s no necesariamente es igual a


t. Desde p1 | a, vemos que p1 divide el producto q1q2q3 ··· qt.

Así, por la forma general de la Proposición 1.19, encontramos que p1 divide uno del qi
Reorganizando el orden del qi si es necesario, podemos suponer que p1 | q1. Pero p1 y q1 son
primos, por lo que debemos tener p1 = q1. Esto nos permite cancelarlos desde ambos lados de
(1.6), lo que produce

p2p3 ··· ps = q2q3 ··· qt.

Repitiendo este proceso s veces, finalmente llegamos a una ecuación de la forma


1 = qt − sqt − s + 1 ··· qt.

Se deduce inmediatamente que t = s y que las factorizaciones originales de a eran idénticas


hasta reorganizar el orden de los factores. (Para obtener una prueba más detallada del
teorema fundamental de la aritmética, consulte cualquier libro de texto básico de teoría de
números, por ejemplo [35, 52, 59, 100, 111, 137]).

Definición. El teorema fundamental de la aritmética (Teorema 1.20) dice que en la


factorización de un entero positivo a en primos, cada primo p aparece a una potencia
particular. Denotamos este poder por ordp (a) y lo llamamos el orden (o exponente) de p en a.
(Por conveniencia, establecemos ordp (1) = 0 para todos los primos).

Por ejemplo, la factorización de 1728 es 1728 = 2​6​ · 3​3​, entonces ord​2​ (1728) = 6, ord​3​ (1728) = 3
y ord​p​ (1728) = 0 para todos los primos p ≥5.

Usando la notación ord​p​, la factorización de a puede escribirse sucintamente como a

Tenga en cuenta que este producto tiene sentido, ya que ord​p​ (a) es cero para todos, pero
finitamente muchos primos. Es útil ver ordp como una función

ord​p​: {1, 2, 3, ...} - → {0, 1, 2, 3, ...}. (1.7)

Esta función tiene una serie de propiedades interesantes, algunas de las cuales se describen en
el ejercicio 1.31.

Ahora observamos que si p es un número primo, entonces cada módulo de número distinto de
cero​ p​ tiene un módulo inverso multiplicativo ​p​. Esto significa que cuando hacemos módulo
aritmético a primo p, no solo podemos sumar, restar, multiplicar, sino que también podemos
dividir por números distintos de cero, tal como podemos hacerlo con números reales. Esta
propiedad de los números primos es lo suficientemente importante como para que la
declaremos formalmente como una proposición.

Proposición 1.21​. Deja que p sea primo. Entonces, cada elemento distinto de cero a en Z / pZ
tiene un inverso multiplicativo, es decir, hay un número b que satisface ab ≡ 1 (mod p).

Denotamos este valor de b por a −​ 1​ mod p, o si p ya se ha especificado, entonces simplemente


por a −​ 1​.

Prueba. Esta proposición es un caso especial de la Proposición 1.13 (b) que usa el módulo
primo p, ya que si a ​∈​ Z / pZ no es cero, entonces mcd (a, p) = 1.

Observación 1.22. El algoritmo euclidiano extendido (Teorema 1.11) nos brinda un método
computacional eficiente para calcular a −​ 1​ mod p. Simplemente resolvemos la ecuación

au + pv = 1 en enteros u y v,

y luego u = a −​ 1​ mod p. Para un método alternativo de calcular a −​ 1​ mod p, vea el Comentario


1.26.
La Proposición 1.21 puede reformularse diciendo que si p es primo, entonces

(Z / pZ) ​∗​ = {1, 2, 3, 4, ..., p - 1}.

En otras palabras, cuando el elemento 0 se elimina de Z / pZ, los elementos restantes son
unidades y se cierran bajo multiplicación.

Definición. Si p es primo, entonces el conjunto Z / pZ de enteros módulo p con su

Las reglas de suma, resta, multiplicación y división son un ejemplo de un campo. Si ha


estudiado álgebra abstracta (o consulte la Sección 2.10), sabe que un campo es el nombre
general de un anillo (conmutativo) en el que cada elemento distinto de cero tiene un inverso
multiplicativo. Ya está familiarizado con algunos otros campos, por ejemplo, el campo de
números reales R, el campo de números racionales (fracciones) Q y el campo de números
complejos C.

El campo Z / pZ de los enteros módulo p solo tiene finitamente muchos elementos. Eso

es un campo finito y a menudo se denota por Fp. Por lo tanto, Fp y Z / pZ son realmente solo
dos notaciones diferentes para el mismo objeto.10 De manera similar, escribimos F ​∗​ p
indistintamente para el grupo de unidades (Z / pZ) ​∗.​ Los campos finitos son de importancia
fundamental en toda la criptografía y, de hecho, en todas las matemáticas. Observación 1.23.
Aunque Z / pZ y Fp se usan para denotar el mismo concepto, la igualdad de elementos se
expresa de manera algo diferente en las dos configuraciones. Para a, b ​∈​ Fp, la igualdad de a y
b se denota por a = b, mientras que para a, b ​∈​ Z / pZ, la igualdad de a y b se denota por el
módulo de equivalencia p, es decir, a ≡ b (mod pag).

1.5 Potencias y raíces primitivas en campos finitos


La aplicación de campos finitos en ​criptografía a menudo implica elevar elementos
de Fp a altas potencias. Como cuestión práctica, sabemos cómo hacer esto de manera eficiente
utilizando el algoritmo de alimentación descrito en la sección. 1.3.2. En esta sección
Si p | a, entonces está claro que cada potencia de a es divisible por p. Entonces solo tenemos
que considerar el caso de que p a. Ahora miramos la lista de números

a, 2a, 3a,. . . , (p - 1) un módulo reducido p . (1.8)

Hay números p - 1 en esta lista, y afirmamos que todos son diferentes. Para ver por qué, tome
dos de ellos, diga ja mod p y ka mod p, y suponga que son iguales. Esto significa que

ja ≡ ka (mod p), y de ahí que (j - k) a ≡ 0 (mod p).

Por lo tanto, p divide el producto (j - k) a. La Proposición 1.19 nos dice que p divide a j - k o p
divide a. Sin embargo, hemos asumido que p no divide a, por lo que concluimos que p divide j -
k. Pero tanto j como k están entre 1 y p - 1, por lo que su diferencia j - k está entre - (p - 2) y p -
2. Solo hay un número entre - (p - 2) y p - 2 que es divisible por p, ¡y ese número es cero! Esto
prueba que j - k = 0, lo que significa que ja = ka. De este modo, hemos demostrado que los
números p - 1 en la lista (1.8) son todos diferentes. También son distintos de cero, ya que 1, 2,
3, ..., p - 1 y a no son divisibles por p.

Para recapitular, hemos demostrado que la lista de números (1.8) consiste en p - 1 números
distintos entre 1 y p - 1. Pero solo hay p - 1 números distintos entre 1 y p - 1, por lo que la lista
de números ( 1.8) simplemente debe ser la lista de los números 1, 2, ..., p - 1 en un orden
confuso.

Ahora considere lo que sucede cuando multiplicamos todos los números a, 2a, 3a,. . . , (p − 1) a
en la lista (1.8) y reduzca el módulo del producto p. Esto es lo mismo que multiplicar todos los
números 1, 2, 3, ..., p - 1 módulo p, por lo que obtenemos una congruencia a · 2a · 3a ··· (p - 1)
a ≡ 1 · 2 · 3 ··· (p - 1) (mod p).

Hay p - 1 copias de una que aparece en el lado izquierdo. ¡Factorizamos esto y usamos la
notación factorial (p - 1)! = 1 · 2 ··· (p - 1) para obtener

a​p − 1 ​· (p - 1)! ≡ (p - 1)! (mod p).

¡Finalmente, podemos cancelar (p - 1)! desde ambos lados, ya que no es divisible por p.
(Estamos utilizando el hecho de que Fp es un campo, por lo que se nos permite dividir por
cualquier número distinto de cero). Esto produce

a​p − 1 ​≡ 1 (mod p), que completa la prueba del "pequeño" teorema de Fermat.11

Ejemplo 1.25. El número p = 15485863 es primo, por lo que el pequeño teorema de Fermat
(Teorema 1.24) nos dice que

2​15485862​ ≡ 1 (mod 15485863).

Por lo tanto, sin hacer ningún cálculo, sabemos que el número 2​15485862​ - 1, un número que
tiene más de dos millones de dígitos, es un múltiplo de 15485863. Observación 1.26. El
pequeño teorema de Fermat (Teorema 1.24) y el algoritmo de potencia rápida (Sección 1.3.2)
nos proporcionan un método razonablemente eficiente para calcular inversos módulo p, a
saber,

a​− 1​ ≡ a​p − 2 ​(mod p).

Esta congruencia es verdadera porque si multiplicamos a​p − 2 ​por a, entonces el teorema de


Fermat nos dice que el producto es igual a 1 módulo p. Esto ofrece una alternativa al método
de algoritmo euclidiano extendido descrito en el Comentario 1.22. En la práctica, los dos
algoritmos tienden a tomar aproximadamente la misma cantidad de tiempo, aunque hay
variantes del algoritmo euclidiano que son algo más rápidos en la práctica; ver por ejemplo
[66, Capítulo 4.5.3, Teorema E].

Ejemplo 1.27. Calculamos el inverso del módulo 7814 17449 de dos maneras. Primero,

7814​−1​ ≡ 7814​17447​ ≡ 1284 (mod 17449).

En segundo lugar, utilizamos el algoritmo euclidiano extendido para resolver

7814u + 17449v = 1.

La solución es (u, v) = (1284, −575), entonces 7814​−1​ ≡ 1284 (mod 17449).

Ejemplo 1.28. Considere el número m = 15485207. Usando el algoritmo de alimentación, no es


difícil de calcular (en una computadora)

2​m − 1 ​= 2​1548520​6 ≡ 4136685 (mod 15485207).

No obtuvimos el valor 1, por lo que parece que el pequeño teorema de Fermat no es cierto
para m. Que nos dice eso? Si m fuera primo, entonces el pequeño teorema de Fermat dice que
habríamos obtenido 1. Por lo tanto, el hecho de que no obtuvimos 1 prueba que el número m
= 15485207 no es primo.

Piense en esto por un minuto, porque en realidad es un poco sorprendente. Mediante un


simple cálculo, hemos demostrado de manera concluyente que m no es primo, ¡pero no
conocemos ninguno de sus factores!

El pequeño teorema de Fermat nos dice que si a es un número entero no divisible por p,

entonces a​p − 1 ​≡ 1 (mod p). Sin embargo, para cualquier valor particular de a, puede haber
potencias más pequeñas de a que sean congruentes con 1. Definimos el orden de un módulo p
como el exponente más pequeño k ≥ 1 tal que.

a​k​ ≡ 1 (mod p).

Proposición 1.29. Sea p un primo y sea un entero no divisible por p. Supongamos que a​n​ ≡ 1
(mod p). Entonces el orden de un módulo p divide n.En particular, el orden de a divide p - 1.
Prueba. Sea k el orden de un módulo p, por lo que, por definición, a​k​ =1 (mod p), y k es el
exponente positivo más pequeño con esta propiedad. Se nos da que a​n​ ≡ 1 (mod p). Dividimos
n por k para obtener

n = kq + r con 0 ≤ r <k.

Luego

Pero r <k, entonces el hecho de que k es la potencia positiva más pequeña de un

congruente con 1 nos dice que r debe ser igual a 0. Por lo tanto, n = kq, entonces k divide a n.

Finalmente, el pequeño teorema de Fermat nos dice que a​p − 1 ​≡ 1 (mod p), por lo que k divide
p - 1.
El pequeño teorema de Fermat describe una propiedad especial de las unidades (es decir, los
elementos distintos de cero) en un campo finito. Concluimos esta sección con una breve
discusión de otra propiedad que es bastante importante tanto teórica como prácticamente.

Teorema 1.30​ (Teorema de la raíz primitiva). Sea p un número primo. Entonces existe un
elemento g ​∈​ F ∗​​ ​p​ cuyas potencias dan a cada elemento de F ​∗​ p, es decir

, F ​∗​ p = {1, g, g2, g3, ..., gp − 2}.

Los elementos con esta propiedad se llaman raíces primitivas de Fp o generadores

de F ​∗​ p. Son los elementos de F ​∗​p que tiene orden p - 1.

Prueba. Ver [137, Capítulo 20] o uno de los textos [35, 52, 59, 100, 111].

Ejemplo 1.31. El campo F11 tiene 2 como raíz primitiva, ya que en F11

1.6 Criptografía antes de la era de la computadora


Hacemos una pausa para una breve incursión en la historia de la criptografía precomputadora.
Esperamos que estas breves notas le abran el apetito para leer más sobre este tema
fascinante, en el que la intriga política, la aventura atrevida y los episodios románticos juegan
un papel igual con los logros técnicos. Los orígenes de la criptografía se pierden en las brumas
del tiempo, pero presumiblemente la escritura secreta surgió poco después de que las
personas comenzaron a usar alguna forma de comunicación escrita, ya que uno imagina que la
noción de información confidencial debe remontarse a los albores de la civilización. Hay
descripciones registradas de las cifras que se usaban en la época romana, incluida la cifra de
cambio de Julio César de la Sección 1.1, y ciertamente desde ese momento en adelante,
muchas civilizaciones han utilizado ambas cifras de sustitución, en las que cada letra se
reemplaza por otra letra o símbolo, y cifras de transposición, en las que se reorganiza el orden
de las letras. La invención del criptoanálisis, es decir, el arte de descifrar mensajes sin
conocimiento previo de la clave, es más reciente. Los textos sobrevivientes más antiguos, que
incluyen referencias a volúmenes perdidos anteriores, son de eruditos árabes de los siglos XIV
y XV. Estos libros describen no solo las cifras simples de sustitución y transposición, sino
también la primera instancia registrada de una cifra de sustitución homofónica, que es una
cifra en la que una sola letra de texto sin formato puede estar representada por una de varias
posibles letras de texto cifrado. Más importante aún, contienen la primera descripción de
métodos serios de criptoanálisis, incluido el uso de conteos de frecuencia de letras y la
probabilidad de que ciertos pares de letras aparezcan adyacentes entre sí.
Desafortunadamente, la mayor parte de este conocimiento parece haber desaparecido en el
siglo XVII. Mientras tanto, a medida que Europa emergía de la Edad Media, los estados
políticos en Italia y en otros lugares requerían comunicaciones seguras, y comenzaron a
desarrollarse tanto la criptografía como el criptoanálisis. La cifra de sustitución homofónica
europea más antigua conocida data de 1401. El uso de dicha cifra sugiere conocimiento
contemporáneo del criptoanálisis mediante análisis de frecuencia, ya que la única razón para
utilizar un sistema homofónico es hacer que dicho criptoanálisis sea más difícil. En los siglos XV
y XVI surgieron una variedad de lo que se conoce como cifrados polialfabéticos. (Veremos un
ejemplo de un cifrado polialfabético, denominado cifrado Vigen`ere, en la sección 5.2.) La idea
básica es que cada letra del texto sin formato se cifra utilizando un cifrado de sustitución
diferente. El nombre "polialfabético" se refiere al uso de muchos alfabetos de cifrado
diferentes, que se usaron de acuerdo con algún tipo de clave. Si la clave es razonablemente
larga, entonces se tarda mucho tiempo en utilizar cualquier alfabeto de cifrado por segunda
vez. No fue sino hasta el siglo XIX que se desarrollaron métodos estadísticos para resolver de
manera confiable tales sistemas, aunque hay casos registrados anteriormente de criptoanálisis
a través de trucos especiales o conjeturas afortunadas de parte del mensaje o la clave.
Avanzando varios siglos, notamos que las cifras de máquinas que jugaron un papel importante
en la Segunda Guerra Mundial fueron, en esencia, cifras polialfabéticas extremadamente
complicadas. Las cifras y los códigos14 para fines políticos y militares se generalizan cada vez
más durante los siglos XVIII, XIX y principios del XX, al igual que los métodos criptoanalíticos,
aunque el nivel de sofisticación varió ampliamente de generación en generación y de país a
país. Por ejemplo, mientras Estados Unidos se preparaba para ingresar a la Primera Guerra
Mundial en 1917, el ejército de los EE. UU. Estaba usando cifras, inferiores a las inventadas en
Italia en el siglo XVII, que cualquier criptoanalista entrenado de la época habría podido romper
en unas pocas horas ! La invención y el despliegue generalizado de métodos de comunicación
de largo alcance, especialmente el telégrafo, abrieron la necesidad de cifras políticas, militares
y comerciales, y hay muchas historias fascinantes de mensajes telegráficos interceptados y
descifrados que desempeñan un papel en eventos históricos. Un ejemplo, el infame telegrama
Zimmerman, tendrá éxito. Con Estados Unidos manteniendo la neutralidad en 1917 mientras
Alemania luchaba contra Francia y Gran Bretaña en el Frente Occidental, los alemanes
decidieron que su mejor esperanza de victoria era reforzar su bloqueo de Gran Bretaña al
comenzar una guerra submarina sin restricciones en el Atlántico. Es probable que esta política,
que significaba hundir barcos de países neutrales, llevara a Estados Unidos a la guerra, por lo
que Alemania decidió ofrecer una alianza a México. A cambio de que México invadiera los
Estados Unidos, y así lo distrajera de la guerra terrestre en Europa, Alemania propuso dar a
México, al final de la guerra, gran parte de los actuales Texas, Nuevo México y Arizona. El
servicio secreto británico interceptó esta comunicación, y a pesar del hecho de que estaba
encriptada usando uno de los criptosistemas más seguros, pudieron descifrar el cable y
transmitir su contenido a los Estados Unidos, lo que ayudó a impulsar a los Estados Unidos a la
Primera Guerra Mundial. La invención y el desarrollo de las comunicaciones de radio alrededor
de 1900 causaron un cambio aún más sorprendente en el paisaje criptográfico, especialmente
en situaciones militares y políticas urgentes. Un general ahora podía comunicarse
instantáneamente con todas sus tropas, pero desafortunadamente el enemigo podía escuchar
todas sus transmisiones. La necesidad de cifrados seguros y eficientes se convirtió en
primordial y condujo a la invención de los cifrados de máquinas, como la máquina Enigma de
Alemania. Este era un dispositivo que contenía una serie de rotores, cada uno de los cuales
tenía muchos cables que atravesaban su centro. Antes de encriptar una carta, los rotores
giraban de manera predeterminada, alterando así las rutas de los cables y la salida resultante.
Esto creó un cifrado polialfabético inmensamente complicado en el que el número de
alfabetos cifrados era enorme. Además, los rotores podían retirarse y reemplazarse en una
gran cantidad de configuraciones de arranque diferentes, por lo que romper el sistema
implicaba conocer tanto los circuitos a través de los rotores como determinar la configuración
inicial del rotor de ese día. A pesar de estas dificultades, durante la Segunda Guerra Mundial,
los británicos lograron descifrar una gran cantidad de mensajes cifrados en máquinas Enigma.
Fueron ayudados en este esfuerzo por criptógrafos polacos que, justo antes de que
comenzaran las hostilidades, compartieron con Gran Bretaña y Francia los métodos que habían
desarrollado para atacar a Enigma. Pero determinar las configuraciones diarias del rotor y
analizar los reemplazos del rotor seguía siendo una tarea inmensamente difícil, especialmente
después de que Alemania introdujo una máquina Enigma mejorada que tenía un rotor
adicional. La existencia del proyecto ULTRA de Gran Bretaña para descifrar Enigma permaneció
en secreto hasta 1974, pero ahora hay varias cuentas populares. La inteligencia militar
derivada de ULTRA fue de vital importancia en el esfuerzo de guerra aliado. Los criptógrafos de
los Estados Unidos obtuvieron otro éxito criptoanalítico de la Segunda Guerra Mundial contra
una máquina de cifrado japonesa que denominaron Purple. Esta máquina usaba interruptores,
en lugar de rotores, pero nuevamente el efecto era crear un cifrado polialfabético
increíblemente complicado. Un equipo de criptógrafos, liderado por William Friedman, logró
reconstruir el diseño de la máquina Purple simplemente analizando los mensajes cifrados
interceptados. Luego construyeron su propia máquina y procedieron a descifrar muchos
mensajes diplomáticos importantes. En esta sección, apenas hemos tocado la superficie de la
historia de la criptografía desde la antigüedad hasta mediados del siglo XX. Los buenos puntos
de partida para lecturas adicionales incluyen la introducción ligera de Simon Singh [139] y el
libro masivo e integral, pero fascinante y bastante legible, de David Kahn, The Codebreakers
[63].

1.7 Cifrados simétricos y asimétricos

Ahora hemos visto varios ejemplos diferentes de cifrados, todos los cuales tienen una serie de
características en común. Bob quiere enviar un mensaje secreto a Alice. Utiliza una clave
secreta k para codificar su mensaje de texto sin formato my convertirlo en un texto cifrado c.
Al recibir c, usa la clave secreta k para descifrar c y reconstituir m. Para que este procedimiento
funcione correctamente, tanto Alice como Bob deben poseer copias de la clave secreta k, y si
el sistema debe proporcionar seguridad, entonces su adversario Eve no debe saber k, no debe
ser capaz de adivinar k, y debe no ser capaz de recuperar m de c sin saber k. En esta sección
formulamos la noción de un criptosistema en términos matemáticos abstractos. Hay muchas
razones por las cuales esto es deseable. En particular, nos permite resaltar similitudes y
diferencias entre diferentes sistemas, al tiempo que proporciona un marco dentro del cual
podemos analizar rigurosamente la seguridad de un sistema criptográfico contra varios tipos
de ataques.

1.7.1 Cifrados simétricos

Volviendo a Bob y Alice, observamos que deben compartir el conocimiento de la clave secreta
k. Usando esa clave secreta, pueden cifrar y descifrar mensajes, por lo que Bob y Alice tienen el
mismo conocimiento (o simétrico) y habilidades. Por esta razón, los cifrados de este tipo se
conocen como cifrados simétricos. Matemáticamente, un cifrado simétrico utiliza una clave k
elegida de un espacio (es decir, un conjunto) de posibles claves K para cifrar un mensaje de
texto sin formato m elegido de un espacio de posibles mensajes M, y el resultado del proceso
de cifrado es un texto cifrado c perteneciente a un espacio de posibles textos cifrados C. Así, el
cifrado puede verse como una función

e: K × M → C

cuyo dominio K × M es el conjunto de pares (k, m) que consta de una clave ky un texto sin
formato my cuyo rango es el espacio de los textos cifrados C. De manera similar, el descifrado
es una función

d: K × C → M.

Por supuesto, queremos que la función de descifrado "deshaga" los resultados de la función
de cifrado. Matemáticamente, esto se expresa por la fórmula

d k, e (k, m) = m para todos los k ∈K y todos los m ∈M

A veces es conveniente escribir la dependencia de k como un subíndice. Luego, para cada tecla
k, obtenemos un par de funciones

ek: M→ C y dk: C−→ M que satisfacen la propiedad de descifrado dk ek (m) = m para todos los
m ∈M

En otras palabras, para cada tecla k, la función dk es la función inversa de la función ek. En
particular, esto significa que ek debe ser uno a uno, ya que si ek (m) = ek (m), entonces

m = dk ek (m) = dk ek (m) = m.

Para Alice y Bob es más seguro asumir que Eve conoce el método de encriptación que se está
empleando. En términos matemáticos, esto significa que Eva conoce las funciones e y d. Lo que
Eve no sabe es la clave particular k que están usando Alice y Bob. Por ejemplo, si Alice y Bob
usan un cifrado de sustitución simple, deberían suponer que Eve es consciente de este hecho.
Esto ilustra una premisa básica de la criptografía moderna llamada principio de Kerckho, que
dice que la seguridad de un criptosistema debería depender solo del secreto de la clave, y no
del secreto del algoritmo de cifrado en sí. Si (K, M, C, e, d) es un cifrado exitoso, debe tener las
siguientes propiedades:
1. Para cualquier tecla k ∈Ky texto sin formato m ∈M, debe ser fácil calcular el texto cifrado
ek (m).

2. Para cualquier tecla k ∈K y texto cifrado c ∈C, debe ser fácil calcular el texto sin formato dk
(c).

3. Dado uno o más textos cifrados c1, c2, ..., cn ∈Cifrado usando la tecla k ∈K, debe ser muy
difícil calcular cualquiera de los textos claros correspondientes dk (c1), ..., dk (cn) sin
conocimiento de k.

Aquí hay otra propiedad que es deseable, aunque más difícil de lograr.

4. Dado uno o más pares de textos claros y sus correspondientes textos cifrados, (m1, c1), (m2,
c2), ..., (mn, cn), debe ser muy difícil descifrar cualquier texto cifrado c que no esté en la lista
dada sin saber k. Esta propiedad se llama seguridad contra un ataque de texto sin formato
conocido.

Aún mejor es lograr la seguridad al tiempo que permite al atacante elegir los textos claros
conocidos.

5. Para cualquier lista de textos simples m1, ..., mn ∈Mosenados por el adversario, incluso con
el conocimiento de los correspondientes textos cifrados ek (m1), ..., ek (mn), es muy difícil
descifrar cualquier texto cifrado c eso no está en la lista dada sin saber k. Esto se conoce como
seguridad contra un ataque de texto sin formato elegido. nótese bien En este ataque, el
adversario puede elegir m1, ..., mn, en lugar de un ataque de texto simple conocido, donde el
atacante recibe una lista de pares de texto claro / texto cifrado que no elige.

Ejemplo 1.33. El cifrado de sustitución simple no tiene la Propiedad 4, ya que incluso un solo
par de texto sin formato / texto cifrado (m, c) revela la mayor parte de la tabla de cifrado. De
manera similar, el cifrado Vigen`ere discutido en la Sección 5.2 tiene la propiedad de que un
par de texto sin formato / texto cifrado revela inmediatamente la palabra clave utilizada para
el cifrado. Por lo tanto, tanto la sustitución simple como los cifrados Vigen`ere son vulnerables
a los ataques de texto sin formato conocidos. Vea el ejercicio 1.43 para un ejemplo adicional.
En nuestra lista de propiedades deseables para un sistema criptográfico, hemos dejado abierta
la pregunta de qué se entiende exactamente por las palabras "fácil" y "difícil". Diferimos una
discusión formal de esta pregunta profunda a la Sección 5.7; véanse también las secciones 2.1
y 2.6. Por ahora, consideramos informalmente que "fácil" significa computable en menos de un
segundo en una computadora de escritorio típica y "difícil" significa que toda la potencia
informática del mundo requeriría varios años (al menos) para realizar el cálculo.

1.7.2 Esquemas de codificación

Es conveniente ver claves, textos simples y textos cifrados como números y escribir esos
números en forma binaria. Por ejemplo, podríamos tomar cadenas de 8 bits, 15 que dan
números del 0 al 255, y usarlas para representar las letras del alfabeto a través de

a = 00000000, b = 00000001, c = 00000010, ..., z = 00011001.

Para distinguir entre minúsculas y mayúsculas, podríamos dejar que A = 00011011, B =


00011100, etc. Este método de codificación permite traducir hasta 256 símbolos distintos en
forma binaria. Su computadora puede usar un método de este tipo, llamado código ASCII, para
almacenar datos, aunque por razones históricas a los caracteres alfabéticos no se les asignan
los valores binarios más bajos. Parte del código ASCII se enumera en la Tabla 1.10. Por
ejemplo, la frase "Chinche de cama" (incluido el espaciado y la puntuación) está codificada en
ASCII como

Por lo tanto, cuando vea la frase "Chinche de cama", su computadora verá la lista de bits

0100001001100101011001000010000001100010011101010110011100101110.

Definición. Un esquema de codificación es un método para convertir un tipo de datos en otro


tipo de datos, por ejemplo, convertir texto en números. La distinción entre un esquema de
codificación y un esquema de cifrado es uno

de intención Se supone que un esquema de codificación es de conocimiento público y es


utilizado por todos para los mismos fines. Un esquema de cifrado está diseñado para ocultar
información de cualquier persona que no posea la clave secreta. Por lo tanto, un esquema de
codificación, como un esquema de cifrado, consiste en una función de codificación y su función
de decodificación inversa, pero para un esquema de codificación, ambas funciones son de
conocimiento público y deben ser rápidas y fáciles de calcular.

Con el uso de un esquema de codificación, un texto sin formato o texto cifrado puede verse
como una secuencia de bloques binarios, donde cada bloque consta de 8 bits, es decir, de una
secuencia de ocho unos y ceros. Un bloque de 8 bits se llama byte. Para la comprensión
humana, un byte a menudo se escribe como un número decimal entre 0 y 255, o como un
número hexadecimal de dos dígitos (base 16) entre 00 y FF. Las computadoras a menudo
operan en más de 1 byte a la vez. Por ejemplo, un procesador de 64 bits funciona con 8 bytes a
la vez.

1.7.3 Cifrado simétrico de bloques codificados

Al usar un esquema de codificación como se describe en la Sección 1.7.2, es conveniente ver


los elementos del espacio de texto sin formato M que consisten en cadenas de bits de una
longitud fija B, es decir, cadenas de exactamente B unos y ceros. Llamamos a B el tamaño de
bloque de la cifra. Un mensaje de texto plano general consiste en una lista de bloques de
mensajes elegidos de M, y la función de cifrado transforma los bloques de mensajes en una
lista de bloques de texto cifrado en C, donde cada bloque es una secuencia de B bits. Si el texto
sin formato termina con un bloque de menos de B bits, rellenamos el final del bloque con
ceros. Tenga en cuenta que este proceso de codificación, que convierte el mensaje de texto sin
formato original en una secuencia de bloques de bits en M, es de conocimiento público. El
cifrado y el descifrado se realizan un bloque a la vez, por lo que es suficiente estudiar el
proceso para un solo bloque de texto sin formato, es decir, para un solo m ∈M. Por supuesto,
esta es la razón por la cual es conveniente dividir un mensaje en bloques. Un mensaje puede
tener una longitud arbitraria, por lo que es bueno poder enfocar el proceso criptográfico en
una sola pieza de longitud fija. El bloque de texto sin formato m es una cadena de bits B, que
por concreción identificamos con el número correspondiente en forma binaria. En otras
palabras, identificamos M con el conjunto de enteros m que satisface

Aquí m0, m1, ..., mB − 1 son cada uno 0 o 1. De manera similar, identificamos el espacio clave
K y el espacio de texto cifrado C con conjuntos de enteros correspondientes a cadenas de bits
de un cierto tamaño de bloque. Por conveniencia de notación, denotamos los tamaños de
bloque para claves, textos simples y textos cifrados por Bk, Bm y Bc. No necesitan ser lo
mismo. Por lo tanto, hemos identificado K, M y C con conjuntos de enteros positivos

K = {k ∈ Z: 0≤ k <2Bk}

, M = {m ∈ Z: 0≤ m <2Bm},

C = {c ∈ Z: 0 ≤ c <2Bc}.

Una pregunta importante surge de inmediato: ¿qué tan grandes deberían hacer Alice y Bob el
conjunto K, o equivalentemente, qué tan grandes deberían elegir el tamaño de bloque clave
Bk? Si Bk es demasiado pequeño, entonces Eve puede verificar cada número de 0 a 2Bk −1
hasta que encuentre la clave de Alice y Bob. Más precisamente, dado que se supone que Eve
conoce el algoritmo de descifrado d (principio de Kerckho ff), toma cada k ∈K y lo usa para
calcular dk (c). Suponiendo que Eve pueda distinguir entre textos claros válidos e inválidos,
eventualmente recuperará el mensaje. Este ataque se conoce como un ataque de búsqueda
exhaustivo (también conocido como ataque de fuerza bruta), ya que Eve busca
exhaustivamente a través del espacio clave. Con la tecnología actual, una búsqueda exhaustiva
se considera inviable si el espacio tiene al menos 280 elementos. Por lo tanto, Bob y Alice
deberían elegir definitivamente Bk ≥ 80. Para muchos criptosistemas, especialmente los
criptosistemas de clave pública que forman el núcleo de este libro, existen refinamientos en el
exhaustivo ataque de búsqueda que reemplazan efectivamente el tamaño del espacio con su
raíz cuadrada. Estos métodos se basan en el principio de que es más fácil encontrar objetos
coincidentes (colisiones) en un conjunto que encontrar un objeto particular en el conjunto.
Describimos algunos de estos ataques de encuentro en el medio o colisión en las Secciones 2.7,
5.4, 5.5, 7.2 y 7.10. Si los ataques de encuentro en el medio están disponibles, entonces Alice y
Bob deberían elegir Bk ≥ 160.

1.7.4 Ejemplos de cifrados simétricos

Antes de descender aún más en un pantano de teoría y notación, hacemos una pausa para dar
una descripción matemática de algunas cifras simétricas elementales.

Sea p primo grande, 17 digamos 2159 <p <2160. Alice y Bob toman su

el espacio clave K, el espacio de texto sin formato M y el espacio de texto cifrado C son el
mismo conjunto,

K = M = C = {1, 2, 3, ..., p - 1}.

En una terminología más sofisticada, K = M = C = F all p se consideran iguales a la

grupo de unidades en el campo finito Fp.

Alice y Bob seleccionan aleatoriamente una tecla k ∈ K, es decir, seleccionan un número


entero k

satisfaciendo 1 ≤ k <p, y deciden usar la función de cifrado ek definida por ek (m) ≡ k · m (mod
p). (1.9)

Aquí queremos decir que ek (m) se establece igual al entero positivo único entre 1 yp que es
congruente con k · m módulo p. El descifrado correspondiente

la función dk es

dk (c) ≡ k · c (mod p),

donde k es el inverso de k módulo p. Es importante tener en cuenta que aunque p es muy


grande, el algoritmo euclidiano extendido (Observación 1.15) nos permite

calcule k en menos de 2 log2 p + 2 pasos. Por lo tanto, encontrar k de k cuenta como "fácil" en
el mundo de la criptografía.

Está claro que Eve tiene dificultades para adivinar k, ya que hay aproximadamente 2160
posibilidades entre las que elegir. ¿También es difícil para Eve recuperar k si conoce el texto
cifrado c? La respuesta es sí, aún es difícil. Tenga en cuenta que la función de cifrado

ek: M - → C

es sobreyectivo (sobre) para cualquier elección de clave k. Esto significa que para cada c ∈ C y
cualquier k ∈ K existe un m ∈ M tal que ek (m) = c. Además, cualquier texto cifrado dado
puede representar cualquier texto sin formato, siempre que el texto sin cifrar esté encriptado
por una clave apropiada. Matemáticamente, esto puede reformularse diciendo que dado
cualquier texto cifrado c ∈ C y cualquier texto simple m ∈ M, existe una clave k tal que ek (m)
= c. Específicamente, esto es cierto para la clave

k ≡ m − 1 · c (mod p). (1.10)

Esto muestra que el cifrado de Alice y Bob tiene las Propiedades 1–3 como se enumeran en la
página 38, ya que cualquiera que conozca la clave k puede cifrar y descifrar fácilmente, pero es
difícil descifrarlo si no conoce el valor de k. Sin embargo, este cifrado no tiene la Propiedad 4,
ya que incluso un solo par de texto sin formato / texto cifrado (m, c) le permite a Eve recuperar
la clave privada k usando la fórmula (1.10)

También es interesante observar que si Alice y Bob definen su función de cifrado como una
simple multiplicación de enteros ek (m) = k · m sin módulo de reducción p, entonces su cifrado
todavía tiene las Propiedades 1 y 2, pero la Propiedad 3 falla. Si Eve intenta descifrar un solo
texto cifrado

c = k · m, ella todavía enfrenta el

(moderadamente) difícil tarea de factorizar un gran número. Sin embargo, si logra adquirir
varios textos cifrados c1, c2, ..., cn, entonces hay una buena posibilidad de que

mcd (c1, c2, ..., cn) = mcd (k · m1, k · m2, ..., k · mn)

= k · mcd (m1, m2, ..., mn)

es igual a k o un pequeño múltiplo de k. Tenga en cuenta que es una tarea fácil calcular el
máximo común divisor.

Esta observación proporciona nuestra primera indicación de cómo el módulo de reducción p


Sin embargo, la reducción no es en sí misma la solución definitiva. Considere la vulnerabilidad
del cifrado (1.9) a un ataque de texto sin formato conocido. Como se señaló anteriormente, si
Eve puede tener en sus manos un texto cifrado c y su texto claro correspondiente m, entonces
ella recupera fácilmente la clave calculando

Por lo tanto, incluso un solo par de texto sin formato / texto cifrado es suficiente para revelar
la clave, por lo que la función de cifrado ek dada por (1.9) no tiene la Propiedad 4 en la página
38.

Hay muchas variantes de este cifrado "multiplicación-módulo-p". por

ejemplo, dado que la suma es más eficiente que la multiplicación, existe un cifrado
"suma-módulo-p" dado por

que no es más que el cambio o el cifrado César que estudiamos en la Secta. 1.1. Otra variante,
llamada cifrado afín, es una combinación del cifrado de desplazamiento y el cifrado de
multiplicación. La clave para un cifrado afín consiste en dos enteros k = (k1, k2) y el cifrado y
descifrado se definen por

donde k 1 es el inverso de k1 módulo p.

El cifrado afín tiene una generalización adicional llamada cifrado de Hill, en el que el texto sin
formato m, el texto cifrado c y la segunda parte de la clave k2 se reemplazan por vectores de
columna que consisten en n números módulo p. Se considera que la primera parte de la clave
k1 es una matriz n-por-n con entradas enteras mod p. El cifrado y el descifrado están dados
nuevamente por (1.11), pero ahora la multiplicación k1 · m es el producto de una matriz y un

vector, y k 1 es la matriz inversa de k1modulo p. Tanto el cifrado afín como el cifrado Hill son
vulnerables a los ataques de texto sin formato conocidos; véanse los ejercicios 1.43. y 1.44.

Ejemplo 1.34. Como se señaló anteriormente, la suma es generalmente más rápida que la
multiplicación, pero hay otra operación básica de la computadora que es incluso más rápida
que la suma. Se llama exclusivo o y se denota por XOR o ⊕. En el nivel más bajo, XOR toma dos
bits individuales β ∈ {0, 1} y β ∈ {0, 1} y produce

β ⊕ β = 0 si β y β son iguales, 1 si β y β son diferentes. (1.12)

Si piensa en un bit como un número que es 0 o 1, entonces XOR es lo mismo que

módulo de adición 2. Más generalmente, el XOR de cadenas de 2 bits es el resultado de realizar


XOR en cada par de bits correspondiente. Por ejemplo,

10110 ⊕ 11010 = [1 ⊕ 1] [0 ⊕ 1] [1 ⊕ 0] [1 ⊕ 1] [0 ⊕ 0] = 01100.

Usando esta nueva operación, Alice y Bob tienen a su disposición otra

cifrado básico definido por

ek (m) = k ⊕ my dk (c) = k ⊕ c.

Aquí K, M y C son los conjuntos de todas las cadenas binarias de longitud B, o equivalente, el
conjunto de todos los números entre 0 y 2B - 1.

Este cifrado tiene la ventaja de ser altamente eficiente y completamente

simétrica en el sentido de que ek y dk son la misma función. Si k se elige aleatoriamente y se


usa solo una vez, entonces este cifrado se conoce como el pad único de Vernam. En la secta.
5.57 mostramos que la plataforma de un solo uso es demostrablemente segura.

Desafortunadamente, requiere una clave que sea tan larga como el texto sin formato, lo que la
hace demasiado engorrosa para la mayoría de las aplicaciones prácticas. Y si k se usa para
cifrar más de un texto sin formato, entonces Eve podrá aprovechar el hecho de que

c ⊕ c = (k ⊕ m) ⊕ (k ⊕ m) = m ⊕ m

para extraer información sobre m o m. No es obvio cómo Eva procedería a encontrar k, m o m


fácilmente, revelando la cantidad potencialmente menos aleatoria m ⊕ m, debería hacer un
criptógrafo nervioso. Además, este método es vulnerable en algunas situaciones a un ataque
de texto sin formato conocido; ver ejercicio 1.48.

1.7.5 Secuencias de bits aleatorias y cifrados simétricos

Hemos llegado, por fin, a la pregunta fundamental sobre la creación de cifrados simétricos
seguros y eficientes. ¿Es posible utilizar una sola clave relativamente corta k (por ejemplo, que
consta de 160 bits aleatorios) para enviar de manera segura y eficiente mensajes largos
arbitrariamente? Aquí hay una posible construcción.

Supongamos que pudiéramos construir una función

R: K × Z - → {0, 1}

con las siguientes propiedades:

1. Para todos los k ∈ K y todos los j ∈ Z, es fácil calcular R (k, j).

2. Dada una secuencia arbitrariamente larga de enteros j1, j2, ..., jn y dados todos los valores R
(k, j1), R (k, j2), ..., R (k, jn), it es dificil de determinar k.

3. Dada cualquier lista de enteros j1, j2, ..., jn y todos los valores

R (k, j1), R (k, j2), ..., R (k, jn),

Es difícil adivinar el valor de R (k, j) con una probabilidad superior al 50%

de éxito para cualquier valor de j que no esté en la lista.

Si pudiéramos encontrar una función R con estas tres propiedades, podríamos usarla para
convertir una clave inicial k en una secuencia de bits

R (k, 1), R (k, 2), R (k, 3), R (k, 4), ..., (1.13)

y luego podríamos usar esta secuencia de bits como la clave para un pad de una sola vez como
se describe en el Ejemplo 1.34.

El problema fundamental con este enfoque es que la secuencia de

bits (1.13) no es verdaderamente aleatorio, ya que es generado por la función R. En cambio,


decimos que la secuencia de bits (1.13) es una secuencia pseudoaleatoria y llamamos a R un
generador de números pseudoaleatorio.

¿Existen generadores de números pseudoaleatorios? De ser así, proporcionarían ejemplos de


las funciones unidireccionales definidas por Diffie y Hellman en su documento innovador [38],
pero a pesar de más de un cuarto de siglo de trabajo, nadie ha demostrado la existencia de una
sola función de este tipo. Volvemos a este tema fascinante en las Sectas. 2.1 y 8.2. Por ahora,
nos contentamos con algunas breves observaciones.

Aunque nadie ha demostrado de manera concluyente que las propuestas de números


pseudoaleatorios hayan resistido la prueba del tiempo. Hay dos enfoques básicos para
construir candidatos para R, y estos dos métodos proporcionan una buena ilustración del
conflicto fundamental en la criptografía entre seguridad y eficiencia.

El primer enfoque es aplicar repetidamente una colección ad hoc de operaciones de mezcla


que se adaptan bien a la computación eficiente y que parecen ser muy difíciles de desenredar.
Este método es, desconcertantemente, la base de los cifrados simétricos más prácticos,
incluidos el Estándar de cifrado de datos (DES) y el Estándar de cifrado avanzado (AES), que son
los dos sistemas más utilizados en la actualidad. Ver sección 8.12 para una breve descripción
de estos modernos

cifrados simétricos

El segundo enfoque es construir R usando una función cuya inversión eficiente es un problema
matemático bien conocido que se cree que es difícil.

Este enfoque proporciona una base teórica mucho más satisfactoria para un cifrado simétrico,
pero desafortunadamente, todas las construcciones conocidas de este tipo son mucho menos
eficientes que las construcciones ad hoc y, por lo tanto, son menos atractivas para aplicaciones
del mundo real.

1.7.6 Las cifras asimétricas hacen una primera aparición

Si Alice y Bob desean intercambiar mensajes utilizando un cifrado simétrico, primero deben
acordar mutuamente una clave secreta k. Esto está bien si tienen la oportunidad de reunirse
en secreto o si pueden comunicarse una vez por un canal seguro. Pero, ¿qué pasa si no tienen
esta oportunidad y si cada comunicación entre ellos es monitoreada por su adversario Eva? ¿Es
posible que Alice y Bob intercambien una clave secreta en estas condiciones?

La primera reacción de la mayoría de las personas es que no es posible, ya que Eve ve toda la
información que intercambian Alice y Bob. La brillante idea de Diffie y Hellman18 fue que, bajo
ciertas hipótesis, es posible. La búsqueda de soluciones eficientes (y comprobables) para este
problema, que se llama criptografía de clave pública (o asimétrica), forma una de las partes
más interesantes de la criptografía matemática y es el enfoque principal de este libro.

Comenzamos describiendo una forma no matemática de visualizar la clave pública

criptografía. Alice compra una caja fuerte con una ranura estrecha en la parte superior y la
coloca en un lugar público. Todos en el mundo pueden examinar la caja fuerte y ver que está
hecha de forma segura. Bob escribe su mensaje a Alice en un trozo de papel y lo desliza a
través de la ranura en la parte superior de la caja fuerte. Ahora solo una persona con la llave
de la caja fuerte, que presumiblemente significa solo Alice, puede recuperar y leer el mensaje
de Bob. En este escenario, la clave pública de Alice es la caja fuerte, el algoritmo de cifrado es
el proceso de colocar el mensaje en la ranura, y el

El algoritmo de descifrado es el proceso de abrir la caja fuerte con la clave. Tenga en cuenta
que esta configuración no es descabellada; Se utiliza en el mundo real. Por ejemplo, la ranura
de depósito nocturno en un banco tiene esta forma, aunque en la práctica la "ranura" debe
estar bien protegida para evitar que alguien inserte unas pinzas largas y delgadas y extraiga los
depósitos de otras personas.

Una característica útil de nuestro criptosistema "seguro con una ranura", que comparte con los
criptosistemas de clave pública reales, es que Alice necesita colocar solo una caja fuerte en una
ubicación pública, y luego todos en el mundo pueden usarla repetidamente

para enviar mensajes encriptados a Alice. Alice no necesita proporcionar una caja fuerte
separada para cada uno de sus corresponsales. Y tampoco es necesario que Alice abra la caja
fuerte y elimine el mensaje de Bob antes de que alguien como Carl o Dave lo use para enviar
un mensaje a Alice.
Ahora estamos listos para dar una formulación matemática de un cifrado asimétrico. Como de
costumbre, hay espacios de claves K, textos simples M y textos cifrados C.

Sin embargo, un elemento k del espacio clave es realmente un par de claves,

k = (kpriv, kpub),

llamada la clave privada y la clave pública, respectivamente. Para cada clave pública kpub hay
una función de cifrado correspondiente

ekpub: M - → C,

y para cada clave privada kpriv hay una función de descifrado correspondiente

dkpriv: C - → M.

Estos tienen la propiedad de que si el par (kpriv, kpub) está en el espacio clave K, entonces
dkpriv

ekpub (m) = m para todos los m ∈ M.

Si un cifrado asimétrico debe ser seguro, debe ser difícil para Eve calcular la función de
descifrado dkpriv (c), incluso si conoce la clave pública kpub.

Tenga en cuenta que bajo esta suposición, Alice puede enviar kpub a Bob usando un canal de
comunicación inseguro, y Bob puede enviar el texto cifrado ekpub (m), sin preocuparse de que
Eve pueda descifrar el mensaje. Para descifrar fácilmente, es necesario conocer la clave
privada kpriv, y presumiblemente Alice es la única persona con esa información. La clave
privada a veces se llama

La información de la trampilla de Alice, porque proporciona una trampilla (es decir, un acceso
directo) para calcular la función inversa de ekpub. El hecho de que las claves de cifrado y
descifrado kpub y kpriv sean diferentes hace que el cifrado sea asimétrico, de ahí su apodo.

Es bastante intrigante que Diffie y Hellman hayan creado este concepto sin encontrar un
candidato para un par real de funciones, aunque propusieron un método similar por el cual
Alice y Bob pueden intercambiar de forma segura una pieza aleatoria de datos cuyo valor
inicialmente no se conoce uno. Describimos el método de intercambio de claves de Diffie y
Hellman en la Secta. 2.3 y luego continúe para discutir una serie de cifrados asimétricos,
incluido Elgamal (Sección 2.4), RSA

(Sección 3.2), Goldwassser – Micali (Sección 3.10), ECC (Sección 6.4), GGH (Sección 7.8) y NTRU
(Sección 7.10), cuya seguridad depende de la presunta dificultad de una variedad de diferentes
matemáticas problemas.

Observación 1.35. En la práctica, los cifrados asimétricos tienden a ser considerablemente más
lentos que los cifrados simétricos como DES y AES. Por esa razón, si Bob necesita enviar a Alice
un archivo grande, primero podría usar un cifrado asimétrico para enviarle la clave a un cifrado
simétrico, que luego usaría para transmitir el archivo real.

Potrebbero piacerti anche