¿Cuánto es 1+1 1+1 ? Le preguntamos esto a alguien de primero básico y nos dirá que 2. Si me preguntas a mí, yo te respondería que depende.

Nuestra intuición nos dice que si comenzamos a sumar 1+1+1+1++11+1+1+1+\dots+1 tantas veces como se nos ocurra, el resultado será un número cada vez mayor. Esa misma intuición también estalla si vemos escrito 1+1=0.1+1=0.

Enteros módulo nn

¿Qué pasa cuando este número representa, por ejemplo, las horas del reloj? Si a las 21:00 horas le sumas 4 horas, la respuesta será la 01:00 am. Esto ocurre porque estamos en un sistema de numeración distinto, que solo considera 24 números entre 0 y 23; luego, si sumo dos de ellos, esperaría que el resultado siguiera ahí. ¿Cómo podemos justificar que 21+4=1?21+4=1? Para formalizar este concepto matemáticamente, definimos lo siguiente:

Sean a,ba,b y nn números enteros, con n1n\geq 1. Decimos que aa es congruente a bb módulo n y lo denotamos por:

ab(modn)a\equiv b \pmod n

si bb es el resto de dividir aa por nn.1

Por ejemplo, 283(mod5) 28\equiv 3 \pmod 5 (basta dividir 28 en 5 y ver cuánto «sobra»).

En este conjunto podemos hacer todas las «operaciones básicas» que realizamos en los enteros, y al resultado obtenido aplicarle reducción modular. Por ejemplo:

21+4=251(mod24)21+4=25\equiv 1 \pmod {24}

Con esta notación, podemos escribir entonces que 21+41(mod24)21+4\equiv 1\pmod {24} sin ambigüedad. El concepto de congruencias fue introducido por el matemático alemán Carl Friedrich Gauss en su obra Disquisitiones Arithmeticae (1801) cuando tenía 24 años.

La teoría de congruencias se refiere a la «aritmética de los residuos». Gauss lo definió inicialmente de esta manera:

«Si dos enteros aa y bb están a distancias múltiplo de n,diremos que aa y bb son congruentes».

Cuando consideramos a los números enteros dotados de sus operaciones, escribimos formalmente (,+,)(\mathbb{Z},+,\cdot) y diremos que es un anillo.

={,3,2,1,0,1,2,}\mathbb{Z}=\{\dots, -3,-2,-1,0,1,2,\dots\}

Aquí podemos hacer de todo, salvo «dividir» (aunque esta operación en lo formal no existe). Si ahora nos movemos a congruencias módulo nn, usaremos esta notación: (n,+,)(\mathbb{Z}_n,+,\cdot) .

n={0,1,2,,n1}\mathbb{Z}_n=\{0,1,2,\dots,n-1\}

Vamos un poco más allá con las operaciones. Cuando nn es un número primo, escribiremos pp . En p\mathbb{Z}_p se puede dividir, es decir, para todo elemento kpk\in\mathbb{Z}_p, distinto de cero, existe un cierto k~p\widetilde{k}\in \mathbb{Z}_p tal que kk~1(modp)k\cdot\widetilde{k}\equiv 1\pmod p. Cuando esto pasa, decimos que el conjunto con sus operaciones es un cuerpo. De hecho, p\mathbb{Z}_p es un cuerpo finito, pues tiene finitos elementos. Usaremos la notación 𝔽p\mathbb{F}_p para este conjunto. Para las demostraciones y otras propiedades de esos conjuntos, ver Burton 2.

Cuerpos Finitos

¿Son todos los cuerpos finitos como p\mathbb{Z}_p para algún pp primo?

Hay más cuerpos finitos que p\mathbb{Z}_p, pero todos tienen una estructura similar.

Afirmación importante: Todo cuerpo finito tiene pnp^n elementos, para algún pp primo y n1.n\geq 1.Veamos cómo construirlos.

Supongamos n=2.n=2. Consideramos un polinomio mónico e irreducible 3 f(x)=x2+f1x+f0f(x)=x^2+f_1x+f_0, con f1,f0𝔽pf_1,f_0\in\mathbb{F}_p. Al ser irreducible, no tiene raíces en 𝔽p.\mathbb{F}_p. Construimos el siguiente conjunto:

𝔽p(α)={αa1+a0:ai𝔽p}\mathbb{F}_p(\alpha) =\{\alpha\cdot a_1+a_0 : a_i \in\mathbb{F}_p\}

donde α\alpha verifica quef(α)=0 f(\alpha)=0. Si asumimos que pp está fijo, es posible contar a mano cuántos elementos hay en 𝔽p(α)\mathbb{F}_p(\alpha). Hay exactamente p2p^2 elementos, que es la cantidad de combinaciones que se pueden hacer. ¡Lo más interesante es que este conjunto es un cuerpo!

