Professional Documents
Culture Documents
FACULTAD DE CIENCIAS
An elliptic curve over a field K is a projective non-singular curve of genus 1 with a distinguished
rational point P∞ . The discrete logarithm problem (DLP) consists in, given a cyclic group
G = hbi and an element y ∈ G, finding an integer n such that bn = y. We show that
the K-rational points of an elliptic curve E form an additive abelian group, with P∞ as the
identity element. We also introduce the Weierstrass equation of an elliptic curve. After that,
we present some cryptographical applications of the discrete logarithm problem over elliptic
curves, including Diffie-Hellman key exchange, Massey-Omura encryption and ECDSA digital
signatures. We analyze some general attacks on the DLP: Baby-Step Giant-Step, Pollard’s rho
algorithm and Silver-Pohlig-Hellman attack. All of these attacks are exponential, which makes
them useless when the size of the group G is big. We also describe two specifics attacks: the
subexponential algorithm Index Calculus, which works over F∗q , and Xedni Calculus, which is an
attack on the DLP over elliptic curves. Finally, we compare the performances of several attacks
over F∗q and E(Fq ): Baby-Step Giant-Step, four variants of Pollard’s rho method and Index
Calculus (the last one, only over F∗q ). We conclude that, on groups of the sizes we consider,
Pollard’s rho attack works best for computing isolated logarithms, while Index Calculus is the
fastest method when several attacks need to be made.
Índice general
Introducción 1
i
B. Ecuaciones cuadráticas en cuerpos finitos. 42
B.1. Cálculo de raíces cuadradas en cuerpos finitos. . . . . . . . . . . . . . . . . . . . 42
B.2. Ecuaciones cuadráticas en cuerpos finitos. . . . . . . . . . . . . . . . . . . . . . 44
ii
Introducción.
Dado un grupo cíclico finito G, un generador b de G y una potencia y de b, el logaritmo
discreto de y en base b es cualquier entero n tal que bn = y. El problema del logaritmo discreto
(DLP), consiste precisamente en, dados los elementos y y b, encontrar el entero n.
La inversa del logaritmo discreto es la exponenciación en un grupo finito, para la cual existe
un algoritmo polinomial (cúbico). Sin embargo, calcular logaritmos discretos es un problema
difícil: no se conoce ningún algoritmo subexponencial general (es decir, que no dependa de la
estructura del grupo concreto) para resolverlo. Por tanto, la exponenciación en un grupo finito
es una función de un solo sentido, que puede ser usada como base para sistemas de criptografía
de clave pública.
Existen varios protocolos criptográficos que basan su seguridad en la dificultad del DLP.
Originalmente, dichos criptosistemas se implementaban operando sobre el grupo de unidades de
un cuerpo finito; sin embargo, sobre este tipo de grupos existe un ataque subexponencial para
calcular logaritmos discretos: el Index Calculus. Para evitar esta vulnerabilidad, se presentan
como alternativa los criptosistemas basados en el DLP sobre curvas elípticas.
Una curva elíptica E definida sobre un cuerpo K es una curva algebraica sobre K, proyectiva,
lisa, de género 1 y con un punto P∞ ∈ E(K), que se denomina origen o punto en el infinito.
Es posible definir una operación suma con la cual los puntos de dicha curva forman un grupo
abeliano y, en particular, sus puntos racionales componen un subgrupo de éste.
Al contrario de lo que ocurre en F∗q , no se conoce ningún ataque subexponencial para el
DLP sobre curvas elípticas cualesquiera con coeficientes en cuerpos finitos, de modo que, salvo
para tipos específicos de curvas, los únicos ataques posibles son los generales, que requieren un
tiempo de ejecución exponencial.
Como consecuencia, cuando los criptosistemas basados en el DLP se implementan sobre
curvas elípticas, es posible obtener el mismo nivel de seguridad que en un sistema tradicional,
utilizando claves de longitud significativamente menor.
En el capítulo 1 de este trabajo se introduce la definición de curva elíptica con coeficientes
en un cuerpo K y se presenta un modelo para dicho tipo de curvas: la ecuación de Weierstrass.
También se define una operación suma sobre los puntos de una curva elíptica E y se demuestra
que dicha operación dota a los puntos de la curva de estructura de grupo abeliano. Además, se
define el conjunto de puntos K-racionales de la curva E y se prueba que dicho conjunto es un
subgrupo de E.
En el capítulo 2 se define el problema del logaritmo discreto sobre grupos cíclicos finitos y se
analiza por qué, pese a que todos los grupos cíclicos finitos del mismo orden son isomorfos entre
sí, la dificultad del problema varía enormemente según la presentación del grupo. Se introduce
la exponenciación en un grupo finito como función de un solo sentido, y se proporciona un
algoritmo eficiente (de orden cúbico) para calcularla: la exponenciación mediante cuadrados
iterados.
1
El capítulo 3 describe varias aplicaciones criptográficas del problema del logaritmo discreto.
Originalmente, la mayor parte de estas aplicaciones no se basaban en curvas elípticas, sino en
el grupo de unidades de un cuerpo finito de gran tamaño. Sin embargo, la mayor dificultad
del problema del logaritmo discreto sobre curvas elípticas hace que, al adaptar los algoritmos
para utilizar éstas, se pueda obtener el mismo nivel de seguridad con claves mucho más cortas
que cuando se emplea la versión clásica del criptosistema. En particular, se han estudiado las
siguientes aplicaciones: el intercambio de claves de Diffie-Hellman, el esquema de firma digital
de Elgamal, el estándar de firma digital DSS, y tres sistemas de cifrado: los criptosistemas de
Massey-Omura y Elgamal, y el esquema de cifrado integrado en curvas elípticas (ECIES).
En el capítulo 4 se estudian tres ataques generales al problema del logaritmo discreto: el
ataque Baby-Step Giant-Step, el método rho de Pollard y el algoritmo de Pohlig-Hellman. Para
ello, se describe el funcionamiento de cada uno de los algoritmos y se analiza su rendimiento
teórico, tanto en tiempo como en memoria. Estos tres ataques resultan ser exponenciales, con
lo cual no resultan prácticos sobre grupos de gran tamaño.
Además de estos ataques de carácter general, en el capítulo 5 se estudia el algoritmo Index
Calculus, que permite resolver el DLP en tiempo subexponencial sobre el grupo de unidades de
un cuerpo finito. También se describe el ataque Xedni Calculus, especialmente diseñado para
resolver el problema del logaritmo discreto sobre curvas elípticas, y se advierte que dicho ataque
no es práctico sobre grupos grandes, aunque tiene gran interés teórico.
Como parte de este trabajo, se ha implementado en Sage el ataque Baby-Step Giant-Step,
cuatro variantes del algoritmo rho de Pollard y el ataque Index Calculus. Los cinco primeros
se han programado tanto sobre F∗q como sobre E(Fq ), mientras que el último sólo tiene sentido
sobre el primer grupo. También se han programado funciones para exponenciar en un grupo
finito, siguiendo el algoritmo de cuadrados iterados, y para elegir curvas elípticas aleatorias que
satisfagan ciertas propiedades deseables desde el punto de vista criptográfico.
Una vez implementados los ataques, se han llevado a cabo pruebas para estudiar su
rendimiento. Los resultados obtenidos, recogidos en el capítulo 6, indican que, salvo Baby-
Step Giant-Step, los algoritmos se ajustan bien a sus tiempos de ejecución teóricos. Además,
para grupos de los tamaños probados, se concluye que Pollard rho es el algoritmo más rápido
para calcular un único logaritmo discreto. En cambio, si se desea resolver varias veces el DLP
sobre el mismo grupo y con el mismo generador, Index Calculus es la opción más eficiente.
Por último, la memoria incluye tres apéndices: el A proporciona un resumen sobre variedades
y curvas algebraicas con los conceptos necesarios para entender el capítulo 1; el B explica cómo
resolver ecuaciones cuadráticas sobre cuerpos finitos; y el C describe métodos para seleccionar
curvas elípticas criptográficamente buenas y para codificar mensajes como puntos de éstas.
Las principales referencias consultadas para el capítulo 1 han sido [13], especialmente para
la base necesaria de geometría algebraica, y [16], para la demostración de la asociatividad de la
suma de puntos sobre una curva elíptica. El estudio de las aplicaciones criptográficas del DLP,
así como de los posibles ataques a dicho problema, se ha basado fundamentalmente en [16], [9],
[4], [6] y [1]. Para el ataque Xedni Calculus se han utilizado los artículos originales, [12] y [3].
2
1. Curvas elípticas. Definición y ley de grupo.
En este capítulo se introducen el concepto de curva elíptica y un modelo para dicho tipo de
curvas, la ecuación de Weierstrass. También se demuestra que los puntos racionales de una curva
elíptica forman un grupo abeliano, característica explotada en la criptografía. En el apéndice
A se proporciona un resumen de los conceptos de geometría algebraica necesarios para este
capítulo.
Denotaremos por K un cuerpo perfecto y por K una clausura algebraica (fija) de K.
Y 2 Z + a1 XY Z + a3 Y Z 2 = X 3 + a2 X 2 Z + a4 XZ 2 + a6 Z 3 , (1.1.1)
donde los coeficientes a1 , . . . , a6 pertenecen a un cuerpo K. Una ecuación de este tipo define
una curva C en P2 . Si a1 , . . . , a6 ∈ K, diremos que C está definida sobre K.
Los puntos afines de la curva C son aquellos cuya coordenada Z es no nula. Tomando Z = 0,
la ecuación se reduce a X 3 = 0, que implica X = 0. Como las coordenadas X, Y , Z no pueden
ser todas nulas, deducimos que [0, 1, 0] es el único punto de la curva con Z = 0. Llamaremos a
[0, 1, 0] punto en el infinito, y lo denotaremos como P∞ .
Observación. Todas las rectas afines verticales pasan por P∞ .
Observación. Para aligerar la notación, normalmente se escribe la versión afín de la ecuación
de Weierstrass, utilizando como coordenadas no homogéneas x = X/Z e y = Y /Z. Así,
C : y 2 + a1 xy + a3 y = x3 + a2 x2 + a4 x + a6 . (1.1.2)
Cuando se utiliza esta notación para representar la curva proyectiva C, es importante no olvidar
que el punto en el infinito P∞ = [0, 1, 0] sigue formando parte de la misma.
A la ecuación de Weierstrass 1.1.2 se le asocian las siguientes cantidades:
3
Definición 1.3. La cantidad ∆ se denomina discriminante de la ecuación de Weierstrass.
dx dy
ω= = 2 .
2y + a1 x + a3 3x + 2a2 x + a4 − a1 y
C : y 2 = 4x3 + b2 x2 + 2b4 x + b6 .
x−3b2 y
Si además char(K) 6= 3, el cambio x = 36
, y= 108
da lugar a
C : y 2 = x3 + Ax + B,
Lema 1.1. Sea C la curva dada por una ecuación de la forma 1.1.1. Entonces C no es singular
en P∞ .
F (X, Y, Z) = Y 2 Z + a1 XY Z + a3 Y Z 2 − X 3 − a2 X 2 Z − a4 XZ 2 − a6 Z 3 = 0,
∂F
basta comprobar que ∂Z
(P∞ ) = 1 6= 0.
Proposición 1.1. La curva C dada por una ecuación de Weierstrass sobre K es no singular
si y sólo si ∆ 6= 0.
Si C es singular, lo es en un único punto.
Demostración. Gracias al lema 1.1, podemos trabajar en coordenadas afines. Por simplicidad
supondremos que char(K) 6= 2, lo que nos permite utilizar la ecuación reducida
es decir, un punto (x0 , 0) con x0 una raíz doble de 4x3 + b2 x2 + 2b4 x + b6 = 0. Dicho polinomio
cúbico tiene una raíz doble si y sólo si su discriminante, que es 16∆, se hace cero. Además, no
puede tener dos raíces dobles, luego C tiene a lo sumo un punto singular.
La proposición 1.2 permite establecer una equivalencia entre curvas elípticas y curvas dadas
por una ecuación de Weierstrass. Necesitaremos el siguiente lema (proposición III.1.5 de [13]).
4
Lema 1.2. Sea C una curva suave definida mediante una ecuación de Weierstrass. Entonces
la forma diferencial invariante ω asociada a dicha ecuación es regular y libre de ceros (es decir,
div(ω) = 0).
Proposición 1.2. Sea E una curva elíptica definida sobre un cuerpo K.
(a) Existen funciones x, y ∈ K tales que la aplicación
φ : E → P2
P 7→ [x(P ), y(P ), 1]
P∞ 7→ [0, 1, 0]
es un isomorfismo entre E/K y una curva definida por una ecuación de Weierstrass
C : Y 2 + a1 XY + a3 Y = X 3 + a2 X 2 + a4 X + a6 ,
con coeficientes a1 , . . . , a6 ∈ K.
(b) Si C es una curva lisa dada por una ecuación de Weierstrass, entonces C es una curva
elíptica definida sobre K con origen [0, 1, 0].
Demostración. (a) Consideramos los espacios vectoriales L(nP∞ ), para n ≥ 1. Aplicando el
Teorema de Riemann-Roch (concretamente A.1 (c) con g = 1), tenemos que
Como l(P∞ ) = 1 y K ⊂ L(P∞ ), no hay funciones sobre E con un único polo simple.
Al ser l(2P∞ ) = 2 y l(3P∞ ) = 3, podemos escoger funciones x, y ∈ K(E) tales que {1, x}
sea una base de L(2P∞ ) y {1, x, y} de L(3P∞ ). Lo que es más, la proposición II.5.8 de [13]
garantiza que podemos escoger x, y ∈ K(E). Nótese que x tiene que tener un polo de orden
exactamente 2 en P∞ , e y un polo de orden exactamente 3 en el mismo punto.
Las siete funciones 1, x, y, x2 , xy, x3 e y 2 pertenecen a L(6P∞ ), que tiene dimensión 6. Por
tanto, es posible establecer una relación lineal no trivial entre ellas:
A1 + A2 x + A3 y + A4 x2 + A5 xy + A6 y 2 + A7 x3 = 0,
0 = deg(KC ) = 2g − 2 ⇒ g = 1.
5
1.2 Ley de grupo.
Sea E una curva elíptica definida sobre K mediante una ecuación de la forma 1.1.2. El
conjunto de puntos K-racionales de E es E(K) = {(a, b) ∈ E : a, b ∈ K} ∪ {P∞ }.
Nuestro objetivo será dotar al conjunto E(K) de estructura de grupo (abeliano), para lo
cual partiremos del siguiente resultado.
Teorema 1.1 (Teorema de Bézout). Sean C1 y C2 dos curvas planas proyectivas de grados
respectivos m y n, sin ninguna componente común. Entonces C1 y C2 se cortan en exactamente
mn puntos, contando multiplicidades.
Lema 1.3. Sea E una curva elíptica definida sobre un cuerpo K. Sea L una recta que corta a
E en dos puntos P y Q pertenecientes a E(K) (o una recta tangente a E en el punto racional
P ). Entonces el tercer punto de corte de L y E es también racional.
Demostración. Por simplicidad, sólo daremos la prueba para char(K) 6= 2, 3. Así, E viene dada
por una ecuación de la forma y 2 = x3 + ax + b, con a, b ∈ K. Podemos suponer que P y Q son
distintos de P∞ (si no lo son, el resultado es trivial) y escribir P = (x1 , y1 ) y Q = (x2 , y2 ).
Supongamos en primer lugar que x1 6= x2 . Entonces la recta que pasa por P y Q no
−y1
es vertical, y por tanto podemos escribirla como y = αx + β, con α = xy22 −x 1
∈ K y
2 3
β = y1 − αx1 ∈ K. La ecuación (αx + β) = x + ax + b tiene exactamente 3 raíces en
K, dos de las cuales son x1 y x2 . Denotamos por x3 la tercera raíz.
3x2 + a 3x2 + a
2yy 0 = 3x2 + a ⇒ y 0 = ⇒ α= 1 ∈ K.
2y 2y1
6
Nótese que se cumple y1 6= 0, pues de lo contrario la recta sería verticcal. Por lo tanto,
despejando como en el primer caso tenemos:
!2 ! ! !
3x21 + a 3x21 + a 3x21 + a
x3 = − 2x1 ∈ K, y3 = x3 + y1 − x1 ∈ K
2y1 2y1 2y1
Definición 1.5 (Ley de grupo). Sean P, Q ∈ E y sea L la recta que pasa por P y Q (o la
línea tangente a E en P , si P = Q). Denotamos por R el tercer punto de corte de E y L. Sea
L0 la recta que pasa por R y P∞ . Entonces P + Q es el tercer punto de corte de E y L0 .
Proposición 1.3. La adición de puntos en una curva elíptica E según la definición 1.5 es una
operación interna que satisface las siguientes propiedades:
Es decir, los puntos de E forman un grupo abeliano aditivo, cuyo neutro es el punto P∞ .
Para demostrar la asociatividad de la operación 1.5 partiremos del siguiente resultado, cuya
prueba completa puede consultarse en la sección 2.4 de [16].
7
Teorema 1.2. Sea C(X, Y, Z) un polinomio cúbico homogéneo, y sea C la curva de P2 descrita
por la ecuación C(X, Y, Z) = 0. Sean l1 , l2 , l3 , m1 , m2 , m3 rectas proyectivas tales que li 6= mj
para 1 ≤ i, j ≤ 3. Denotamos por Pij el punto en que se cortan las rectas li y mj .
Supongamos que Pij es un punto no singular de C para todo (i, j) 6= (3, 3). Además, si k ≥ 2
de los puntos Pi1 , Pi2 , Pi3 coinciden para algún i, exigimos que li corte a C con multiplicidad
al menos k en dicho punto. Análogamente, si k ≥ 2 de los puntos P1j , P2j , P3j coinciden para
algún j, exigimos que mj corte a C con multiplicidad al menos k en dicho punto. Entonces, el
punto P33 también pertenece a la curva C.
Veamos cómo aplicar este resultado para probar la asociatividad de la suma. Sea E una
curva elíptica y sean P , Q y R tres puntos pertenecientes a E. Denotando por A, B a la recta
que pasa por los puntos A y B (o a la tangente a la curva en A si A = B),definimos
l1 = P, Q, l2 = P∞ , Q + R, l3 = R, P + Q
m1 = Q, R, m2 = P∞ , P + Q, m3 = P, Q + R.
l1 l2 l3
m1 Q −(Q + R) R
m2 −(P + Q) P∞ P +Q
m3 P (Q + R) X
Supongamos en primer lugar que se cumplen todas las hipótesis del teorema 1.2. En ese
caso, todos los puntos de la tabla 1.1 pertenecen a E, incluyendo el punto X. La recta l3
corta a E en los puntos R, P + Q y X, de forma que aplicando la definición de suma se obtiene
X = −((P + Q) + R). Haciendo lo análogo para m3 , obtenemos X = −(P + (Q + R)). Igualando
las expresiones y tomando inversos, obtenemos que (P +Q)+R = P +(Q+R), como queríamos
probar.
Falta por tanto verificar las hipótesis del teorema, es decir, que las multiplicidades de las
intersecciones son correctas y que ninguna línea li coincide con ninguna mj .
Para la primera de éstas, sólo tenemos que asegurarnos de que el punto en el infinito no
causa problemas. Nótese que la recta tangente a E en P∞ es Z = 0, que sólo corta a E en P∞ ,
con multiplicidad 3. Por tanto, si dos entradas de alguna fila o columna de la tabla son iguales
a P∞ , también lo es la tercera, luego la recta correspondiente interseca a E con orden 3 en P∞ .
Si li = mj para algunos i, j, el teorema 1.2 no es aplicable. Sin embargo, la comprobación
de la asociatividad en estos 9 casos es sencilla, y sólo requiere utilizar la conmutatividad de la
suma, la igualdad (P1 + P2 ) − P2 = P1 y el hecho de que tres puntos colineares de E suman P∞ .
8
2. El problema del logaritmo discreto en grupos cíclicos.
La criptografía asimétrica o de clave pública se basa en el uso de funciones de un solo sentido,
es decir, de funciones cuyo cálculo es fácil pero cuya inversa es difícil calcular sin disponer de
información adicional. El objetivo de este capítulo es mostrar que la exponenciación en un
grupo cíclico finito es, en general, una de estas funciones.
Definición 2.2. El problema del logaritmo discreto, abreviado DLP, consiste en, dado un grupo
finito G, un elemento b ∈ G y un y ∈ hbi, encontrar el logaritmo discreto de y en base b.
Expresar n = k−1 i
P
i=0 ni 2
aux ← g
potencia ← 1
for i = 0 to k - 1 do
if ni = 1 then
potencia = potencia · aux
end if
aux = aux · aux
end for
return potencia
Algoritmo 2.1: Exponenciación modular mediante cuadrados iterados.
Para calcular el coste del algoritmo, consideramos como operación básica la multiplicación de
dos elementos del grupo. En cada paso del bucle principal se realizan una o dos multiplicaciones
de este tipo, y en total se entra k = blog2 (n) + 1c veces al bucle. En consecuencia, el número
total de multiplicaciones es O(log2 (n)), es decir, lineal en el número de bits de n.
9
El coste temporal dependerá por tanto del coste de multiplicar dos elementos del grupo.
Por ejemplo, fijemos un b ∈ U (Z/mZ) y consideremos G = hbi. Si b < m y siempre que se
realiza un producto se reduce inmediatamente después módulo m, el coste de cada producto
será O(log22 (m2 )) = O(log22 (m)), lo cual da un coste global de O(log2 (n) log22 (m)) al algoritmo.
Además, por el Pequeño Teorema de Fermat sabemos que bφ(m) = 1 para cualquier b ∈ G.
Por tanto, si el exponente n es mayor que φ(m), y conocemos este último, utilizaremos
como exponente n mód φ(m). Así, como n mód φ(m) < φ(m) < m, la estimación temporal
O(log2 (n) log22 (m)) puede reemplazarse por O(log32 (m)).
En general, si el producto de dos elementos del grupo G no es muy costoso, la exponenciación
podrá llevarse a cabo de manera eficiente. Por el contrario, la dificultad del problema del
logaritmo discreto varía enormemente dependiendo del grupo cíclico y el generador escogidos.
Por ejemplo, si G = Z/mZ con la suma y la base elegida es b = 1, el problema del logaritmo
discreto es trivial: dado un x ∈ G, dicho x visto como entero es su propio logaritmo discreto.
Claramente se trata de un caso extremo pero, dado que todos los grupos cíclicos finitos del
mismo orden son isomorfos entre sí, ¿no sería posible reducir el problema del logaritmo discreto
en un grupo cíclico cualquiera de tamaño m a este problema sencillo?
Afortunadamente para la criptografía, la respuesta es no. Para ver que un grupo cíclico
G = hgi de tamaño m es isomorfo a Z/mZ con la suma, se utiliza la aplicación
ϕ : Z/mZ → G
n 7→ g n
Sin embargo, para reducir el problema al caso sencillo, tendríamos que hacer explícito el
isomorfismo inverso. Pero eso sería, precisamente, resolver el problema del logaritmo discreto
en el grupo G para la base g.
Para dar una intuición de por qué dicho problema es difícil, mostramos en la figura 2.1 la
gráfica de la función 3n sobre F∗1231 . Observamos que dicha exponencial tiene apariencia caótica,
a diferencia de lo que ocurre en los reales.
10
3. Aplicaciones criptográficas del problema del logaritmo
discreto.
A lo largo de este capítulo se describen varios esquemas de criptografía pública basados en el
problema del logaritmo discreto. Aunque originalmente estos criptosistemas se definieron sobre
el grupo de unidades de un cuerpo finito, aquí presentaremos su versión adaptada a curvas
elípticas, utilizando por tanto notación aditiva.
La razón de utilizar curvas elípticas en criptografía es que éstas permiten alcanzar un mayor
nivel de seguridad utilizando claves más pequeñas que los criptosistemas públicos tradicionales.
Por ejemplo, se estima que para obtener el mismo nivel de seguridad que un sistema RSA con
clave de 4096 bits, basta utilizar una clave de 313 bits en un sistema basado en curvas elípticas.
Con una clave de 160 bits en este último, se obtiene un nivel de seguridad comparable al de un
sistema RSA con clave de 1375 bits, o al de un sistema con clave de 1369 bits cuya seguridad
se base en el DLP sobre un cuerpo finito ([5]).
Esta diferencia en seguridad se debe a que se conocen algoritmos subexponenciales para
romper el problema del logaritmo discreto en F∗q , como el ataque Index Calculus descrito en
la sección 5.1, mientras que no existen ataques equivalentes para curvas elípticas generales.
Sin embargo, para determinadas curvas elípticas sí existen ataques que permiten reducir el
problema del logaritmo discreto en E(Fq ) a uno en F∗q ; por tanto, para conseguir un aumento
efectivo de la seguridad, habrá que evitar dicho tipo de curvas.
Para mayor generalidad, en los esquemas descritos a continuación hemos supuesto que son
los propios usuarios quienes eligen el cuerpo Fq y la curva E(Fq ) que se utilizarán. Cuando el
esquema requiere seleccionar un punto P ∈ E(Fq ) que genere un subgrupo de tamaño grande
(y típicamente primo), también suponemos que es responsabilidad de los usuarios acordarlo.
En la práctica, normalmente se utilizan las curvas recomendadas por el Instituto Nacional
de Estándares y Tecnología de Estados Unidos (NIST). Este organismo propone varias curvas
estándar, indicando para cada una su ecuación de Weierstrass, el tamaño del cuerpo sobre el
que está definida, el punto a utilizar como base para calcular logaritmos y el orden de éste ([7]).
11
1: A y B fijan una curva elíptica E sobre un cuerpo Fq tal que el DLP sea difícil en E(Fq ), así
como un punto P ∈ E(Fq ) cuyo orden sea grande (típicamente, E y P se escogen de forma
que dicho orden sea primo). E, Fq y P son de dominio público.
2: A escoge un entero a, calcula Ka = aP y envía dicho valor a B.
3: B escoge un entero b, calcula Kb = bP y envía dicho valor a A.
4: A calcula K = aKb = abP .
5: B calcula K = bKa = baP .
6: A y B obtienen una clave numérica a partir de K, utilizando un método preestablecido.
Como K = baP = abP , A y B obtendrán la misma clave. El número total de claves depende
de |hP i| y de cómo se extraiga la clave a partir de K, y habrá que asegurar que sea lo bastante
grande para impedir un ataque por fuerza bruta sobre el criptosistema simétrico.
Incluso si un atacante intercepta los mensajes intercambiados por A y B, sólo conocerá la
curva E, el cuerpo Fq y los puntos P , aP y bP . Por tanto, para calcular la clave deberá resolver
el problema de Diffie-Hellman: dados P , aP y bP en E(Fq ), obtener el punto abP .
Si el atacante puede resolver el problema del logaritmo discreto en E(Fq ), claramente puede
obtener a a partir de P y aP y utilizarlo para calcular K tal y como hizo A. Se conjetura que
en realidad ambos problemas son igual de difíciles.
Veamos que el valor P4 obtenido finalmente por B se corresponde con el punto asociado al
mensaje original. Como la suma en E(Fq ) es conmutativa, se cumple
P4 = m−1 −1 −1 −1
B mA mB mA M = mB mB mA mA M.
12
Por definición de m−1 −1
A , se tiene que mA mA = 1 + kN , para k ∈ Z. Como N = |E(Fq )|, por
el teorema de Lagrange se tiene que N R = P∞ para todo R ∈ E(Fq ). Por lo tanto,
m−1
A mA M = (1 + kN )M = M + kN M = M + P∞ = M, (3.2.1)
13
3.4 Esquema de firma digital de Elgamal.
En algunas aplicaciones informáticas, es fundamental garantizar que el emisor de un mensaje
sea realmente quien dice ser. Para ello, es necesario proporcionar un protocolo de firma digital.
Además, al igual que las firmas tradicionales van asociadas a una hoja de papel concreta, es
necesario ligar cada firma digital a un único documento, pues de lo contrario cualquier usuario
que reciba un mensaje firmado por A podrá suplantarlo en cualquier comunicación posterior.
A continuación se describe un esquema de firma digital ideado por Taher Elgamal, en el que
se utiliza el problema del logaritmo discreto para proveer autenticación del emisor.
Antes de poder firmar mensajes, un usuario A debe generar una pareja de claves. Para ello,
elige una curva E sobre un cuerpo Fq de modo que el DLP sobre E(Fq ) sea difícil, un punto
PA ∈ E(Fq ) cuyo orden N suele ser un primo grande, y un entero secreto s, y calcula QA = sPA .
Además, A debe seleccionar una función f : E(Fq ) → Z cuya imagen sea grande y tal que
cada elemento de ésta tenga un número pequeño de preimágenes. Un ejemplo de función con
dichas propiedades es f (x, y) = x (es decir, la primera proyección interpretada como un entero),
para la cual como mucho dos puntos de E producen la misma salida.
La clave pública de A es (Fq , E(Fq ), f, PA , QA ) y su clave privada es el entero s. Para firmar
un mensaje, A hace lo siguiente:
1: A representa el mensaje, o una función hash 1 del mismo, como un entero 0 ≤ m < N .
2: A escoge un entero aleatorio k ∈ U (Z/N Z) y calcula R = kPA .
3: A calcula a ≡ k −1 (m − sf (R)) mód N .
4: La firma del mensaje es el par (R, a). A envía a B el mensaje firmado (m, R, a).
Comprobemos que si la firma es válida se cumple que V1 = V2 . Para ello, comenzaremos por
probar que kV1 = kV2 :
14
Por tanto, existe l ∈ Z tal que ka = m − sf (R) + lN , de forma que se cumple:
Para finalizar, observamos que kV1 = kV2 ⇒ k −1 kV1 = k −1 kV2 . Entonces, utilizando la
ecuación 3.2.1, deducimos que V1 = V2 , como queríamos demostrar.
Si un atacante E fuese capaz de calcular logaritmos discretos, entonces podría recuperar s
a partir de los puntos PA y QA , tras lo cual estaría en disposición de hacerse pasar por A.
Otra posibilidad sería, tras interceptar una firma (m, R, a), utilizar los puntos R = kPA
y PA para obtener el entero k, y después resolver la congruencia ka ≡ m − sf (R) mód N
para encontrar s. Dicha congruencia tiene d = mcd(f (R), N ) soluciones, de forma que si d es
pequeño, E puede probar con cada una hasta encontrar el valor s para el que sPA = QA .
Sin embargo, podría no ser necesario saber calcular logaritmos discretos para hacerse pasar
por A: dado un mensaje m, basta producir una pareja (R, a) para la cual se satisfaga la ecuación
V1 = V2 . Es decir, E necesita encontrar un punto R y un entero a que verifiquen
f (R)QA + aR = mPA .
En este punto, E tiene dos opciones: elegir un R y resolver el problema del logaritmo discreto
para encontrar a, o bien fijar a y tratar de encontrar un R = (x, y) para el que se dé la igualdad.
En principio, este problema parece al menos tan complejo como el del logaritmo discreto, aunque
no se ha estudiado con tanta profundidad. Tampoco ha podido descartarse la existencia de un
método que permita obtener R y a simultáneamente. La creencia general es que la seguridad
del sistema de firma de Elgamal es muy próxima a la del DLP sobre el grupo E(Fq ).
Por último, veamos que escoger el entero k de forma aleatoria para cada nueva firma es
esencial para la seguridad del sistema. Si A utiliza el mismo k para cifrar m y m0 , E lo percibe
de inmediato, ya que R coincide en los dos mensajes firmados (m, R, a) y (m0 , R, a0 ). A partir
de dichos mensajes firmados, E plantea el siguiente sistema de congruencias:
ka ≡ m − sf (R) mód N
ka0 ≡ m0 − sf (R) mód N,
Entonces, hay d = mcd(a − a0 , N ) posibles valores para k, de modo que E puede ir probando
todos ellos hasta que alguno verifique R = kPA . Como hemos visto antes, conociendo k es
posible calcular s, y por tanto falsificar la firma de A en cualquier mensaje.
15
3.5 Algoritmo de firma digital sobre curvas elípticas (ECDSA).
Existe una variante del sistema de firma de Elgamal, llamada algoritmo de firma digital
(DSA), en la cual se basa el estándar de firma digital DSS propuesto por el NIST en 1991.
Vamos a ver una adaptacion del algoritmo DSA para curvas elípticas, llamada ECDSA.
A elige un cuerpo Fq y una curva E(Fq ) tal que |E(Fq )| = f r, con r un primo grande y f
un entero pequeño. También escoge un punto PA ∈ E(Fq ) de orden r y un entero secreto s, y
calcula QA = sPA .2 Salvo s, A publica todos los datos anteriores.
El mecanismo para firmar un entero m (por ejemplo, una función hash de un mensaje) es
el siguiente:
1: A escoge un entero aleatorio k ∈ U (Z/rZ) y calcula R = kPA = (x, y).
2: A calcula a = k −1 (m + sx) mód r.
3: A envía a B el mensaje firmado (m, R, a).
V = u1 PA + u2 QA = a−1 mPA + a−1 xQA = a−1 (mPA + xsPA ) = a−1 (m + xs)PA = kPA = R.
16
Veamos el procedimiento a seguir para enviar un entero m a B, conociendo su información
pública:
1: A elige un entero aleatorio k tal que 1 ≤ k < N .
2: A calcula los puntos R = kPB y Z = kQB .
3: A evalúa H1 (R, Z) = k1||k2, es decir, interpreta la salida como dos cadenas de bits de
longitudes prefijadas.
4: A utiliza k1 para obtener el mensaje cifrado C = Ek1 (m) y calcula el valor t = H2 (C, k2 ),
que será utilizado por B para validar dicho texto cifrado.
5: A envía a B la tupla (R, C, t).
El proceso de descifrado es el siguiente:
1: B calcula Z = sR(= ksPB = kQB ).
2: B evalúa H1 (R, Z) y escribe la salida como k1||k2.
3: Si H2 (C, k2 ) 6= t, B rechaza el texto cifrado.
4: En otro caso, B calcula m = Dk1 (C).
17
4. Ataques generales al problema del logaritmo discreto.
En este capítulo se describen varios ataques generales al problema del logaritmo discreto.
Estos ataques funcionan sobre grupos cíclicos arbitrarios, pero requieren un tiempo de ejecución
exponencial; por tanto, en la práctica no son útiles sobre grupos de gran tamaño.
Al igual que en el capítulo anterior, utilizaremos notación aditiva. Denotaremos por G el
grupo cíclico sobre el que resolver el problema del logaritmo discreto y por N el orden del mismo.
Usaremos n para denotar el número de bits de N (en particular, n = O(log2 N )). Dados un
generador P de G y un elemento cualquiera Q ∈ G, buscaremos k ∈ Z tal que kP = Q.
Calculamos el conjunto de baby-steps B = {(Q − rP, r), 0 ≤ r < m}. Si encontramos una
pareja de la forma (P∞ , r), entonces tendremos que Q = rP , y por tanto el logaritmo discreto
de Q en base P será igual a r.
De lo contrario, fijamos R = mP y, para q = 1, 2, ..., m − 1, comparamos el giant-step qR
con la primera componente de cada elemento (Q − rP, r) de B. Si coincide con alguna,
18
Como máximo se calculan m baby-steps, cada uno de los cuales se obtiene restando P al anterior.
A lo sumo se generan m giant-steps, requiriendo cada uno una adición de elementos del grupo.
Además, el algoritmo requiere calcular un múltiplo de un elemento (R = mP ), lo cual es
posible realizando O(log N ) = O(n) sumas si se utiliza el algoritmo 2.1. Por tanto, este último
cálculo resulta despreciable, y el coste global del algoritmo es de O(m) sumas.
√ n
Si m = N , el número de bits de m es O(2 2 ). Por tanto, el algoritmo Baby-Step Giant-
Step es exponencial en n2 , lo cual supone una gran mejora respecto al ataque por fuerza bruta,
exponencial en n.
Como G es finito, en algún momento se tendrá que Ri+j = Ri , para j > 0. Esto implica
19
En cada paso mantendremos una única tupla (Ri , xi , δi ) en memoria, que sustituiremos por
(R2i , x2i , δ2i ) al llegar al término R2i de la sucesión.
√
Por otro lado, vamos a ver que al calcular O( N ) términos de la sucesión, la probabilidad
de encontrar una coincidencia es mayor que 1/2. Sea D(N, t) el suceso de, al hacer t elecciones
equiprobables e independientes de elementos de {1, . . . , N }, obtener t elementos distintos.
N N −1 N −t+1
P (D(N, t)) = · ··· =
N N N
1 2 t−1
=1· 1− · 1− ··· 1 − .
N N N
1 2 (t−1) t(t−1) t2
e− N e− N · · · e− N = e− 2N ≈ e− 2N .
donde ms = pNses y ns = m−1s mód pess . Veamos cómo calcular los valores ks , para s = 1, . . . , t.
En primer lugar, para cada primo p divisor de N , calculamos las raíces p-ésimas de la
unidad: Rp,j = jNp
P , para j = 1, . . . , p − 1. Nótese que, si la base P está fija, esta tabla puede
precalcularse antes de comenzar el ataque y reutilizarse al calcular el logaritmo discreto de
cualquier Q ∈ G.
20
Fijemos ahora un divisor primo p = ps de N y denotemos e = es . Escribimos
N N N k0 N
Q = kP = (k0 + k1 p + · · · + ki−1 pi−1 )P = P = Rp,k0 ,
p p p p
Por tanto, el coste global de la parte de precálculo del algoritmo es O( ts=1 (log N + ps )).
P
Veamos ahora cuánto cuesta determinar k mód pess . Encontrar k0 requiere calcular un
múltiplo de un elemento, lo cual tiene coste O(log N ), y realizar O(ps ) comparaciones. Para
encontrar ki , donde i = 1, . . . , es , hay que calcular un múltiplo de un elemento, invertirlo,
realizar una suma y calcular otro producto de un elemento por un entero, tras lo cual se
compara el resultado con las ps raíces Rps ,j de la unidad. Por tanto, encontrar cada ki supone
O(log N + ps ) operaciones básicas.
21
Sumando para todos los divisores primos de N , obtenemos que el coste global del algoritmo
es O( ts=1 es (log N + ps )) = O( ts=1 es (n + ps )).
P P
Este coste puede mejorarse cambiando la forma de determinar los ki para cada primo ps .
Nótese que, fijado un divisor primo ps de N , para determinar cada ki hay que resolver el
problema del logaritmo discreto en un grupo de tamaño ps . Si en lugar de comparar con
los elementos Rps ,j se utiliza el algoritmo Baby-Step Giant-Step (4.2), el cálculo de cada ki
√
supondrá un coste de O(log N + ps ), y por tanto el coste global del algoritmo pasará a ser
√
O( ts=1 es (n + ps )).
P
22
5. Index Calculus y Xedni Calculus.
En este capítulo se describen dos ataques al problema del logaritmo discreto sobre grupos
finitos específicos, lo que los distingue de los ataques generales del capítulo 4.
gz rf (r,z) .
Y
mód p =
r∈B
Cada vector (f (r, z))r∈B se denomina relación. Denotamos por x(r) el logaritmo discreto de r
en base g. Buscamos |B| relaciones y observamos que
P
x(r)f (r,z)
gz ≡ rf (r,z) ≡ g x(r)f (r,z) ≡ g
Y Y
r∈B mód p.
r∈B r∈B
Suponiendo que las B congruencias son linealmente independientes (si no, habrá que incluir
nuevas relaciones), podemos resolver el sistema anterior, obteniendo así los logaritmos discretos
de los elementos de la base de factores.
Cuando queremos calcular el logaritmo discreto de un y ∈ Fp , suponiendo que ya hemos
realizado la precomputación descrita, comenzamos por elegir al azar un δ ∈ {1, . . . , p − 2} y
comprobar si el elemento yg δ es B-liso.
23
Si no lo es, elegimos un nuevo δ. En otro caso, podemos escribir
P
x(r)e(r)
yg δ ≡ re(r) ≡ g x(r)e(r) ≡ g
Y Y
r∈B mód p,
r∈B r∈B
y por lo tanto
X
x≡ x(r)e(r) − δ mód (p − 1).
r∈B
h∈B
yg δ = y0 he(h)
Y X
⇒ x ≡ log(y0 ) + log(h)e(h) − δ mód (q − 1).
h∈B h∈B
24
5.2 Xedni Calculus.
El ataque conocido como Xedni Calculus fue ideado por Joseph Silverman en el año 2000
([12]), y tiene como objetivo resolver el problema del logaritmo discreto sobre los puntos
racionales de una curva elíptica definida sobre Fp .
Antes de esto, se habían realizado intentos para adaptar el algoritmo Index Calculus a
curvas elípticas. Esto requería levantar la curva E/Fp a una curva E/Q, levantar varios puntos
de E(Fp ) a E(Q) y utilizar relaciones entre estos últimos para resolver el DLP. Sin embargo,
tanto encontrar una curva E/Q adecuada como levantar los puntos a ésta son problemas muy
difíciles, probablemente más que el DLP original. Vamos a ver que la idea de Silverman invierte
en cierto modo este procedimiento; de ahí que su algoritmo se denomine Xedni Calculus.
Recordemos el planteamiento del problema: sea Ep /Fp una curva elíptica, y sean S, T dos
puntos de Ep (Fp ). Buscamos un entero m tal que S = mT en Ep (Fp ).
La idea de Silverman consiste en escribir varios puntos de la forma si S + ti T y levantarlos
a una curva elíptica sobre Q; si los puntos resultantes son dependientes, es posible escribir
una relación lineal entre ellos, y esto permite resolver el problema del logaritmo discreto sobre
Ep (Fp ).
Desafortunadamente, el propio Silverman, junto con otros autores, analizó este algoritmo y
comprobó que no es práctico cuando el primo p está en el rango que habitualmente se utiliza
en criptografía basada en curvas elípticas ([3]). Aun así, el ataque resulta de interés teórico.
Utilizaremos Np para denotar el número de puntos de Ep (Fp ). Además, para cada conjunto
de r puntos Pi = [xi , yi , zi ], 1 ≤ i ≤ r, definimos la matriz B = B(P1 , . . . , Pr ) cuya i-ésima fila
está formada por los 10 monomios cúbicos en xi , yi , zi :
x3 x21 y1 x1 y12 y13 x21 z1 x1 y1 z1 y12 z1 x1 z12 y1 z12 z13
1
. .. .. ..
..
B= . . .
x3r x2r yr xr yr2 yr3 x2r zr xr yr zr yr2 zr xr zr2 yr zr2 zr3
(ii) Para cada primo l | M , la matriz B(PM,1 , . . . , PM,r ) módulo l tenga rango r.
Además, encontrar coeficientes uM,1 , . . . , uM,10 tales que las coordenadas de todos los puntos
PM,1 , . . . , PM,r satisfagan la congruencia
25
El método de Mestre para producir curvas elípticas de rango alto se basa en escoger los
coeficientes de una curva elíptica de forma que ésta tenga el máximo número de puntos posible
módulo l, para todos los primos l pequeños. Similarmente, el trabajo de Mestre permite deducir
que, si se elige una curva con pocos puntos módulo l para muchos primos pequeños, entonces
es probable que el rango de la curva sea menor de lo habitual. Ésta es la justificación heurística
para este paso del algoritmo.
Paso 3. Escoger aleatoriamente r parejas de enteros (si , ti ), con 1 ≤ si , ti , < Np y calcular
Pp,1 = [1, 0, 0], Pp,2 = [0, 1, 0], Pp,3 = [0, 0, 1], Pp,4 = [1, 1, 1].
Paso 5. Utilizar el Teorema Chino del Resto para encontrar enteros u01 , . . . , u010 que
satisfagan
u0i ≡ up,i mód p y u0i ≡ uM,i mód M para todo 1 ≤ i ≤ 10.
Paso 6. Levantar los puntos escogidos en los pasos 2 y 3 a P2 (Q). Es decir, encontrar
puntos Pi = [xi , yi , zi ] con coordenadas enteras que verifiquen
Bu = 0, (5.2.4)
26
Denotamos por Cu la cúbica de ecuación
Cu : u1 x3 + u2 x2 y + u3 xy 2 + u4 y 3 + u5 x2 z + u6 xyz
+ u7 y 2 z + u8 xz 2 + u9 yz 2 + u10 z 3 = 0 (5.2.6)
Por construcción:
La fórmula 5.2.3 garantiza que los Pi son levantamientos de los puntos originales Pp,i .
Eu : y 2 + a1 xy + a3 y = x3 + a2 x2 + a4 x + a6 (5.2.7)
n2 Q2 + · · · + nr Qr = P∞ (5.2.8)
y fijar n1 = −(n2 + · · · + nr ).
Como Q1 = P∞ , la relación lineal 5.2.8 es equivalente a la equivalencia lineal de divisores
Observación. Antes de devolver el resultado, es necesario comprobar que es correcto (es decir,
que S = mT en Ep (Fp )), ya que existe una pequeña probabilidad de que el sistema 5.2.4 no
tenga rango máximo módulo p, lo cual puede dar lugar a un valor erróneo para m.
27
6. Rendimiento de los ataques al problema del logaritmo
discreto.
En este capítulo se describen las pruebas de rendimiento realizadas, así como las conclusiones
obtenidas. Utilizaremos la notación del capítulo 4.
En las pruebas sobre F∗p , para determinar cada primo p se escoge un primo entre 2j y
2j+1 , para j = 10, . . . , 29.
En las pruebas sobre F∗q , se han empleado los grupos de unidades de F7n , para n = 3, . . . , 8.
En las pruebas sobre curvas definidas sobre Fp , para cada j = 10, . . . , 24 se escoge al azar
un primo p entre 2j y 2j+1 y se busca una curva aleatoria E definida sobre Fp y un punto
P ∈ E que genere un subgrupo de orden mayor o igual que |E|/2.
En las pruebas restantes sobre curvas elípticas, se utilizan como cuerpos base F2n , para
n = 10, . . . , 25, F3n , para n = 6, . . . , 15 y F5n , para n = 4, . . . , 11.
28
6.2 Conclusiones sobre Baby-Step Giant-Step.
En la sección 4.2, estimamos el tiempo de ejecución del algoritmo Baby-Step Giant-Step
√
como O( N ), donde N = |G|. Sin embargo, en todas las pruebas realizadas, la curva de
tiempos del algoritmo se comporta como O(N ). En la figura 6.1 se muestran los tiempos medios
de ejecución obtenidos sobre curvas con coeficientes en cuerpos Fp , para p primo.
Figura 6.1: Tiempo medio de ejecución del algoritmo Baby-Step Giant-Step sobre curvas E/Fp .
La diferencia entre los tiempos teóricos y los obtenidos en la práctica se debe a que, al
realizar la estimación temporal teórica, sólo se computa el número de sumas de elementos del
grupo. Sin embargo, en cada paso del bucle principal del algoritmo Baby-Step Giant-Step, se
√
compara un elemento de G con la tabla de O( N ) baby steps, almacenados en una lista.
Las listas en Python se implementan como array de punteros, con lo cual es muy frecuente
que cada acceso a un elemento de la lista provoque un fallo de caché, obligando a acceder a
disco para recuperar el elemento. Como se requiere un total de O(N ) comparaciones, cada una
de ellas muy lenta por el tiempo empleado en acceder a memoria, éste será el orden de ejecución
real del algoritmo. Concluimos que, para que una implementación de este algoritmo sea útil,
debe utilizarse un tipo de datos distinto para almacenar la tabla de baby steps.
29
i = 1, . . . , 20. Denotamos por s(R) ∈ {1, . . . , 20} la clase de la partición a la que pertenece
el elemento R. La función iterante se define como f (R) = Ms(R) + R.
En la figura 6.2 se muestran los tiempos medios obtenidos al ejecutar cada una de las
versiones del algoritmo sobre el grupo de unidades de cuerpos de tamaño primo. Observamos
que la versión original del algoritmo es, en media, la más lenta, mientras que la versión lineal
resulta ser la más rápida, seguida por la versión combinada. En las pruebas realizadas sobre F∗q
y sobre curvas elípticas se han obtenido resultados similares.
Además de conocer el tiempo medio de ejecución, nos interesa saber el número de veces que
√
termina cada algoritmo sin proporcionar respuesta en tiempo O( N ). Para poder hacer esto,
√
se ha implementado el algoritmo rho de Pollard de forma que sólo realice un máximo de c N
pruebas, donde c es una constante prefijada por el usuario. Concretamente, en las pruebas aquí
descritas se ha utilizado c = 20.
En la tabla 6.1 se muestran los números de errores obtenidos para los últimos siete grupos.
Cuando p − 1 tiene muchos factores primos pequeños, el número de errores es en general mucho
mayor; además, la figura 6.2 muestra un peor rendimiento del algoritmo en dichos casos. La
razón es que, en ese caso, es muy probable que la congruencia a resolver por el algoritmo tenga
más soluciones de las permitidas, lo cual obliga a comenzar de nuevo.
El grupo F∗204735481 es el que acumula un mayor número de errores, lo cual es consistente con
el pico que aparece en dicho punto en la figura 6.2 para los cuatro algoritmos, así como con el
gran número de factores muy pequeños de p − 1 = 204735480.
30
Por último, observamos que las versiones lineal y combinada se ven, en general, menos
afectadas por la descomposición de p−1. Concluimos que, al aleatorizar el algoritmo, se obtiene
mayor protección respecto a cambios en la factorización del tamaño del grupo.
31
Figura 6.4: Eficiencia de Pollard-rho lineal sobre F∗q .
32
Figura 6.6: Eficiencia de Index Calculus sobre F∗p .
En primer lugar, que Index Calculus sea subexponencial y Pollard rho exponencial, sólo
nos dice que, asintóticamente, el primer ataque será más rápido. Deducimos que los grupos
utilizados no son lo bastante grandes para que emplear Index Calculus suponga una ventaja.
En segundo lugar, hemos mencionado que el algoritmo Index Calculus destina todo su
tiempo de ejecución (salvo una cantidad despreciable) a la fase de precomputación, que sólo
tiene que ejecutarse una vez.
Nos interesa saber a partir de qué número de ataques este tiempo de precomputación
compensa al utilizado por el ataque rho Pollard. Para ello, para cada primo p mostramos
en la tabla 6.2 el número m que se obtiene al dividir el tiempo de precomputación de Index
Calculus entre el tiempo medio del ataque rho de Pollard (tomando parte entera por arriba).
A partir de dicho número de ataques m, es más rentable utilizar Index Calculus. Observamos
que todos los m son menores que 8.
33
Apéndices
34
A. Variedades y curvas algebraicas.
En este apéndice se presentan algunos conceptos relativos al campo de la geometría
algebraica, que serán necesarios para estudiar ciertas características de las curvas elípticas.
Utilizaremos K para denotar un cuerpo perfecto y K para denotar una clausura algebraica
(fija) de K. Además, K[X] = K[X1 , · · · , Xn ] denotará un anillo de polinomios en n variables
con coeficientes en K, e I ⊂ K[X] un ideal de éste.
Un conjunto algebraico V está definido sobre K, y se denota V /K, si su ideal I(V) se puede
generar mediante polinomios de K[X]. Si V está definido sobre K, entonces el conjunto de
puntos K-racionales de V es V (K) = V ∩ An (K).
Definición A.3. Una variedad afín V es un conjunto algebraico afín irreducible, es decir, que
no puede ser expresado mediante la unión de dos subconjuntos algebraicos propios.
K[X]
Si V es una variedad definida sobre K, su anillo de coordenadas afín es K[V ] = I(V /K)
.
El cuerpo cociente de dicho anillo, denotado K(V ), recibe el nombre de cuerpo de funciones de
V /K. Análogamente se definen K[V ] y K(V ).
Definición A.4. La dimensión de una variedad V se define como el supremo de las longitudes
m de cadenas V0 ⊂ V1 ⊂ . . . ⊂ Vm de subvariedades de V distintas y no vacías.
El teorema de la base de Hilbert garantiza que todos los ideales de K[X] y K[X] están
finitamente generados, hecho empleado en la siguiente definición.
35
Definición A.5. Sea V una variedad, P ∈ V y f1 , . . . , fm ∈ K[X] un conjunto de generadores
de I(V ). Entonces V es no singular o lisa en el punto P si la matriz m × n
!
∂fi
(P )
∂Xj 1≤i≤m, 1≤j≤n
f
K[V ]P = {F ∈ K(V ) : F = para f, g ∈ K[V ] con g(P ) 6= 0}.
g
Nótese que si P = [x0 , · · · , xn ] ∈ Pn (K), esto no significa que todas sus coordenadas xi
pertenezcan a K. Sin embargo, fijando una coordenada xj 6= 0, sí que se verifica xi /xj ∈ K
para todo i.
36
Definición A.10. Una variedad proyectiva V es un conjunto algebraico proyectivo irreducible.
El espacio proyectivo Pn contiene muchas copias del espacio afín An . Por ejemplo, para cada
i ∈ {0, . . . , n}, podemos definir la inclusión
φi : An → Pn
(y1 , · · · , yn ) 7→ [y1 , · · · , yi−1 , 1, yi , · · · , yn ].
φi −1 : Ui → An
x0 xi−1 xi+1 xn
[x0 , · · · , xn ] 7→ ( , · · · , , , · · · , ).
xi xi xi xi
Como los conjuntos U0 , . . . , UN cubren todo Pn , cualquier variedad proyectiva queda cubierta
por los conjuntos V ∩ U0 , . . . , V ∩ UN , cada uno de los cuales es una variedad afín vía la
correspondiente aplicación φi −1 .
El proceso de reemplazar f (X0 , · · · , Xn ) por f (Y1 , · · · , Yi−1 , 1, Yi+1 , · · · , Yn ) se conoce como
deshomogeneización con respecto a Xi .
Por otra parte, para f (Y ) ∈ K[Y ] podemos definir
X0 Xi−1 Xi+1 Xn
f ∗ (X0 , · · · , Xn ) = Xid f ( ,··· , , ,··· , ),
Xi Xi Xi Xi
Definición A.11. Sea V un conjunto afín algebraico con ideal I(V ). Consideramos V como
un subconjunto de Pn , vía la aplicación φi .
La clausura proyectiva de V , denotada V , es el conjunto algebraico proyectivo cuyo ideal
homogéneo está generado por {f ∗ (X) : f ∈ I(V )}.
Proposición A.1. (a) Sea V una variedad afín. Entonces V es una variedad proyectiva y
V = V ∩ An .
(b) Sea V una variedad proyectiva. Entonces V ∩ An es una variedad afín y se cumple
V ∩ An = ∅ ó V = V ∩ An .
(c) Si una variedad afín (proyectiva) V está definida sobre K, entonces V (V ∩ An ) también
está definida sobre K.
37
La proposición A.1 permite asociar a cada variedad afín V una única variedad proyectiva
W . Los puntos de W \ V se denominan puntos en el infinito de W .
La dimensión de V es la dimensión de V ∩ An .
g 6∈ I(V ).
f f0
g
∼ g0
si f g 0 − f 0 g ∈ I(V ).
Definición A.15. Sea C una curva, sea P ∈ C un punto no singular de ésta y sea
MP = {f ∈ K[C]P : f (P ) = 0}, que resulta ser un ideal principal, el único ideal maximal
de K[C]P . Definimos la aplicación
Un uniformizante para C en P es una función t ∈ K(C) tal que ordP (t) = 1, es decir, un
generador de MP .
38
Definición A.16. Sea C una curva y P ∈ C no singular. Si f ∈ K(C), el orden de f en P es
igual a ordP (f ).
Proposición A.2. Sea C una curva suave y sea f ∈ K(C). Entonces hay sólo una cantidad
finita de puntos de C en los que f tiene un cero o un polo. Además, si f no tiene ningún polo,
entonces f ∈ K.
Definición A.18. Sea C una curva suave y sea f ∈ K(C)∗ . El divisor asociado a f , denotado
div(f ), se define como
X
div(f ) = ordP (f )(P ).
P ∈C
(b) deg(div(f )) = 0.
39
(b) d(xy) = x dy + y dx para todos x, y ∈ K(C).
Proposición A.4. Sea C una curva. ΩC es un espacio vectorial de dimensión 1 sobre K(C).
Proposición A.5. Sea C una curva suave, sea P ∈ C y sea t ∈ K(C) un uniformizante en P .
(a) Para cada ω ∈ ΩC existe una única función g ∈ K(C), dependiendo de ω y de t, tal que
ω = g dt.
Denotamos g mediante ω/dt.
(c) La cantidad ordP (ω/dt) depende sólo de ω y P , pero no del uniformizante t empleado.
Llamaremos a dicho valor orden de ω en P , y lo denotaremos mediante ordP (ω).
(e) Para todos los puntos P de C excepto una cantidad finita, se tiene ordP (ω) = 0.
D ≥ 0, si nP ≥ 0 para todo P ∈ C.
Si D1 , D2 ∈ Div(C), escribimos D1 ≥ D2 para indicar que D1 − D2 es positivo.
40
Se puede probar que L(D) es un K-espacio vectorial de dimensión finita. Denotaremos su
dimensión mediante l(D) = dimK (L(D)).
Ejemplo A.1. Sea D ∈ Div(C) tal que deg(D) < 0. Entonces L(D) = {0} y por tanto
l(D) = 0.
Para ver esto, supongamos que existe f ∈ L(D) tal que f 6= 0. Entonces, utilizando la
proposición A.3, tendríamos
Ejemplo A.2. Consideramos el divisor D = 0 ∈ Div(C). Veamos que L(0) = {K} y por tanto
l(0) = 1.
0 ∈ L(0) por definición del conjunto. Sea f 6= 0, y sea div(f ) =
P
nP (P ) su divisor
asociado. Si f pertenece a L(0), entonces nP ≥ 0 para todo P ∈ C. Pero, por la proposición
A.3, deg(div(f )) = 0, y por tanto todos los nP tienen que ser nulos. De este modo, obtenemos
que f ∈ K.
Teorema A.1 (Riemann-Roch). Sea C una curva suave y sea KC un divisor canónico de
C. Existe un entero g, denominado género de C, tal que para cada divisor D ∈ Div(C),
(b) deg(KC ) = 2g − 2.
41
B. Ecuaciones cuadráticas en cuerpos finitos.
A continuación estudiaremos cómo resolver ecuaciones de la forma ax2 + bx + c = 0, donde
a 6= 0, b y c son elementos de un cuerpo finito Fq . Observamos que, como a 6= 0, se cumple
ax2 + bx + c = 0 ⇔ x2 + a−1 bx + a−1 c = 0, lo cual nos permite restringir nuestro análisis al
caso en que a = 1.
xn = a ⇔ (g y )n = g α ⇔ yn ≡ α mód (q − 1).
q−1 q−1 α α
a d = (g α ) d = (g q−1 ) d = 1 ⇔ ∈ Z ⇔ d | α.
d
42
Este algoritmo calcula una de las raíces cuadradas de un elemento a ∈ Fpn , el cual
hemos comprobado que es un cuadrado. Nótese que, una vez conocida una de las raíces de
a, multiplicándola por −1 se obtiene la raíz restante.
Además del elemento a, el algoritmo recibe como entrada un elemento w ∈ F∗pn tal que la
ecuación x2 = w no tenga soluciones en F∗pn .
A continuación se muestra el pseudocódigo del algoritmo:
if
a
= 1 then
jk = 0
else
jk = 1
end if
end for
α−2
return bj0 +2j1 +···+2 jα−2 r
end if
return r
Algoritmo B.1: Cálculo de la raíz cuadrada en Fpn , para p impar.
Veamos por qué funciona el algoritmo anterior. En primer lugar, afirmamos que r es casi
2
una raíz cuadrada de a, en el sentido de que ra es una raíz 2α−1 -ésima de la unidad, ya que
!2α−1 !2α−1
r2 as+1 α−1 q−1
= = as2 =a 2 =1
a a
Como b es una raíz 2α -ésima primitiva de la unidad, sólo falta encontrar un j ∈ {0, . . . , 2α −1}
tal que x = bj r cumpla x2 = a. De hecho, podemos suponer que j < 2α−1 , ya que al multiplicar
α−1
x por b2 = −1, se obtiene la otra raíz cuadrada de a, −x. Por tanto, el exponente j se puede
escribir en binario como j = j0 + 2j1 + · · · + 2α−2 jα−2 .
43
k−1 j
2
bj0 +2j1 +···+2 k−1 r
Observación. Como exactamente la mitad de los elementos de F∗pn son cuadrados, para
encontrar rápidamente un w ∈ F∗pn tal que x2 = w no tenga solución, basta ir escogiendo
p−1
elementos aleatorios hasta dar con un w tal que w 2 = −1.
Por último, analicemos el coste temporal del algoritmo, estimando el número de productos
de elementos del cuerpo. Supondremos que ya conocemos un no cuadrado w, que sólo hay
que buscar una vez. Por la sección 2, sabemos que calcular una potencia requiere O(log q)
multiplicaciones; por tanto éste es el coste de calcular b y r. En cada paso del bucle principal
se realiza una exponenciación; como el bucle tiene α − 1 < log2 q pasos, su coste global es de
O(log2 q) multiplicaciones. Por tanto, éste será el coste temporal del algoritmo completo.
Si q es primo, la multiplicación de dos elementos de Fq requiere O(log2 q) operaciones con
bits, así que el coste temporal del algoritmo será de O(log4 q) operaciones básicas.
E : y 2 + a1 xy + a3 y = x3 + a2 x2 + a4 x + a6 .
donde b = a1 x + a3 y c = −(x3 + a2 x2 + a4 x + a6 ).
44
n−1
Si b = 0, la ecuación anterior tiene siempre una única solución, dada por y = c2 .
Supondremos por tanto que b 6= 0, en cuyo caso existe b−1 y se obtiene
donde g(y) = y 2 + y + cb−2 . Es decir, y es una raíz de g si y sólo si by es una raíz de f , lo cual
nos permite restringir nuestro análisis a polinomios de la forma g(y).
Como g 0 (y) = 1 6= 0, el polinomio g(y) tiene dos raíces distintas en F2n . Una vez conocida
una raíz u de g, es fácil comprobar que la otra raíz es igual a u + 1. Nos preguntamos primero
si g(y) tiene raíces en F2n .
n−1
n−1 i
T r(x) = x + x2 + · · · + x2 x2
X
=
i=0
Observación. La traza de un x ∈ F2n queda fija mediante cualquier σ ∈ Gal(F2n /F2 ) = hφi,
donde φ es el automorfismo de Frobenius, ya que queda fija mediante φ:
Lema B.1. El polinomio g(y) = y 2 +y+d ∈ F2n [y] tiene una raíz u ∈ F2n si y sólo si T r(d) = 0.
Por el lema anterior, para saber si existe y tal que (x, y) ∈ E, habrá que comprobar si
T r(cb−2 ) = 0 (de no ser así, habrá que seleccionar un nuevo valor de x).
Supongamos que g(y) tiene raíces en F2n . Al estar trabajando sobre un cuerpo de
característica 2, sabemos que g(u) = 0 ⇔ u2 + u = cb−2 . Por tanto, para encontrar u deberemos
buscar la preimagen de cb−2 mediante la aplicación h : F2n −→ F2n tal que h(y) = y 2 + y.
Consideramos F2n como espacio vectorial sobre F2 . La aplicación h es lineal, ya que:
Para encontrar las raíces de g, fijamos una base de F2n y escribimos la matriz Ah de la
aplicación h, así como el vector d correspondiente al elemento cb−2 , ambos con respecto a dicha
base. Las dos raíces de g son las soluciones de la ecuación matricial Ah v = d.
45
C. Algoritmos auxiliares para el uso de curvas elípticas.
C.1 Selección de curvas elípticas criptográficamente buenas.
Para utilizar los criptosistemas del capítulo 3, es necesario decidir sobre qué curva elíptica
se va a trabajar, además de encontrar un punto P que genere un subgrupo de orden grande,
y típicamente primo. El objetivo de esta sección es proporcionar un método para seleccionar
dichos parámetros.
En primer lugar, fijamos un primo p y un cuerpo finito Fq , donde q = pd . Buscaremos una
curva elíptica definida sobre dicho cuerpo.
1: Elegimos aleatoriamente A, B ∈ Fq . Si 4A3 + 27B 2 = 0, hacemos una nueva elección. En
caso contrario, obtenemos la curva E : y 2 = x3 + Ax + B.
2: Calculamos n = |E(Fq )|, utilizando el algoritmo de Schoof.
3: Buscamos un primo r grande tal que E(Fq ) tenga un subgrupo de orden r (dicho subgrupo
será necesariamente cíclico). Para ello, intentamos expresar n = rs, con r primo y s menor o
igual que una cota prefijada. Una forma de hacer esto es ir dividiendo n por primos menores
que un determinado límite (tantas veces como sea posible) y comprobar si el r resultante
es primo. Si no lo es, volvemos al paso 1.
4: Buscamos un punto R ∈ E(Fq ) aleatorio, eligiendo al azar un x ∈ F y comprobando si
q q
3
f (x) = x + Ax + B es un cuadrado. Si lo es, tomamos R = (x, f (x)); de lo contrario
elegimos un nuevo valor de x.
5: Buscamos un punto P ∈ E(Fq ) con orden igual a r. Para ello, calculamos P = sR y
comprobamos si P 6= P∞ . Si es así, hemos terminado; si no, volvemos al paso 6.
Observación. El método descrito en esta sección ha sido el utilizado en las pruebas realizadas
como parte del trabajo. Además de programar la versión aquí expuesta, se ha adaptado el
algoritmo a los casos en que el cuerpo sobre el que se define la curva es de característica 2 ó 3.
46
Observación. No se conoce ningún algoritmo determinista polinomial en el número de bits
de q que cumpla esta misma función. Sin embargo, con algoritmos probabilísticos como el que
vamos a ver, es posible conseguir una proporción de fallos muy baja.
En primer lugar, fijamos un entero κ lo bastante grande para contentarnos con una
probabilidad de fallo aproximada de 21κ . En la práctica, suele bastar κ = 30 ó κ = 50.
Suponemos que el cuerpo Fq es tal que q > M κ. Escribimos los enteros 1, . . . , M κ como
mκ + j, con 0 ≤ m < M y 1 ≤ j < M y utilizamos algún método estándar para establecer
una biyección entre dichos enteros y un subconjunto de Fq . Una posibilidad es escribir cada
entero en base p y utilizar sus n dígitos, vistos como elementos de Fp , como coeficientes de un
polinomio de grado n − 1 correspondiente a un elemento de Fq .
De este modo, dado un número m, para cada j = 1, 2, . . . , κ obtenemos un elemento x ∈ Fq
asociado a mκ + j. Para dicho x, calculamos el lado derecho de
y 2 = f (x) = x3 + a2 x2 + a4 x + a6
y buscamos una raíz cuadrada de f (x), utilizando el método descrito en B.1. Si encontramos
un y tal que y 2 = f (x), tomamos Pm = (x, y). Si tal y no existe, incrementamos j y probamos
con el x correspondiente.
Si encontramos un x para el que f (x) es un cuadrado antes de que j se haga mayor que κ,
podemos recuperar m mediante la fórmula [ x̃−1
κ
], donde x̃ es el entero asociado a x mediante la
biyección entre enteros y elementos de Fq .
Se puede probar que f (x) es un cuadrado para aproximadamente la mitad de los x posibles.
Por tanto, la probabilidad de que este método termine sin encontrar un punto Pm cuya
coordenada x corresponda a un x̃ entre mκ + 1 y mκ + κ es tan solo de 21κ , aproximadamente.
47
Bibliografía
[1] R. Avanzi, C. Doche, T. Lange, K. Nguyen y F. Vercauteren, Handbook of elliptic and
hyperelliptic curve cryptography, 1a Ed., Chapman & Hall/CRC, Boca Raton, 2006.
[2] K. Ireland y M. Rosen, A classical introduction to modern number theory, 2a Ed., Springer,
New York, 1990.
[4] N. Koblitz, A course in number theory and cryptography, 2a Ed., Springer, New York, 1994.
[9] C. Ritzenthaler, Elliptic curves and applications to cryptography, notas de clase, Université
d’Aix-Marseille II, Marseille, 2011.
[10] D. Shanks, Class number, a theory of factorization, and genera, 1969 Number Theory
Institute (Proc. Sympos. Pure Math., State Univ. New York, Stony Brook, N.Y., 1969),
vol. 20, (1971), 415–440
[11] V. Shoup, A computational introduction to number theory and algebra, 2a Ed., Cambridge
University Press, Cambridge, 2009.
[12] J. H. Silverman, The Xedni Calculus and the elliptic curve discrete logarithm problem,
Design, Codes and Cryptography, vol. 20, (2000), 5-40.
[13] J. H. Silverman, The arithmetic of elliptic curves, 2a Ed., Springer, New York, 2009.
[14] W. A. Stein et al., Sage Mathematics Software (Version 5.12), The Sage Development
Team, 2013, http://www.sagemath.org.
[15] E. Teske, Speeding up Pollard’s rho method for computing discrete logarithms, en J. Buhler
(ed.), Proceedings of the third international symposium on algorithmic number theory,
Springer-Verlag, London, (1998), 541-554.
[16] L. C. Washington, Elliptic curves: number theory and cryptography, 2a Ed., Chapman &
Hall/CRC, Boca Raton, 2008.
48