Está en la página 1de 81

TRABAJO FIN DE GRADO

Título

Criptografía en curvas elípticas

Autor/es

Iciar Sesma Lorea

Director/es

José María Pérez Izquierdo

Facultad

Facultad de Ciencias, Estudios Agroalimentarios e Informática


Titulación

Grado en Matemáticas

Departamento

Curso Académico

2014-2015
Criptografía en curvas elípticas, trabajo fin de grado
de Iciar Sesma Lorea, dirigido por José María Pérez Izquierdo (publicado por la
Universidad de La Rioja), se difunde bajo una Licencia
Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.
Permisos que vayan más allá de lo cubierto por esta licencia pueden solicitarse a los
titulares del copyright.

© El autor
© Universidad de La Rioja, Servicio de Publicaciones, 2015
publicaciones.unirioja.es
E-mail: publicaciones@unirioja.es
Facultad de Ciencias, Estudios Agroalimentarios e Informática

TRABAJO FIN DE GRADO


Grado en Matemáticas

Criptografía en curvas elípticas

Alumno:

Iciar Sesma Lorea

Tutores:

José María Pérez Izquierdo

Logroño, julio, 2015


CRIPTOGRAFÍA EN
CURVAS ELÍPTICAS

Iciar Sesma Lorea


Trabajo dirigido por
José Marı́a Pérez Izquierdo

Trabajo fin de Grado


Grado en Matemáticas

Facultad de Ciencias, Estudios Agroalimentarios e Informática


Universidad de La Rioja
Julio 2015
Quisiera agradecer todo el tiempo y la dedicación
que ha puesto mi tutor José Marı́a Pérez Izquierdo.
También me gustarı́a reconocer todos los años
de paciencia y sacrificios que han sobrellevado
mis padres para posibilitarme unos estudios.
Por último, me encantarı́a dar las gracias a todos
mis compañeros por estos maravillosos años
y por ayudarme a llegar donde estoy.
Resumen

En este trabajo estudiamos las curvas elı́pticas y su aplicación en la crip-


tografı́a, haciendo especial hincapié en el cálculo de grado de endomorfismos
y en el teorema de Hasse. Ambos resultados son muy importantes porque nos
ayudarán a encontrar el orden de una curva elı́ptica y ası́ poder garantizar la
seguridad criptográfica.
Además se dará una pequeña noción de criptografı́a general y más especı́fica-
mente de la basada en curvas elı́pticas. Esta última será la clave para comprender
más técnicamente cómo funcionan las monedas digitales bitcoins.

i
Abstract

In this project, we are studying elliptic curves and their cryptographic appli-
cations, focusing, specifically, in the calculation of endomorphism degrees and
Hasse’s theorem. Both results will be very important because they will help us
to find the order of an elliptic curve, thereby ensuring cryptographic security.
Moreover, we will make a brief introduction into the notion of cryptography,
and more specifically the one based on elliptic curves. This one will be the key
to understand how Bitcoin, digital currency, works.

iii
Prefacio

El boom de la informática y el uso masivo de las comunicaciones digitales,


ha producido un número creciente de problemas de seguridad. Esto es debido a
que las transacciones que se realizan a través de la red pueden ser interceptadas,
lo que conlleva la necesidad de vigilar su confidencialidad y su integridad, entre
otros.
Los avances informáticos mejoran las prestaciones de los ordenadores con lo
que cada vez se exige a los métodos criptográficos números más grandes para
poder garantizar la seguridad.
A lo largo de los últimos años, las curvas elı́pticas han cobrado gran impor-
tancia en la criptografı́a, ya que los sistemas de cifrado basados en ellas ofrecen
un nivel de seguridad equivalente al de los métodos tradicionales pero utilizando
números de menor tamaño. Este hecho hace que sean especialmente útiles en
tarjetas inteligentes.

Esquema del proyecto


La disposición del trabajo constará de tres partes diferenciadas: teorı́a ma-
temática, teorı́a informática y la aplicación de ambas.
La parte matemática se desarrollará a lo largo de los cuatro primeros capı́tu-
los. Comenzará con una pequeña introducción de las curvas elı́pticas para poco
a poco comenzar a trabajar con endomorfismos que serán la pieza clave para
la demostración de uno de los teoremas más importante en criptografı́a en cur-
vas elı́pticas, el teorema de Hasse. Este teorema, demostrado por Helmut Hasse
en 1933, permite aproximar e incluso calcular exactamente en ciertos casos el
número de puntos que posee una curva elı́ptica sobre un cuerpo finito. Por ello
garantiza la complejidad de los posibles ataques por fuerza bruta a los criptosis-
temas basados en curvas elı́pticas y por lo tanto su posible aplicación práctica.
Además se hablará del problema del logaritmo discreto y sus posibles ataques.
Al hilo de lo anterior empezará la parte informática en la que se mencionarán
básicamente todos los elementos de los criptosistemas y se hará un especial
hincapié en la criptografı́a basada en curvas elı́pticas sobre cuerpos finitos. En
esta sección se hablará tanto de los distintos estándares para cifrar mediante
curvas elı́pticas como el proceso de firma y verificación de la misma.

v
vi PREFACIO

Para terminar el trabajo y con el fin de buscar una aplicación de todo lo


estudiado hablaremos de los bitcoins.

Motivos de la elección del trabajo


Desde pequeña he sido siempre muy afı́n a las matemáticas pero fue en la
carrera donde me sentı́ atraı́da por la informática, tanto es ası́ que comencé a
cursar la doble titulación de Ingenierı́a Informática y Matemáticas. Es por eso
que querı́a encontrar un trabajo matemático orientado a la informática e indagar
en una de tantas aplicaciones que tienen las matemáticas en la vida real.

Objetivos
Uno de los objetivos a nivel personal es aplicar parte de los contenidos que
he aprendido en la carrera, en un nivel más abstracto, a la vida cotidiana. Por
ello hablé con mi tutor y decidimos que la relación de objetos matemáticos
bellos, como las curvas elı́pticas, con la seguridad de la información podı́a ser
una buena aplicación para ello.
También como meta está la demostración del teorema de Hasse, uno de
los principales teoremas en el estudio de las curvas elı́pticas, que más tarde
fue generalizado a curvas de género superior y que es una consecuencia de las
conjeturas de Weyl terminadas de probar por P. Deligne en 1974. Por ello en
la parte matemática todos los contenidos girarán en torno a la prueba de dicho
teorema.
Índice general

Resumen I

Abstract III

Prefacio V

1. Teorı́a básica 1
1.1. Plano proyectivo . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1. Polinomios homogéneos . . . . . . . . . . . . . . . . . . . 2
1.2. Curvas elı́pticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3. Estructura de grupo . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.1. Suma de dos puntos . . . . . . . . . . . . . . . . . . . . . 5
1.3.2. Multipicación de un entero por un punto . . . . . . . . . 6
1.4. El j-invariante . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5. Endomorfismos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.6. Curvas singulares . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2. Puntos de torsión 15
2.1. Puntos de torsión . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2. Polinomios de división . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3. Emparejamiento de Weil . . . . . . . . . . . . . . . . . . . . . . . 18

3. Curvas elı́pticas sobre cuerpos finitos 21


3.1. El endomorfismo de Frobenious . . . . . . . . . . . . . . . . . . . 22
3.2. Órdenes de grupos . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.1. Curvas en subcuerpos . . . . . . . . . . . . . . . . . . . . 25
3.2.2. Órdenes de puntos . . . . . . . . . . . . . . . . . . . . . . 27

4. El problema del logaritmo discreto 31


4.1. Cálculo del ı́ndice . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2. Baby-step giant-step . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3. Método ρ de Pollard . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.4. Curvas supersingulares . . . . . . . . . . . . . . . . . . . . . . . . 37

vii
viii ÍNDICE GENERAL

5. Criptografı́a 41
5.1. Introdución a la criptografı́a . . . . . . . . . . . . . . . . . . . . . 41
5.1.1. Criptografı́a . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.1.2. Funciones hash . . . . . . . . . . . . . . . . . . . . . . . . 42
5.1.3. Cifrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.1.4. Acuerdo de claves . . . . . . . . . . . . . . . . . . . . . . 43
5.2. Infraestructura de clave pública, PKI . . . . . . . . . . . . . . . . 44
5.2.1. Certificado digital . . . . . . . . . . . . . . . . . . . . . . 45
5.2.2. Firma digital . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3. Criptografı́a en curvas elı́pticas . . . . . . . . . . . . . . . . . . . 47
5.3.1. Intercambio de clave Diffie-Hellman . . . . . . . . . . . . 47
5.3.2. Cifrado de clave pública ElGamal . . . . . . . . . . . . . . 48
5.3.3. Firma digital ElGamal . . . . . . . . . . . . . . . . . . . . 48
5.3.4. Algoritmo de firma digital . . . . . . . . . . . . . . . . . . 49

6. Bitcoins 53
6.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.1.1. Historia de Bitcoin . . . . . . . . . . . . . . . . . . . . . . 53
6.2. Conceptos generales . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.3. Sistema Bitcoin y protocolos . . . . . . . . . . . . . . . . . . . . 55
6.3.1. Direcciones y monederos . . . . . . . . . . . . . . . . . . . 55
6.3.2. Transacciones . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.3.3. Cadena de bloques . . . . . . . . . . . . . . . . . . . . . . 56
6.4. Minerı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.5. Conclusión sobre el sistema Bitcoin . . . . . . . . . . . . . . . . . 56

A. Código 59
A.1. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
A.2. SageMath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

Conclusión 62

Bibliografı́a 64
Capı́tulo 1

Teorı́a básica

1.1. Plano proyectivo


Comúnmente estamos acostumbrados a tratar con la geometrı́a euclı́dea,
aunque en este trabajo utilizaremos como soporte la geometrı́a proyectiva. Para
entender mejor dicha geometrı́a introduciremos la noción de plano afı́n y plano
proyectivo, aunque por simplicidad no lo haremos axiomáticamente.

Definición 1.1 (Plano afı́n). Sea K un cuerpo, el plano afı́n sobre K es el


conjunto de puntos de K2 , al cual denotaremos por A2K .

Definición 1.2 (Plano proyectivo). Sea K un cuerpo. El plano proyectivo sobre


K, denotado como P2K , es el conjunto de puntos (x, y, z) ∈ K3 \ {(0, 0, 0)} con
la relación de equivalencia ∼ dada por

(x, y, z) ∼ (λx, λy, λz) con λ ∈ K× ,

donde K× denota el conjunto de elementos no nulos de K.

En otras palabras, el plano proyectivo es una variedad 2-dimensional dada


por P2K = K3 \ {(0, 0, 0)}/ ∼ en la que cada clase de equivalencia representa un
punto proyectivo y lo denotaremos por (x : y : z).
Además los puntos proyectivos pueden distinguirse en dos tipos dentro de P2K :
los puntos finitos, donde la coordenada z del punto (x : y : z) es = 0, y los puntos
del infinito que son todos los puntos de la forma (x : y : 0) que constituirán la
recta del infinito.
El plano afı́n guarda gran relación con el plano proyectivo, pues contamos
con la aplicación inclusión que las vincula.

i : A2K → P2K
(x, y) −→ (x : y : 1)

1
2 CAPÍTULO 1. TEORÍA BÁSICA

Además el plano proyectivo es un espacio compacto T2 e i(A2K ) es denso en P2K


con lo que también se trata de una compactificación de A2K .
Esta aplicación es muy importante puesto que, a pesar de que trabajemos
en el plano proyectivo, utilizaremos los puntos afines para referirnos a sus res-
pectivos puntos proyectivos. Los elementos de P2K que no están en A2K serán los
puntos que pertenecen a de la recta del infinito y los denotaremos por ∞.

1.1.1. Polinomios homogéneos


En el plano proyectivo se trabaja con polinomios homogéneos gracias a los
cuales podemos definir el conjunto de ceros del polinomio. La exigencia de la
utilización de estos polinomios es debida a que los polinomios no homogéneos
no están bien definidos en la clase de equivalencia. Por ello explicaremos a
continución qué son y porqué tienen importancia.
Definición 1.3 (Polinomio homogéneo). Un polinomio es homogéneo F (x, y, z)
de grado n si todos sus monomios axi y j z k con a ∈ K cumplen que i+j +k = n.
Es fácil ver que estos polinomios cumplen F (λx, λy, λz) = λn F (x, y, z) para
todo λ ∈ K con n el grado del polinomio. Por ello solo tiene sentido examinar
los puntos en los que se anula este polinomio o estudiar el cociente de dos de
ellos del mismo grado.
En este trabajo tendrán especial interés las funciones racionales definidas en
el plano proyectivo, puesto que mediante ellas definimos los endomorfismos.
Definición 1.4 (Función racional en el plano proyectivo). Dada una función
f : P2K → K se dice racional si

R(x : y : z)
f (x : y : z) = ,
Q(x : y : z)
donde R y Q polinomios homogéneos del mismo grado.
Cualquier polinomio del plano afı́n f (x, y) podemos convertirlo en un poli-
nomio homogéneo y viceversa. Simplemente teniendo en cuenta las siguientes
igualdades:
x y 
F (x, y, z) = z n f ,
z z
f (x, y) = F (x, y, 1)

Como último apunte en este apartado es necesario mencionar uno de sus


principios básicos de la geometrı́a proyectiva.
Lema 1.5 (Principio de la geometrı́a proyectiva). Todo par de rectas se cortan
en un punto.
Demostración. Sean dos rectas paralelas definidas en el plano afı́n

y = mx + b1 , y = mx + b2 ,
1.2. CURVAS ELÍPTICAS 3

con b1 = b2 . A partir de ella obtenemos su correspondientes rectas homogéneas


en el plano proyectivo,

y = mx + b1 z, y = mx + b2 z.

Resolviendo el sistema que constituyen las anteriores ecuaciones conseguimos


z = 0 e y = mx. Como no puede las variables x, y, z anularse a la vez, debido
a que (0, 0, 0) ∈ P2K , podemos reescalar dividiendo por x.

(x : mx : 0) = (1 : m : 0)

Por lo tanto se cortan en un punto del infinito.

1.2. Curvas elı́pticas


En el campo de la criptografı́a, la aplicación de las curvas elı́pticas adquiere
gran peso tanto en la factorización de números, como en el diseño de criptosis-
temas con requisitos pequeños de longitudes de clave.
En un principio podrı́amos ver una curva elı́ptica como el conjunto de solu-
ciones de la ecuación de Weierstrass dada por y 2 = x3 + Ax + B, pero eso no
es exactamente ası́. Por ello deduciremos la ecuación de Weierstrass e introdu-
ciremos una definición estricta de estas curvas.
La ecuación de Weierstrass de una curva elı́ptica viene representada por
y 2 = x3 + Ax + B siempre y cuando la caracterı́stica del cuerpo sea distinta de
2 y de 3.
Deduciremos esta ecuación, la ecuación general de la curva es y 2 + a1 xy +
a3 y = x3 + a2 x2 + a4 x + a6 donde a1 , . . . , a6 ∈ K. Suponiendo que la carac-
terı́stica de K es distinta de 2, podemos dividir por 2 y completar cuadrados
    2 
a 1 x a 3 2 3 a21 2
 a1 a3  a3
y+ + = x + a2 + x + a4 + x+ + a6 ,
2 2 4 2 4

que reescribiendo será y12 = x3 + a2 x2 + a4 x + a6 con a2 , a4 , a6 ∈ K. Análoga-
a
mente, si la caracterı́stica no es 3, podemos realizar el cambio x1 = x + 32 y
conseguimos
y12 = x31 + Ax1 + B,
con A, B ∈ K.

Definición 1.6 (Curva elı́ptica). Sea K un cuerpo, la curva elı́ptica E definida


sobre K vendrá dada por

E(K) = {∞} ∪ {(x, y) ∈ A2K | y 2 = x3 + Ax + B},

donde A y B son constantes que pertenecen a un cuerpo K e ∞ := (0 : 1 : 0).


4 CAPÍTULO 1. TEORÍA BÁSICA