Se puede demostrar que si cambiamos el polinomio f(x)f(x) (y por ende α\alpha), el cuerpo 𝔽p(β)\mathbb{F}_p(\beta) que obtenemos es el mismo desde el punto de vista del álgebra (son isomorfos4).

En general, podemos decir lo siguiente: si f(x)=xn+fn1xn1++f1x+f0f(x)=x^n+f_{n-1}x^{n-1}+\dots+f_1x+f_0, con fi𝔽pf_i\in\mathbb{F}_p es un polinomio irreducible y β\beta verifica que f(β)=0f(\beta)=0, entonces

𝔽p(β)={βn1an1++βa1+a0:ai𝔽p}\mathbb{F}_p(\beta)=\{\beta^{n-1}a_{n-1}+\dots+\beta a_1+a_0 : a_i \in\mathbb{F}_p\}

es un cuerpo de pnp^n elementos. Dada la unicidad de la que hablamos antes, denotamos por 𝔽pn\mathbb{F}_{p^n} a este cuerpo.

Cuerpos Finitos en Criptografía

No se puede comprender casi ningún protocolo criptográfico sin entender antes la aritmética de cuerpos finitos.

Cifrado del César: Este es uno de los ejemplos más clásicos (y lo vimos en el post anterior!) Julio César enviaba mensajes a sus generales desplazando las letras del alfabeto. Si asignamos un número a cada letra :

A=0,B=1,...,Z=26A=0, B=1, …, Z=26

podemos usar la aritmética módulo 27 (considerando la Ñ). Para cifrar una letra xx con una clave secreta kk (el número de desplazamientos), simplemente sumamos:

E(x)=(x+k)(mod27).E(x)=(x+k) \pmod {27}.

Para descifrar, hacemos la operación inversa. Probablemente los romanos usaron aritmética modular sin saberlo.

Cuerpos binarios y el protocolo AES: Uno de los principales cifrados simétricos utilizados hoy es AES (Advanced Encryption Standard). La unidad básica de procesamiento es el byte (8 bits). Cada byte puede identificarse con un elemento en el cuerpo finito de 256 elementos: 𝔽28\mathbb{F}_{2^8} (también denotado como Galois Field GF(28)GF(2^8)).

Aritmética en el cuerpo finito 𝔽28\mathbb{F}_{2^8}

Matemáticamente, el cuerpo finito 𝔽28\mathbb{F}_{2^8} se construye de tal forma que los bytes no se tratan como números, sino como vectores. Los elementos de este cuerpo se representan mediante una base polinómica

1,x,x2,,x7,{1, x, x^2, \dots, x^7},

donde cada byte b=(b7,b6,,b0)b = (b_7, b_6, \dots, b_0) se asocia biunívocamente con el polinomio:

b(x)=i=07bixicon bi{0,1}b(x) = \sum_{i=0}^{7} b_i x^i \quad \text{con } b_i \in \{0, 1\}

Las operaciones binarias fundamentales se definen de la siguiente manera:

Adición

La adición de dos elementos a(x),b(x)𝔽28a(x), b(x) \in\mathbb{F}_{2^8} es la suma usual de polinomios con coeficientes en 𝔽2\mathbb{F}_2 (aritmética módulo 2):

a(x)+b(x)=i=07(ai+bi)xi(mod2) a(x) + b(x) = \sum_{i=0}^{7} (a_i + b_i) x^i \pmod 2

Dado que en 𝔽2 \mathbb{F}_2 la suma es equivalente a la operación lógica 𝚇𝙾𝚁\texttt{XOR} (1+1=0), la adición es una operación bastante rápida en un procesador.

Multiplicación

La multiplicación, denotada por a(x)b(x) a(x) \cdot b(x), se define como el producto algebraico de los polinomios, al que después se reduce módulo un polinomio irreducible fijo:

a(x)b(x)=(a(x)b(x))(modm(x)) a(x) \cdot b(x) = (a(x) \cdot b(x)) \pmod{m(x)}

con m(x)=x8+x4+x3+x+1 m(x) = x^8 + x^4 + x^3 + x + 1.

Esta reducción modular es la que garantiza que el resultado se mantenga dentro del cuerpo, es decir, con un grado estrictamente menor a 8. Para profundizar, ver el libro 5

Para ilustrar esto, sean dos elementos del cuerpo definidos por:

