Pairings y sus aplicaciones

Anuncio
Pairings y sus
aplicaciones
Llorenç Huguet Rotger
Josep Rifà Coma
Juan Gabriel Tena Ayuso
PID_00200950
Los textos e imágenes publicados en esta obra están sujetos –excepto que se indique lo contrario– a
una licencia de Reconocimiento-NoComercial-SinObraDerivada (BY-NC-ND) v.3.0 España de
Creative Commons. Podéis copiarlos, distribuirlos y transmitirlos públicamente siempre que citéis
el autor y la fuente (FUOC. Fundació per a la Universitat Oberta de Catalunya), no hagáis un uso
comercial y no hagáis una obra derivada. La licencia completa se puede consultar en
http://creativecommons.org/licenses/by-nc-nd/3.0/es/legalcode.es
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
Índice
Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.
Pairings en curvas elípticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.1.
Aplicaciones bilineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.2.
El pairing de Weil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
1.3.
Pairing modificado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
1.3.1.
Construcción explícita de el . . . . . . . . . . . . . . . . . . . . . . . . . .
13
1.3.2.
El algoritmo de Miller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
Grado de inmersión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
2.
Ataques basados en pairings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.
Criptografía basada en la identidad . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.1.
Intercambio de claves en criptografía basada en la identidad .
22
3.1.1.
Acuerdo bipartito de claves . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.1.2.
Acuerdo tripartito de claves . . . . . . . . . . . . . . . . . . . . . . . . . .
24
3.2.
Cifrado basado en la identidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3.3.
Esquemas de firma basados en la identidad . . . . . . . . . . . . . . . . . . .
27
Ejercicios de autoevaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
Soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
1.4.
CC-BY-NC-ND • PID_00200950
5
Introducción
Una de las herramientas de la geometría de las curvas elípticas que se han
demostrado más fructíferas en criptografía son los denominados pairings. Los
pairings son aplicaciones bilineales definidas sobre los puntos de una curva
elíptica y con valores en un grupo cíclico de raíces de la unidad, grupo contenido en un cierto cuerpo finito.
Existen diversos tipos de pairings, siendo los fundamentales el pairing de Weil
y el de Tate. Recientemente han sido propuestos otros tipos de pairings: eta
pairings, ate, omega pairings, etc, los cuales tienen en realidad solo un carácter
auxiliar y algunos solo son aplicables a tipos particulares de curvas.
El pairing de Tate es más general que el de Weil (puede aplicarse a curvas más
generales que las elípticas) y ofrece ciertas ventajas computacionales, sin embargo, es más difícil de describir por lo que, en lo que sigue, consideramos
solo el segundo. En cualquier caso, no estando interesados en la computación
explícita de tales pairings, sino en el papel que juegan en criptografía, ello es
en realidad irrelevante y la elección del pairing de Weil está motivada exclusivamente por la claridad en la exposición.
Las aplicaciones criptográficas de los pairings son de dos tipos. Por una parte se
han utilizado con un propósito destructivo, para diseñar ataques al problema
del logaritmo discreto elíptico, y de otra, desde un punto de vista constructivo,
constituyen una herramienta básica de un nuevo paradigma, el de la criptografía basada en la identidad. El ataque basado en pairings tiene como consecuencia que ciertas curvas elípticas, las denominadas supersingulares, no se
consideren actualmente seguras para implementar criptosistemas y protocolos criptográficos basados en el logaritmo discreto elíptico, pero curiosamente
tales curvas supersingulares son idóneas para la criptografía basada en la Identidad.
Describiremos en lo que sigue los pairings y los dos tipos de aplicaciones criptográficas mencionadas.
Pairings y sus aplicaciones
CC-BY-NC-ND • PID_00200950
6
Objetivos
En los materiales didácticos de este módulo el estudiante encontrará los contenidos necesarios para alcanzar los objetivos siguientes:
1. Conocer el concepto de “pairing” en curvas elípticas, específicamente el
pairing de Weil.
2. Conocer las aplicaciones criptográficas de los pairings, sobre todo las enfocadas al cálculo del logaritmo discreto elíptico y las enfocadas a la criptografía basada en la identidad.
3. Conocer algún protocolo específico de criptografía basada en la identidad
(acuerdo de claves, cifrado y firma).
4. Saber escribir software para implementar los protocolos anteriores.
Pairings y sus aplicaciones
CC-BY-NC-ND • PID_00200950
7
1. Pairings en curvas elípticas
.
En este apartado se describen los pairings definidos sobre una curva elíptica y
se estudian sus propiedades. Se muestra asimismo cómo el grupo de llegada
de un pairing está contenido en un cuerpo finito, extensión del cuerpo base de
definición de la curva, se define el grado de inmersión y se discute el valor del
mismo.
1.1. Aplicaciones bilineales
Los pairings son aplicaciones bilineales entre ciertos grupos abelianos. Comencemos considerando las aplicaciones bilineales entre espacios vectoriales, sin
duda más familiares al lector y cuya definición y propiedades se trasladarán
inmediatamente al lenguaje de pairings.
Sea K un cuerpo conmutativo y V1 ,V2 ,W, tres espacios vectoriales sobre K.
.
Definición 1.1. Una aplicación f : V1 × V2 → W se denomina bilineal
si es aplicación lineal de espacios vectoriales en cada una de las varia-
bles, es decir, si para todo a,a′ ∈ V1 , b,b′ ∈ V2 , λ ∈ K, se verifican las
cuatro propiedades siguientes:
1) f (a + a′ ,b) = f (a,b) + f (a′ ,b)
2) f (λa,b) = λf (a,b)
3) f (a,b + b′ ) = f (a,b) + f (a,b′ )
4) f (a,λb) = λf (a,b)
Si W = K una aplicación bilineal se denomina forma bilineal.
Supongamos que se tiene V1 = V2 = V, entonces podemos dar la siguiente
definición.
.
Definición 1.2. Una aplicación bilineal f : V × V → W se denomina:
1) Simétrica si ∀a,b ∈ V se verifica: f (a,b) = f (b,a).
2) Antisimétrica si ∀a,b ∈ V se verifica: f (a,b) = –f (b,a).
3) Alternada si ∀a ∈ V se verifica: f (a,a) = 0.
Pairings y sus aplicaciones
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
8
.
Formas cuadráticas
Lema 1.3.
Si f : V × V → K es una
forma bilineal simétrica la
aplicación
q : V → K, q(a) = f (a,a) se
denomina forma cuadrática.
La teoría de las formas
cuadráticas, estrechamente
relacionada con la de formas
bilineales simétricas, es una
rama importante del Álgebra,
y sin duda es familiar al lector
a propósito del estudio de las
cónicas y cuádricas.
Toda forma bilineal alternada es antisimétrica. Si la característica del
cuerpo K es diferente de 2 se verifica el recíproco.
Demostración:
1) Supongamos f alternada; para a,b ∈ V se tendrá:
0 = f (a + b,a + b) = f (a,a) + f (a,b) + f (b,a) + f (b,b) = 0 + f (a,b) + f (b,a) + 0
(1)
luego f (a,b) = –f (b,a), es decir f es antisimétrica.
2) Supongamos f antisimétrica, en particular para a = b, se tiene
f (a,a) = –f (a,a) ⇒ 2f (a,a) = 0.
(2)
Puesto que la característica de K es diferente de 2, debe ser f (a,a) = 0, es decir
f es alternada.
Ejemplo 1.1. Sean K = R y V = R2 . Los elementos a ∈ V serán vectores con dos
coordenadas reales, a = (x,y). Sean las siguientes formas bilineales f : V × V → R:
1) f ((x,y),(x′ ,y′ )) = axx′ + b(xy′ + x′ y) + cyy′ , a,b,c ∈ R: Forma simétrica
2) f ((x,y),(x′ ,y′ )) = xy′ – yx′ : Forma antisimétrica y alternada
3) f ((x,y),(x′ ,y′ )) = axx′ + bxy′ + b′ x′ y + cyy′ , a,b,b′ ,c ∈ R, b 6= ±b′ : Ni simétrica ni antisimétrica
.
Definición 1.4. Sea f : V1 × V2 → W una forma bilineal. Se denomina
núcleo por la izquierda de f al conjunto Kerizq = {a ∈ V1 ; f (a,b) =
0, ∀b ∈ V2 }. Análogamente se denomina núcleo por la derecha de f al
conjunto Kerder = {b ∈ V2 ; f (a,b) = 0, ∀a ∈ V1 }.
.
Lema 1.5. El elemento 0 ∈ V1 pertenece a Kerizq y el elemento 0 ∈ V2
pertenece a Kerder
Observación
La forma cuadrática asociada
a la forma bilineal simétrica
f ((x,y),(x′ ,y′ )) =
axx′ + b(xy′ + x′ y) + cyy′ es la
q((x,y)) = ax2 + 2bxy + cy2 .
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
9
Demostración: Para cualquier a ∈ V1 , b ∈ V2 se tiene,
f (a,b) = f (0 + a,b) = f (0,b) + f (a,b) ⇒ f (0,b) = 0 ⇒ 0 ∈ Kerizq .
(3)
El resultado para 0 ∈ Kerder es análogo.
.
Definición 1.6. La aplicación f se denomina no degenerada por la
izquierda si Kerizq = {0} y no degenerada por la derecha si Kerder = {0}.
Es evidente que si f es simétrica o antisimétrica se verifica Kerizq = Kerder .
.
Definición 1.7. f : V × V → W aplicación bilineal simétrica o antisimétrica se denomina no degenerada si verifica las condiciones equivalentes siguientes:
1) f es no degenerada por la izquierda.
2) f es no degenerada por la derecha.
3) Para todo a ∈ V existe un b ∈ V tal que f (a,b) 6= 0 (y también
f (b,a) 6= 0).
Caso contrario se denomina degenerada.
Ejemplo 1.2.
Sean K = R y V = R2 .
La aplicación bilineal simétrica, f : V×V → K, f ((x,y),(x′ ,y′ )) = xx′ +yy′ , es no degenerada.
La aplicación bilineal simétrica, f : V × V → K, f ((x,y),(x′ ,y′ )) = xx′ , es degenerada: todo
elemento (0,y) pertenece al núcleo por la izquierda (o por la derecha).
Como se ha indicado, la definición de aplicación bilineal puede formularse
para grupos abelianos. Para adaptarnos a la notación posteriormente utilizada
para pairings, supongamos dos grupos abelianos A,B con notación aditiva y C
un grupo abeliano con notación multiplicativa.
.
Definición 1.8. Una aplicación f : A × B → C se denomina bilineal si
verifica:
1) f (a + a′ ,b) = f (a,b) · f (a′ ,b)
2) f (a,b + b′ ) = f (a,b) · f (a,b′ )
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
10
Las definiciones y propiedades antes enunciadas (simétrica, antisimétrica, alternada, no degenerada) siguen siendo válidas en este caso, con los cambios
de notación pertinentes (en particular el elemento neutro de C debe escribirse
ahora 1).
1.2. El pairing de Weil
Sea E una curva elíptica definida sobre un cuerpo conmutativo K (en el contexto de las aplicaciones criptográfícas K será un cuerpo finito). Los pairings
son aplicaciones bilineales que aplican un par de puntos de E en un elemento
de un grupo cíclico finito, cuyos elementos pueden identificarse con raíces de
la unidad, grupo que en el caso K = Fq , cuerpo finito con q elementos, veremos que puede considerarse contenido en un cuerpo Fqk con qk elementos,
para un cierto valor k.
Tomaremos como modelo el pairing de Weil, el primer tipo de pairing propuesto*. Para cada entero l, primo con la característica del cuerpo, se tiene
un pairing de Weil el , el cual está definido en los puntos del subgrupo E[l]
* Ver, por ejemplo, A. Menezes
(1993). Elliptic Curves Public Key
Cryptography. Kluwer.
de l-torsión de E (subgrupo que definimos a continuación) y a valores en un
grupo cíclico µl con l elementos, cuya ley de grupo escribiremos con notación multiplicativa. Puesto que todo elemento x ∈ µl verifica xl = 1, puede
interpretarse µl como el grupo de las raíces l-simas de 1. A un generador de
este grupo cíclico le llamaremos, en este contexto, raíz primitiva l-sima de la
unidad.
Observación
.
Definición 1.9. Los puntos de l-torsión de una curva elíptica son los
elementos del conjunto E[l] = {P ∈ E; l · P = 0}, donde como habitual-
mente l · P indica el producto escalar de l por el punto P.
Es evidente que el conjunto E[l] es un subgrupo del grupo E(K) de puntos de
En las aplicaciones
criptográficas basadas en el
logaritmo discreto elíptico, se
trabaja en el grupo cíclico
generado por un punto
P ∈ E. Si l es el orden de P
(usualmente primo) es
entonces el pairing el el que
se considera
E racionales sobre K. Si K̄ es una clausura algebraica de K podemos definir
análogamente el grupo E[l](K̄) de puntos de l-torsión racionales sobre K̄. El
grupo E[l](K̄) tiene cardinal l2 y la siguiente estructura (Silverman, 1986).
Referencia bibliográfica
J. H. Silverman (1986). The
Arithmetic of Elliptic Curves.
Springer-Verlag.
.
Lema 1.10.
E[l](K̄) ≃ Z/lZ × Z/lZ
(4)
CC-BY-NC-ND • PID_00200950
11
Sin embargo, estos l2 puntos de E[l](K̄) no están todos necesariamente definidos sobre el cuerpo K y en general E[l] será solo una parte (un subgrupo)
de E[l](K̄). Nótese que dicho subgrupo siempre contiene al menos el elemento
neutro O ∈ E.
Ejemplo 1.3.
La curva elíptica E : y2 = x3 +x+8, sobre el cuerpo F11 , posee solo dos puntos de 2-torsion
con coeficientes en el cuerpo base. Más precisamente, E[2] = {O,(8,0)} ≃ Z/2Z.
Ejemplo 1.4.
Para l = 3 la curva elíptica E : y2 = x3 + 7x, sobre el cuerpo F13 tiene sus 9 puntos de
3-torsión racionales, explícitamente
E[3] = {O,(3,3),(3,10),(4,1),(4,12),(9,5),(9,8),(10,2),(10,11)}
Estos puntos constituyen un subgrupo isomorfo al grupo Z/3Z × Z/3Z, el cual contiene
cuatro subgrupos de orden tres, los cuales tienen en común el elemento neutro.
•
G1 = {O,(3,3),(3,10)}
•
G2 = {O,(4,1),(4,12)}
•
G3 = {O,(9,5),(9,8)}
•
G4 = {O,(10,2),(10,11)}
El siguiente diagrama muestra estos cuatro subgrupos.
Grupos de 3-torsión
G1
(3,3)
(3,10)
G2
G3
O
(4,1)
(4,12)
(9,5)
(9,8)
(10,2)
(10,11)
G4
Pairings y sus aplicaciones
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
12
.
Definición 1.11. El pairing de Weil es una aplicación:
el : E[l] × E[l] –→ µl
(5)
con las siguientes propiedades:
1) Bilineal, es decir el (P + P′ ,Q) = el (P,Q)el (P′ ,Q), el (P,Q + Q ′ ) =
el (P,Q)el (P,Q ′ ).
2) Alternada, es decir el (P,P) = 1, ∀P ∈ E. Por ser alternada es también
antisimétrica, luego el (P,Q) = el (Q,P)–1 .
3) No-degenerada, es decir el (P,Q) = 1, ∀Q ⇔ P = O, el (P,Q) = 1, ∀P ⇔
Q = O.
4) Existen puntos P,Q ∈ E[l] tales que el (P,Q) es una raíz primitiva lsima de la unidad, luego el es suprayectiva.
Nota
El pairing de Tate es más general que el de Weil al exigir solo que el primer punto P esté
en E[l], mientras que Q puede ser cualquier punto de la curva. Sin embargo, como se
ha mencionado, en las aplicaciones criptográficas los puntos considerados estarán en el
subgrupo hPi engendrado por un punto P de orden l, y por tanto, son todos de l torsión.
1.3.
Pairing modificado
La propiedad alternada del pairing de Weil presenta un inconveniente en las
aplicaciones criptográficas. Puesto que en ellas se trabaja en el grupo engendrado por un punto P ∈ E, si el (P,P) = 1, para todo par de puntos R,S ∈ hPi
se tendría también el (R,S) = 1 (si R = rP, S = sP utilizando la propiedad de
bilinealidad el (R,S) = el (P,P)rs = 1) es decir el sería la aplicación trivial. Una solución para solventar este problema es substituir el por un pairing modificado
êl , utilizando lo que se denomina una aplicación distorsión.
.
Definición 1.12. Una aplicación distorsión para el punto P es un endomorfismo φ de la curva E tal que el (P,φ (P)) 6= 1. A veces se exige
también que el (P,φ (P)) sea una raíz primitiva de la unidad. Si l es primo, como es habitual, ambas condiciones son equivalentes.
Tener en cuenta las siguientes consideraciones:
1) En la definición anterior el punto φ (P) es, al igual que P, de l-torsion (pues lφ (P) =
φ (lP) = φ (O) = O ), y por tanto tiene sentido aplicar el pairing de Weil al par (P,φ (P)).
2) En general, el endomorfismo φ no está definido sobre el cuerpo Fq (y para nuestros
propósitos no debe estarlo). En particular φ (P) no tendrá coordenadas en Fq , sino
sobre un cuerpo extensión.
Raíces primitivas
Se denomina raíz primitiva de
orden n de la unidad aquella
cuyo orden es exactamente
n. Por ejemplo, en el cuerpo
C de los complejos el
elemento e2πi/5 es una raíz
de orden 15 de la unidad
(pues
(e2πi/5 )15 = (e2πi )3 = 13 = 1),
pero no es una raíz primitiva
de orden 15, ya que su orden
es 5 (y por tanto, en realidad
es una raíz primitiva de orden
5 de la unidad).
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
13
3) Puede probarse que E posee una tal aplicación distorsión si y solamente si es supersingular (Blake y otros, 2005). Ello hace que las curvas supersingulares sean especialmente útiles en criptografía basada en pairings.
.
Definición 1.13. Sea φ una aplicación distorsión. Se define ê(R,S) =
e(R,φ (S)). La aplicación ê se denomina pairing modificado.
Nótese que ahora tenemos ê(P,P) 6= 1 y, por tanto, para R,S ∈ hPi, R,S 6= O
también tenemos, por bilinealidad, ê(R,S) 6= 1.
La definición 1.11 es obviamente incompleta, ya que lista las propiedades de el
pero no caracteriza quién es el elemento el (P,Q) correspondientes a P,Q ∈ E[l].
La definición de tal imagen involucra conceptos y resultados matemáticos que
no podemos desarrollar en detalle. Por otra parte, las aplicaciones criptográficas posteriores pueden comprenderse asumiendo únicamente las propiedades
de la definición 1.11.
Sin embargo, para el posible lector interesado, resumimos brevemente aquí la
definición explícita de el (P,Q) y damos un algoritmo eficiente de cómputo del
mismo.
1.3.1. Construcción explícita de el
Comenzamos introduciendo (sin demostración) los conceptos y resultados
Lectura recomendada
necesarios para la definición de el (P,Q).
Ver J. H. Silverman (1986).
The Arithmetic of Elliptic
Curves. Springer-Verlag, para
detalles y demostraciones.
.
Definición 1.14. Sea E una curva elíptica,
1) Un divisor es una suma formal finita de puntos de E: D =
P
P∈E
nP (P),
con coeficientes nP números enteros, positivos o negativos (y todos
nulos salvo un número finito). La notación anterior de suma es un
simple símbolo formal y no una operación, en particular no debe
confundirse con la operación adición de puntos de E. Tampoco debe confundirse el punto P ∈ E con el divisor (P) = 1(P).
2) Dados dos divisores D =
D′ =
P
′
P∈E (nP +nP )(P)
P
P∈E
nP (P), D′ =
P
P∈E
n′P (P) , la adición: D +
confiere al conjunto de divisores una estructura
de grupo abeliano.
3) Se define el grado de D : gr(D) =
P
nP ∈ Z.
4) Se define el soporte de D : sp(D) = {P; nP 6= 0}.
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
14
.
Observación
Definición 1.15.
1) Función racional sobre E: Función del tipo f
=
F1 (x,y)
F2 (x,y)
con
F1 ,F2 polinomios definidos módulo la ecuación de la curva E.
2) Un punto P se dice cero de f si f (P) = 0 y polo de f si f no está
definido en P (porque F2 (P) = 0) en cuyo caso se conviene en notar
f (P) = ∞.
3) Asociado con una función f se tiene un divisor div(f ) =
P
ordP (f )(P)
donde
a) ordP (f ) = 0 si f (P) 6= 0,∞
b) ordP (f ) = n ≥ 1 si tiene un cero con multiplicidad (u orden) n.
c) ordP (f ) = –n (n ≥ 1) si tiene un polo con multiplicidad n.
4) Los divisores de funciones racionales se denominan divisores principales.
5) Dos divisores D,D′ se llaman equivalentes (y escribiremos D ∼ D′ ) si
se diferencian en un divisor principal, es decir: D = D′ + div(f ).
6) Sea f una función y D =
Q
P
P∈E
nP (P) un divisor. Se define f (D) =
nP
f (P) .
.
Proposición 1.16.
1) Un divisor principal tiene grado cero. Como consecuencia, dos divisores equivalentes tienen igual grado.
2) Un divisor con grado 0 no es necesariamente principal, pero admite
una expresión en forma canónica: D = (P) – (O) + div(f ), con P único.
3) Dados Di = (Pi ) – (O) + div(fi ), i = 1,2, divisores de grado 0, pero no
principales (luego Pi 6= O) la forma canónica de su suma es
D = D1 + D2 = (P3 ) – (O) + div(f1 f2 f3 )
(6)
donde P3 = P1 + P2 y f3 = s/v con s ecuación de la recta secante
uniendo P1 , P2 (tangente a la curva si P1 = P2 ) y v ecuación de la
recta vertical uniendo P3 con el punto del infinito O (si P3 = O
tomar v = 1).
4) Un divisor D =
P
P
nP (P) es principal si y solamente si
P
nP = 0 y
nP P = 0 (en la última expresión la suma indica la suma de puntos
en la curva elíptica).
Aunque la grafía es parecida
conviene no confundir el
punto neutro de la curva
elíptica, O (el único punto
del infinito de la curva) con 0
elemento neutro del cuerpo
K sobre el que está definida
la curva. Tampoco hay que
confundirlo con el elemento
neutro (O) del grupo de
divisores.
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
15
Ejemplo 1.5.
Sea la curva elíptica E : y2 = x3 + x + 4 definida sobre el cuerpo finito F7 .
1) Sea la recta r : y = 2x + 2. Determinemos el divisor principal div(r):
El divisor de r es la combinación lineal formal de los ceros y los polos de la recta en los
puntos de la curva elíptica, contados con sus multiplicidades.
Para determinar los ceros hagamos la intersección de E y r: sustituyendo y = 2x + 2 en
la ecuación de E se obtiene la ecuación x3 – 4x2 = 0. Esta ecuación tiene la raíz doble
x = 0 y la raíz simple x = 4. Los ceros son pues los puntos (0,2), con multiplicidad
2 (puede comprobarse que la recta es tangente a la curva en este punto) y (4,3) con
multiplicidad 1.
En virtud de la Proposición 1.16, div(r) debe tener grado 0. Puesto que hay 3 ceros (contados con sus multiplicidades) deben existir tres polos. Como, en los puntos afines de E,
la recta r no tiene polos, estos deben estar en el punto del infinito O = (0 : 1 : 0) de la
curva, punto que será pues un polo de orden 3.
Nótese que si se escribe la ecuación de E en coordenadas proyectivas: y2 z = x3 + xz2 + 4z3 ,
haciendo z = 0, se tiene x3 , polinomio de grado 3.
Por tanto,
div(r) = 2(0,2) + 1(4,3) – 3(O)
2) Sea el divisor: D = 1(0,2) + 1(0,5) + (–2)(6,3). Este divisor tiene grado 1+1-2=0. Sin
embargo, no es un divisor principal: en efecto, de acuerdo con la Proposición 1.16 si
lo fuese debería tener grado 0, condición que verifica, pero además la suma en E de
los puntos del divisor debería ser el punto del infinito O. Sin embargo, utilizando las
fórmulas de adición.
(0,2) + (0,5) – 2(6,3) = O – 2(6,3) = 2(6,4) = (4,4).
Estamos ya en disposición de definir el elemento el (P,Q).
.
Definición 1.17. Dados P,Q ∈ E[l] elijamos A,B divisores de grado
cero con soportes disjuntos y tales que:
A ∼ (P) – (0),
B ∼ (Q) – (O)
Sean fA ,fB funciones sobre E tales que,
div(fA ) = lA,
div(fB ) = lB.
Se define entonces:
el (P,Q) = fA (B)/fB (A)
(7)
Ver también
Las fórmulas de adición se
estudian en el módulo
“Criptografía con curvas
elípticas” de esta asignatura.
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
16
A partir de esta definición se deducen las propiedades del pairing enunciadas
en 1.11*.
* Para la demostración, podéis
ver J. H. Silverman (1986). The
Arithmetic of Elliptic Curves.
Springer-Verlag.
Observar que los divisores A,B deben ser disjuntos para que fA (B),fB (A) estén
bien definidos. Una forma de obtenerlos es tomar un punto S ∈ E con S 6=
O,P, – Q,P – Q y A = (P + S) – (S); B = (Q – S) – (–S). Entonces
el (P,Q) = fA ((Q – S) – (–S))/fB ((P + S) – (S)) =
fA (Q – S)fB (S)
fA (–S)fB (P + S)
(8)
El cálculo del pairing se reduce pues a evaluar ciertas funciones en ciertos divisores. El problema es el computo de tales funciones fA ,fB . Tal cómputo puede realizarse eficientemente utilizando el siguiente algoritmo*. Este algoritmo
permite también el cómputo del pairing de Tate.
1.3.2. El algoritmo de Miller
.
Algoritmo 1.18 (Algoritmo de Miller). Input: D =
Pr
i=1
ni (Pi ) un
divisor principal. Output: una función f tal que D = div(f )
1) Puesto que D tiene grado 0 puede escribirse: D =
Pr
i=1
ni ((Pi ) – (O))
2) Para cada i obtenemos la forma canónica (Pi′ ) – (O) + div(fi ), del
divisor ni ((Pi ) – (O)) como sigue:
i) Sean bd–1 bd–2 · · · b1 b0 la expresión binaria de ni (donde b0 son las
unidades y bd–1 = 1), R := Pi ; fi := 1.
ii) El método para sumar divisores canónicos especificado en la ecuación 6 proporciona para i = bd–2 , . . . ,0:
a) fi := fi2 gRR ; R := 2R
b) Si bi = 1, fi := fi gRPi , R := R + Pi
c) Output fi .
donde, dados los dos puntos R,S,
gRS es la función tal que
div(gRS ) = (R) + (S) – (R + S) – (O).
3) Sumando los divisores canónicos anteriores se obtiene la función
buscada f .
* Ver A. Menezes (1993). Elliptic
Curves Public Key Cryptography.
Kluwer
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
17
Ejemplo 1.6.
Para la curva elíptica del Ejemplo 1.4, E : y2 = x3 + 7x, definida sobre el cuerpo F13 , sean
los puntos de E: P = (3,3), Q = (4,1) ambos puntos de 3-torsión. El algoritmo de Miller
permite obtener
fA =
(8x + y)(x + y + 1)(x + 4)
,
(x + 3)(11x + y)(8x + y + 11)
(9)
(3x + y)(x + y + 10)
(10x + y)(12x + y + 3)
(10)
fB =
El ejemplo 1.6 se debe a A.
Menezes, (1993). Elliptic Curves
Public Key Cryptography, Kluwer.
y finalmente e3 (P,Q) = 9.
1.4. Grado de inmersión
Supongamos K = Fq , un cuerpo finito con q elementos. Veamos que el grupo
de llegada µl del pairing el puede considerarse contenido en una extensión Fqk
para algún valor (mínimo) k.
.
Lema 1.19. Existe un número natural k (de hecho puede tomarse 1 ≤
k ≤ l – 1), tal que el grupo multiplicativo (Fqk )∗ contiene un subgrupo
isomorfo a µl .
Demostración: El grupo (Fqk )∗ es cíclico, con cardinal qk – 1. Tal grupo contendrá un subgrupo de cardinal l si, y solamente si, l|(qk – 1) es decir qk ≡ 1
mod l. Ahora bien, por hipótesis, mcd(q,l) = 1 y por tanto q ∈ (Z/lZ)∗ , subgrupo de elementos invertibles de Z/lZ. El orden k de q en tal grupo será una
solución del problema.
.
Definición 1.20. El mínimo valor k verificando el lema 1.19 se deno-
Observación
El cardinal del grupo (Z/lZ)∗ ,
igual al número de elementos
no nulos en Z/lZ coprimos
con l, se denomina la función
de Euler ϕ (l). En particular si l
es primo tenemos que
ϕ (l) = l – 1. El orden
multiplicativo k del cardinal q
del cuerpo Fq es siempre un
divisor de ϕ (l).
mina grado de inmersión.
Ver también
El valor del grado de inmersión será crucial para los ataques al logaritmo
discreto elíptico, objeto del siguiente apartado. Recordemos que, en virtud
La función de Euler se estudia
en el módulo “Cuerpos
finitos” de esta asignatura.
del teorema de Hasse, el cardinal de una curva elíptica E viene dado por
√
♯E = q + 1 – t, con |t | ≤ 2 q. En las aplicaciones criptográficas basadas en
el logaritmo discreto elíptico se utiliza un subgrupo cíclico, del mayor orden
posible (y deseablemente primo), hPi ⊆ E, cuyo orden l será pues un divisor
de ♯E.
Ver también
El teorema de Hasse se
estudia en el módulo
“Criptografía con curvas
elípticas”.
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
18
Para las curvas elípticas ordinarias, el grado de inmersión es en general muy
grande (exponencial en log(q), según demostraron Koblitz y Balasubramanian,
1998). Sin embargo, Menezes, Okamoto y Vanstone mostraron que para las
curvas supersingulares este grado es pequeño, de hecho k ≤ 6*.
Recordemos, tal como se ha visto en el módulo 4, que una curva elíptica con cardinal
q + 1 – t se llama supersingular si la característica p del cuerpo divide a t. En otro caso la
curva se denomina ordinaria.
Para mostrar este resultado Menezes, Okamoto y Vanstone dan el siguiente
resultado
.
Proposición 1.21. Las curvas elípticas supersingulares definidas sobre
el cuerpo finito Fq , q = pm y con cardinal q + 1 – t se clasifican en los seis
tipos siguientes:
•
Tipo I)
t = 0 y E(Fq ) ≃ Z/(q + 1)Z
•
Tipo II) q ≡ 3 (mod 4) , t = 0 y E(Fq ) ≃ Z/((q + 1)/2)Z × Z/2Z
Tipo III)
m par, t 2 = q, y E(Fq ) cíclico.
•
Tipo IV)
p = 2 ,m impar, t 2 = 2q y E(Fq ) cíclico.
•
•
•
Tipo V)
Tipo VI)
p = 3 ,m impar, t 2 = 3q y E(Fq ) cíclico.
√
√
m par, t 2 = 4q y E(Fq ) ≃ Z/( q ∓ 1)Z × Z/( q ∓ 1)Z
A partir de la clasificación de la proposición 1.21 es un simple ejercicio obtener
los grados de inmersión k para cada uno de los tipos, si (como es habitual) se
toma l = n1 cardinal del subgrupo cíclico maximal de E. Así, por ejemplo, para
las curvas del tipo I, con q + 1 elementos, es obvio que q2 – 1 es múltiplo de
q + 1 luego el grado de inmersión de estas curvas es k = 2. Los resultados se
recogen en la siguiente tabla.
Tipo
t
n1
k
I
0
q+1
2
II
0
√
± q
p
± 2q
p
± 3q
√
±2 q
(q + 1)/2
√
q+1∓ q
p
q + 1 ∓ 2q
p
q + 1 ∓ 3q
√
q∓1
2
III
IV
V
VI
3
4
6
1
* Ver A. Menezes (1993). Elliptic
Curves Public Key Cryptography.
Kluwer.
CC-BY-NC-ND • PID_00200950
19
Pairings y sus aplicaciones
2. Ataques basados en pairings
.
Los pairings permiten un tipo de ataque al logaritmo discreto elíptico, los denominados algoritmos de reducción. Así Menezes, Okamoto y Vanstone (1993)
muestran cómo trasladar, utilizando el pairing de Weil, dicho logaritmo, definido sobre una curva elíptica sobre el cuerpo finito Fq al logaritmo discreto
sobre Fqk , con k el grado de inmersión.
Referencia bibliográfica
Menezes, Okamoto y
Vanstone (1993).
“Reducing elliptic curves
logarithms to a finite field”.
IEEE Trans. Info. Theory
(vol. 39, pág. 1639-1646).
Supongamos hPi ⊆ E(Fq ) el grupo subyacente al logaritmo discreto elíptico,
subgrupo de orden l, primo con la característica p y denotemos µl ⊂ Fqk . El
ataque de Menezes, Okamoto y Vanstone (MOV) viene dado por el siguiente
algoritmo.
.
Algoritmo 2.1.
Input: P, R ∈ hPi, R 6= 0.
Output: m, 0 < m < l, mP = R.
1) Encontrar el menor k tal que µl ⊂ Fqk .
2) Encontrar Q tal que α = el (P,Q) tenga orden l.
3) Calcular β = el (R,Q).
4) Calcular m, el logaritmo de β en la base α, en Fqk .
5) Retornar m.
Ejemplo 2.1. Para la curva del Ejemplo 1.6 sobre Fq = 13 sea el punto R = (3,10) ∈ hPi.
Puesto que l = 3 y µ3 ⊂ F13 el grado de inmersión es 1.
El punto Q = (4,1) verifica que α = e3 (P,Q) = 9, tiene orden 3 módulo 13. Se obtiene que
β = e3 (R,Q) = 3. Como 92 ≡ 3 (mod 13) se tiene que logP (R) = 2, es decir R = 2P.
La utilidad del algoritmo MOV depende fuertemente del valor de k: recordemos que el logaritmo discreto clásico sobre el grupo multiplicativo (Fqk )∗ es
sensible al denominado Index Calculus, mientras que el logaritmo discreto
elíptico es inmune al mismo, lo que posibilita emplear claves mucho menores. Así claves de 163 bits en el caso elíptico ofrecen la misma seguridad que
claves de 1024 bits en el caso clásico.
Ahora bien, lo que hace el algoritmo MOV es trasladar el problema en una curva elíptica sobre el cuerpo Fq a un problema similar en Fqk . La longitud binaria
Lectura recomendada
Ver los detalles del ejemplo
2.1 en A. Menezes, Elliptic
Curves Public Key
Cryptography, Kluwer, 1993
y también uno de los
ejercicios al final del
módulo.
Ver también
El logaritmo discreto clásico
sobre el grupo multiplicativo
se estudia en el módulo
“Elementos de criptografía”.
CC-BY-NC-ND • PID_00200950
20
Pairings y sus aplicaciones
de qk es k veces la longitud binaria de q, por tanto para k grande el tamaño del
cuerpo Fqk hace ineficaz los ataques basados en el Index Calculus. Sin embargo, como hemos visto, para curvas supersingulares el valor de k es a lo sumo
6. En este caso, correspondiente a curvas del tipo V en la Proposición 1.21,
para cuerpos de longitud q = 163 bits, se tiene que q6 tiene longitud 978, por
lo que la seguridad es equiparable al caso clásico con longitud de clave 1024.
Y por supuesto para curvas del tipo VI en la proposición 1.21, la seguridad es
la misma que en el caso clásico sobre el cuerpo base, caso que, para longitud
163, se considera actualmente muy vulnerable al Index Calculus.
Como consecuencia, las curvas supersingulares no son adecuadas para criptosistemas y protocolos basados en el logaritmo discreto elíptico.
Dos observaciones antes de acabar:
•
•
Frey y Ruck (1994) propusieron un ataque similar al de MOV utilizando el pairing
de Weil. Kanayama, Kobayashi, Saito y Uchiyama (2000) probaron que si l no es un
divisor de q – 1, los algoritmos MOV y Frey-Ruck son equivalentes, sin embargo, para
curvas con cardinal q – 1, el algoritmo de Frey-Ruck es más eficiente.
Para las denominadas curvas anómalas, curvas definidas sobre un cuerpo primo Fp y
con cardinal p existe otro algoritmo de reducción debido a Semaev, Smart, Satoh and
Araki (ver la obra de Blake y otros (2000)).
Lectura recomendada
Frey y Ruck (1994). “A
remark concerning
m-divisibility and the
discrete logarithm problem
in the divisor class group of
curves”. Mathematics of
Computation (vol. 62, pág.
865-874) .
CC-BY-NC-ND • PID_00200950
21
Pairings y sus aplicaciones
3. Criptografía basada en la identidad
.
Una de las motivaciones de Diffie y Hellman para su introducción de la criptografía de clave pública fué el problema de la distribución de claves (siendo
otra motivación la firma digital). El aumento del número de usuarios de la
criptografía, al sumarse nuevos actores a los clásicos, gubernamentales y militares, hizo que potencialmente cada dos de tales usuarios A,B necesitasen en
Ver también
La criptografía de clave
pública se estudia en el
módulo “Elementos de
criptografía” de esta
asignatura.
algún momento comunicarse de forma segura, lo que utilizando un sistema
de clave privada, exigía una clave compartida KAB . La forma de hacer llegar
tal clave a ambos usuarios planteaba un problema de Gestión y Distribución de
Claves.
La criptografía de clave pública proporcionó un sistema eficiente de resolver
tal distribución de llaves, ya que el envío de KAB puede hacerse de forma
segura, a través de un canal inseguro, utilizando las llaves públicas de A y B. De
hecho, actualmente los sistemas de clave pública se utilizan principalmente
para la distribución de claves de comunicaciones de un sistema privado.
Sin embargo, pronto se hizo patente un nuevo problema: una clave pública
que se nos hace llegar como perteneciente a A puede en realidad pertenecer
a un atacante C. Ello obliga a garantizar la autenticidad de las claves públicas mediante un sistema de certificados y autoridades de certificación, lo que
genera una engorrosa infraestructura de clave pública (PKI).
Ver también
La infraestructura de clave
pública (PKI) se estudia en el
módulo “Elementos de
criptografía” de esta
asignatura.
Un paradigma alternativo fué propuesto en 1984 por A. Shamir (1994). La idea
era poder utilizar, de forma segura, claves públicas derivadas de la propia identidad del usuario (de ahí el nombre de criptografía basada en la identidad). El
propio Shamir construyó un esquema de distribución de claves basado en esta
idea, sin embargo, una solución satisfactoria a la idea de criptosistemas basados en la identidad solo se consiguió con la utilización de pairings, de hecho
el método se conoce también criptografía basada en pairing.
La criptografía basada en la identidad implica la existencia de una cierta autoridad de confianza (AC) que selecciona los parámetros comunes a todos los participantes y les proporciona unas ciertas claves privadas (claves que pueden ser
generadas solo cuando el usuario las necesita, lo que evita su almacenamiento
y reduce el riesgo de fugas de seguridad). En lo que sigue supondremos que tal
AC ha seleccionado y hecho públicos al menos una curva elíptica E sobre un
cuerpo finito Fq , un punto P ∈ E de orden primo l, una aplicación distorsión
φ y el correspondiente pairing modificado êl . Asimismo la AC ha elegido una
Referencia bibliográfica
A. Shamir (1994).
“Identity-Based
Cryptosystems and
Signature Schemes.
Advances in Cryptology.
Proceedings of Crypto’84”.
Lecture Notes in Computer
Science, núm. 7, págs. 47-53.
CC-BY-NC-ND • PID_00200950
22
Pairings y sus aplicaciones
cierta clave secreta propia s, 1 < s < l, que le servirá tanto para generar su
clave pública, como claves privadas de los participantes.
En lo que sigue expondremos algunos de los métodos básicos de esta criptografía para el intercambio de claves, criptosistemas y firma digital.
3.1. Intercambio de claves en criptografía basada en la identidad
Lectura recomendada
Para más detalles sobre la
criptografía basada en la
identidad, ver la obra de
Blake y otros (2005) y la de
Luther (2008).
Como se ha dicho, una de las motivaciones para la introducción de la clave
pública fué el problema de la distribución de claves. De hecho, Diffie y Hellman proponen un sistema bipartito para acordar una clave común entre dos
participantes A,B : fijado un grupo cíclico conveniente hg i (por ejemplo F∗q , el
grupo cíclico multiplicativo de un cuerpo finito), A y B eligen separadamente números aleatorios nA ,nB ; 1 < nA ,nB < l, calculan los elementos del grupo
g nA , g nB y se intercambian estos valores.
Tanto A como B pueden entonces calcular la clave común KAB = g nA nB . La
seguridad del método radica en que un atacante, interceptando g nA , g nB , para
poder conocer la clave se vería enfrentado con el siguiente problema.
.
Definición 3.1 (Problema computacional de Diffie-Hellman).
Conocidos g nA ,g nB calcular g nA nB .
La dificultad del problema computacional de Diffie-Hellman se considera equivalente a la del logaritmo discreto en el mismo grupo. Desde luego si un adversario pudiese resolver el problema del logaritmo discreto obtendría nA ,nB y
podría calcular g nA nB .
Un esquema semejante puede formularse en criptografía basada en la identidad utilizando pairings y la identidad IdA de cada usuario A (el nombre o cualquier otra información personal, como el e-mail, una foto digital, o cualquier
secuencia binaria seleccionada por A). Además, en este tipo de criptografía,
existe la posibilidad de un protocolo de acuerdo tripartito de claves. Veamos
estos dos algoritmos.
3.1.1. Acuerdo bipartito de claves
En este esquema se supone que la AC ha elegido y hecho público, además
de los datos referidos a la curva elíptica y el pairing, una función resumen h
que transforma cualquier secuencia binaria en un punto de hPi. El esquema de
acuerdo bipartito de claves viene dado por el siguiente algoritmo.
Ver también
La función resumen se
estudia en el módulo 3 de
esta asignatura.
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
23
.
Algoritmo 3.2.
•
Claves privadas de A y B: solicitud previa de A y B a la AC, ésta
1) calcula y envía a A el punto SA = sPA ∈ hPi, donde PA = h(IdA ).
2) calcula y envía a B el punto SB = sPB ∈ hPi, donde PB = h(IdB ).
•
Acuerdo de clave: Los participantes A y B calculan
1) A, utilizando su clave privada SA y PB (que puede calcular, ya que
tanto la identidad IdB como la función resumen h son públicas),
obtiene
êl (SA ,PB ) = êl (sPA ,PB ) = êl (PA ,PB )s ∈ µl .
(11)
2) B, utilizando su su clave privada SB y PA obtiene
êl (PA ,SB ) = êl (PA ,sPB ) = êl (PA ,PB )s ∈ µl .
(12)
3) La clave común es KAB = êl (SA ,PB ) = êl (PA ,SB ).
Acuerdo bipartito de claves
Alicia
Bernardo
êl(SA,PB) = KABC
êl(PA,SB) = KABC
PB
PA
Parámetros
públicos
SA
SB
Generador de claves
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
24
3.1.2. Acuerdo tripartito de claves
El siguiente protocolo, propuesto por A. Joux (2000), permite el acuerdo de
una clave común entre tres entidades A,B,C. Este acuerdo que, a diferencia
del anterior, no necesita claves secretas de los participantes, viene dado por el
siguiente algoritmo.
.
Algoritmo 3.3.
•
Intercambio de mensajes: Los participantes A,B,C
1) A toma un número aleatorio nA ; 1 < nA < l y calcula PA = nA P
2) B toma un número aleatorio nB ; 1 < nB < l y calcula PB = nB P
3) C toma un número aleatorio nC ; 1 < nC < l y calcula PC = nC P
4) A,B,C intercambian los valores de PA ,PB ,PC
•
Acuerdo de claves: Los participantes calculan la clave común,
1) êl (PB ,PC )nA = êl (P,P)nA nB nC = KABC
2) êl (PA ,PC )nB = êl (P,P)nA nB nC = KABC
3) êl (PA ,PB )nC = êl (P,P)nA nB nC = KABC
Resumimos el protocolo de Joux en el diagrama siguiente.
Acuerdo tripartito de Joux
PA
Bernardo
Alicia
PB
nA
PA
KABC
nB
PB
KABC
Parámetros
públicos
PC
PA
PC
PB
nC
PC
KABC
Carlos
Lectura recomendada
A. Joux (2000). “A one
round protocol for tripartite
Diffie-Hellmann”, LNCS
(vol. 1838, págs. 385-394.
CC-BY-NC-ND • PID_00200950
25
Pairings y sus aplicaciones
Si la seguridad del esquema clásico de Diffie-Hellman se basa en el problema
computacional de Diffie-Hellman, el acuerdo tripartito descansa en la supuesta intractabilidad de la siguiente variante.
.
Definición 3.4 (Problema Bilineal de Diffie-Hellman). Conocidos nA P,nB P,nC P calcular êl (P,P)nA nB nC .
Ejemplo 3.1.
Lectura recomendada
y2
x3
Sea q = 1303 y la curva elíptica E :
=
+ x sobre Fq . El punto P = (334,920) ∈ E tiene
orden primo l = 163. La aplicación distorsión φ : (x,y) → (–x,iy) donde i ∈ Fq2 es tal que
i2 = –1, proporciona el pairing modificado ê163 .*
Sean las elecciones de A,B,C:
El ejemplo 3.1 puede
encontrarse en J. Hoffstein;
J. Pipher; J. Silverman
(2008). An Introduction to
Mathematical Cryptography.
Springer.
1) nA = 71. A calcula y hace público PA = (1279,1171).
2) nB = 3. B calcula y hace público PB = (872,515)
3) nC = 126. C calcula y hace público PC = (196,815)
* Ver los ejercicios al final del
módulo.
Los tres participantes pueden calcular ahora la clave común (para los cálculos tener en
cuenta que i2 = –1 y reducir todas las operaciones módulo 1303):
1) êl (PB ,PC )71 = (172 + 256i)71 = 768 + 662i
2) êl (PA ,PC )3 = (1227 + 206i)3 = 768 + 662i
3) êl (PA ,PB )126 = (282 + 173i)126 = 768 + 662i
3.2. Cifrado basado en la identidad
Un sistema criptográfico efectivo, basado en la idea de Shamir de emplear la
identidad de un usuario como su clave pública fue propuesto por Boneh y
Franklin (2001). En realidad estos autores proponen dos versiones. Veamos en
primer lugar la versión que denominan básica.
.
Algoritmo 3.5 (Esquema básico de Boneh y Franklin).
•
Parámetros: Los mensajes en claro M serán elementos del conjunto
M de secuencias binarias de una longitud prefijada n, es decir M =
{0,1}n . Además de los parámetros antes mencionados con carácter
general, la AC,
1) crea y envía a los participantes su propia clave pública PAC = sP,
2) elige una función resumen h1 que permite asignar a la identidad de
cada usuario A una clave pública PA = h1 (IdA ) ∈ hPi,
3) elige una función resumen h2 : µl → M,
4) calcula la clave privada de cada participante SA = sPA .
Lectura recomendada
Boneh y Franklin (2001).
“Identity based encryption
from the Weil pairing”.
LNCS (vol. 2139,
pág. 213-229).
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
26
.
•
Cifrado: Si B desea enviar a A un mensaje M ∈ M.
1) calcula PA = h1 (IdA ) (tanto h1 como IdA son conocidos),
2) toma aleatoriamente r, 1 < r < l y calcula:
C2 = M ⊕ h2 (êl (PA ,PAC )r )
C1 = rP,
(donde
L
(13)
indica la suma bit a bit o XOR de ambas secuencias bina-
rias).
3) B envía a A el par C = (C1 ,C2 ).
•
Descifrado: Cuando A recibe el mensaje cifrado C = (C1 ,C2 ),
1) calcula
êl (SA ,C1 ) = êl (sPA ,rP) = êl (PA ,P)rs = êl (PA ,sP)r = êl (PA ,PAC )r ,
(14)
2) calcula
C2 ⊕ h2 (êl (SA ,C1 )) = M ⊕ h2 (êl (PA ,PAC ))r ⊕ h2 (êl (PA ,PAC ))r = M.
(15)
El esquema siguiente ilustra el esquema básico de Boneh y Franklin.
Observación
Cifrado básico de Boneh-Franklin
Alicia
Bernardo
C = (C1,C2)
C2, êl(SA,C1)
r
M
PA
Parámetros
públicos
SA
C2
M,r
PAC
AC
Generador de claves
C1
Cabe señalar la similitud
formal entre la versión básica
del criptosistema de
Boneh-Franklin y el
criptosistema ElGamal: en
ambos el cifrado viene dado
por un par cuya primera
componente es producto o
potencia del generador y un
número aleatorio, mientras
que la segunda componente
incluye el mensaje en claro
como sumando o factor.
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
27
Boneh y Franklin consideran que su esquema básico no reúne las garantías
suficientes de seguridad, por lo que proponen el siguiente esquema completo.
.
Algoritmo 3.6.
•
Parámetros: Además de los parámetros del anterior esquema básico,
se consideran dos funciones resumen adicionales:
1) h3 : {0,1}2n → {r; 1 < r < l}
2) h4 : {0,1}n → {0,1}n
•
Cifrado: Si B desea enviar a A un mensaje M ∈ M,
1) calcula PA = h1 (IdA ),
2) toma S ∈ {0,1}n aleatoriamente,
3) calcula r = h3 (S,M),
4) calcula C = (C1 ,C2 ,C3 ) donde,
C1 = rP,
•
C2 = S ⊕ h2 (êl (PA ,PAC )r ),
C3 = M ⊕ h4 (S).
(16)
Descifrado: Cuando A recibe el mensaje cifrado C = (C1 ,C2 ,C3 ),
1) calcula S′ = C2 ⊕ h2 (eˆl (SA ,C1 )),
2) calcula M ′ = C3 ⊕ h4 (S′ ),
3) calcula r ′ = h3 (S′ ,M ′ ).
4) Si C1 = r ′ P, A acepta como válido M ′ (= M). Caso contrario rechaza
el mensaje recibido.
La seguridad del modelo completo de Boneh y Franklin se considera equiparable a la del problema bilineal de Diffie-Hellman.
3.3. Esquemas de firma basados en la identidad
La infraestructura basada en la identidad del esquema de cifrado de Boneh-
Lectura recomendada
Para un análisis de la
seguridad del modelo
completo de Boneh y
Franklin, ver la obra de
Blake y otros (2005) y la de
Luther (2008).
Franklin puede adaptarse también al proceso de firma digital. Recordemos
que la firma digital de un mensaje M es el análogo electrónico de la firma
ordinaria (con la diferencia de que la firma electrónica depende del mensaje
concreto M), en cuanto permite demostrar, incluso con valor legal, la identidad de quien ha producido la firma de M, siendo el intento de falsificar tal
firma por parte de un adversario computacionalmente imposible.
Un esquema de firma digital comporta siempre dos algoritmos.
Ver también
La firma digital de un
mensaje se estudia en el
módulo “Elementos de
Criptografía” de esta
asignatura.
CC-BY-NC-ND • PID_00200950
28
Pairings y sus aplicaciones
.
Definición 3.7.
1) Algoritmo de firma: Implica un cómputo en el que interviene el
mensaje M y la clave privada del firmante (la cual, en el caso de la
criptografía de clave pública clásica, habrá sido elegida por él mismo
y en el caso de la criptografía basada en la identidad le debe ser proporcionada por la AC) y una cierta función resumen. Este computo
produce un resultado F(M).
2) Algoritmo de verificación: Recibido como input el mensaje M y
su firma F(M), tiene como output uno de los dos valores siguientes:
firma válida ó firma no válida
Observemos las siguientes características importantes:
1) Ciertos tipos de firmas, Firmas con recuperación del mensaje, recuperan M
durante el proceso de verificación. Sin embargo lo usual es que las firmas requieran el mensaje original (quizás previamente cifrado si se desea preservar
su secreto) para la verificación: Firmas con Apéndice.
2) En las firmas con apéndice, el empleo de función resumen permite que el
texto a firmar sea pequeño. Además, juega un papel crucial en la seguridad de
la firma. (Hash-and-Sign Paradigm).
3) Dos firmas del mismo mensaje pueden producir el mismo resultado: firmas
deterministas, o bien,
4) La firma puede depender de un valor aleatorio: firmas aleatorias, (por ejemplo la firma ElGamal, el Digital Signature Standard, etc.).
El siguiente algoritmo esquematiza un ejemplo de firma digital (aleatoria, con
apéndice) similar a la firma de ELGamal.
.
Algoritmo 3.8.
•
Parámetros: Los mensajes M ∈ M serán secuencias binarias de lon-
gitud arbitraria. Como siempre la AC habrá seleccionado una curva
elíptica E, el punto base P ∈ E, de orden primo l, una aplicación
distorsión φ y el correspondiente pairing modificado êl , así como su
propia clave secreta s, 1 < s < l. Además la AC,
1) crea y envía a los participantes su propia clave pública PAC = sP,
2) elige una función resumen h1 que permite asignar a la identidad de
cada usuario A una clave pública PA = h1 (IdA ) ∈ hPi,
3) elige una función resumen h2 : M × hPi → {r; 1 < r < l},
4) calcula la clave privada de cada participante SA = sPA .
Ver también
Los diferentes tipos de firmas
se estudian en el módulo
“Elementos de Criptografía”
de esta asignatura.
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
29
.
•
Algoritmo de Firma: si A desea firmar el mensaje M entonces
1) elige aleatoriamente r; 1 < r < l y
2) calcula:
F1 = rPA ; h = h2 (M,F1 ); F2 = (r + h)SA .
(17)
3) El par F = (F1 ,F2 ) es la firma de M.
•
Algoritmo de Verificación: cuando el verificador recibe el par (M,F).
1) Calcula si se verifica la igualdad
êl (PAC ,F1 + hPA ) = êl (P,F2 )
(18)
2) En caso afirmativo acepta la firma como válida (un simple cálculo
muestra que, si el proceso se ha realizado correctamente, debe verificarse tal igualdad).
Resumimos el esquema de firma en el diagrama siguiente.
Firma basada en la identidad
Bernardo
Verificador
Alicia
(M,F)
r
F1
F1,M,r
F2
F = (F1, F2)
F1
M
F2
?
êl[] = êl[]
PB
PA
Parámetros
públicos
SA
PAC
AC
Generador de claves
CC-BY-NC-ND • PID_00200950
30
Al igual que la firma ElGamal, puede probarse la seguridad existencial (un
Pairings y sus aplicaciones
Modelos de seguridad
atacante no es capaz de crear una firma que sea aceptable como válida para
ningún mensaje) de la firma descrita, en el modelo de seguridad denominado
Random Oracle Model.
El siguiente esquema de firma de Boneh, Lynn y Shacham (2001), es especialmente eficiente y permite claves muy cortas.
.
Algoritmo 3.9.
•
Parámetros: Los mensajes M ∈ M son secuencias binarias de lon-
La seguridad de un esquema
criptográfico se demuestra en
el contexto de un modelo de
seguridad. En el modelo
estándar se trata de probar
que romper el sistema
implica resolver un problema
matemático
computacionalmente
intratable. El modelo Random
Oracle demuestra la
seguridad asumiendo que las
funciones resumen utilizadas
son realmente funciones
aleatorias.
gitud arbitraria. Como siempre, la AC habrá seleccionado una curva
elíptica E, el punto base P ∈ E, de orden primo l, una aplicación
distorsión φ y el correspondiente pairing modificado êl . Además,
1) una función resumen h : M → hPi,
2) una clave privada de cada participante nA ; 1 < nA < l y pública
Lectura recomendada
Boneh, Lynn y Shacham
(2001). “Short signatures
from the Weil pairings”.
Asiacrypt 2001. LNCS (vol.
2248, págs. 514-532)
PA = nA P.
•
Algoritmo de Firma: Si A desea firmar el mensaje M calcula F(M) =
•
Algoritmo de Verificación: Cuando el verificador recibe el par
nA h(M).
(M,F), acepta la firma si, y solo si,
êl (F(M),P) = êl (h(M),PA ).
En este esquema el proceso de firma solo requiere una función resumen y una
multiplicación escalar, mientras que la verificación solo necesita calcular dos
pairings. Por otra parte, es posible el uso de claves de longitud pequeña. Así,
Barreto y otros (2002) han realizado una implementación sobre el cuerpo F397
con longitud binaria log2 (397 ) = 97log2 3 ≈ 154 bits, permitiendo el mismo
nivel de seguridad que el Digital Signature Algorithm, que utiliza claves de
320 bits.
Lectura recomendada
M. Barreto y otros (2002).
“Efficient algorithms for
pairing-based
cryptosystems”. CRYPTO
2002. LNCS (vol. 2442,
págs. 354-368)
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
31
Ejercicios de autoevaluación
1. Sea Fq cuerpo finito con q = pn elementos y sea Tr : Fq → Fp la aplicación traza. Sea la
aplicación de dos variables: T : Fq × Fq → Fp , definida por: T(x,y) = Tr(xy).
a) T es una forma bilineal no degenerada (en el espacio vectorial Fq , de dimensión n sobre
el cuerpo Fp ).
b) Supongamos que n no es múltiplo de la característica p. Probar que T es no degenerada.
2. Sea V un espacio vectorial de dimensión n sobre un cuerpo conmutativo K y B = {v1 ,v2 ,
. . . ,vn } una base de V. Si f : V ×V → K es una forma bilineal simétrica, se denomina DisB (f ),
discriminante de f en la base B, al determinante de la matriz, n × n: (f (vi ,vj )). Probar:
a) Si el discriminante de f es nulo (respectivamente no-nulo) en la base B, es nulo (respectivamente no nulo) en otra base B′
b) La aplicación f es no degenerada si, y solamente si, el discriminante en cualquier base es
no nulo.
3. Sea la curva elíptica E : y2 = x3 + x definida sobre el cuerpo finito F7 .
a) Sea la recta r : y = x. Determinar el divisor principal div(r).
b) Sean los dos divisores: D1 = 2(1,4) + (–1)(5,5); D2 = 1(1,3) + 2(5,5). Utilizando el punto anterior encontrar divisores D′1 , D′2 equivalentes a D1 y D2 y que tengan soportes
disjuntos.
Traza
En los ejercicios del módulo
“Cuerpos finitos” se introdujo
la noción de aplicación traza,
la cual asigna a un elemento
x ∈ Fq el elemento de Fp
traza de la multiplicación por
x en el espacio vectorial Fq
sobre Fp .
4. Sea la curva elíptica E : y2 = x3 +1 definida sobre el cuerpo finito F11 y sea la recta r : x = 0.
Determinar el divisor div(r).
5. Sea φ un endomorfismo de la curva elíptica E, P ∈ E un punto de orden primo l y el el
pairing de Weil. Probar que el (P,φ (P)) 6= 1 si y solamente si ambos puntos son linealmente
independientes.
6. Sea la curva elíptica E : y2 = x3 + 7x definida sobre el cuerpo F13 y los puntos de 3-torsión
de E: P = (3,3), R = (3,10). En el ejemplo 2.1 se ha mostrado que R = 2P. Probar este resultado
sin utilizar el algoritmo de Miller.
7. Sea p = 101 y la curva elíptica sobre F101 , E : y2 = x3 + 1, con cardinal 102. El punto
P = (87,61) pertenece a la curva y tiene orden 17 (lo que puede comprobarse utilizando las
fórmulas de adición de puntos de una curva elíptica).
a) Calcular el grado de inmersión de e17 .
b) Sea la aplicación φ : E → E; φ (x,y) = (x,ζy) donde ζ3 = 1. El elemento ζ no está en el
cuerpo F101 , sino en su extensión de grado 2, F1012 , (en efecto ζ es raíz del polinomio
x2 + x + 1, irreducible sobre F101 ). Probar que φ es una aplicación distorsión para P.
8. Sea p = 547 y la curva elíptica sobre F547 , E : y2 = x3 + x, con cardinal 548. El punto
P = (67,481) ∈ E tiene orden l = 137.
a) Calcular el grado de inmersión de e137 .
b) Sea la aplicación φ : E → E; φ (x,y) = (–x,iy) donde i2 = –1, elemento en F5472 (raíz
del polinomio x2 + 1, irreducible sobre F547 ). Probar que φ es una aplicación distorsión
para P.
9. Sean los mismos datos del ejercicio anterior y sea ê137 el pairing modificado correspondiente a P y φ . Tres participantes A,B,C desean acordar una clave común KABC mediante el
protocolo de acuerdo tripartito de Joux.
a) Los participantes eligen y guardan secretos los valores: nA = 4, nB = 10, nC = 5. Calcular
los puntos PA = 4P, PB = 10P, PC = 5P
b) Conocidos los puntos calculados en el apartado anterior y supuesto que nos dan como
datos los valores,
i) ê137 (PB ,PC ) = 151 + 135i.
ii) ê137 (PA ,PC ) = 74 + 514i.
iii) ê137 (PA ,PB ) = 11 + 39i.
Calcular la clave común del protocolo dado en el algoritmo 3.3.
10. Escribir un script en SAGE que permita calcular la clave común KABC del algoritmo de
Joux, sabiendo la clave privada nA de A y las claves públicas PB y PC de B y C, respectivamente.
Los datos públicos, o sea el cuerpo finito, la curva elíptica, el punto P y la distorsión que
permite definir el pairing de Weil modificado son los mismos que en el ejercicio 1-8.
Calcular la clave acordada entre los tres participantes en el caso en que nA = 7, PB = (97,151)
y PC = (497,498).
Ver también
Las curvas elípticas se
estudian en el módulo
“Criptografía con curvas
elípticas” de esta asignatura.
CC-BY-NC-ND • PID_00200950
32
Soluciones
1) a) T es bilineal por ser lineal en cada variable. La simetría se deduce de la conmutatividad
del producto en Fq .
b) Sea x 6= 0 un elemento de Fq . Veamos que existe un y tal que T(x,y) 6= 0. Basta tomar
y = x–1 : en efecto, T(x,x–1 ) = Tr(xx–1 ) = Tr(1) = n 6= 0 (pues n no es múltiplo de p).
P
2) a) Sean las ecuaciones del cambio de base vi′ = j cij vj , o matricialmente B′ = CB donde
C es una matriz inversible y por tanto con determinante no nulo. Sustituyendo estas
ecuaciones en DisB′ (f ) y utilizando la propiedad de bilinealidad, se obtiene DisB′ (f ) =
|C|2 DisB (f ) de donde el resultado.
b) Supongamos nulo el discriminante (en cualquier base B). Existirá pues una combinación
lineal no trivial λ1 F1 + · · · + λn Fn = 0 entre las filas Fi de la matriz (f (vi ,vj )), luego para
todo j se tiene una relación: λ1 f (v1 ,vj ) + · · · + λn f (vn ,vj ) = 0. Denotando w = λ1 v1 + · · · +
λn vn (w 6= 0, pues los λi no son todos nulos) y utilizando las propiedades de bilinealidad
de f se obtiene f (w,vj ) = 0. Como ello es cierto para todos los vectores vj de la base
también f (w,v) = 0, ∀v ∈ V, luego w es un elemento del núcleo de f (por la derecha y
por la izquierda), luego f es degenerada.
El recíproco es análogo. Si f es degenerada existirá un vector no nulo w ∈ V tal que
f (w,v) = 0, ∀v ∈ V. Si w = λ1 v1 +· · · λn vn , se deduce entonces una relación de dependencia
entre las filas Fi con coeficientes λi .
3) a) Para determinar el divisor de r hay que encontrar los ceros y los polos de la recta en los
puntos de la curva elíptica, contados con sus multiplicidades.
Para determinar los ceros hagamos la intersección de E y r: sustituyendo y = x en la
ecuación de E se obtiene la ecuación x3 – x2 + x = 0. Una raíz de esta ecuación de tercer
grado es x = 0. Resolviendo (en el cuerpo F7 ) la ecuación x2 – x + 1 se obtienen las otras
dos raíces: x = 5; x = 3. Los ceros son pues los puntos (0,0), (3,3), (5,5) los cuales tienen
multiplicidad 1 (puesto que son distintos).
Como en el ejemplo 1.5 se muestra que existe un polo de orden 3 en el punto del infinito
O = (0 : 1 : 0).
Por tanto,
div(r) = 1(0,0) + 1(3,3) + 1(5,5) – 3(O)
b) Los divisores D1 ,D2 tienen soportes con el punto común (5,5). Si se observa que este
punto aparece también en el soporte de div(r) resulta razonable tomar,
D′1 = D1 + div(r) = 1(0,0) + 2(1,4) + 1(3,3) – 3(O).
D′1 ya tiene soporte disjunto con D2 , por tanto basta tomar D′2 = D2 .
4) Para encontrar los ceros, determinemos los puntos de corte de la curva elíptica y de la
recta. Haciendo x = 0 se obtienen los dos puntos (0,1) y (0,10) con multiplicidad 1. El tercer
punto de corte de r (el eje y) con la curva elíptica es el punto del infinito. Pero en este punto
la curva no tiene un cero sino un polo. Puesto que tenemos dos ceros, este polo debería ser
de orden 2. Sin embargo, tanto en el ejemplo 1.5 como en el ejercicio anterior dicho orden
era 3. ¿A qué obedece la diferencia?
Escribamos la ecuación de E en coordenadas proyectivas: y2 z = x3 + z3 Pero ahora el corte
con z = 0 proporciona y2 z = z3 y simplificando y2 = z3 . Haciendo z = 0, se tiene la función
cuadrática y2 de donde la multiplicidad 2.
Por tanto: div(r) = 1(0,1) + 1(0,10) – (2)O.
5) Si los puntos fuesen dependientes, es decir, si φ (P) ∈ hPi se tendría φ (P) = mP, para algún
m luego el (P,φ (P)) = el (P,P)m = 1.
Pairings y sus aplicaciones
CC-BY-NC-ND • PID_00200950
Pairings y sus aplicaciones
33
Supongamos ambos puntos linealmente independientes, en particular debe ser φ (P) 6= O. En
virtud del Lema 1.10 el grupo de l-torsión E[l](K̄) es producto de dos grupos cíclicos de orden
l. Por hipótesis uno de ellos es hPi, por tanto φ (P), por ser independiente de P debe estar en
el segundo grupo cíclico y por ser este de orden primo, φ (P) es un generador.
En definitiva, el par {P, φ (P)} es una base de E[l](K̄). Por tanto debe tenerse el (P,φ (P)) 6= 1,
pues en caso contrario el sería trivial en todo E[l](K̄), en contra de la no degeneración de el ,
ver definición 1.11.
6) Dado que se sabe que R ∈ hPi y que hPi tiene cardinal 3, se tendrá que hPi = {P, 2P, 3P =
O}. Como R 6= P, O debe ser R = 2P, lo que también puede comprobarse utilizando las
fórmulas de adición de puntos en E.
Sin embargo, en las aplicaciones criptográficas l es enorme y el razonamiento anterior no es
aplicable.
Ver también
Las fórmulas de adición de
puntos en E se han dado en
el módulo “Criptografía con
curvas elípticas” de esta
asignatura.
7) a) El grado de inmersión es el menor k tal que 17 divide a 101k – 1. Fácilmente se comprueba que k = 2, lo que también se habría podido deducir del hecho de ser E curva
supersingular de tipo I (ver Proposición 1.21).
b) En primer lugar, es necesario mostrar que φ es realmente una aplicación de E en E, es
decir, que si (x,y) es un punto de la curva también lo es (x,ζy). Teniendo en cuenta la
ecuación de la curva y que ζ3 = 1, la comprobación es trivial. Es también inmediata la
linealidad de φ , por tanto φ es un endomorfismo de la curva.
Puesto que φ (P) no tiene coeficientes en F103 , no puede ser un múltiplo de P es decir P y
φ (P) son linealmente independientes y por tanto (ver un problema anterior) e17 (P,φ (P) 6=
1, es decir φ es una aplicación distorsión.
8) De forma análoga al problema anterior se obtiene,
a) El grado de inmersión es 2 (E curva supersingular de tipo II, ver 1.4).
b) Si (x,y) ∈ E se comprueba que (–x,iy) lo es también. Asimismo, se comprueba la linealidad
de φ , por tanto φ es un endomorfismo de la curva.
El mismo razonamiento del problema anterior es aplicable para comprobar que φ es una
aplicación distorsión.
9) a) Utilizando las fórmulas de adición y doblado de puntos en una curva elíptica, se obtiene:
i) PA = 4(67,481) = (391,472)
ii) PB = 10(67,481) = (157,5)
iii) PC = 5(67,481) = (395,379)
b) Aplicando el algoritmo 3.3 y realizando las operaciones correspondientes en el cuerpo
F5472 (es decir, reduciendo los cálculos módulo 547 y teniendo en cuenta que i2 = –1),
se obtiene:
i) A calcula (151 + 135i)4 = 137 + 289i.
ii) B calcula (74 + 514i)10 = 137 + 289i.
iii) C calcula (11 + 39i)5 = 137 + 289i.
10) La descripción del script la haremos directamente sobre cada uno de los comandos que
utilizamos.
sage: F=GF(547); E=EllipticCurve(F,[0,0,0,1,0]);E.order()
# Construimos la curva elíptica que nos dan y comprobamos el orden de la misma.
sage: FX.<x>=F[]
#Construimos el anillo de polinomios a coeficientes en F
sage: F2.<alpha> = GF(547^2, name=’alpha’, modulus=x^2+1)
CC-BY-NC-ND • PID_00200950
34
#Construimos el cuerpo extensión cuadrática de F y llamamos alpha a su generador
sage: Ex=E.change_ring(F2)
# Construimos la curva elíptica sobre el nuevo cuerpo finito
En este punto, definimos el pairing de Weil modificado. La definición la damos en función
del pairing de Weil, que ya está incluido en SAGE.
sage: def weil_pairing_modificat(P,Q,l):
return P.weil_pairing(Ex(-Q[0],alpha*Q[1]),l)
Ahora solo nos queda entrar los datos del problema concreto que queremos resolver y encontrar el resultado:
sage: P=E(67,481)
# Construimos el punto P y comprobamos su orden
137
sage: Px=Ex(P)
#El punto P sobre la curva elíptica calculada en el nuevo cuerpo extendido.
sage: PB = Ex(97,151), PC = Ex(497,498)
# los puntos que nos da el enunciado
sage: nA = 47;
# la clave privada de A
sage: W = weil_pairing_modificat(PB,PC,137); KABC = W**nA; KABC
54 + 198 alpha
Pairings y sus aplicaciones
CC-BY-NC-ND • PID_00200950
35
Bibliografía
Blake, I.; Seroussi, G.; Smart, N. (2000). “Elliptic Curves in Cryptography”. London
Mathematical Society Lecture Note Series (núm. 265). Cambridge: Cambridge U. Press.
Blake, I.; Seroussi, G.; Smart, N. (2005). “Advances in Elliptic Curves in Cryptography”.
London Mathematical Society Lecture Note Series (núm. 317). Cambridge: Cambridge U. Press.
Hoffstein, J.; Pipher, J.; Silverman, J. (2008). “An Introduction to Mathematical Cryptography.” Undergraduate Texts in Mathematics. Nueva York: Springer.
Martin, L. (2008). “Introduction to Identity-based Encryption”. Artech House Inc. Massachusetts: Norwood.
Pairings y sus aplicaciones
Descargar