Además, al tratarse de un polinomio de grado tres, presentará tres raı́ces


r1 , r2 , r3 . Con estas se consigue obtener el discriminante de la curva, que vendrá
dado por
((r1 − r2 )(r1 − r3 )(r2 − r3 ))2 = −(4A3 + 27B 2 ).

Con ello podemos deducir que, si existen raı́ces múltiples, el discriminante será
cero, lo que significará que se trata de una curva singular.

y2  x 3 - 4 x - 2
y2  x 3 - 4 x - 1
y2  x 3 - 4 x
y2  x 3 - 4 x + 1
y2  x 3 - 4 x + 2
y2  x 3 - 4 x + 3
y2  x 3 - 4 x + 4
y2  x 3 - 4 x + 5

Figura 1.1: Curvas elı́pticas dependiendo de sus valores A.

Lema 1.7 (Curva elı́ptica sobre un cuerpo de caracterı́stica 2). Sea K un cuerpo
cuya caracterı́stica es 2, entonces la ecuación de la curva elı́ptica tiene una de
las siguientes formas:

• Si a1 = 0 entonces y 2 + xy = x3 + Ax2 + B donde B = 0 y A, B ∈ K.

• Si a1 = 0 entonces y 2 + Ay = x3 + Bx + C donde A = 0 y A, B, C ∈ K.

Lema 1.8 (Curva elı́ptica sobre un cuerpo de caracterı́stica 3). Si la carac-


terı́stica de K es 3 entonces la ecuación de la curva elı́ptica será y 2 = x3 +
Ax2 + B donde A, B ∈ K.
1.3. ESTRUCTURA DE GRUPO 5

1.3. Estructura de grupo


1.3.1. Suma de dos puntos
Sumar dos puntos en una curva elı́ptica no roza lo habitual, para ver como se
suman dos puntos en curvas elı́pticas deberemos definir una operación de grupo.
Sean P = (x1 , y1 ) y Q = (x2 , y2 ) dos puntos que satisfacen la ecuación de la
curva elı́ptica E dada por y 2 = x3 + Ax + B. Con estos dos puntos y, a través
de la operación aditiva, encontraremos R = P + Q. Para ello hay que seguir los
siguientes pasos:

1. Construirse la recta que une P con Q.

2. La recta cortará a la curva en tres puntos. Calcular el punto de corte


distintos a los anteriores.

3. Calcular su simétrico respecto al eje x, que se corresponderá con P + Q.

-R

Figura 1.2: Suma de dos puntos.

Como casos esecial podemos detallar qué ocurre cuando x1 = x2 e y1 = y2 ,


donde la lı́nea que une los puntos es la vertical y por tanto corta en el punto
P + Q = ∞.
También al hilo con lo anterior podemos considerar un caso excepcional
cuando P = Q. En esta ocasión lo que se hace es considerar la recta tangente
como la recta que los une.
Por otro lado si Q fuese ∞, la recta que une a los puntos es la vertical, con
lo que el corte con E nos darı́a el simétrico de P respecto al eje x y por lo tanto
llegarı́amos a que P + ∞ = P
6 CAPÍTULO 1. TEORÍA BÁSICA

Proposición 1.9. Sean P = (x1 , y1 ) y Q = (x2 , y2 ) dos puntos que satisfacen


la ecuación de la curva elı́ptica E dada por y 2 = x3 +Ax+B y sea R = P +Q =
(x3 , y3 ):

x 3 = m2 − x 1 − x 2 y 2 − y1
• Si x = x
1 2 entonces con m = .
y3 = m(x1 − x3 ) − y1 x2 − x1

• Si x1 = x2 e y1 = y2 entonces P + Q = ∞

x3 = m2 − 2x1 3x21 + A
• Si P = Q e y1 = 0 entonces con m = .
y3 = m(x1 − x3 ) − y1 2y1

• Si P = Q e y1 = 0 entonces P + Q = ∞.
• P + ∞ = P para todo P ∈ E.

Teorema 1.10. Los puntos de la curva elı́ptica E junto con la operación suma
constituyen un grupo abeliano cuyo elemento identidad es ∞ y por ello satisface
las siguientes propiedades:

1. (Conmutativa) P + Q = Q + P para todo P, Q ∈ E.

2. (Existencia de elemento neutro) P + ∞ = P para todo P ∈ E.

3. (Existencia de opuesto) Dado P ∈ E, existe P  ∈ E con P + P  = ∞.


El punto P  se denotará por −P .

4. (Asociativa) (P + Q) + R = P + (Q + R) para todo P, Q, R ∈ E.

1.3.2. Multipicación de un entero por un punto


Sea P un punto de la curva elı́ptica E y sea k ∈ Z entonces si k es positivo
kP = P + P + · · · + P (con k sumandos). En caso contrario, si k es negativo,
kP = (−P ) + (−P ) + · · · + (−P ) (con |k| sumandos). Cuando k = 0 definimos
que 0P = ∞.
Esta operación puede ser ineficiente si el valor de k toma grandes valores.
Por ello conviene utilizar la técnica de exponenciación binaria que se desglosa
en el siguiente lema.

Lema 1.11. Sea P un punto de la curva elı́ptica E y sea k ∈ N, el procedi-


miento para calcular kP sigue los siguientes pasos:

1. Nos creamos tres variables auxiliares que serán a, Q1 y Q2 , que en un


inicio valdrán k, ∞ y P respectivamente.

2. Evaluamos si el valor de a es par o impar.


• Si a es par, asignamos a = a2 , Q1 = Q1 y Q2 = 2Q2 .
• Si a es impar, asignamos a = a − 1, Q1 = Q1 + Q2 y Q2 = Q2 .
1.4. EL J-INVARIANTE 7

3. Si a = 0 regresar al paso 2 con los nuevos valores.


4. Si a = 0 entonces kP = Q1 .
Esta operación tiene gran importancia ya que el problema del logaritmo
discreto reside en la dificultad de obtener k a partir de kP y P .

1.4. El j-invariante
Al igual que la topologı́a utiliza la caracterı́stica de Euler para determinar
si dos superficies son distintas, en curvas elı́pticas hay un sı́mil que recibe el
nombre de j-invariante. La peculiaridad del j-invariante es que si dos curvas
elı́pticas poseen el mismo j-invariante, entonces son la misma curva y se puede
obtener una a partir de la otra con un cambio de variable. En caso de que los
j-invariantes de dos curvas sean distintos entonces se garantiza que no se trata
de la misma curva, y por tanto no se puede obtener una a partir de la otra.
El j-invariante de una curva elı́ptica E viene definido por

4A3
j(E) = 1728 .
4A3 + 27B 2
Cabe destacar que el denominador no se anulará porque representa el opuesto
del discriminante de la curva elı́ptica y se asume que no es cero y por lo tanto
que no trabajamos con curvas singulares.
Teorema 1.12. Sean E1 , E2 dos curvas elı́pticas dadas respectivamente por
y12 = x31 + A1 x1 + B1 e y22 = x32 + A2 x2 + B2 con j-invariantes j1 y j2 . Si j1 = j2
entonces existe μ = 0 ∈ K tal que

A2 = μ4 A1 , B2 = μ6 B1 .

El cambio de variable dado por x2 = μ2 x1 , y2 = μ3 y1 transforma una ecuación


en la otra.

1.5. Endomorfismos
Para alcanzar el objetivo de probar el teorema de Hasse debemos enten-
der claramente qué son y para qué sirven los endomorfismos. Esta sección nos
ayudará a tomar conciencia sobre dichas aplicaciones.
Antes de introducir la siguiente definición cabe destacar que en este trabajo
denotaremos K como la clausura algebraica de K.
Definición 1.13 (Endomorfismo de una curva elı́ptica). Un endomorfismo so-
bre una curva elı́ptica E es una aplicación α : E(K) −→ E(K) dada por fun-
ciones racionales R1 (x, y), R2 (x, y) tal que α(x, y) = (R1 (x, y), R2 (x, y)) y que
cumple que dados P1 , P2 ∈ E entonces
1. α(P1 + P2 ) = α(P1 ) + α(P2 ).
8 CAPÍTULO 1. TEORÍA BÁSICA

2. α(∞) = ∞.
Cualquier endomorfismo de una curva elı́ptica se puede expresar de manera
más sencilla. Para ello suponemos que tenemos una función racional de la curva
R(x, y) tal que
p1 (x) + p2 (x)y
R(x, y) =
p3 (x) + p4 (x)y
donde p1 (x), p2 (x), p3 (x), y p4 (x) son funciones polinómicas. Racionalizando el
denominador multiplicando por p3 (x) − p4 (x)y obtendrı́amos que

q1 (x) + q2 (x)y
R(x, y) = ,
q3 (x)

donde q1 (x), q2 (x), y q3 (x) son funciones polinómicas. Consideramos el endo-


morfismo dado por α(x, y) = (R1 (x, y), R2 (x, y)), y tenemos en cuenta la si-
metrı́a de cualquier curva elı́ptica. Entonces se cumple

α(x, −y) = α(−(x, y)) = −α(x, y).

Lo que significa que

R1 (x, −y) = R1 (x, y) y R2 (x, −y) = −R2 (x, y).

Realizando las correspondientes racionalizaciones α(x, y) = (r1 (x), r2 (x)y)


con r1 (x) y r2 (x) funciones racionales.
La demostración del teorema de Hasse pasa por el cálculo del grado de un
endomorfismo. A continuación detallaremos a qué nos referimos con grado y
buscaremos diferentes lemas que nos ayuden en la búsqueda del mismo. En un
principio nos puede parecer un proceso liviano pero en ciertas aplicaciones puede
resultar un cálculo engorroso.
Definición 1.14 (Grado del endomorfismo). Para calcular el grado del en-
domorfismo α = 0 debemos fijarnos en r1 (x). Como r1 (x) es una función
racional, podemos pensar en ella como r1 (x) = p(x)
q(x) teniendo en cuenta que
mcd(p(x), g(x))=1. Entonces el grado de α vendrá dado por

grado(α) = máx{grado(p(x)), grado(q(x))}.

Definición 1.15 (Separable). Dentro del contexto de las curvas elı́pticas, un


endomorfismo α se dice separable si r1 (x) = 0 siendo r1 (x) la derivada de r1 (x).
Proposición 1.16. Sea α = 0 un endomorfismo separable de una curva elı́pti-
ca E, entonces
grado(α) = # Ker(α).
En el caso de que α = 0 no sea separable solo se puede asegurar que

grado(α) > # Ker(α).


1.5. ENDOMORFISMOS 9

Demostración. Para demostrar la proposición elegiremos un punto genérico su-


ficientemente bueno y calcularemos la cantidad de preimágenes que tiene. Cabe
recordar que el endomorfismo se puede escribir como α(x, y) = (r1 (x), y r2 (x))
 
con r1 = p(x)
q(x) , siendo gcd(p(x), q(x)) = 1. Sea S := {x ∈ K | (pq −p q)(x)q(x) =
0} y sea (a, b) ∈ E(K) tal que:

1. a = 0, b = 0 y (a, b) = ∞.

2. grado(p(x) − aq(x)) = máx{grado(p), grado(q)} = grado(α).

3. a ∈ r1 (S).

4. (a, b) ∈ α(E(K)).

Llegados a este punto realizamos un estudio por casos, diferenciando entre


si α = 0 es separable o no.

Caso 1. Sea α = 0 separable y por tanto r1 (x) = 0 ⇒ p (x)q(x) − p(x)q  (x) =
0. Veamos ahora que (a, b) presenta exactamente grado(α) preimágenes. Sea
(x1 , y1 ) ∈ E(K) tal que α((x1 , y1 )) = (a, b) entonces (x1 , y1 ) cumplirá

⎨ p(x1 ) = a,
q(x1 )

y1 r2 (x1 ) = b.

Como (a, b) = ∞ entonces q(x1 ) = 0 y ası́ r2 (x1 ) = 0. Por lo tanto, como b = 0,


se tiene que
b
y1 = ,
r2 (x1 )
con lo que y1 quedará determinado por x1 . Con la otra ecuación deducimos
p(x1 ) − aq(x1 ) = 0. Por lo tanto, si grado(p(x) − aq(x)) = grado(α) entonces no
hay raı́ces múltiples.
Comprobemos ahora que x1 no es raı́z múltiple usando reducción al absurdo.
Suponemos que x1 es raı́z múltiple por lo que tenemos que x1 cumplirá p(x1 ) −
aq(x1 ) = 0 y p (x1 ) − aq  (x1 ) = 0. Multiplicando la segunda ecuación por q(x1 )
y observando que a = p(x 1)
q(x1 ) llegamos a que

q(x1 )p (x1 ) = p(x1 )q  (x1 ) ⇐⇒ x1 ∈ S

y, si esto ocurre, significará que r1 (x1 ) = a ∈ r1 (S) y es absurdo por la elección


del elemento a. Ası́ concluimos que x1 no tiene raı́ces múltiples y grado(α) =
# Ker(α).

Caso 2. En este caso α = 0 no es separable con lo que r1 (x2 ) = 0 para


ciertos valores de x2 . Por ello q(x2 )p (x2 ) = p(x2 )q  (x2 ) con lo que existen
raı́ces múltiples y solo podemos asegurar que grado(α) > # Ker(α).
10 CAPÍTULO 1. TEORÍA BÁSICA

Un ejemplo importante de endomorfismo es el de Frobenius. Sea E una curva


definida sobre el cuerpo finito Fq , entonces el endomorfismo de Frobenius viene
dado por
Φq (x, y) = (xq , y q ).
Definición 1.17 (Suma de dos endomorfismos en curvas elı́pticas). Sea E una
curva elı́ptica sobre un cuerpo K y sean α : E(K) → E(K) y β : E(K) → E(K)
dos endomorfismos. Podemos definir su operación suma, que denotaremos por
α + β, como
α+β : K→K
P → α(P ) + β(P ).
Además denotaremos con un entero n al endomorfismo que viene dado por
n: K→K
P → nP.
Proposición 1.18. Sea E una curva elı́ptica sobre Fq con q = pn , donde p es
la caracterı́stica del cuerpo, y sean r, s = 0 ∈ Z. El endomorfismo rΦq + s
definido por
rΦq + s : E(Fq ) → E(Fq )
P → rφq (P ) + sP

es separable si y solo si p  s.

1.6. Curvas singulares


A lo largo de los capı́tulos asumimos que trabajamos con una curva elı́ptica
E tal que y 2 = x3 + Ax + B no tiene raı́ces múltiples. Sin embargo es interesante
ver qué ocurre cuando hay raı́ces múltiples, y eso es precisamente en lo que nos
centraremos en este apartado.
Además, como vamos a discutir brevemente al final de esta sección, las curvas
singulares surgen naturalmente cuando las curvas elı́pticas definidas sobre los
números enteros son reducidas módulo varios primos.
Comenzaremos por las nociones de punto singular y curva singular.
Definición 1.19 (Punto singular). Sea E una curva elı́ptica dada por una
función f y sea P = (a, b) ∈ E. Decimos que P es un punto singular de E si
satisface las ecuaciones: ⎧
⎪ ∂f

⎪ (P ) = 0,
⎨ ∂x



⎩ ∂f (P ) = 0.
∂y
1.6. CURVAS SINGULARES 11

Definición 1.20 (Curva singular). Una curva singular es aquella que presenta
al menos un punto singular.

Dentro de los puntos singulares se puede distinguir entre nodos y cúspides.


Para saber diferenciarlos deberemos introducir algunas pequeñas definiciones.
Siempre que tenemos una curva elı́ptica E sobre un cierto cuerpo K que viene
dada por la función f y encontramos un punto p = (a, b) ∈ E(K), podremos
escribir f como suma de componentes homogéneas. De este modo

f (x − a, y − b) = f0 (x − a, y − b) + · · · + fm (x − a, y − b),

donde grado(fi (x − a, y − b)) = i.


Obviamente, en el contexto de las curvas elı́pticas, el grado máximo que
pueden presentar las componentes homogéneas es 3, ya que una curva elı́ptica
presenta x3 en su ecuación.

Definición 1.21 (Multiplicidad en un punto). Definimos la multiplicidad de


una curva elı́ptica E en el punto P = (a, b) como el mı́nimo k tal que fk (x −
a, y − b) = 0 y lo denotaremos como mp (E).

Definición 1.22. Si mp (E) = 2, entonces f2 (x−a, y −b) se puede descomponer


en producto de dos factores tal que f2 (x − a, y − b) = αβ. Ası́ distinguiremos
entre:

• una cúspide, si α = λβ con λ un escalar.

• un nodo en caso contrario.

A continuación desglosaremos dos ejemplos de curvas elı́pticas de los cuales


obtendremos una cúspide y un nodo.
En primer lugar, consideremos el caso en que x3 +Ax+B tiene una raı́z triple
en x = 0, por lo que la curva tiene la ecuación y 2 = x3 y por tanto f = x3 − y 2 .
En este caso el punto p = (0, 0) es un punto singular ya que

⎪ ∂f

⎪ (P ) = 3x2 |x=0 = 0,
⎨ ∂x



⎩ ∂f (P ) = −2y |y=0 = 0.
∂y

Además, si ponemos f como suma de componentes homogéneas, tenemos que


f (x − 0, y − 0) = 0 + 0 + (−y 2 ) + x3 y, como el polinomio que no se hace cero en
primer lugar es el de grado 2, concluimos con que mp (E) = 2. Además, como
f2 (x, y) = −y 2 = −y · y descompone en factores iguales salvo escalar, se trata
de una cúspide como se puede observar en la figura 1.3.
12 CAPÍTULO 1. TEORÍA BÁSICA

-1 1 2 3

-1

-2

-3

Figura 1.3: Curva singular en la que (0, 0) es una cúspide.

Realizando el mismo proceso con la curva elı́ptica E(K) dada por x2 =


x + x2 tendrı́amos un nodo en (0, 0) ya que f2 (x, y) = x2 − y 2 = (x − y)(x + y)
3

descompone en factores distintos como se puede ver en la figura 1.4.

1.5

1.0

0.5

-1.0 -0.5 0.5 1.0

-0.5

-1.0

-1.5

Figura 1.4: Curva singular en la que (0, 0) es un nodo.

Ahora bien, tanto en el nodo como en la cúspide, el punto (0, 0) causa pro-
blemas en el grupo. Lo curioso será que, dejando fuera del grupo el punto, el
resto de puntos singulares constuirán un nuevo grupo al que denotaremos por
1.6. CURVAS SINGULARES 13

Ens (K). Dicho grupo cumplirá la estructura de grupo de igual forma. Estudia-
remos qué ocurre en cada caso con un par de teoremas, comenzando por el caso
de la cúspide.

Teorema 1.23 (Reducción aditiva). Sea E la curva elı́ptica dada por y 2 = x3


y sea Ens (K) el grupo de los puntos no singulares incluido el punto del infinito.
La aplicación

Ens (K) → K
x
(x, y) →
y
∞ → 0

muestra un isomorfismo entre Ens (K) y K considerado como un grupo aditivo.

En el caso del nodo ocurre algo diferente a lo citado en el teorema anterior,


se produce la reducción multiplicativa.

Teorema 1.24 (Reducción multiplicativa). Sea E la curva y 2 = x2 (x + a) con


0 = a ∈ K, sea Ens el grupo de los puntos no singulares de E con coordenadas
en K y Sea α2 = a. Consideramos la aplicación
y + αx
ψ : (x, y) →
y − αx
∞ → 1.

1. Si α ∈ K, entonces ψ proporciona un isomorfismo entre Ens (K) y K× ,


considerado como un grupo multiplicativo.
2. Si α ∈ K, entonces ψ proporciona un isomorfismo

Ens (K) ∼
= {u + αv | u, v ∈ K, u2 − av 2 = 1},

donde el lado derecho es un grupo bajo la operación multiplicación.


Capı́tulo 2

Puntos de torsión

Los puntos de torsión juegan un papel muy importante en el estudio de las


curvas elı́pticas, puesto que gracias a ellos se puede probar la demostración de
algunos de los lemas del cálculo de grados. En este capı́tulo se hace también
hincapié en el cálculo del grado de endomorfismos del tipo P → nP con n un
natural.

2.1. Puntos de torsión


Definición 2.1 (Puntos de torsión de E). Sea E una curva elı́ptica definida
sobre el cuerpo K, los puntos de torsión de E serán todos aquellos cuyos órdenes
sean finitos. Además, dado n un entero positivo, nos puede interesar calcular
los elementos de torsión de un determinado orden, que definiremos por

E[n] = {P ∈ E(K) | nP = ∞}.

Notar que, como ya ocurrı́a en la curva elı́ptica, ∞ representa el elementro


neutro con lo que una definición alternativa es E[n] = Ker(P → nP ).

Ejemplo 1. Calcular los 2-puntos de torsión.


Como las fórmulas de la curva elı́ptica varı́an dependiendo de la caracterı́stica
del cuerpo, realizaremos el ejercicio en dos casos: cuando la caracterı́stica de K
sea distinta de 2 y cuando sea 2.
Cuando la caracterı́stica de K no es 2, E puede verse como

y 2 = (x − e1 )(x − e2 )(x − e3 ),

donde e1 , e2 , e3 ∈ K. Un punto P = (x, y) satisface 2P = ∞ si y solo si


su tangente respecto a la curva es la vertical. Otra manera de verlo es que P
cumple P = −P y por tanto (x, y) = −(x, y) = (x, −y), deduciendo ası́ que
y = −y ⇒ y = 0 ya que la caracterı́stica es distinta de 2. El sistema que

15
16 CAPÍTULO 2. PUNTOS DE TORSIÓN

tenemos en ese caso será



y = 0,
y 2 = (x − e1 )(x − e2 )(x − e3 ),

que al resolverlo nos lleva a ver que se trata de un grupo isomorfo a Z2 ⊕ Z2 de


la forma
E[2] = {∞, (e1 , 0), (e2 , 0), (e3 , 0)}.

Cuando la caracterı́stica es 2 el ejercicio es más delicado. En el Lema 1.7


vimos que la curva elı́ptica E podı́a tener dos formas:
(I) y 2 + xy + x3 + a2 x2 + a6 = 0 con a6 = 0,
(II) y 2 + a3 y + x3 + a4 x + a6 = 0 con a3 = 0.
Si el punto P = (x, y) satisface 2P = ∞ entonces la tangente de dicho punto
es la vertical y por ello la derivada parcial con respecto a x debe ser cero.
En el primer caso, calculando la derivada parcial y teniendo en consideración
que la caracterı́stica del cuerpo es 2 obtenemos que

= 2y + x = x =⇒ x = 0.
∂y

Sustituyendo en la ecuación correspondiente conseguimos llegar a 0 = y 2 + a6 =



(y + a6 )2 . Ası́ tenemos un único punto de orden 2 y por lo tanto los 2-puntos
de torsión serán

E[2] = {∞, (0, a6 )}.

En el segundo caso, la derivada parcial con respecto a y es ∂y = 2y +a3 = a3 .
En este caso, como a3 = 0 por definición de la curva entonces, no existe ningún
punto de orden dos y por ello

E[2] = {∞} ∼
= 0.

Al igual que como hemos hecho con el ejercicio anterior, se podrı́a proseguir
con 3-puntos de torsión y órdenes superiores y se podrı́a observar que se tiene
la conclusión del siguiente teorema.
Teorema 2.2. Sea E una curva elı́ptica sobre K y sea n un entero positivo,
teniendo en cuenta que la caracterı́stica de K es p, deducimos que
• Si p  n o p = 0 entonces E[n] ∼
= Zn ⊕ Zn .
• Si p > 0 y p | n podemos escribir n = pr n con p  n . Entonces

E[n] ∼
= Z n  ⊕ Z n o E[n] ∼
= Z n ⊕ Z n .

A raı́z de estudiar los diferentes isomorfismos que surgen entre los puntos de
torsión, se emplean dos nuevas nociones respectos a las curvas.
2.2. POLINOMIOS DE DIVISIÓN 17

Definición 2.3 (Tipos de curvas elı́pticas de caracterı́stica p). Sea E una curva
elı́ptica de caracterı́stica p:
∼ Zp
• se llama ordinaria si E[p] =

• se llama supersingular si E[p] ∼


= 0.
En el ejercicio anterior por ejemplo, cuando la caracterı́stica es 2, podemos
deducir que en el primer caso la curva es ordinaria y en el segundo caso es
supersingular.

2.2. Polinomios de división


Los polinomios de división son la piedra angular para calcular tanto el grado
de los endomorfismos P → nP , como la fórmula con la que se obtienen las
coordenadas del punto nP . Esto es muy útil para calcular el grado del propio
endomorfismo. Desafortunadamente los polinomios de división se construyen
recursivamente.
Definición 2.4 (Polinomios de división). Sea E una curva elı́ptica que viene
dada por la fórmula y 2 = x3 + Ax + B, definimos recursivamente los polinomios
de división ψm ∈ Z[x, y, A, B] por
3
ψ2m+1 = ψm+2 ψm − ψm−1 ψm+1 m ≥ 2,
−1
ψ2m = (2y) 2
(ψm )(ψm+2 ψm−1 − ψm−2 ψm+1
2
) m ≥ 3,

con
ψ0 = 0,
ψ1 = 1,
ψ2 = 2y,
ψ3 = 3x4 + 6Ax2 + 12Bx − A2 ,
ψ4 = 4y(x6 + 5Ax4 + 20Bx3 − 5A2 x2 − 4ABx − 8B 2 − A3 ).

Además necesitaremos de unos polinomios auxiliares que nos servirán, sobre-


todo, para que la fórmula de las coordenadas de nP tenga un aspecto más legible.
Serán
2
φm = xψm − ψm+1 ψm−1 ,
ωm = (4y)−1 (ψm+2 ψm−1
2
− ψm−2 ψm+1
2
).
Como los polinomios de división constituiran unas fórmulas, para calcular
la fórmula de nP necesitaremos saber dónde residen dichos polinomios, ya que
tienen que atender a la fórmula
nP = (rz (x), r2 (x)y).
18 CAPÍTULO 2. PUNTOS DE TORSIÓN

Para averiguarlo tenemos el siguiente lema.


Lema 2.5. 
ψn ∈ Z[x, y 2 , A, B] si n es impar
ψn ∈ 2yZ[x, y 2 , A, B] si n es par
φn ∈ Z[x, y 2 , A, B] para todo n

ωn ∈ yZ[x, y 2 , A, B] si n es impar
ωn ∈ Z[x, y 2 , A, B] si n es par
Una vez definidos los polinomios ya podemos introducir uno de los teoremas
claves de esta sección.
Teorema 2.6. Sea P = (x, y) un punto de la curva elı́ptica sobre un cuerpo de
caracterı́stica diferente de 2, y sea n un entero positivo, entonces
 
φn (x) ωn (x, y)
nP = ,
ψn2 ψn (x, y)3
Para calcular el grado del endomorfismo anterior, antes, deberemos introdu-
cir un lema en el que se detallen las potencias de cada uno de los polinomios
previamente definidos.
Lema 2.7. Se tiene que
2
φn (x) = xn + potencias de menor grado,
2
−1
ψn (x) = n2 xn + potencias de menor grado.

El último corolario de esta sección tiene que ver con el grado del endomor-
fismo que estamos estudiando.
Corolario 2.8. Sea E una curva elı́ptica, el endomorfismo de E dado por P →
nP tiene grado n2 .

2.3. Emparejamiento de Weil


El emparejamiento de Weil sobre los n-puntos de torsión de una curva elı́ptica
es la mejor herramienta en el estudio de las curvas elı́pticas, ya que con él
podemos calcular tanto el grado de los endomorfismos, como de la suma de
ellos. Nos apoyaremos en él a la hora de demostrar el teorema de Hasse, debido
a que nos ayudará a saber el número de puntos que presenta una curva elı́ptica
sobre un cuerpo finito.
Definición 2.9 (Raı́ces n-ésimas de la unidad sobre K). Sea E una curva
elı́ptica sobre un cuerpo K de caracterı́stica p y sea n un entero que cumple que
p  n, definimos
μn = {x ∈ K | xn = 1}
como el grupo de la raı́ces n-ésimas de la unidad en K.
2.3. EMPAREJAMIENTO DE WEIL 19

Entonces por el teorema 2.2 sabemos que E[n] ∼ = Zn ⊕ Zn . Además la ecua-


ción xn = 1 no tiene raı́ces múltiples, por lo que hay n raı́ces sobre K. Por lo
tanto μn es un grupo cı́clico de orden n y su generador, al que llamaremos n-raı́z
primitiva de la unidad, es ξ.
Antes de introducir el siguiente teorema, hay que recalcar que la aplicación
en , que se describirá a continuación, es una función que sabemos que existe,
pero que localizarla se escapa del objetivo de este trabajo.
Teorema 2.10. Sea E una curva elı́ptica sobre un cuerpo K de caracterı́stica
p y sea n un entero que cumple que p  n, entonces el emparejamiento de Weil
es una aplicación
en : E[n] × E[n] → μn
que satisface las siguientes propiedades:
1. en es bilineal en ambas variable, lo que viene a decir que se cumple

en (S1 + S2 , T ) = en (S1 , T )en (S2 , T )

y
en (S, T1 + T2 ) = en (S, T1 )en (S, T2 )
para cualquier S, T , S1 , S2 , T1 , T2 ∈ E[n].
2. en es no degenerada en cada variable. Esto significa que si en (S, T ) = 1
para todo T ∈ E[n], entonces S = ∞ y, análogamente, si en (S, T ) = 1
para todo S ∈ E[n], entonces T = ∞.
3. en (T, T ) = 1 para todo T ∈ E[n].
4. en (T, S) = en (S, T )−1 para todo S, T ∈ E[n].
5. en (σS, σT ) = σ(en (S, T )) para todo automorfismo de E σ sobre K.
6. en (α(S), α(T )) = en (S, T )grado(α) para todo endomorfismo separable α so-
bre E. Si los coeficientes de la ecuación que define a E pertenecen a un
cuerpo finito Fq , entonces el afirmación se mantiene cuando α es el en-
domorfismo de Frobenius (a pesar de no ser separable).
Corolario 2.11. Sea {T1 , T2 } una base de E[n], entonces en (T1 , T2 ) es una
n-raı́z primitiva de la unidad.
Demostración. Suponemos que en (T1 , T2 ) = ζ con ζ d = 1, entonces en (T1 , dT2 ) =
en (T1 , T2 )d = ζ d = 1. Además en (T2 , dT2 ) = en (T2 , T2 )d = 1. Sea S ∈ E[n] en-
tonces S = aT1 + bT2 para ciertos enteros a y b, entonces

en (S, dT2 ) = en (T1 , T2 )a en (T2 , dT2 )b = 1.

Este hecho se cumple para todo S, lo que implica que dT2 = ∞. Ası́ deducimos
que d será múltiplo del orden de T2 . Además T2 es parte de una base con lo
que su orden es n y, como d debe dividir a n puesto que es el orden de la raı́z,
concluimos que d = n.
20 CAPÍTULO 2. PUNTOS DE TORSIÓN

Una vez introducido el teorema y corolario anterior ya estamos en condicio-


nes de deducir dos proposiciones que nos servirán para demostrar el teorema de
Hasse en el siguiente capı́tulo.
Antes de comenzar notaremos que dado un endomorfismo α de E podemos
obtener su correspondiente matriz
 
a b
αn =
c d

con entradas en Zn , descrita por la imagen de α de la base {T1 , T2 }.

Proposición 2.12. Sea α un endomorfismo sobre una curva elı́ptica E definida


sobre un cuerpo K de caracterı́stica p y sea n un entero que cumple que p  n,
entonces
det(αn ) ≡ grado(α) (mód n).
Demostración. ζ = en (T1 , T2 ) es una raı́z primitiva de la unidad por el punto
(6) del teorema 2.10 y por tanto

ζ grado(α) =en (α(T1 ), α(T2 )) = en (aT1 + cT2 , bT1 + dT2 )


=en (T1 , T1 )ab en (T1 , T2 )ad en (T2 , T1 )cb en (T2 , T2 )cd
=en (T1 , T2 )ad en (T2 , T1 )cb = en (T1 , T2 )ad en (T1 , T2 )−bc
=en (T1 , T2 )ad−bc = ζ ad−bc .

Con ello concluimos que det(αn ) ≡ grado(α) (mód n).

Proposición 2.13. Sea α, β dos endomorfismos sobre E y sean a, b ∈ Z, el


grado del endomorfismo aα + bβ vendrá dado por

grado(aα + bβ) = a2 grado(α) + b2 grado(β)


+ ab(grado(α + β) − grado(α) − grado(β)).

Demostración. Sea n un entero no divisible por la caracterı́stica del cuerpo K y


representamos α y β por las matrices αn y βn . Como la matriz coordenada de
aα + bβ es aαn + bβn tenemos que

det(aαn + bβn ) = a2 det(αn ) + b2 det(βn )


+ ab(det(αn + βn ) − det(αn ) − det(βn )).

Entonces por la proposición 2.12

grado(aα + bβ) = a2 grado(α) + b2 grado(β)


+ ab(grado(α + β) − grado(α) − grado(β)) (mód n).

Y, como esto es válido para cualquier n, entonces la igualdad será cierta.


Capı́tulo 3

Curvas elı́pticas sobre


cuerpos finitos

Sea F un cuerpo finito y sea E una curva elı́ptica definida sobre F, entonces
existe un número finito de puntos (x, y) con x, y ∈ F y, por lo tanto, E(F) es
un grupo finito. En este capı́tulo trabajaremos con las curvas elı́pticas sobre
cuerpos finitos calculando su orden, que es el objetivo principal del trabajo.
Además en este capı́tulo se demostrará el teorema de Hasse.
Comenzamos con un ejemplo sencillo de cálculo de los puntos de una curva
elı́ptica sobre un cuerpo finito.
Ejemplo 2. Sea E la curva elı́ptica dada por y 2 = x3 + x + 4 sobre F5 . Calcula
todos sus puntos.
Para hallar todos sus puntos haremos una lista de los posibles valores que
puede tomar x, después calcularemos x3 + x + 4 (mód 5) y posteriormente rea-
lizaremos su raı́z cuadrada para ver qué valores puede tomar la coordenada y.
x x3 + x + 4 y Puntos
0 4 ±2 (0, 2), (0, 3)
1 1 ±1 (1, 1), (1, 4)
2 4 ±2 (2, 2), (2, 3)
3 4 ±2 (3, 2), (3, 3)
4 2 - -
∞ ∞ ∞
Ası́ hemos podido ver que E(F5 ) tiene orden 9 y obviamente es abeliano porque
la propiedad conmutativa se cumple en curvas elı́pticas. Por tanto puede ser
isomorfo a Z3 ⊕ Z3 o a Z9 . Para ver de cuál se trata calcularemos el orden de los
elementos. Si en algún momento encontramos un punto que tenga orden mayor
que tres es natural que se trata de Z9 .
Para comprobar si es o no cı́clico lo que hacemos es ejecutar un programa
que he creado escrito en Java utilizando las librerı́as de Bouncy Castle de las
cuales hablaremos más extensamente en el apéndice.

21
22 CAPÍTULO 3. CURVAS ELÍPTICAS SOBRE CUERPOS FINITOS

1 int orden = 1;
2 ECCurve curvaEliptica = new ECCurve.Fp(new BigInteger("5"), new BigInteger("1"),
→ new BigInteger("4"));
3 ECPoint base = curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("2"));
4 ECPoint punto = curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("2"));
5 while(!punto.isInfinity())
6 {
7 System.out.println("("+punto.getX()+","+punto.getY()+")");
8 orden++;
9 punto = punto.add(base);
10 }
11 System.out.println("El orden del punto es " + orden);

Y ejecutando obtenemos el siguiente resultado

(0, 2) = {(0, 2), (1, 4), (3, 2), (2, 3), (2, 2), (3, 3), (1, 1), (0, 3)}

Con lo que el orden del punto (0, 2) es 9 y por lo tanto E(F5 ) será isomorfo
a Z9 . En conclusión E(F5 ) es un grupo abeliano cı́clico de orden 9 y presenta
como generador a (0, 2).
También nos podrı́amos haber ayudado con SageMath introduciendo las si-
guientes órdenes.
1 F = Zmod(5)
2 E=EllipticCurve(F,[1,4])
3 show(E.points())
4 E.cardinality()

3.1. El endomorfismo de Frobenious


Ya se introdujo en la sección 1.5 del primer capı́tulo el endomorfismo de
Frobenius. Este endomorfismo va a ser clave porque apoyándonos en él conse-
guiremos desarrollar la demostración del teorema de Hasse.
Definición 3.1. Sea Fq un cuerpo finito cuya clausura algebraica viene repre-
sentada por Fq y sea

φ q : Fq → Fq ,
x → xq

el endomorfismo de Frobenius sobre Fq . Definimos el endomorfismo de Frobe-


nious orientado a una curva elı́ptica E(Fq ) como

φq (x, y) =(xq , y q ),
φq (∞) =∞.
3.1. EL ENDOMORFISMO DE FROBENIOUS 23

Lema 3.2. Sea E una curva elı́ptica definida sobre Fq y sea (x, y) ∈ E(Fq ),
tenemos
1. φq (x, y) ∈ E(Fq ),
2. (x, y) ∈ E(Fq ) si y solo si φq (x, y) = (x, y).
Demostración. Para la demostración del lema emplearemos la ecuación general
de una curva elı́ptica, por lo tanto tendremos

y 2 + a1 xy + a3 y = x3 + a2 x2 + a4 x + a6 ,

con ai ∈ Fq . Elevamos la ecuación a la potencia q-ésima y obtenemos

(y q )2 + a1 (xq y q ) + a3 (y q ) = (xq )3 + a2 (xq )2 + a4 (xq ) + a6 .

Este hecho significa que (xq , y q ) cumple E y por tanto es solución, con lo que
hemos probado el primer punto del lema. Para probar segundo hay que recordar
que los elementos de Fq en Fq son exactamente los que cumplen que xq = x.
Entonces

(x, y) ∈ E(Fq ) ⇔ x, y ∈ Fq
⇔ φ(x) = x y φ(y) = y
⇔ φ(x, y) = (x, y).

Proposición 3.3. Sea E una curva elı́ptica sobre Fq y sea n un entero positivo
mayor que 0, entonces
1. Ker(φnq − 1) = E(Fqn ),
2. φnq − 1 es un endomorfismo separable de manera que

#E(Fqn ) = grado(φnq − 1) = # Ker(φnq − 1).

Demostración. En el anterior lema veı́amos que (x, y) ∈ E(Fqn ) ⇔ φnq (x, y) =


(x, y) entonces φnq (x, y) − (x, y) = 0 ⇔ (x, y) ∈ E(Fqn ). Por ello es trivial ver
que Ker(φnq − 1) = E(Fqn ) se cumple y por tanto queda probado el primer ı́tem.

En cuanto a la separabilidad de φnq − 1 deducimos que es separable ya que


q  −1. Al saber que es separable y ayudándonos con el teorema 1.16 llegamos
a la conclusión de que grado(φnq − 1) = # Ker(φnq − 1) y utilizando el primer
punto de la proposición queda demostrada.
Lema 3.4. Sean r, s enteros positivos cuyo gcd(s, q) = 1. Entonces

grado(rΦq − s) = r2 q + s2 − rsa,

con a = q + 1 − #E(Fq ).
24 CAPÍTULO 3. CURVAS ELÍPTICAS SOBRE CUERPOS FINITOS

Demostración. Por la proposición 2.13 sabemos que


grado(rΦq − s) = r2 grado(φq ) + s2 grado(−1) + rs(grado(φq − 1)
− grado(φq ) − grado(−1))
= r2 q + s2 + rs(#E(Fq ) − q − 1) = r2 q + s2 − rsa.
Una vez introducido todo lo anterior ya estamos en condiciones de ver y
probar el teorema de Hasse.
Teorema 3.5 (Teorema de Hasse). Sea E una curva elı́ptica sobre el cuerpo
finito Fq , entonces el tamaño de E(Fq ) cumple

|q + 1 − #E(Fq )| ≤ 2 q.
Demostración. Para la demostración de este teorema nos apoyaremos inicial-
mente en la proposición anterior. Sabemos que el grado(rφq + s) ≥ 0 y por ello
r2 q +s2 −rsa ≥ 0. Además recordamos que s no es divisible por la caracterı́stica
del cuerpo, entonces podemos sin problemas dividir por s2 .
 r 2 r
q −a + 1 ≥ 0.
s s
r
Realizamos el cambio de variable x = s y tenemos

Helmut Hasse. Matemáti- qx2 − ax + 1 ≥ 0,


co alemán conocido por sus
contribuciones a la teorı́a de que es precisamente la región superior de una parábola convexa puesto que q
cuerpos de clases, la aplica- toma valores positivos al tratarse de la caracterı́stica del cuerpo. Analizaremos
ción de números p-ádicos a los casos ayudándonos con la parábola limı́trofe en todas sus variantes.
la teorı́a de cuerpos de clases En el primer caso, la parábola puede tomar valores negativos, motivo por el
locales y geometrı́a diofánti- cual incumple la inecuación y debemos descartarla. En el segundo caso, hay una
ca y a las funciones zeta lo- única raı́z doble al cortar con el eje en el origen. En el último caso, no hay raı́ces
cales. reales ya que no corta con el eje, lo que hace que existan dos raı́ces complejas
y, por tanto, el discriminante será negativo.

y y = x2 − C y y = x2 y y = x2 + C

x
x

Figura 3.1: Casos de una parábola convexa con 0 < C ∈ R.

Recapitulando, el discriminante es menor o igual que cero, es decir, a2 −



4q ≤ 0. Por lo tanto |a| ≤ 2 q y, como a = q + 1 − #E(Fq ), entonces

|q + 1 − #E(Fq )| ≤ 2 q
3.2. ÓRDENES DE GRUPOS 25

Con la demostración de este teorema hemos alcanzado el principal objetivo


del proyecto. A partir de ahora pondremos el resultado en práctica y hablaremos
más extensamente del logaritmo discreto.
Para ver un ejemplo del teorema de Hasse en una curva elı́ptica que se emplea
en OpenSSL escogemos p–192 donde
p = 6277101735386680763835789423207666416083908700390324961279,
entonces calculamos el intervalo aproximado que es (a, b) donde
a =6277101735386680763835789423049210091055380025203237060608
b =6277101735386680763835789423366122741112437375577412861952
con lo que el orden del grupo bastante grande.

3.2. Órdenes de grupos


Con el teorema de Hasse hemos conseguido obtener un intervalo lı́mite donde
vivirá la cardinalidad de una curva elı́ptica sobre un cuerpo finito. En esta
sección se discutirán algunos métodos actuales para determinar el orden de
los grupos.

3.2.1. Curvas en subcuerpos


En ocasiones, nosotros nos definimos una curva elı́ptica E sobre un cuerpo
finito Fq y queremos conocer el orden de E(Fqn ) para un cierto valor de n. Para
determinar el orden recurriremos a los siguientes lemas y teoremas.
Teorema 3.6. Sea E una curva elı́ptica definida sobre Fq y sea a = q + 1 −
#E(Fq ), entonces
φ2q − aφq + q = 0
es un endomorfismo de E y a es el único entero k tal que
φ2q − kφq + q = 0.

En otras palabras, si (x, y) ∈ E(Fq ), entonces


2 2
(xq , y q ) − a(xq , y q ) + q(x, y) = ∞
y a es el único entero que la satisface para todo (x, y) ∈ E(Fq ).
Demostración. Sabemos por la proposición 1.16 que cualquier endomorfismo
α = 0 tendrá núcleo finito. Por lo tanto si φ2q − aφq + q tiene un núcleo infinito
significará que es el endomorfismo cero.
Sea m ≥ 1 un entero tal que mcd(m, q) = 1 y sea (φq )m la matriz inducida
por φq que describirá la acción de φq sobre E[m]. Sea
 
s t
(φq )m =
u v
26 CAPÍTULO 3. CURVAS ELÍPTICAS SOBRE CUERPOS FINITOS

Entonces como φq − 1 es separable implicará

# Ker(φq − 1) = grado(φq − 1) ≡ det((φq )m − I)


=sv − tu − (s + v) + 1 (mód m).

Ahora bien, como sv − tu = det((φq )m ) ≡ q (mód m) deducimos por la propo-


sición que # Ker(φq − 1) = q + 1 − a. Por lo tanto,

Traza((φq )m )) = s + v ≡ a (mód m).

Por el teorema de Cayley-Hamilton del álgebra lineal tenemos que

((φq )m )2 − a(φq )m + qI ≡ 0 (mód m),

ya que x2 − ax + q es el polinomio caracterı́stico de φm . Esto significa que el


endomorfismo φ2q − aφq + q es idénticamente cero en E[m], ya que su matriz
coordenada es nula al ser las entradas enteros módulo m. Como hay infinitas
elecciones del valor m y por el teorema 2.2 cada valor m conduce a m2 elementos
en E[m], entonces el núcleo será infinito, por lo que el endomorfismo será cero.

Lema 3.7. Sea sn = αn + β n con α y β tales que x2 − ax + q = (x − α)(x − β),


entonces
sn+1 = asn − qsn−1 ,
para n ≥ 1, tomando s0 = 2 y s1 = a.

Es obvio que sn = αn + β n es un número entero ya que se obtiene recursi-


vamente a partir de multiplicación y resta de enteros.

Teorema 3.8. Sea #E(Fq ) = q + 1 − a para un cierto valor de a, escribimos


x2 − ax + q = (x − α)(x − β), entonces

#E(Fqn ) = q n + 1 − (αn + β n )

para todo n ≥ 1.

Demostración. Sea f (x) = (xn − αn )(xn − β n ) = x2n − (αn + β n )xn + q n .


Entonces x2 − ax + q = (x − α)(x − β) divide a f (x) ya que f (α) = f (β) = 0.
Evaluando f en φq conseguimos

f (φq ) = (φnq )2 − (αn − β n )φnq + q n = Q(φq )(φ2q − aφq + q) = 0,

siendo Q(x) el cociente de dividir f (x) por x2 − ax + q. Y como sabemos por el


teorema 3.6 solo hay un entero k que cumple que φ2qn − kφqn + q n = 0, y dicha
k viene determinada por k = q n + 1 − #E(Fqn ) con lo que

#E(Fqn ) = q n + 1 − (αn + β n ).
3.2. ÓRDENES DE GRUPOS 27

Ejemplo 3. Con respecto al ejemplo anterior ¿Qué ocurrirı́a con un cuerpo de


25 elementos? ¿Y de 125?.
Sabemos que #E(F5 ) = 9 por lo que 9 = q + 1− a = 6− a con lo que a = −3.
Una vez deducido el valor de a obtenemos las raı́ces del polinomio
√ √
−3 − i 11 −3 + i 11
x + 3x + 5 = x −
2
x− .
2 2
√ √
Por lo tanto α = −3−i2 11 y β = −3+i2 11 . Una vez conseguidos todos los valores
ya estamos en condiciones de hallar los cardinales

#E(F25 ) = 25 + 1 − (α2 + β 2 ) = 27,


#E(F125 ) = 125 + 1 − (α3 + β 3 ) = 108.

Comprobamos ahora, también con ayuda de un ordenador, que el resultado


es correcto.

1 F = Zmod(5)
2 E = EllipticCurve(F,[1,4])
3 E.count_points(n=3)

Al ejecutar dichas órdenes en SageMath obtenemos {9, 27, 108}.

3.2.2. Órdenes de puntos


En este apartado averiguaremos los órdenes1 de diferentes puntos apoyándo-
nos tanto en el teorema de Hasse como en el de Lagrange, un resultado funda-
mental de teorı́a de grupos que introducimos a continuación.
Teorema 3.9 (de Lagrange). Sea G un grupo finito, entonces tenemos que:
1. Si H es un subgrupo de G, entonces el orden de H divide al orden de G.
2. Si g ∈ G, entonces el orden de g divide al orden de G.
Ahora bien, por el teorema de Hasse sabemos que #E(Fq ) vive en un inter-

valo de longitud 4 q.

... ...
√ √
q+1−2 q q+1 q+1+2 q

Figura 3.2: Intervalo de longitud 4 q donde vive #E(Fq ).


Cabe destacar que si encontramos un punto cuyo orden es superior a 4 q
(longitud del intervalo) que se halle en ese intervalo habremos encontrado el
1 Sea P ∈ E(Fq ), el orden de P es el menor entero positivo k tal que kP = ∞.
28 CAPÍTULO 3. CURVAS ELÍPTICAS SOBRE CUERPOS FINITOS

orden del grupo #E(Fq ). Esto es ası́ debido a que |P | divide a #E(Fq ) luego
#E(Fq ) = m |P |. Si m > 1 entonces #E(Fq ) se encontrará fuera del intervalo,
luego podemos concluir que m = 1 y #E(Fq ) = |P |.

Ejemplo 4. Sea E una curva elı́ptica determinada por y 2 = x3 + 3x + 1 y


definida sobre F619 . ¿Cuál será su orden?.
Lo primero que haremos será calcular un punto de la curva elı́ptica. Para
ello damos como valor x = 0 y calculamos y que será ±1, localizado los puntos
(0, 1) y (0, 618).
Gracias al programa de ordenador que escribimos a continuación obtenemos
que los órdenes son respectivamente 100 y 300.
1 int orden=1;
2 ECCurve curvaEliptica=new ECCurve.Fp(new BigInteger("619"),new
→ BigInteger("3"),new BigInteger("1"));
3 ECPoint base1=curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("1"));
4 ECPoint punto1= curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("1"));
5 while(!punto1.isInfinity())
6 {
7 orden++;
8 punto1= punto1.add(base1);
9
10 }
11 System.out.println("El orden del punto es " + orden);
12 orden=1;
13 ECPoint base2=curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("618"));
14 ECPoint punto2= curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("618"));
15 while(!punto2.isInfinity())
16 {
17 orden++;
18 punto2= punto2.add(base2);
19
20 }
21 System.out.println("El orden del punto es " + orden);

Ahora aplicando el teorema de Hasse averiguaremos entre qué valores está


comprendido el orden del grupo
√ √
619 + 1 − 2 619 ≤ #E(F619 ) ≤ 619 + 1 + 2 619,

es decir,
571 ≤ #E(F619 ) ≤ 669
. Y como uno de los puntos presentan orden 300, llegamos a la conclusión (apli-
cando el teorema de Lagrange) de que #E(F619 )=600 ya que el orden del punto
debe dividir al orden del grupo.
Ejemplo 5. Sea E una curva elı́ptica determinada por y 2 = x3 + 5x + 4 y
definida sobre F2017 . ¿Cuál será su orden?.
3.2. ÓRDENES DE GRUPOS 29

De forma análoga a la del ejercicio anterior, obtenemos el punto (0, 2) de la


curva. Ahora calcularemos su orden ayudándonos de las siguientes intrucciones
en Java, obteniendo un orden de 517 para este punto.
1 int orden=1;
2 ECCurve curvaEliptica=new ECCurve.Fp(new BigInteger("2017"),new
→ BigInteger("5"),new BigInteger("4"));
3 ECPoint base1=curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("2"));
4 ECPoint punto1= curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("2"));
5 while(!punto1.isInfinity())
6 {
7 orden++;
8 punto1= punto1.add(base1);
9 }
10 System.out.println("El orden del punto es " + orden);

El orden de la curva debe ser múltiplo de 517, por tanto, aplicando el teorema
de Hasse que además nos dice que 1929 ≤ #E(F2017 ) ≤ 2107, deducimos que
#E(F103 ) = 2068.

Ejemplo 6. Sea E una curva elı́ptica determinada por y 2 = x3 + 4x + 1 y


definida sobre F1589851 . Determina el orden del grupo.
Sabemos que (0, 1) es un punto de la curva y ayudándonos de un ordenador
deducimos que su orden es 1588809.
1 int orden = 1;
2 ECCurve curvaEliptica = new ECCurve.Fp(new BigInteger("1589851"), new
→ BigInteger("4"), new BigInteger("1"));
3 ECPoint base1 = curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("1"));
4 ECPoint punto1 = curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("1"));
5 while (!punto1.isInfinity())
6 {
7 orden++;
8 punto1 = punto1.add(base1);
9 }
10 System.out.println("El orden del punto es " + orden);

De nuevo, junto con la hipótesis que resulta del teorema de Hasse, en este
caso 1587331 ≤ #E(F1589851 ) ≤ 1592373 y el teorema de Lagrange, concluimos
que #E(F1589851 ) = 1588809.
Capı́tulo 4

El problema del logaritmo


discreto

En este capı́tulo hablaremos del problema clásico del logaritmo discreto y


comentaremos algunos de los diferentes ataques que se pueden aplicar para
resolverlo como el cálculo del ı́ndice, el método baby-step, giant-step y el método
ρ de Pollard.
Por último, vamos a mostrar que para las clases especiales de curvas elı́pti-
cas, supensingulares y anómalas en concreto, será posible recudir el problema
del logaritmo discreto a una variante más sencilla: en el caso multiplicativo lo
reducimos a un cuerpo finito y en el caso aditivo, a enteros módulo primo. Por
ello sin interés.

Definición 4.1 (Problema clásico del logaritmo discreto). Sea p un primo y


sean a, b enteros tales que a ≡ 0 (mód p) y b ≡ 0 (mód p), suponiendo que
existe un cierto k tal que
ak ≡ b (mód p).
El problema clásico del logaritmo discreto consiste en encontrar ese k.

Generalmente se toma (G, ·) y a, b ∈ G pero también se puede definir sobre


(G, +) como por ejemplo E(Fq ) en cuyo caso a y b serı́an puntos de la curva E
y se intentarı́a localizar el entero k que cumpla que ka = b.
A continuación describiremos cada uno de los ataques mencionados anterior-
mente con los cuales se tratará de averiguar a partir de a y b el valor de k.

4.1. Cálculo del ı́ndice


Sea p un primo y sea g el generador del grupo cı́clico F×
q , entonces para todo
h ≡ 0 (mód p) podemos encontrar un único k módulo p − 1 tal que h ≡ g k para
un cierto valor . Llegados a este punto, definimos el logaritmo discreto de h con

31
32 CAPÍTULO 4. EL PROBLEMA DEL LOGARITMO DISCRETO

respecto a la base g como L(h) = k tal que

g L(h) ≡ h (mód p).

Si tomamos ahora h1 y h2 , entonces

g L(h1 h2 ) ≡ h1 h2 ≡ g L(h1 )+L(h2 )

lo que significa que L(h1 h2 ) ≡ L(h1 ) + L(h2 ) (mód p − 1).


El ataque del cálculo del ı́ndice consiste en calcular el logaritmo de primos
pequeños formando una base de factores y, a partir de ellos, calcular potencias
empleando la propiedad anterior.

Ejemplo 7. Sea p = 179424673 y sea g = 15, debemos calcular el valor de k


tal que 15k ≡ 134418867 (mód 179424673).
Primero nos construiremos una base de pequeños primos que será nuestra ba-
se de factores B = {2, 3, 5, 7, 11, 13, 17, 19, 23} y calcularemos sus logaritmos.
Para hallar sus logaritmos buscaremos

15x ≡ ± producto de primos de la base B (mód 179424673).

Con el programa de ordenador y teniendo en cuenta de que las columnas se


corresponden con el exponente de los elementos de la base excepto la última
que determina el exponente de el generador 15.

⎛ ⎞
0 1 1 0 0 0 0 0 0 1
⎜ 5 2 0 2 1 0 0 0 1 5472 ⎟
⎜ ⎟
⎜ 4 0 0 0 0 1 0 0 2 18636 ⎟
⎜ ⎟
⎜ 3 5 0 3 1 0 0 0 1 19490 ⎟
⎜ ⎟
⎜ 6 3 0 0 1 0 2 1 0 20083 ⎟
⎜ ⎟
⎜ 0 0 3 1 1 0 1 0 1 27955 ⎟
⎜ ⎟
⎜ 6 0 0 0 0 3 0 1 1 31151 ⎟
⎜ ⎟
⎜ 2 3 0 1 0 1 0 0 2 32654 ⎟
⎜ ⎟
⎜ 5 1 0 2 0 3 1 0 0 39884 ⎟
⎜ ⎟
⎜ 4 2 0 0 0 1 3 0 0 41980 ⎟
⎜ ⎟
⎜ 1 0 1 0 1 2 0 2 1 45753 ⎟
⎜ ⎟
⎜ 4 2 0 0 0 0 0 3 0 53314 ⎟
⎜ ⎟
⎜ 0 0 0 2 1 2 1 1 0 54485 ⎟
⎜ ⎟
⎜ 2 6 0 0 1 0 0 0 1 59164 ⎟
⎜ ⎟
⎝ 11 0 3 2 1 0 0 0 0 59264 ⎠
2 5 0 1 0 0 0 3 0 67332

Escalonando y tomando logaritmos conseguimos


4.2. BABY-STEP GIANT-STEP 33

L(2) = 31549672
L(3) = 4150476
L(5) = 175274197
L(7) = 50661934
L(11) = 102414445
L(13) = 75110238
L(17) = 49760482
L(19) = 134609230
L(23) = 168491863

Ya sabemos todos los logaritmos de nuestra base de factores B. Ahora bus-


caremos el valor k tal que 15k ≡ 134418867 (mód 179424673). Para calcularlo
seguiremos como estrategia localizar un valor de i tal que 15i · 134418867 ≡
producto de elementos de la base. En este caso

151 280 · 134418867 ≡ 132 · 172 · 23 (mód 179424673)

Por lo que,

L(134418867) ≡ 2L(13)+2L(17)+L(23)−1280 ≡ 59382679 (mód 179424673),

entonces 1559382679 ≡ 134418867 (mód 179424673).

El código de este ejercicio se puede encontrar en el apéndice A. Y además,


también mencionar que el cálculo del logaritmo mediante el √ método del ı́ndice
puede lograr una complejidad computacional de hasta Ln [ 12 , 2 + o(1)].1
A continuación se detallarán dos ataques más, en este caso aplicados al
logaritmo discreto sobre una curva elı́ptica. Sea E una curva elı́ptica sobre un
cuerpo finito Fq , sean P y Q dos puntos de E donde P es un generador de
la curva, entonces el logaritmo discreto consistirá en localizar k ∈ Fq tal que
Q = kP .

4.2. Baby-step giant-step


Este método que viene a traducirse como ((paso pequeño, paso gigante)) re-
√ √
quiere de aproximamente q pasos y alrededor de q zonas de memoria. Por
ello solo funcionará bien para un valor de q moderado. El procedimiento consiste
en lo que sigue.

1. Elegir un m ≥ q y calcular mP .
α
1L = e(c+o(1))(log n) (log log n)1−α .
n [α, c]
34 CAPÍTULO 4. EL PROBLEMA DEL LOGARITMO DISCRETO

2. Crear y almacenar todos los valores iP con 0 ≤ i < m.

3. Calcular los puntos Q − jmP para j = 0, 1, · · · , m − 1 hasta que uno


coincida con un elemento de los anteriores guardados.

4. Si iP = Q − jmP , tenemos que Q = kP con k = i + jm (mód q).

Este algoritmo recibe este nombre porque los puntos iP se calculan añadiendo
P a (i−1)P (paso pequeño), mientras que el punto Q−jmP se calcula sumando
−mP a Q − (j − 1)mP (paso gigante).

Ejemplo 8. Sea E(F59 ) una curva elı́ptica dada por y 2 = x3 + 7x + 4 y sea


P = (0, 2) y Q = (45, 17), entonces intentaremos calcular el logaritmo discreto
en base P de Q; es decir, hallaremos k donde Q = kP .
Por el teorema de Hasse
√ sabemos que el orden de E(F59 ) es como mucho
√ √
q + 1 + 2 q = 59 + 1 + 2 59 ∼ = 75 y como m ≥ q entonces tomamos m = 9.
Los puntos iP para 1 ≤ i ≤ 8 son respectivamente

(0, 2), (51, 12), (28, 33), (32, 30), (25, 13), (56, 30), (18, 48), (57, 49).

Ahora calculamos Q − jmP para 0 ≤ j ≤ 8 y obtenemos

(45, 17), (47, 27), (53, 10), (52, 54), (56, 30), (28, 26), (41, 51), (46, 31), (1, 37)

y observamos que Q − 4mP = 6P , es decir Q = 6P + 36P = 42P. Por lo tanto


k = 42.
Para ayudarnos a resolver el ejercicio hemos utilizado el siguiente código con
el cual hemos ido consiguiendo los pasos pequeños y los pasos gigantes.
1 int m=9, i=1, j=0;
2 ECCurve curvaEliptica=new ECCurve.Fp(new BigInteger("59"),new BigInteger("7"),new
→ BigInteger("4"));
3 ECPoint base=curvaEliptica.createPoint(new BigInteger("0"), new BigInteger("2"));
4 ECPoint punto= curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("2"));
5 System.out.println("Calculamos los puntos iP");
6 while(i < m)
7 {
8 System.out.print(i+"P : (" +Integer.parseUnsignedInt(punto.getX().toString(),
→ 16));
9 System.out.println("," +Integer.parseUnsignedInt(punto.getY().toString(),
→ 16)+")");
10 i++;
11 punto= punto.add(base);
12
13 }
14 ECPoint puntomP=punto;
15 ECPoint puntoQ=curvaEliptica.createPoint(new BigInteger("45"), new
→ BigInteger("17"));
16 ECPoint puntoQmP;
17 System.out.println("Calculamos los puntos Q-jmP");
18 while (j<m)
19 {
4.3. MÉTODO ρ DE POLLARD 35

20 puntoQmP=puntoQ.subtract(puntomP.multiply(new BigInteger(String.valueOf(j))));
21 System.out.print("Q-"+j+"mP :
→ ("+Integer.parseUnsignedInt(puntoQmP.getX().toString(), 16));
22 System.out.println("," + Integer.parseUnsignedInt(puntoQmP.getY().toString(),
→ 16)+")");
23 j++;
24 }

Cabe destacar que la complejidad del algoritmo baby-step gigant-step es de



O( q).

4.3. Método ρ de Pollard


Una desventaja importante del método del paso pequeño, paso de gigante
es que necesita gran capacidad de almacenamiento. El método ρ de Pollard,
en cambio, emplea el mismo tiempo de cálculo pero haciendo uso de menor
almacenamiento.
Al igual que el método anterior intentamos romper el logaritmo discreto y
por tanto a partir de los puntos P y Q queremos hallar k donde Q = kP . Sea
Fq un grupo finito de orden q, elegimos una función aleatoria f : Fq → Fq .
Empezamos eligiendo un elemento P0 aleatoriamente al que aplicaremos f y
calculamos los elementos Pi+1 = f (Pi ) hasta un cierto momento. Como Fq es
un conjunto finito, y teniendo en cuenta la paradoja de cumpleaños, será muy
probable que f repita valores y por lo tanto existirá i0 < j0 tal que

Pi0 +1 = f (Pi0 ) = f (Pj0 ) = Pj0 +1 .

Entonces la secuencia Pi será periódica de periodo j0 − i0 .

P4
Pi = P j P5

P2
P10 P6

P1 P9 P7
P8

P0

Figura 4.1: Gráfico de nodos del método ρ de Pollard.

Se puede observar que la figura 4.1 muestra una apariencia similar a la letra
ρ y por ello recibe dicho nombre.
36 CAPÍTULO 4. EL PROBLEMA DEL LOGARITMO DISCRETO

El problema reside en cómo escoger adecuadamente la función f . Una manera


de hacerlo es dividir el grupo Fq en s subconjuntos disjuntos de más o menos el
mismo tamaño, que denotaremos por Si . Para ello se eligen ai , bi aleatoriamente
obteniendo 2s números. Una vez conseguidos se calcula

Mi = ai P + bi Q.

Finalmente, definimos
f (g) = g + Mi si g ∈ Si .
Por último elegimos enteros aleatorios a0 y b0 para calcular P0 = a0 P + b0 Q,
que será el punto de inicio de nuestro camino. Mientras calculamos los sucesivos
puntos Pj debemos almacenar cómo están expresados en términos de sumandos
de P y Q. Cuando encontremos una coincidencia tendremos entonces

Pj 0 = u j 0 P + v j 0 Q = u i 0 P + v i 0 Q = P i 0 ,

por lo tanto
(ui0 − uj0 )P = (vj0 − vi0 )Q.
Y si d = mcd(vj0 − vi0 , q) entonces tendremos que mcd(vj0 − vi0 , q) = d con lo
que
u i − uj 0 q
k≡ 0 (mód ).
v j 0 − v i0 d

Ejemplo 9. Sea G = E(F78341 ), donde E es una curva elı́ptica dada por y 2 =


x3 + x + 1 y sean P = (0, 2) y Q = (20563, 70190) puntos de E, trataremos de
calcular k tal que Q = kP , es decir, hallaremos el logaritmo discreto en base P
de Q. Además sabemos que el orden de P es 77892.
Para resolver el ejercicio me he ayudado con una clase de Java creada por
mı́ misma que se encuentra en el apéndice A. En nuestro caso tomamos s = 3 y
escogemos al azar s+1 puntos.

P0 = 1P + 9Q,
M0 = 3P + 9Q,
M1 = 2P + 7Q,
M2 = 6P + 8Q.

Consideramos además la función f definida por

f : E(F78341 ) → E(F78341 )
(x, y) → f (x, y) = (x, y) + Mi ,

donde i vendrá dada por i ≡ x (mód 3), considerando x como un entero tal que
0 ≤ x < 78341. Además definimos f (∞) = ∞. Calculamos ahora los sucerivos
4.4. CURVAS SUPERSINGULARES 37

puntos Pj obteniendo
P0 = (326, 69),
P1 = (59657, 30493),
P2 = (22531, 63410),
P3 = (56500, 8681),
P4 = (4450, 1929),
..
.
P270 = (4772, 7004),
P271 = (56865, 72629),
P272 = (33410, 56425),
..
.
P554 = (11656, 54130)
.
P555 = (56865, ..72629),
P556 = (33410, 56425).

En nuestro caso podemos ver que la sucesión comienza a repetirse en P271 =


P555 y, como P271 = 1010P + 2168Q y P555 = 2036P + 4435Q, entonces
∞ = P555 − P271 = 1026P + 2267Q.
Ahora bien, como sabemos que el orden de P es 77892 podemos concluir que
Q ≡ (−2267)−1 1026P ≡ 74490P (mód 77892). Ası́ hemos conseguido hallar el
logaritmo discreto en base P de Q que es, precisamente, k = 74490.

4.4. Curvas supersingulares


Las curvas supersingulares tienen propiedades muy interesantes que desglo-
saremos en esta sección. Sea E(Fq ) una curva elı́ptica, diremos que es supersin-
gular si E[p] = {∞}, es decir, si no existen puntos de orden p.
Proposición 4.2. Sea E una curva elı́ptica sobre Fq , donde q es una potencia
del primo p y sea a = q + 1 − #E(Fq ), entonces E será supersingular si y solo
si a ≡ 0 (mód p) o, de manera equivalente, si #E(Fq ) ≡ 1 (mód p).
Demostración. Escribimos x2 − ax + q = (x − α)(x − β) y por el teorema 3.8,
sabemos que
#E(Fqn ) = q n + 1 − (αn + β n ).
Además, por el lema 3.7, podemos decir que los sn = αn + β n satisfacen la
relación de recurrencia
s0 = 2, s1 = a, sn+1 = asn − qsn−1 .
38 CAPÍTULO 4. EL PROBLEMA DEL LOGARITMO DISCRETO

Para la demostración de la proposición haremos dos casos. Primero supo-


nemos que a ≡ 0 (mód p). Entonces, si s1 = a ≡ 0 (mód p), esto implica que
sn+1 ≡ 0 (mód p) para todo n ≥ 1. Por lo tanto,

#E(Fqn ) = q n + 1 − sn ≡ 1 (mód p),

con lo que no habrá puntos de orden p en E(Fqn ) para todo n ≥ 1. Ademas, como
Fq = ∪n≥1 Fqn , significará que no encontraremos puntos de orden p en E(Fq ).
En el otro caso suponemos que a ≡ 0 (mód p). La recurrencia implica que
sn+1 = asn (mód p) para todo n ≥ 1. Por ello, como s1 = a, tendremos que
sn = an (mód p) para todo n ≥ 1. Ası́,

#E(Fqn ) = q n + 1 − sn ≡ 1 − an (mód p).

Además, por el pequeño teorema de Fermat, sabemos que ap−1 ≡ 1 (mód p).
En resumen, tenemos E(Fqp−1 ) cuyo orden es divisible por p, es decir, por el
teorema de Cauchy para grupos finitos, existe un punto de orden p, luego no es
supersingular.
Por último, para acabar de demostrar el lema, tendremos que

#E(Fq ) = q + 1 − a ≡ 1 − a (mód p),

luego #E(Fq ) ≡ 1 (mód p) si y solo si a ≡ 0 (mód p).


Una caracterı́stica atractiva de las curvas supersingulares es que los cálculos
computacionales que tienen que ver con la multiplicación de un entero con un
punto pueden, habitualmente, hacerse en mucho menos tiempo del esperado
como podemos ver a continuación.
Suponemos que E es una curva elı́ptica supersingular definida sobre Fq , sea
P = (x, y) un punto de E(Fqn ) para cualquier n ≥ 1, sea k un entero positivo y
sea n un entero grande, con lo que pretendemos calcular kP.
Asumimos que a = 0 entonces

φ2q + q = 0.

Ası́ podemos deducir que


 2 2

q(x, y) = −φ2q (x, y) = xq , −y q .
2 2
El cálculo de xq y y q involucra aritmética de cuerpos finitos, por lo que
el par puede ser generado mucho más rápido que con los cálculos de curvas
elı́pticas. Para una mejor comprensión exponemos el procedimiento en cuatro
sencillos pasos.
1. Desarrollamos k en base q

k = k0 + k1 q + k2 q 2 + · · · + k r q r ,

con 0 ≤ ki < q.
4.4. CURVAS SUPERSINGULARES 39

2. Calculamos ki P = (xi , yi ) para cada i.


 2i 2i

3. Calculamos q i ki P = xqi , (−1)i yiq para cada i

4. Sumamos los puntos q i ki P para 0 ≤ i ≤ r.

Observamos que el principal beneficio se encuentra en el tercer paso, dónde


en vez de hacer cálculos con curvas elı́pticas, los hacemos en un cuerpo finito
como habı́amos adelantado. Aunque a priori parece ventajoso por el ahorro
computacional que implica, criptográficamente hablando no son deseables, pues
el esfuerzo para romper el logaritmo discreto se ve también mermado.
Capı́tulo 5

Criptografı́a

5.1. Introdución a la criptografı́a


Las transacciones que se realizan a través de la red pueden ser interceptadas,
por lo que la seguridad de esta información debe garantizarse. Este desafı́o y
el gran estudio sobre el tema ha generalizado la criptografı́a, dando lugar a un
concepto más amplio del que toma parte, la criptologı́a. Esta rama se divide en
dos vertientes:

1. Criptografı́a. Se ocupa del estudio de los algoritmos, protocolos y siste-


mas que se utilizan para proteger la información y dotar de seguridad a
las comunicaciones y a las entidades partı́cipes.

2. Criptoanálisis. Se encarga de conseguir captar el significado de mensa-


jes construidos mediante criptografı́a sin tener autorización para ello. Su
objetivo es buscar un punto débil de las técnicas criptográficas para ex-
plotarlo reduciendo o incluso eliminando la seguridad, que teóricamente,
aportaba esa técnica criptográfica.

5.1.1. Criptografı́a
La criptografı́a fue inicialmente una rama de las matemáticas aunque actual-
mente tiene gran peso en la informática. La criptografı́a, entre otros objetivos,
hace uso de métodos y técnicas para cifrar un mensaje o archivo por medio de
un algoritmo, usando una o más claves. Su objetivo es pues diseñar, implemen-
tar e implantar sistemas dotándolos de alguna de seguridad. Por tanto, algunas
de las propiedades de las que se ocupa la criptografı́a son:

1. Confidencialidad. Garantiza que la información sea accesible únicamen-


te por el personal autorizado. Para conseguirlo utiliza códigos y técnicas
de cifrado.

41
42 CAPÍTULO 5. CRIPTOGRAFÍA

2. Integridad. Vela por la plenitud de la información. Para conseguirlo pue-


de usar funciones hash criptográficas, protocolos de compromiso de bit o
protocolos de notarización electrónica.

3. No repudio. Permite vincular un documento o transacción a una persona


o sistema de gestión criptográfico automatizado. Para conseguirlo se puede
usar por ejemplo firmas digitales.

4. Autenticación. Proporciona mecanismos que permiten verificar la identi-


dad del comunicador. Para conseguirlo puede usar por ejemplo los códigos
de autenticación (MAC por sus siglas en inglés).

5. Soluciones a problemas de la falta de simultaneidad en la tele-


firma digital de contratos. Para conseguirlo puede usar por ejemplo
protocolos de transferencia inconsciente.

Diremos que un sistema criptográfico es seguro respecto a una tarea si un


adversario con capacidades especiales no puede romper esa seguridad, es decir,
el atacante no puede realizar esa tarea especı́fica.
Cabe destacar que la codificación se entenderı́a por una transformación de un
mensaje a través de las reglas o normas de un código o lenguaje predeterminado,
por lo que distarı́a de la idea de cifrado si el código o lenguaje es conocido.

5.1.2. Funciones hash


Una de las principales herramientas para garantizar la integridad del men-
saje son las funciones hash. Más adelante veremos que, habitualmente, en los
algoritmos de firma se suele firmar el valor hash del mensaje a enviar. De esta
forma el receptor, una vez que verifique la firma y calcule el hash del mensaje,
puede comparar el valor calculado con el recibido y ver si el mensaje ha sufrido
modificaciones.
Una función hash o función resumen es una función h : Fm → Fn con n, m ∈
N y m > n que toma un mensaje de longitud arbitraria como entrada y produce
una salida de longitud fija, que llamamos valor hash o, simplemente, hash. Un
hash es un dato que se calcula a partir de otro dato más voluminoso.
Debido a que el tamaño del hash de un dato es menor que el del valor de
entrada puede darse el caso de que existan colisiones, es decir, que dos datos
diferentes puedan dar lugar al mismo resumen luego la función hash no es in-
yectiva.
Una buena función hash debe tener las dos propiedades siguientes:

1. Debe ser improbable que aparezcan colisiones (en los casos de aplicación
necesariamente existirán colisiones, pero deben ser poco frecuentes).

2. Una variación pequeña en el argumento de entrada debe producir valores


hash muy diferentes (es decir, función mal condicionada).
5.1. INTRODUCIÓN A LA CRIPTOGRAFÍA 43

Además a las funciones hash se les puede añadir una propiedad más, exi-
giendo que sean criptográficas. Con ello se impone que a partir del dato hash
sea difı́cil encontrar la preimagen, es decir, la función hash no debe tener una
inversa fácil de calcular.

5.1.3. Cifrado
El cifrado es un método que permite a través de una clave de cifrado au-
mentar la seguridad de un mensaje o archivo de manera que sea difı́cil leerlo si
la persona no conoce la clave de descifrado.
Según como sean las claves de cifrado y de descifrado, podemos hablar de:

1. Cifrado simétrico. Aquel cuya clave de cifrado y de descifrado se dedu-


cen fácilmente una a partir de la otra, incluso pueden ser la misma.

2. Cifrado asimétrico. También llamados de clave pública. Son aquellos


en los que existe una clave pública, que puede ser conocida por todos, y
una clave privada, que no debe poder obtenerse fácilmente a partir de la
pública.

Algunos de los métodos de cifrado simétrico más populares son DES (Data
Encryption Standard ) y AES (Advanced Encryption Standard ), mientras que
en el cifrado asimétrico encontramos métodos como Diffie-Hellman, ElGamal y
RSA (nombrada ası́ por sus creadores:Rivest, Shamir y Adleman).

5.1.4. Acuerdo de claves


El cifrado simétrico tiene grandes ventajas frente el asimétrico ya que es
mucho más eficiente pero puede generar muchos problemas, sobretodo a la hora
de acordar qué clave emplear al necesitar un medio seguro para compartirla.
En la actualidad, para que dos entidades acuerden su clave pueden realizar
una comunicación mediante cifrado asimétrico para pasar la clave. Una vez es
conocida por ambas partes, ya se pueden emplear cifrados simétricos, con las
ventajas que conlleva. Otra alternativa para establecer una clave compartida
serı́a utilizar un protocolo de intercambio de llaves.
Un protocolo de intercambio de claves es un protocolo criptográfico en el que
se establece una secuencia de pasos, entre dos o más participantes, a través de la
cual los participantes se ponen de acuerdo en el valor de una información secreta
compartida. A esta información secreta compartida se le suele llamar clave,
debido a que se suele usar para generar la clave de algún algoritmo criptográfico.

Un ejemplo de este tipo de protocolos es el protocolo criptográfico Diffie-


Hellman, debido a Whitfield Diffie y Martin Hellman, que utiliza una canal
inseguro de manera anónima. Se emplea generalmente como medio para acor-
dar claves simétricas que serán empleadas para el cifrado de una sesión. Aún
44 CAPÍTULO 5. CRIPTOGRAFÍA

siendo un protocolo no autenticado, provee las bases para varios protocolos au-
tenticados. Su seguridad radica en la extrema dificultad de calcular logaritmos
discretos en un grupo finito.

5.2. Infraestructura de clave pública, PKI


Para afrontar el problema de garantizar todas las propiedades de la cripto-
grafı́a surge la infraestructura de clave pública gracias a la cual conseguiremos
garantizar con seguridad las diferentes operaciones criptográficas.
Definición 5.1 (Infraestructura de clave pública). Una infraestructura de clave
pública o PKI es una combinación de hardware y software, polı́ticas y procedi-
mientos de seguridad que permiten la ejecución con garantı́as de operaciones
criptográficas como el cifrado, la firma digital o el no repudio de transacciones
electrónicas.
La tecnologı́a de una PKI se hace necesaria ya que permite a los usuarios
autenticarse frente a otros usuarios y usar la información de los certificados
de identidad para cifrar y descifrar mensajes, firmar digitalmente información,
garantizar el no repudio de un envı́o, etc. Para ello necesita de diferentes com-
ponentes:
• Autoridad de certificación (CA): es la encargada de la emisión y revocación
de certificados.
• Autoridad de registro (RA): valida la identidad de los titulares de los
certificados.
• Autoridad de validación (VA): se ocupa de la comprobación de la validez
de los certificados.
• Repositorios, los hay de varios tipos a su vez:
− De certificados digitales almacenamiento y recuperación de certifica-
dos.
− De sellos de tiempo almacenamiento y recuperación de sellos de tiem-
po.
− De CRL almacenamiento y consulta de listas de revocación.
• Autoridad de sellado de tiempo (TSA) emisión de sellos de tiempo de
documentos.
Las operaciones criptográficas de clave pública son procesos en los que se
utilizan unos algoritmos de cifrado conocidos y accesibles para todos. Por es-
te motivo, la seguridad que puede aportar la tecnologı́a PKI está fuertemente
ligada a la privacidad de la llamada clave privada, condicionada por los proce-
dimientos, operaciones y polı́ticas de seguridad aplicadas.
Es de vital importancia las polı́ticas de seguridad en esta tecnologı́a, puesto
que ni los dispositivos más seguros ni los algoritmos de cifrado más fuertes sirven
de nada si, por ejemplo, una copia de clave privada se hace pública.
5.2. INFRAESTRUCTURA DE CLAVE PÚBLICA, PKI 45

Figura 5.1: Componentes y esquema de funcionamiento de una PKI.

5.2.1. Certificado digital


Para paliar los problemas de seguridad se intenta conseguir que las comuni-
caciones cumplan todas las propiedades criptográficas, por ello, para garantizar
la autenticidad, surgen los certificados digitales.

Definición 5.2 (Certificado digital). Certificación electrónica que vincula a


una persona fı́sica, organismo o empresa con unos datos de verificación de fir-
ma y que confirma su identidad. Es necesaria la colaboración de un tercero de
confianza que emita el certificado. Esta entidad de confianza es la autoridad de
certificación o CA, que puede ser un organismo público o empresa reconocida
en Internet.

Cada CA presenta su par de claves pública y privada, conservando la clave


privada guardada de forma segura. Las claves públicas de los usuarios, que
soliciten un certificado a dicha entidad, son junto con su identidad son firmadas
por la clave privada de la CA, dando lugar a los certificados digitales. Hay varios
tipos de certificados de CA:

• Cruzados: en el que el emisor y el sujeto son CA diferentes.

• Autoemitidos: donde el emisor y el sujeto son la misma CA.


46 CAPÍTULO 5. CRIPTOGRAFÍA

• Autofirmados o certificados raı́z: son autoemitidos y la firma es verificada


mediante la clave pública contenida en el propio certificado.

El Gobierno de España como entidad de confianza raı́z se apoya en la FNMT-


RCM1 , cuyo certificado, naturalmente, es autofirmado.
Cuando la clave privada de un certificado se usa para firmar otro certificado
de la misma u otra CA se produce una cadena de confianza. El principio de la
cadena es el certificado raı́z y la confianza de un certificado de la cadena se basa
en la confianza de todos los certificados superiores.
En la seguridad siempre debe partirse de un punto de confianza, de lo con-
trario entrarı́amos en un cı́rculo vicioso sin fin.

5.2.2. Firma digital


Una firma digital da al destinatario seguridad en que el mensaje fue creado
por el remitente y que no fue alterado durante la transmisión. Por ello tiene
gran importancia en la seguridad de las comunicaciones.

Definición 5.3 (Firma digital). La firma digital es una aplicación de la crip-


tografı́a de clave pública que garantiza la integridad, la autentificación y el no
repudio.

Figura 5.2: Diagrama de generación y comprobación de la firma digital.

1 Fábrica Nacional de Moneda y Timbre - Real Casa de la Moneda.


5.3. CRIPTOGRAFÍA EN CURVAS ELÍPTICAS 47

5.3. Criptografı́a en curvas elı́pticas


Uno podrı́a preguntarse por qué usar curvas elı́pticas en criptografı́a. La
razón es que las curvas elı́pticas proveen de una seguridad equivalente a los
sistemas criptográficos clásicos, pero utilizando un menor número de bits. De
lo anterior se deduce que las curvas elı́pticas son óptimas para dispositivos que
presenten un tamaño de almacenamiento pequeño o con una menor potencia de
cómputo.
A lo largo del apartado dispondremos de tres personajes: Alicia, Roberto y
Eva. Alicia será la encargada enviar a Roberto el correspondiente mensaje, para
ello Alicia deberá cifrar el texto claro con el fin de que Eva, que es una fisgona,
no consiga leer el mensaje a partir del texto cifrado.
Obviamente Alicia y Roberto necesitan establecer una clave simétrica y para
ello utilizarán criptografı́a de clave pública. Unos de los sistemas más famosos de
clave pública son el sistema RSA, basado en la dificultad de factorizar enteros
en primos y el sistema ElGamal, que se apoya en el problema del logaritmo
discreto.

5.3.1. Intercambio de clave Diffie-Hellman


Consideramos que Alicia y Roberto no han tenido contacto con anterioridad
y los únicos canales de comunicación de los que disponen son públicos. Una
manera de establecer la clave simétrica es con el método de Diffie-Hellman que
se describe a continuación.

1. Alicia y Roberto acuerdan públicamente la curva elı́ptica E sobre el cuerpo


finito Fq donde trabajarán. Además ellos establecen un punto P ∈ E(Fq )
de manera que el subgrupo generado por P sea de un orden elevado.

2. Alicia escoge un número secreto aleatorio a y calcula Pa = aP , y es Pa lo


que envı́a a Roberto.

3. Del mismo modo Roberto también escoge un número aleatorio b y halla


Pb = bP , mandando Pb a Alicia.

4. Alicia calcula aPb = abP y Roberto bPa = abP .

5. Alicia y Roberto además habrán acordado publicamente qué bits les in-
teresa extraer de abP para obtener la clave.

Hoy en dı́a no se conoce ningún algoritmo eficiente que permita encontrar


abP a partir de P , aP y bP sin conocer a o b. De este modo, si Eva fuese
capaz de hallar abP entonces estarı́a resolviendo un problema para el cual la
comunidad matemática no ha encontrado todavı́a solución eficiente.
48 CAPÍTULO 5. CRIPTOGRAFÍA

5.3.2. Cifrado de clave pública ElGamal


De manera análoga al procedimiento anterior, Alicia y Roberto establecen
una curva elı́ptica E sobre un cuerpo finito Fq de forma que sea prácticamente
imposible calcular el logaritmo discreto con los medios actuales. En este caso
Roberto tiene como llave pública los puntos P y B = sP donde P es un punto
de orden elevado, siendo s la llave privada presentará s.
Alicia conoce la información pública de Roberto ya que la puede obtener de
su certificado digital por ejemplo. Para enviar Alicia un dato, usualmente una
cadena correspondiente a una clave simétrica de a lo sumo unos cientos de bits,
a Roberto deberá realizar los siguientes pasos:

1. Descargarse la clave pública de Roberto.


2. Expresar su mensaje como un punto M ∈ E(Fq ).
3. Elegir un entero k aleatorio y secreto con el que calcula M1 = kP .
4. Calcular M2 = M + kB.
5. Enviar a Roberto M1 y M2 .

Roberto, tras recibir la información, procederá a calcular M apoyándose en que

M = M2 − sM1 = (M + kB) − s(kP ) = M.

De nuevo Eva, aún conociendo M1 y M2 , le será imposible calcular s a partir


de B y P por lo que el mensaje estará a salvo.

5.3.3. Firma digital ElGamal


A pesar de que los mensajes están cifrados en este caso Eva se podrı́a ha-
cer pasar por Alicia y enviar otro mensaje, es decir, con el método anterior
no podemos asegurar la identidad del emisor. Además el mensaje por internet
podrı́a llegar dañado debido, por ejemplo, a la distorsión de las señales, o incluso
Alicia podrı́a negar que ella haya enviado el mensaje. Para paliar todos estos
problemas está la firma digital y, en particular, el proceso de firma ElGamal.
Supongamos que de manera parecida a como realizamos la firma manuscrita,
firmasemos un documento electrónico añadiendo al documento simplemente la
firma de Alicia digitalizada. En este caso Eva podrı́a copiar la firma de Alicia y
añadirla a cualquier documento, con lo que no cumplirı́amos los objetivos de la
firma digital. Por ello la firma digital requiere de unos pasos que hay que seguir
minuciosamente.
Buscamos un método tal que sea sencillo verificar que una firma es válida,
pero que sea prácticamente imposible que otra persona se haga pasar por Alicia.
Para ello Alicia deberá añadir algún dato calculado a partir del mensaje y de su
clave privada, de ese modo, se espera que nadie salvo Alicia, que dispone de la
clave, sea capaz de calcular ese dato. Además usando la clave pública de Alicia
5.3. CRIPTOGRAFÍA EN CURVAS ELÍPTICAS 49

se deberı́a poder comprobar que ese dato realmente se ha calculado usando la


clave pridada de Alicia, es decir verificar la firma. Una solución a este problema
reside en la dificultad de resolver el logaritmo discreto.
Alicia primero elegirá una curva elı́ptica E sobre un cuerpo finito Fq , escogido
de manera que sea dificil calcular el logaritmo discreto. También elegirá los
puntos A y B = aA pertenecientes a la curva de modo que el orden de A, que
denotaremos por q, sea un primo suficientemente grande. Notar que, en este
caso, su clave privada será a. Además, deberá escoger una buena función hash
que denotaremos por f . Recapitulando, la infomación pública será E, Fq , f , A
y B.
Para firmar un documento Alicia debe realizar los siguientes pasos:
1. Representar el resumen del documento como un entero m.
2. Elegir un número aleatorio k tal que mcd(k, q) = 1 y calcular R = kA.
3. Calcular t ≡ k −1 (m − af (R)) (mód q)
El mensage firmado es (m, R, t). Cabe observar que Alicia no trata de es-
conder el mensaje ya que es parte de la firma, si lo quisiese ocultar puede optar
por encriptarlo.
Para que Roberto verifique la firma también debe realizar una serie de pasos
que se detallan a continuación.
1. Descargarse toda la información pública de Alicia.
2. Calcular V1 = f (R)B + tR y V2 = mA.
3. Si V1 = V2 , se puede asegurar que la firma es correcta.
Es fácil ver que si todo va bien V1 = V2 ya que

V1 = f (R)B + tR = f (R)aA + (k −1 (m − af (R)))kA


= f (R)aA + mA − f (R)aA = mA = V2 .

5.3.4. Algoritmo de firma digital


El algoritmo de firma digital estándar está basado en DSA (Digital Signature
Algorithm), aunque existe una versión más reciente que utiliza curvas elı́pticas
es ECDSA. Este algoritmo es una pequeña variación de ElGamal con algunas
modificaciones.
De nuevo Alicia quiere firmar un documento m. Alicia elige una cuva elı́ptica
E sobre un cuerpo finito Fq de manera que #E(Fq ) = f r, donde r es un primo
grande y f un entero pequeño (generalmente toma el valor 1, 2 o 4). También
escoge un punto G ∈ E(Fq ) de orden r. Por último, Alicia elige un entero
aleatorio y secreto a, de modo que Q = aG. En resumen, la información pública
de Alicia es Fq , E, r, G y Q.
Para firmar el mensaje Alicia debe realizar los siguientes pasos:
50 CAPÍTULO 5. CRIPTOGRAFÍA

1. Elegir un entero aleatorio k con 1 ≤ k < r y calcular R = kG = (x, y).


2. Calcular s ≡ k −1 (m + ax) (mód r).
3. La firma del documento viene dada por (m, R, s).
Para verificar la firma, Roberto tiene que realizar los siguientes pasos:
1. Calcular u1 = s−1 m (mód r) y u2 = s−1 x (mód r).
2. Calcular V = u1 G + u2 Q.
3. La firma será válida si V = R, pues:
V = u1 G + u2 Q = s−1 mG + s−1 xQ = s−1 (mG + xaG) = kG = R.

Para una mejor comprensión del apartado realizaremos un pequeño ejemplo


de parte de los contenidos. Para ello nos ayudaremos de la herramienta en lı́nea
de comandos OpenSSL con la que realizaremos un certificado que nos posibilitará
firmar y verificar la firma.
Comenzamos creándonos un par de claves con la curva predefinida P-192.
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-192 -pkeyopt
→ ec_param_enc:named_curve -out eckey.pem

A continuación mostramos una captura tanto de la clave privada como de la


pública.

Figura 5.3: Clave privada y pública de la curva P-192.

Con ayuda de la clave nos creamos el certificado con el siguiente comando:


openssl req -x509 -new -key eckey.pem -out certTFG.pem

Además, nos creamos un mensaje con un cierto texto y lo firmamos volcando


la firma en otro fichero.
openssl pkeyutl -in Claro.txt -out Cifrado.txt -sign -inkey eckey.pem

Asimismo verificamos que la firma es correcta.


openssl pkeyutl -verify -in Claro.txt -sigfile Cifrado.txt -pubin -certin -inkey
→ certTFG.pem
5.3. CRIPTOGRAFÍA EN CURVAS ELÍPTICAS 51

Figura 5.4: Información del certificado.


Capı́tulo 6

Bitcoins

En este último capı́tulo del trabajo hablaremos de los Bitcoins como la repre-
sentación en la vida cotidiana de los conocimientos adquiridos. Antes de nada
cabe dar una primera definición sobre qué son los Bitcoins.

Definición 6.1 (Bitcoin). Bitcoin es una colección de conceptos y tecnologı́as


que forman un red que permite un nuevo sistema de pago con una moneda
completamente digital.

El sistema de dinero electrónico Bitcoin nació con la idea de descentralizar


los pagos entre usuarios, consiguiendo ası́ eliminar la necesidad de la presencia
de instituciones financieras en las transacciones. Hablaremos ahora de todo el
funcionamiento del sistema de dinero Bitcoin y de la utilidad que adquieren las
curvas elı́pticas en él.

6.1. Introducción
Bitcoin es una moneda electrónica junto con su protocolo y su software. La
unión de todos esos componentes hace que los usuarios pueden tranferir Bitcoins
sobre la red con lo que se permite comprar, vender o enviar dinero a personas
u organizaciones.
Aparte, Bitcoin es una red distribuida (tecnologı́a peer-to-peer ), es decir,
cada equipo puede actuar como un servidor para los demás, lo que permite
el acceso compartido a archivos y periféricos sin la necesidad de un servidor
centralizado. Esto hace que sean los propios usuarios del sistema los que regulen
la emisión de la moneda, acepten y denienguen transacciones.

6.1.1. Historia de Bitcoin


Curiosamente la identidad del creador o creadores no ha sido revelada, sin
embargo, sabemos que la persona o grupo de personas que dieron origen a

53
54 CAPÍTULO 6. BITCOINS

esta divisa usaron el pseudónimo de ((Satoshi Nakamoto)), para preservar el


anonimato y protegerse de posibles acciones contra ellos y Bitcoin.
El origen de esta moneda se remonta al 1 de noviembre de 2008 cuando se
anunció que se estaba desarrollando.

6.2. Conceptos generales


Para comenzar con la explicación del sistema Bitcoin primero se requiere
tener una idea básica de los diferentes conceptos en los que el sistema se basa.
Más adelante ampliaremos las nociones aquı́ expuestas.

Direcciones Bitcoin
La dirección virtual de un usuario es donde se almacenan bitcoins y es usada
para realizar o recibir pagos. Un mismo usuario puede tener tantas direcciones
Bitcoin como necesite y se identifican con una clave pública.
No hay que olvidar que, al tratarse de una moneda electrónica basada en
criptografı́a, cada usuario contará con una clave privada para firmar las transac-
ciones y una clave pública para identificar su dirección y validar las firmas.

Participantes
En cuanto a los participantes que intervienen en la red, se pueden distinguir
dos tipos de actores:

• Usuarios normales, los cuales compran y pagan bienes y servicios produ-


ciendo las transacciones del sistema.

• Mineros, usuarios especializados que dedican potencia computacional para


validar nuevas transacciones. Serán los que se encargen de crear el bloque
de transacciones. Como los cálculos que tienen son muy costosos se ven
recompensados por ellos.

Monedero
Espacio virtual donde se almacenan y gestionan las direcciones Bitcoin de
un usuario y los pagos que se realizan con ellas.

Transacción
Es la información que confirma que un propietatio de bitcoins ha autorizado
la transferencia de parte de ellos a otra dirrección. Vamos a explicar cómo son
con un ejemplo. Supongamos que Alicia quiere enviar dinero a Bob, entonces
la transacción irá firmada por la clave privada de Alicia. De esta forma la red
Bitcoin sabrá a ciencia cierta que es Alicia la que envı́a el dinero a Roberto.
6.3. SISTEMA BITCOIN Y PROTOCOLOS 55

Bloques
Conjunto de transacciones pendientes de confirmar sobre las cual se realiza
el denominado proceso de minerı́a.

Cadena de bloques
Registro público compuesto por bloques confirmados validados en orden cro-
nológico.

Minerı́a
Proceso que consiste en la realización de cálculos matemáticos para confirmar
transacciones en la red Bitcoin. A través de la minerı́a se pueden crear nuevos
bitcoins al mismo tiempo que se confirman transacciones.

6.3. Sistema Bitcoin y protocolos


Como sabemos Bitcoin es un sistema con gran complejidad que utiliza pa-
ra su seguridad primitivas criptográficas. Para garantizar la consistencia del
sistema se utilizan firmas digitales, hashes criptográficos, numeros aleatorios y
nonces. Estos últimos son números de un solo uso (number used once).
Uno de los pilares fundamentales de la criptografı́a es la generación de núme-
ros aleatorios, tal es ası́ que los hackers se han centrado en buscar muchos ata-
ques enfocados en averiguar cómo se generan los números aleatorios.

6.3.1. Direcciones y monederos


Una dirección Bitcoin se compone de un par de claves pública y privada
que utilizan ECDSA (Elliptic Curves Digital Signature Algorithm), es decir, se
apoyan en el sistema de firma digital basada en curvas elı́pticas.
La dirección se identifica con el hash de la clave pública, al que se añade una
suma de verificación para detectar fallos accidentales protegiendo su integridad.
Al estar identificada por la clave pública todas las operaciones que se realicen
con esa dirección deben estar apoyadas por la utilización de la clave privada
asociada, permitiendo ası́ el proceso de firma-verificación.
Por lo tanto los monederos son una agrupación de pares de claves públicas
y privadas.

6.3.2. Transacciones
Las transacciones son registros firmados digitalmente en los cuales se realiza
una transferencia de bitcoins. En términos generales, cada transaccion contiene
una o más entradas, las cuales representan adeudos de una cuenta. Y por otra
parte en la transaccion hay una o más salidas, las cuales representan crédito que
56 CAPÍTULO 6. BITCOINS

se añade a una cuenta. Las entradas y salidas no tienen porqué sumar lo mismo
pero, sı́ que debe cumplirse que las salidas sumen un número menor o igual
que las entradas. Esa diferencia entre ellas representará la tasa de transacción,
que es un pequeño pago que recibirá el minero por añadir la transacción en la
cadena de bloques. Esta recompensa es una manera de motivar a los mineros.

6.3.3. Cadena de bloques


La cadena de bloques de la red Bitcoin es una lista creada de forma colec-
tiva con todas las transacciones que han sido confirmadas y validadas por la
propia red.
Cuando un nodo de la red consigue crear un nuevo bloque, lo retransmite al
resto de nodos. El resto de bloques verifican que el bloque es correcto y solo en
ese caso lo añaden a su cadena y lo difunden.
La recepción de un pago es casi instantánea con Bitcoin. Sin embargo hay
un retraso de 10 minutos de media antes de que la red empiece a confirmar esa
transacción y la incluya en un bloque. Una confirmación significa que hay un
consenso en la red en que los bitcoins recibidos no han sido enviados a alguien
más y son ahora de tu propiedad. Una vez que tu transacción ha sido incluida
en un bloque, esta se irá quedando cada vez más alejada de la cima de la pila
a medida que nuevas confirmaciones se van añadiendo. Esto consolidará ese
consenso sobre su validez y diminuirá el riesgo de que se revoque.

6.4. Minerı́a
Los nuevos bitcoins son generados por un proceso competitivo y descen-
tralizado llamado ((minerı́a)). Este proceso se basa en que los individuos son
premiados por la red por sus servicios.
Esta recompensa puede recibirse por dos medios. Por un lado, Bitcoin tiene
establecido un número limite de 21 millones de bitcoins y, hasta que se llegue
a ese lı́mite, la generación de cada nuevo bloque es recompensada con una can-
tidad predefinida de bitcoins nuevos. Y por el otro lado, estarı́an las tasas de
transacción.
Hay que tener en cuenta que, cuanta más gente empiece a minar, la difi-
cultad de encontrar bloques válidos se incrementa automáticamente por la red
para asegurar que el tiempo promedio de encontrar un bloque es siempre de 10
minutos. Como resultado, minar es una tarea muy competitiva donde ningún
minero puede controlar por sı́ solo lo que es incluido en la cadena de bloques.

6.5. Conclusión sobre el sistema Bitcoin


Para terminar con este capı́tulo conviene exponer un pequeño listado sobre
los pros y contras de la utilización del sistema Bitcoin, además de hacer un
pequeño resumen a modo de conclusión.
6.5. CONCLUSIÓN SOBRE EL SISTEMA BITCOIN 57

Dentro de las fortalezas podemos destacar el uso de incentivos, la utilización


de criptografı́a, la gran escalabilidad dependiente del número de nodos de la red
Bitcoin y su transparencia. Como debilidades están las posibles vulnerabilidades
que encierre al ser un sistema nuevo, el hecho que esté en el punto de mira de
hackers, el consumo de energı́a y el anonimato bajo el que se pueden proteger
criminales.
En resumen, Bitcoin es una moneda digital matemáticamente protegida que
se mantiene por la red. Las firmas digitales autorizan las transacciones indivi-
duales, la propiedad pasa a través de cadenas de transacciones y el orden en
esas transacciones está protegido por la cadena de bloques.
Al exigir que se resuelvan difı́ciles problemas matemáticos para cada bloque,
los posibles atacantes se enfrentan al resto de la red en una carrera computacio-
nal que es improbable que ganen.
Bitcoin promete muchas ideas interesantes como el aislamiento frente a un
gobierno, el anonimato y comisiones por transacciones muy bajas. También tiene
muchos retos, ya que actualmente es muy difı́cil cambiar bitcoins a otras divisas,
y ha sido mencionado como un refugio para la actividad ilegal y la evasión fiscal,
por lo que los gobiernos podrı́an tratar de prohibirlo. También hay que decir
que la carrera matemática que protege la cadena de bloques utiliza una cantidad
sustancial de energı́a eléctrica.
Apéndice A

Código

A lo largo de la memoria hemos utilizado diferentes programas de ordenador


y librerı́as. En este apéndice hablaremos de cada uno de ellos y explicaremos más
concretamente su funcionamiento. Además dispondrá del código de los diferentes
ataques que hemos ido mencionando para cada uno de ellos.

A.1. Java
Para la utilización de las diferentes clases referidas a la criptografı́a en curvas
elı́pticas en Java hemos tenido que importar la librerı́a Bouncy Castle. En ella
encontrados clases como:
• ECCurve. Representará la clase que se corresponde con una curva elı́ptica.

• ECPoint. Clase con la que nos referimos a un punto de una determinada


curva elı́ptica.

• ECFieldElement. Será la clase que determine el elemento de un cuerpo.

Para explicar más concretamente cómo funcionan cada una de las clases nos
ayudaremos del código utilizado para la realización del método ρ de Pollard.

Método ρ de Pollard
En la porción de código que se añade a continuación podemos observar que
una curva viene determinada por un primo p (que determinará el orden del
cuerpo Fp sobre el que está definida la curva elı́ptica) y los valores A y B de la
ecuación de Weierstrass.
Asimismo, la clase nos permitirá crear puntos de una curva elı́ptica, sumarlos
entre ellos y multiplicarlos. Por otra parte, también se puede acceder a cada una
de sus componentes. Gracias a todos los métodos que poseen cada una de las
clases citadas, nos vemos en condiciones de implementar el método ρ de Pollard.

59
60 APÉNDICE A. CÓDIGO

1 private static ArrayList<ECPoint> puntos;


2 public static void main(String[] args)
3 {
4 ECCurve curvaEliptica = new ECCurve.Fp(new BigInteger("78341"), new
→ BigInteger("1"), new BigInteger("4"));
5 ECPoint P = curvaEliptica.createPoint(new BigInteger("0"), new
→ BigInteger("2"));
6 ECPoint Q = curvaEliptica.createPoint(new BigInteger("20563"), new
→ BigInteger("70190"));
7 puntos=new ArrayList<ECPoint>();
8 int coordP=1, coordQ=9, coordPM0=3, coordQM0=9, coordPM1=2, coordQM1=7,
→ coordPM2=6, coordQM2=8;
9 ECPoint P0=(P.multiply(new BigInteger(String.valueOf(coordP)))).add(
→ Q.multiply(new BigInteger(String.valueOf(coordQ))));
10 ECPoint M0=(P.multiply(new BigInteger(String.valueOf(coordPM0)))).add(
→ Q.multiply(new BigInteger(String.valueOf(coordQM0))));
11 ECPoint M1=(P.multiply(new BigInteger(String.valueOf(coordPM1)))).add(
→ Q.multiply(new BigInteger(String.valueOf(coordQM1))));
12 ECPoint M2=(P.multiply(new BigInteger(String.valueOf(coordPM2)))).add(
→ Q.multiply(new BigInteger(String.valueOf(coordQM2))));
13 int[]
→ coordPM={coordPM0,coordPM1,coordPM2},coordQM={coordQM0,coordQM1,coordQM2};
14 puntos.add(M0);
15 puntos.add(M1);
16 puntos.add(M2);
17 int j=0,i;
18 ArrayList<String> aparF=new ArrayList<String>();
19 ArrayList<Integer> coordPunto=new ArrayList<Integer>();
20
21 coordPunto.add(coordP);
22 coordPunto.add(coordQ);
23 ArrayList<ArrayList> listaCoord=new ArrayList<ArrayList>();
24 do
25 {
26 listaCoord.add(coordPunto);
27 aparF.add("(" + Integer.parseInt(
→ P0.normalize().getAffineXCoord().toString(), 16) + ", " +
→ Integer.parseInt( P0.normalize().getAffineYCoord().toString(), 16)
→ + ")");
28 coordP=coordP+coordPM[Integer.parseInt(
→ P0.normalize().getAffineXCoord().toString(), 16) % 3];
29 coordQ=coordQ+coordQM[Integer.parseInt(
→ P0.normalize().getAffineXCoord().toString(), 16) % 3];
30 coordPunto=new ArrayList<Integer>();
31 coordPunto.add(coordP);
32 coordPunto.add(coordQ);
33 P0=funAl(P0);
34 System.out.println(++j + ": " + "("+Integer.parseInt(
→ P0.normalize().getAffineXCoord().toString(), 16) + ", " +
→ Integer.parseInt( P0.normalize().getAffineYCoord().toString(), 16)
→ + ")");
35 }
36 while(!aparF.contains("(" +
→ Integer.parseInt(P0.normalize().getAffineXCoord().toString(), 16) + ",
→ " + Integer.parseInt( P0.normalize().getAffineYCoord().toString(), 16)
→ + ")"));
A.2. SAGEMATH 61

37 i=aparF.indexOf("(" + Integer.parseInt(
→ P0.normalize().getAffineXCoord().toString(), 16) + ", " +
→ Integer.parseInt( P0.normalize().getAffineYCoord().toString(), 16) +
→ ")");
38 listaCoord.add(coordPunto);
39 System.out.println("Se ha encontrado una coincidencia en los puntos :");
40 System.out.println(i + ": " + listaCoord.get(i).get(0) + "P + " +
→ listaCoord.get(i).get(1) + "Q" );
41 System.out.println(j + ": " + listaCoord.get(j).get(0) + "P + " +
→ listaCoord.get(j).get(1) + "Q" );
42 }
43 private static ECPoint funAl(ECPoint P0)
44 {
45 ECPoint fP0=null;
46 fP0=P0.add(puntos.get(Integer.parseInt(
→ P0.normalize().getAffineXCoord().toString(), 16) % 3));
47 return fP0;
48 }

A.2. SageMath
Las limitaciones de la librerı́a Bouncy Castle nos han hecho tener que recurrir
a SageM ath. Es por ello que en el caso del cálculo del ı́ndice hemos necesitado
ayuda de dicho programa.

Cálculo del ı́ndice


1 h = 134418867;
2 p = 179424673;
3 R = Integers(p);
4 g = R(15);
5 tope = 70000;
6 max = 23;
7 orden = [0 for i in range(max)];
8 j = 0;
9 for i in range(max):
10 if (i+1).is_prime():
11 orden[i] = j;
12 j = j + 1;
13 np = j;
14 A=[];
15 temp = 0;
16 resto = R(1);
17 for i in range(1,tope):
18 resto = resto * g;
19 factores = list(factor(Integer(resto)));
20 ad = true; j = 0;
21 while (ad)and (j<len(factores)):
22 if factores[j][0]>max:
23 ad = false;
24 j=j+1;
25 if (ad) and (Integer(resto) != Integer(g)*Integer(temp)):
26 nuevafila = [0 for k in range(np)];
27 for j in range(len(factores)):
28 nuevafila[orden[factores[j][0]-1]] = factores[j][1];
62 APÉNDICE A. CÓDIGO

29 nuevafila.append(i);
30 A.append(nuevafila);
31 temp = resto;
32 B = matrix(A).echelon_form();
33 print(’Las ecuaciones que hemos obtenido son ’);
34 show(matrix(A))
35 print(’Al resolver el sistema obtenemos’);
36 show(B)
37 print ’Si observas que el sistema no es determinado entonces aumenta tope y
→ repite el proceso. Las entradas has de entenderlas modulo ’, p-1 ;
38 P = Primes(); primo = P.first();
39 for i in range(np):
40 print’Lg(’,primo,’)=’,B[i,np];
41 primo = P.next(primo);
42 i = 1;
43 cont = true;
44 resto = R(h);
45 while(i < tope) and cont:
46 resto = resto * g;
47 factores = list(factor(Integer(resto)));
48 cont = false; j = 0;
49 while not(cont) and (j<len(factores)):
50 if factores[j][0]>max:
51 cont = true;
52 j=j+1;
53 i = i + 1;
54 if i < tope:
55 sol = -i+1;
56 for j in range(len(factores)):
57 sol = sol + B[orden[factores[j][0]-1],np]*(factores[j][1]);
58 sol = sol%(p-1);
59 print ’Para i =’, i-1,’ se tiene que h*g^i se factoriza como ’, factores;
60 print;
61 print ’El logaritmos discreto de ’,h,’ en base ’,g,’ modulo ’,p,’ es ’, sol;
62 print;
63 else:
64 print ’No se ha podido resolver el problema. Por favor, aumenta el limite
→ tope’;
Conclusión

A lo largo del trabajo hemos cumplido los objetivos propuestos tanto a nivel
personal como a nivel académico. Respecto a los objetivos mencionados hemos
conseguido demostrar el teorema de Hasse y entender el papel fundamental de
las curvas elı́pticas en un ámbito tan importante como la criptografı́a.
Además la realización del proyecto me ha enseñado más cosas de las que
yo esperaba. En primer lugar me he demostrado a mı́ misma que soy capaz de
sacar mis propias conclusiones a partir de un libro matemático. Encuentro que
a lo largo de la carrera he conseguido abrir mi mente y ganar gran capacidad de
abstración, con lo que cada vez me es más sencillo leer y entender las matemáti-
cas pese a que la mayorı́a de textos no estén en castellano. También he notado
mejorı́a respecto a mi manera de redactar escritos matemáticos. En definitiva
he crecido un poco más como matemática y esa es la mejor aportación de este
proyecto.

63
Bibliografı́a

[1] Andreas M. Antonopoulos, Mastering Bitcoin, O’Reilly Media, 2014.


[2] Bouncy Castle, http://www.bouncycastle.org/, Consulta 2015.

[3] David Hook, Beginning Cryptography with Java, Paperback, 2005.

[4] Julio Jesús Rubio Garcı́a, Apuntes de Seguridad Informática, Universi-


dad de La Rioja, 2014.
[5] Lauwrence C. Washington, Elliptic Curves, Number Theory and Cry-
ptography, Taylor & Francis, 2003.
[6] Llorenç Huguet Rotger, Josep Rifà Coma Y Juan Gabriel Tena
Ayuso, Criptografı́a concurvas elı́pticas, Universitat Oberta de Catalunya,
2009.

[7] Marı́a del Pilar Benito Clavijo, Apuntes de Galois, 2014.

[8] OpenSSL, www.openssl.org/docs/apps/openssl.html, Consulta 2015.

65

También podría gustarte