a(x)=x6+x4+x2+x+1(escritura binaria: 01010111)a(x) = x^6 + x^4 + x^2 + x + 1 \quad (\text{escritura binaria: } 01010111)
b(x)=x7+x+1(escritura binaria: 10000011)\\ b(x) = x^7 + x + 1 \quad\quad\quad\quad\quad\; (\text{escritura binaria: } 10000011)

La suma a(x)+b(x) a(x) + b(x) se realiza sumando los coeficientes de las potencias correspondientes módulo 2:

(x6+x4+x2+x+1)+(x7+x+1)=x7+x6+x4+x2(x^6 + x^4 + x^2 + x + 1) + (x^7 + x + 1) = x^7 + x^6 + x^4 + x^2


Observe que los términos xy1x\,\, y\,\, 1 se cancelan mutuamente (x+x=0y1+1=0x+x=0\,\, y \,\,1+1=0).

Para el producto, consideremos multiplicar a(x) a(x) por un nuevo polinomio. c(x)=x4+x+1. c(x) = x^4 + x + 1.Utilizando la propiedad distributiva en el anillo:

a(x)c(x)=a(x)(x4+x+1)=[a(x)x4]+[a(x)x]+[a(x)1].a(x) \cdot c(x) = a(x) \cdot (x^4 + x + 1) = [a(x) \cdot x^4] + [a(x) \cdot x] + [a(x) \cdot 1].

Calculamos los términos individuales aplicando la reducción módulo m(x)m(x) cuando el grado es mayor o igual a 8.

a(x)1=x6+x4+x2+x+1a(x) \cdot 1 = x^6 + x^4 + x^2 + x + 1
a(x)x=x7+x5+x3+x2+xa(x) \cdot x = x^7 + x^5 + x^3 + x^2 + x
a(x)x4=x2+x+1(Resultado tras la reducción modular) a(x) \cdot x^4 = x^2 + x + 1 \quad (\text{Resultado tras la reducción modular})

Finalmente, sumamos estos resultados parciales (módulo 2):

(x6+x4+x2+x+1) +(x7+x5+x3+x2+x) +(x2+x+1) =(x^6 + x^4 + x^2 + x + 1) \ + (x^7 + x^5 + x^3 + x^2 + x) \ + (x^2 + x + 1) \ =
=x7+x6+x5+x4+x3+x2+x=x^7 + x^6 + x^5 + x^4 + x^3 + x^2 + x

Los términos constantes 1+1 se anulan, al igual que otros pares internos. Este polinomio resultante corresponde a la escritura binaria 1111111011111110.

Veremos en otros posts que, además de los cuerpos binarios, en criptografía se utilizan cuerpos finitos 𝔽p\mathbb{F}_p con pp siendo primos de 256 bits (por ejemplo, p=2256189p=2^{256}-189). Ciertamente estos cuerpos tienen finitos elementos, ¡pero no pocos!


  1. Otra forma de definirlo es que n|ab.n \mid a-b. ↩︎
  2. Burton, David M. Elementary Number Theory. 6th ed., McGraw-Hill, 2007 ↩︎
  3. Un polinomio irreducible (sobre un cuerpo) no se puede factorizar como producto de otros de menor grado. Esto implica. Ser mónico significa que el coeficiente del término de mayor grado es 1. ↩︎
  4. Que dos estructuras sean isomorfas significa que existe una función biyectiva entre ambas que preserva su estructura, en este caso, sus operaciones. En matemáticas usualmente tratamos a los objetos isomorfos como iguales, en cierto sentido. ↩︎
  5. Smart, N. P. Cryptography Made Simple. Springer International Publishing (2016) ↩︎

2 respuestas a «Aritmética Modular: de Gauss a tu teléfono móvil»

  1. […] nuestros queridos y misteriosos números primos, y aritmética modular (de la que hablé en el post anterior). Veamos como […]

  2. […] Cuando nn es un número primo (en tal caso mejor escribimos pp en vez de nn) , el conjunto ℤpmathbb{Z}_p es un cuerpo y tiene pp elementos. En este caso, cuando calculamos 1+1+…+11+1+ldots+1 pp veces, el resultado será 0. Este cuerpo es llamado cuerpo de característica pp y lo denotamos como 𝔽pmathbb{F}_p . También existen cuerpos finitos 𝔽pnmathbb{F}_{p^n} de pnp^n elementos, cuya construcción se explica en este post […]

Deja un comentario

Bienvenidos/as!

Soy Amalia Pizarro Madariaga. Doctora en Matemáticas, académica en la U. de Valparaíso y senior researcher en CoreDevx. Investigo en Teoría de Números y sus aplicaciones a la criptografía, divulgo y escribo en este blog.

Descubre más desde Matemáticas, Criptografía y otras hierbas

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo