Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Implementación en tarjetas
inteligentes Java Card de
protocolos de cifrado y descifrado
basados en curvas elípticas
Tesis Doctoral
2010
Departamento de Matemática Aplicada a las
Tecnologías de la Información
Departamento de Tratamiento de la
Información y Codificación
Directores
Madrid
2010
TRIBUNAL CALIFICADOR
Presidente Dr. D.
Vocal Dr. D.
Vocal Dr. D.
Vocal Dr. D.
Secretario Dr. D.
Calificación:
EL SECRETARIO
Para Laura y Blanca.
THV6IGRlIG1pIHZpZGEgeSBhbGllbnRvIGRlIG1pIHNlci4=
AGRADECIMIENTOS
Mis amigos Óscar, Sixto, Enrique, Mónica, María José, Carlos Daniel, José Ig-
nacio, Blanca, Marta, David, Rafa, Enrique, Gema, Antonio, Ma Carmen y tantos
otros, por seguir siendo los mejores amigos en los buenos y los malos momentos.
Introducción 1
Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Justificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Clasificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Notas de estilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1. Tarjetas inteligentes 19
1.1. Historia de las tarjetas inteligentes . . . . . . . . . . . . . . . . . . . 19
1.2. ¿Qué es una tarjeta inteligente? . . . . . . . . . . . . . . . . . . . . . 22
1.3. Tipos de tarjetas inteligentes . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.1. Tarjetas de memoria . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.2. Tarjetas con microprocesador . . . . . . . . . . . . . . . . . . 25
1.3.3. Tarjetas con coprocesador . . . . . . . . . . . . . . . . . . . . 28
1.4. Propiedades físicas y eléctricas . . . . . . . . . . . . . . . . . . . . . . 28
1.5. Estándares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.5.1. La norma ISO/IEC 7816 . . . . . . . . . . . . . . . . . . . . . 31
1.5.2. La norma ISO/IEC 14443 . . . . . . . . . . . . . . . . . . . . 33
1.5.3. Las normas ETSI y 3GPP . . . . . . . . . . . . . . . . . . . . 33
1.5.4. Las normas Global Platform . . . . . . . . . . . . . . . . . . . 35
1.6. Sistemas operativos de tarjetas inteligentes . . . . . . . . . . . . . . . 35
xi
xii Índice general
Notación 331
Glosario 333
Referencias 339
Índice de figuras
xix
xx Índice de figuras
7.11. Tiempo de cifrado con curvas sobre 𝔽2𝑚 en JCOP 41 e interfaz sin
contactos (configuración M2) . . . . . . . . . . . . . . . . . . . . . . . 292
7.12. Tiempo de cifrado con curvas sobre 𝔽2𝑚 en JCOP 41 e interfaz con
contactos (configuración M2) . . . . . . . . . . . . . . . . . . . . . . . 293
7.13. Tiempo de cifrado con curvas sobre 𝔽𝑝 en PC (configuración P1) . . . 294
7.14. Tiempo de cifrado con curvas sobre 𝔽𝑝 en PC (configuración P2) . . . 295
7.15. Tiempo de cifrado con curvas sobre 𝔽𝑝 en JCOP J3A e interfaz sin
contactos (configuración P2) . . . . . . . . . . . . . . . . . . . . . . . 296
7.16. Tiempo de cifrado con curvas sobre 𝔽𝑝 en PC (configuración P3) . . . 297
7.17. Tiempo de cifrado con curvas sobre 𝔽𝑝 en JCOP J3A e interfaz sin
contactos (configuración P3) . . . . . . . . . . . . . . . . . . . . . . . 298
7.18. Tiempo de descifrado con curvas sobre 𝔽2𝑚 en PC (configuración M1) 300
7.19. Tiempo de descifrado con curvas sobre 𝔽2𝑚 en PC (configuración M2) 301
7.20. Tiempo de descifrado con curvas sobre 𝔽2𝑚 en JCOP 41 e interfaz sin
contactos (configuración M2) . . . . . . . . . . . . . . . . . . . . . . . 302
7.21. Tiempo de descifrado con curvas sobre 𝔽2𝑚 en JCOP 41 e interfaz
con contactos (configuración M2) . . . . . . . . . . . . . . . . . . . . 303
7.22. Tiempo de descifrado con curvas sobre 𝔽𝑝 en PC (configuración P1) . 304
7.23. Tiempo de descifrado con curvas sobre 𝔽𝑝 en PC (configuración P2) . 305
7.24. Tiempo de descifrado con curvas sobre 𝔽𝑝 en JCOP J3A e interfaz
sin contactos (configuración P2) . . . . . . . . . . . . . . . . . . . . . 306
7.25. Tiempo de descifrado con curvas sobre 𝔽𝑝 en PC (configuración P3) . 308
7.26. Tiempo de descifrado con curvas sobre 𝔽𝑝 en JCOP J3A e interfaz
sin contactos (configuración P3) . . . . . . . . . . . . . . . . . . . . . 308
7.27. Comparación del tiempo de ejecución en PC (configuraciones M1 y P1)309
7.28. Comparación del tiempo de ejecución entre las versiones PC y Java
Card (configuración M2) . . . . . . . . . . . . . . . . . . . . . . . . . 310
7.29. Comparación del tiempo de ejecución entre las versiones PC y Java
Card (configuración P2) . . . . . . . . . . . . . . . . . . . . . . . . . 310
7.30. Comparación del tiempo de ejecución entre las versiones PC y Java
Card (configuración P3) . . . . . . . . . . . . . . . . . . . . . . . . . 311
7.31. Comparación del tiempo de ejecución en las tarjetas JCOP 41 (con-
figuración M2) y JCOP J3A (configuración P2) al cifrar un mensaje
de 64 bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Índice de figuras xxv
xxvii
xxviii Índice de cuadros
xxxi
xxxii Índice de algoritmos
Antecedentes
En 1976, Whitfield Diffie y Martin Hellman [61] desarrollaron los conceptos que
permitieron el nacimiento de la criptografía de clave pública. Desde entonces, nu-
merosos criptosistemas han sido propuestos, aunque sólo unos pocos han soportado
con éxito el escrutinio de la comunidad científica. Entre los elementos analizados
por los expertos destacan principalmente las características de eficiencia, compleji-
dad y seguridad de los algoritmos, las cuales dependen en gran medida del problema
matemático en que están basados. Algunos de los problemas relacionados con los
criptosistemas actuales son:
En 1985, Neal Koblitz [147] y Victor Miller [174] propusieron de forma inde-
pendiente el uso de curvas elípticas en criptografía (Elliptic Curve Cryptography o
ECC), cuya seguridad depende del ECDLP. Desde entonces, la ECC se ha aplicado
a campos tan diversos como la creación de criptosistemas para el cifrado y descifrado
de datos [16, 109, 136, 254], la generación y verificación de firmas digitales [15, 184],
la factorización de enteros [49, 159], las técnicas de primalidad [23, 49, 95], e incluso
ocupó un lugar destacado en la demostración del último teorema de Fermat por
parte de Andrew Wiles [269].
1
2 Introducción
Al igual que en el caso del IFP y del DLP, no se conoce ningún algoritmo que
resuelva de forma eficiente el ECDLP. De hecho, se estima que el ECDLP es el más
difícil de resolver de los tres problemas mencionados [37, 147, 168], lo que convertiría
la criptografía con curvas elípticas en el criptosistema más resistente.
Gracias a esta mayor resistencia, la longitud de las claves en ECC es sensible-
mente inferior que la necesaria en otros algoritmos para conseguir el mismo nivel
de seguridad (medido como la fortaleza proporcionada por un algoritmo de cifrado
simétrico que utilice una clave de 𝑛 bits), tal como se puede observar en el Cuadro 1
y la Figura 1 (cuyos datos han sido obtenidos de [99] y [184]), lo que favorece su
uso en sistemas con recursos limitados como por ejemplo los teléfonos móviles y las
tarjetas inteligentes.
ECC 160 bits RSA 1024 bits (con CRT) DLP 1024 bits
Cifrado 120 17 480
Descifrado 60 384 240
Firma 60 384 240
Verificación 120 17 480
Cuadro 2: Comparación del rendimiento de ECC, RSA y los esquemas DLP medido en
unidades de tiempo necesarias para cada operación
4 Introducción
necesarias.
Justificación
A la vista de la situación planteada en el apartado anterior, y dada la escasez de
implementaciones software de ECC en general (y en tarjetas inteligentes en particu-
lar), se estimó la importancia de desarrollar diversas aplicaciones que implementaran
un protocolo de cifrado y descifrado sobre curvas elípticas en entornos PC y tarjetas
inteligentes, siendo Java el lenguaje de programación elegido debido a su populari-
dad y presencia en entornos comerciales (ver §3.2 y §3.4). A título informativo, la
cifra de desarrolladores Java supera en la actualidad los 6 millones, existiendo más
de 4.500 millones de dispositivos habilitados con tecnología Java (principalmente
ordenadores personales, teléfonos móviles y tarjetas inteligentes) [212].
El siguiente paso consistió en analizar los diferentes esquemas de cifrado exis-
tentes y seleccionar uno de los candidatos para su implementación. Los primeros
esquemas basados en curvas elípticas que surgieron fueron el equivalente de los sis-
temas Massey-Omura [205] y ElGamal [69], ambos presentados por Koblitz en 1985
[147]. Una de las principales desventajas de esos esquemas consiste en que asocian
cada mensaje a cifrar con un punto de la curva elíptica. Si bien es cierto que en las
curvas utilizadas habitualmente el número de puntos es un valor tan elevado que esta
limitación es más teórica que práctica, la obligatoriedad de construir tablas donde
se relacionen cada uno de los posibles mensajes (y que éstas sean previamente co-
nocidas por todos los usuarios) limita la utilidad de estos criptosistemas a entornos
Introducción 5
cerrados donde todos los posibles mensajes estén estipulados (empresas, pequeños
grupos, etc.).
El criptosistema Menezes-Vanstone [169] fue diseñado para solventar esa limi-
tación, puesto que en lugar de hacer corresponder cada mensaje con un punto de la
curva, este esquema representa los mensajes en claro como pares ordenados cuyos
componentes son elementos del cuerpo finito sobre el que se define la curva elíptica.
De esta manera, es posible dividir cualquier mensaje en claro en bloques, donde cada
bloque pueda ser codificado como un par ordenado (por ejemplo, convirtiendo una
cadena de caracteres o bytes en su equivalente numérico). Como contrapartida nega-
tiva, la longitud del criptograma resultante es variable y depende directamente de la
longitud del mensaje a cifrar (a diferencia de los criptosistemas Massey-Omura y El-
Gamal para curvas elípticas, donde el criptograma siempre tiene la misma longitud
independientemente del mensaje en claro).
En el esquema Menezes-Vanstone el factor de expansión (que se define como
el cociente entre la longitud del criptograma resultante y la longitud del mensaje
original) es 2, puesto que a partir del mensaje en claro compuesto por dos elementos
del cuerpo finito se obtiene un criptograma formado por cuatro elementos del mismo
cuerpo. En comparación, la variante de ElGamal con curvas elípticas tiene el mismo
factor de expansión si se considera que el mensaje en claro es un punto de la curva,
mientras que si se interpreta que el número total de mensajes posibles es igual
al número de puntos de la curva (que es del orden del número de elementos del
cuerpo finito), entonces el factor de expansión sería aproximadamente 4 (ver §4.1).
El hecho de tener un factor de expansión igual a 2 ó 4 conlleva que el cifrado de
volúmenes de información elevados generen criptogramas de tamaño mucho mayor
que si se utilizara un algoritmo de clave simétrica como por ejemplo AES (Advanced
Encryption Standard).
Otra desventaja derivada del diseño del criptosistema Menezes-Vanstone consis-
te en la realización de operaciones con los puntos de las curvas elípticas en cada
proceso de cifrado. Al ser necesario dividir los mensajes en claro de gran tamaño en
múltiples segmentos, y realizar un operación de cifrado asimétrico con cada uno de
ellos, la diferencia en tiempo de ejecución del esquema Menezes-Vanstone respecto
a un algoritmo de cifrado simétrico se incrementa conforme aumenta el número de
segmentos a cifrar, puesto que las operaciones con puntos son más lentas que los
cálculos realizados por los algoritmos de clave simétrica.
De manera adicional a las desventajas de carácter práctico señaladas, Klaus Kie-
fer demostró en 1998 que, bajo ciertas ciertas condiciones, el criptosistema Menezes-
Vanstone es inseguro [146]. Kiefer demostró además que, en contra de lo estipulado
en su especificación, este criptosistema no puede ser considerado un algoritmo de
cifrado probabilístico.
Debido a todas las razones comentadas, con el paso de los años la comunidad
académica ha ido abandonando el estudio de las versiones con curvas elípticas de
6 Introducción
∙ Tanto en ECIES como en PSEC, la clave pública del receptor del criptograma
es un punto de la curva, mientras que en ACE la clave pública está formada
por cuatro puntos.
∙ PSEC utiliza dos veces una función de derivación de claves, mientras que
ECIES y ACE sólo la utilizan una vez.
∙ Los criptogramas de ECIES están formados por tres elementos (un punto de
la curva, el mensaje cifrado con una clave simétrica y un dato utilizado para la
autenticación del mensaje), mientras que los criptogramas de PSEC incluyen
además un elemento derivado de los cálculos intermedios (y representado como
una cadena binaria) y los criptogramas del esquema ACE añaden dos puntos
de la curva elíptica.
curvas elípticas en tarjetas inteligentes sin utilizar las clases y los métodos
definidos en las API estándar de Java Card.
La lectura del material referido ofrece datos concluyentes respecto a las limitacio-
nes de las implementaciones que no utilicen las clases y API estándar de Java Card.
Aunque técnicamente es posible crear clases y métodos que realicen operaciones
comúnmente conocidas como “de bajo nivel” (por ejemplo, Petr Svenda ha creado
implementaciones del algoritmo AES y de la función resumen SHA-512 utilizando
código Java Card [258]), los resultados ofrecidos por implementaciones desarrolladas
sin acceso al coprocesador indican que dichas implementaciones no son de utilidad
para entornos comerciales, donde el tiempo de respuesta de las tarjetas a una ope-
ración no debería superar la cantidad de un segundo (compárese este dato, por
ejemplo, con los 10 minutos utilizados en la suma de dos puntos según [28], o con
el tiempo medio de 4 segundos al cifrar con AES un único bloque de datos con la
implementación descrita en [258]).
Objetivos
El objetivo general de la presente Tesis Doctoral consiste en implementar el
protocolo de cifrado ECIES (Elliptic Curve Integrated Encryption Scheme), tanto
en plataforma PC como en tarjetas inteligentes Java Card, a fin de:
Para conseguir este objetivo general, se pretenden alcanzar los siguientes obje-
tivos particulares:
Es importante aclarar que queda fuera del ámbito de la presente Tesis el estudio
de la seguridad de las implementaciones ECC en Java Card para evitar ataques de
canal lateral. La existencia de este tipo de ataques es bien conocida en la comunidad
académica tanto en sus aspectos más generales [103, 145, 150, 151, 152], como de
manera específica para implementaciones de curvas elípticas [30, 92, 142, 181]. Sin
embargo, puesto que la implementación Java Card desarrollada en esta Tesis utiliza
tarjetas inteligentes comerciales de las que no se ha podido obtener información
sobre las soluciones implementadas para evitar este tipo de ataques, y dado que
el equipamiento necesario (equipos láser y de implantación iónica, laboratorio de
tratamientos químicos, etc.) para realizar este tipo de ataques es extremadamente
costoso, los análisis de ataques de canal lateral para las tarjetas empleadas quedan
reservados para organismos o instituciones dedicadas de forma preeminente a este
tipo de actividades.
Metodología
Teniendo en cuenta los objetivos señalados anteriormente, la metodología em-
pleada a lo largo de este trabajo de investigación ha consistido en estudiar el sistema
12 Introducción
Clasificación
El tema principal de la presente Tesis Doctoral, según la MSC (Mathematics
Subject Classification) 2010 de la AMS (American Mathematical Society) [13] es:
94A60 Cryptography
Estructura
Notas de estilo
La presente Tesis Doctoral ha sido redactada utilizando el sistema de composi-
ción de textos LATEX, empleando para ello la distribución MiKTeX 2.8 y el programa
de edición WinEdt 5.5. Respecto a la configuración y las decisiones de estilo en LATEX,
se han consultado numerosas fuentes, aunque las principales han sido [153] para los
aspectos generales de composición, y [203] para las características tipográficas aso-
ciadas a la notación matemática.
En la elaboración de la bibliografía, se han seguido principalmente los consejos
sugeridos para la redacción de tesis doctorales de la Universidad Politécnica de
Madrid [263], que se basan principalmente en las normas ISO 690 [110] y 690-2
[111] (sustituidas en 2010 por una nueva edición de ISO 690 [112]), así como en
el documento equivalente UNE 50-104-94 de AENOR [12]. Para algunos aspectos
puntuales se han consultado las recomendaciones de Juan Antonio Pérez Ortiz [217]
(que a su vez recoge algunas de las indicaciones de Ramón Sol [251]).
El objetivo ha sido componer una bibliografía adaptada en lo posible al están-
dar ISO y que permitiera una correcta legibilidad. Algunas de las características
principales del estilo utilizado son:
∙ Inclusión del enlace al documento citado en los casos en los que exista una copia
en formato electrónico en internet, utilizando de manera preferente enlaces
compatibles con el sistema DOI (Document Object Identifier). La validez de
los enlaces fue comprobada por última vez el 5 de noviembre de 2010.
Introducción 17
Tanto la notación como los términos del glosario incluidos en esta Tesis han sido
obtenidos a partir de las obras incluidas en la bibliografía.
Capítulo 1
Tarjetas inteligentes
19
20 1. Tarjetas inteligentes
datos que pudieran ser leídos por los lectores apropiados, lo que inicialmente estaba
al alcance únicamente de los usuarios legítimos del sistema. Sin embargo, con el paso
del tiempo la capacidad de leer y modificar el contenido de la banda magnética se
hizo accesible a colectivos al margen de la ley, lo que provocó una nueva evolución en
las medidas de seguridad. Esta evolución tuvo lugar en los años 70 con la introducción
de los microprocesadores para tarjetas.
∙ Sanidad, donde funciona como un archivo de los aspectos más relevantes del
historial médico de un paciente, realizando la identificación del mismo ante los
sistemas centrales del sistema de sanidad (por ejemplo, Alemania desde 2006
[246], Figura 1.6).
∙ Control de acceso a edificios, con sistemas avanzados que pueden llegar a incluir
elementos biométricos. En ellos, la tarjeta inteligente almacena todos los datos
necesarios para autenticar a una determinada persona (por ejemplo, los datos
de la huella digitalizada, como se muestra en la Figura 1.7).
Por otra parte, el chip que incluyen las tarjetas inteligentes se encapsula de tal
forma que quede igualmente protegido contra accesos mediante técnicas electromag-
néticas que no precisen contacto físico con la tarjeta. La tecnología de fabricación
de estos chips ha ido evolucionando con el paso del tiempo, pasando por tecnologías
CMOS (Complementary Metal-Oxide Semiconductor) de 0.8 𝜇m, 0.5 𝜇m, 0.35 𝜇m y
0.13 𝜇m actualmente, lo que permite conseguir una mayor densidad de memoria en
el espacio destinado al chip. A este respecto, la cantidad en micras de la tecnología
de fabricación hace referencia a la mínima resolución de la maquinaria responsable
de integrar sus circuitos mediante técnicas de litografía, ya que la correspondencia
entre tecnología de integración y distancia de integración dejó de verificarse a partir
de la tecnología de 0.25 𝜇m [261]. En cuanto a la arquitectura de los microprocesa-
dores, ésta puede variar desde los 8 bits en las tarjetas más básicas hasta los 32 bits
utilizados para las aplicaciones más complejas.
Para la fabricación de las tarjetas inteligentes se parte de una oblea de silicio que
contiene múltiples ejemplares del chip. Una vez identificados y aislados uno a uno los
chips de la oblea, se pegan y se sueldan sobre los contactos. Se añade entonces una
resina protectora que aísla al chip de la humedad, formando el elemento denominado
“micromódulo”.
El plástico, fabricado de forma independiente, es rebajado en la posición donde
se alojará el chip, de forma que dé cabida al mismo bajo los contactos sin dañarse.
Utilizando técnicas de pegado mediante combinación de calor y presión, el micro-
módulo se coloca en el hueco formado en el plástico, quedando por tanto el chip
totalmente encapsulado bajo los contactos, de acuerdo a la Figura 1.10.
∙ GND: este contacto se utiliza para el voltaje de referencia (valor de cero vol-
tios).
En comparación con las tarjetas del apartado anterior, las tarjetas sin contactos
no necesitan contacto físico con otro elemento, ya que se comunican con el lector
mediante ondas electromagnéticas de manera similar a la utilizada en la tecnología
RFID (Radio Frequency Identification) [40]. La distancia entre la tarjeta y el lector
depende del tipo de tarjeta, pero en general varía desde unos pocos centímetros
hasta un metro.
La Figura 1.12 muestra el diagrama de una tarjeta sin contactos, así como del
lector necesario para acceder a la información de la tarjeta.
empleado:
La Figura 1.17 muestra de manera gráfica tanto el voltaje asociado a cada clase
como la frecuencia de la señal externa de reloj aplicable a las tarjetas con contactos,
y que debe situarse entre 1 y 20 MHz en los tres casos (excepto durante el proceso
de inicio, donde hasta que se establezca la frecuencia de trabajo final, ésta debe-
rá situarse obligatoriamente entre 1 y 5 MHz). Como aclaración, la frecuencia de
1.5. Estándares 31
trabajo del procesador no siempre coincide con la frecuenta suministrada por el dis-
positivo lector, ya que las tarjetas pueden implementar divisores o multiplicadores
para ajustar la frecuencia interna [226].
Para más información sobre las características físicas y lógicas de las tarjetas
inteligentes, se recomienda consultar el libro de Rankl y Effing [226].
1.5. Estándares
∙ Parte 2 [114]: engloba todos los elementos que definen las dimensiones y la lo-
32 1. Tarjetas inteligentes
∙ Parte 3 [115]: define las señales eléctricas y los protocolos de transmisión half-
duplex de caracteres(denominado T=0) y bloques (T=1) que se utilizan sobre
la interfaz ofrecida a través de los contactos. Así, todos los voltajes, intensida-
des máximas de corrientes, convenciones de paridad, velocidades de transmi-
sión y otros parámetros relacionados con las señales se definen en esta parte
de la norma.
∙ Parte 7 [119]: dado que la tarjeta inteligente puede utilizarse como dispositivo
de almacenamiento de datos, en esta parte de la norma se especifican los
comandos utilizados para la gestión de las estructuras de bases de datos y el
lenguaje SCQL (Structured Card Query Language).
∙ Parte 8 [120]: los comandos relacionados con la seguridad son definidos en esta
parte de la norma (siendo complementarios a los definidos en la parte 7816-4).
Se incluyen protocolos para que la tarjeta preste servicios de seguridad (como
algoritmos de cifrado) y métodos para proporcionar seguridad en la interfaz
entre la tarjeta y el exterior.
∙ Parte 9 [121]: define los comandos para la gestión de ficheros (por ejemplo,
la creación y borrado de ficheros). Estos comandos abarcan todo el ciclo de
vida de los ficheros en la tarjeta. En un anexo de esta norma se muestra cómo
controlar la carga segura de datos en las tarjetas.
∙ Parte 10 [122]: este documento especifica las señales eléctricas y el ATR (Ans-
wer to Reset) de las tarjetas síncronas.
∙ Parte 11 [123]: especifica el uso de los comandos y de los datos relacionados con
la verificación de la identidad de una persona a través de métodos biométricos.
1.5. Estándares 33
∙ Parte 14: este documento no existe, siendo la parte 14 una referencia sin uso
práctico.
∙ Parte 15 [126]: define una aplicación que contiene información sobre la funcio-
nalidad criptográfica. Además, especifica una sintaxis común en ASN.1 (Abs-
tract Syntax Notation One) y tanto el formato de codificación de la información
como los mecanismos para compartir esta información.
∙ Parte 2 [133]: define los campos magnéticos que deben utilizarse tanto para
proporcionar potencia a la tarjeta como para establecer la comunicación entre
lector y tarjeta.
∙ Parte 4 [135]: incluye los detalles del protocolo half-duplex de bloques (deno-
minado T=CL) por el que se comunican el lector y la tarjeta sin contactos.
(3rd Generation Partnership Project) [1, 6], define la interfaz entre la tarjeta SIM
y el teléfono móvil durante la fase de operación en red del sistema GSM, así como
la organización interna de la información en la tarjeta. Mediante esta especificación,
se asegura la correcta interoperabilidad entre la tarjeta y el terminal, independien-
temente de los fabricantes de ambos dispositivos.
Entre otros detalles, la norma TS 11.11 especifica:
∙ Los requisitos físicos a cumplir por la tarjeta SIM en cuanto a señales eléctricas
y protocolos de transmisión.
∙ El modelo lógico a utilizar como base para el diseño de la estructura de ficheros
de la tarjeta SIM.
∙ Las funciones de seguridad, haciendo hincapié en el proceso de autenticación
del usuario frente a la red.
∙ Los comandos y sus respectivas respuestas a transmitir entre el teléfono móvil
y la tarjeta SIM.
∙ Los contenidos en detalle de los ficheros para su utilización en redes GSM.
Dentro de las características físicas se definen dos formatos, conocidos como ID-1
(tamaño tarjeta de crédito) y plug-in o mini-SIM (formato de inferior tamaño para
poder utilizar la tarjeta dentro de los teléfonos móviles, equivalente al formato ID-
000 del estándar ISO/IEC 7816). En ambos casos, las características físicas deben
cumplir los requisitos expresados en la normas ISO 7816-1 y 7816-2, a menos que se
especifique lo contrario.
A nivel eléctrico se mantienen los requisitos de la norma 7816-3, aunque en este
caso el único protocolo obligatorio es T=0, el protocolo semi-dúplex asíncrono y
orientado a byte [97].
Por último, respecto a la estructura de ficheros, éstos se organizan de forma
jerárquica. Existen tres tipos de ficheros elementales: transparentes (secuencia de
bytes sin organización interna), lineales con longitud de registro fija (secuencia de
registros todos con la misma longitud) y cíclicos con longitud de registro fija (simi-
lares a los lineales, con la diferencia de que los registros se sobrescriben por orden
de antigüedad).
Por su parte, la norma TS 11.14, igualmente desarrollada por ETSI y transferida
a 3GPP [2, 7], define la interfaz entre la tarjeta SIM y el terminal móvil para
la comunicación con aplicaciones SIM Application Toolkit (en adelante STK) y
la realización de servicios avanzados. STK proporciona mecanismos que permiten
a las aplicaciones residentes en la tarjeta SIM interactuar y operar con cualquier
teléfono móvil que implemente dichos mecanismos y sus comandos asociados. Entre
los distintos procedimientos incluidos pueden destacarse los siguientes:
1.6. Sistemas operativos de tarjetas inteligentes 35
∙ Proactive SIM : procedimiento por el cual la tarjeta SIM puede iniciar acciones
que deben ser ejecutadas por el terminal. Este sistema se ideó como una forma
de superar la limitación del protocolo T=0, donde la comunicación sólo puede
ser iniciada por el terminal.
∙ Data Download : mecanismo por el que un servidor puede enviar datos a una
aplicación de la tarjeta SIM, utilizando distintos servicios portadores como
los mensajes cortos SMS (Short Message Service) o la difusión CBS (Cell
Broadcast Service).
propias de Microsoft.
La Figura 1.22 presenta un esquema que muestra la interrelación entre los dis-
tintos elementos de la arquitectura OCF.
Las interacciones con la tarjeta se realizan mediante el intercambio de pares
de elementos de tipo APDU (Application Protocol Data Unit) iniciadas por una
aplicación externa a la tarjeta, para lo que se emplea un lector de tarjetas. La
aplicación envía un comando CommandAPDU a la tarjeta pasándolo al driver del lector,
quien a su vez lo reenvía a la tarjeta. Como respuesta, la tarjeta envía un comando
ResponseAPDU que el driver entrega a la aplicación.
Las funciones de una tarjeta están determinadas por el conjunto de APDU que
es capaz de interpretar. A pesar de los estándares existentes, el rango de comandos
que entiende cada tarjeta depende en cierta medida del fabricante en cuestión. De
igual manera, cada lector de tarjetas tiene distintas funcionalidades, desde el lector
más simple con un único slot o ranura a los más complejos que incluyen accesorios de
identificación biométrica. El problema de nuevo es la inexistencia de un único driver
40 1. Tarjetas inteligentes
para acceder a los servicios del lector de tarjetas. Sin embargo, gracias a estándares
como OCF este problema queda parcialmente solucionado, al disponer de un canal
por el que es posible enviar cualquier APDU independientemente del dispositivo
lector y de la tarjeta inteligente empleados (siempre que el lector sea compatible con
la arquitectura OCF).
El OpenCard Consortium se disolvió tras la publicación de su versión 1.2, que-
dando su tecnología obsoleta tras la aparición del API Java Smartcard I/O [211],
aunque todavía puede encontrarse información en forma de proyectos evolucionados
a partir de OCF como Open Smart Card Development Platform (OpenSCDP) [39]
o de repositorios de la información original en Sourceforge [252].
∙ INS (1 byte): este campo obligatorio sirve para indicar una instrucción especí-
fica dentro de la clase representada por el campo CLA. El estándar ISO/IEC
7816-4 especifica las instrucciones básicas para acceder a los datos de una
tarjeta cuya estructura interna esté implementada de acuerdo al estándar. El
Cuadro 1.2 presenta algunas de las instrucciones ISO/IEC 7816 más típicas.
∙ P1 (1 byte, obligatorio): este campo define el primer parámetro asociado a la
instrucción. Se puede utilizar para dar más información sobre la instrucción,
o bien como dato de entrada.
∙ P2 (1 byte, obligatorio): este campo define el segundo parámetro asociado a
la instrucción. Al igual que en el caso anterior, se puede utilizar para dar más
información sobre la instrucción, o como dato de entrada.
∙ Lc (1 byte, opcional): este valor representa el número de bytes del campo de
datos del comando. Puesto que el valor máximo es 0xFF, la longitud máxima
de los datos es de 255 bytes, aunque algunas tarjetas permiten enviar datos de
256 bytes de longitud utilizando el valor 0x00.
∙ Data (tamaño variable, opcional): este campo incluye los datos del comando.
∙ Le (1 byte, opcional): este campo indica el máximo número de bytes a incluir
en el campo de datos de la respuesta esperada.
APDU, tal como puede comprobarse en la Figura 1.26. De forma habitual, las apli-
caciones utilizan varios comandos APDU con distintas estructuras de datos durante
su ejecución.
Al igual que los comandos, las APDU de tipo respuesta incluyen campos tanto
obligatorios como opcionales:
∙ Datos (longitud variable, dependiente del campo Le del comando APDU, ca-
rácter opcional): este campo contiene los datos devueltos por la aplicación de
la tarjeta.
Los valores posibles para los bytes de estado están definidos en la especificación
ISO 7816-4. La Figura 1.28 muestra de forma gráfica la clasificación de los posibles
bytes de estado.
1.8. Comunicación con la tarjeta inteligente 47
2.1. Introducción
Criptología es el nombre genérico que engloba dos disciplinas opuestas y a la vez
complementarias: criptografía y criptoanálisis. La criptografía se ocupa del diseño
de procedimientos para el cifrado y descifrado de la información, mientras que el
criptoanálisis se encarga del estudio de los métodos para obtener la información ori-
ginal sin tener acceso a los datos secretos requeridos en el funcionamiento normal de
los algoritmos criptográficos. Ambas disciplinas se han desarrollado habitualmente
de forma paralela, puesto que cualquier método de cifrado siempre lleva aparejada
su correspondiente técnica de criptoanálisis [78].
49
50 2. Criptografía de clave pública basada en curvas elípticas
La firma digital tiene como objetivo cumplir los objetivos de integridad, auten-
ticación y no repudio, de manera que una firma electrónica sea equivalente a una
firma manuscrita en cualquier transacción [78, 172]. Desde el punto de vista técnico
y de forma simplificada, una firma digital es el resultado de cifrar la salida obte-
nida mediante una función resumen de una determinada información, de manera
que cualquier usuario pueda verificar la identidad de la persona que firmó los datos
y garantizar que la información objeto de la comprobación no ha sido modificada
desde su firma.
Las firmas digitales pueden dividirse en dos grupos: con anexo y con recuperación
del mensaje. En las firmas con anexo, es necesario disponer tanto de la firma digital
como del mensaje original a fin de poder realizar la comprobación de la firma. Por
el contrario, en las firmas digitales con recuperación del mensaje, el propio mensaje
se extrae del contenido de la firma.
⎧
⎨ Con anexo
Firma digital
Con recuperación del mensaje
⎩
2.2.3. Cifrado/descifrado
Los criptosistemas de clave pública tienen como objetivo cifrar el contenido de la
información a transmitir de manera que ésta sólo pueda ser descifrada por un usua-
rio legítimo. Para ello, de forma genérica dichos usuarios deben seguir el siguiente
procedimiento:
3. Cifrado
Cada vez que el usuario emisor desee enviar un mensaje cifrado, deberá utilizar
el esquema de cifrado previamente acordado, junto con la clave pública del
usuario receptor, a fin de componer el criptograma.
4. Descifrado
Una vez recibido el criptograma, el usuario receptor utilizará el esquema de
cifrado, junto con su clave privada, para descifrar el mensaje y así obtener la
información original.
∙ Ataques pasivos: un atacante pasivo es aquel que, teniendo acceso al canal por
el que se comunican los usuarios legítimos, se limita a obtener información del
canal, por lo que su objetivo principal es comprometer la confidencialidad de
la comunicación.
∙ Ataques activos: un atacante activo es aquel que, además de recuperar los
criptogramas del canal de comunicación, trata de borrar, introducir o alterar
de alguna forma las transmisiones realizadas por los participantes. El objetivo
de este tipo de atacante es múltiple, ya que además de comprometer la confi-
dencialidad de los mensajes puede intentar alterar la integridad de los datos e
incluso la autenticidad de los mensajes.
Dentro de los ataques pasivos, existen diferentes tipos que se diferencian en el tipo
de información a disposición del atacante [172], de manera que en algunos casos se
podrá suponer que el adversario cuenta con acceso a un oráculo, elemento que puede
ser interpretado como una caja negra que se encarga de cifrar o descifrar mensajes
elegidos por el atacante, pero sin revelar ningún tipo de información adicional. Por
supuesto, estas máquinas ideales no existen en la práctica, pero a efectos de modelar
2.3. Seguridad en criptosistemas de clave pública 55
∙ Ataque con texto en claro conocido (Known Plaintext Attack o KPA): el ata-
cante dispone de un conjunto de textos cifrados junto con los correspondientes
textos en claro. Su objetivo consiste en determinar la clave de descifrado o,
como mínimo, un algoritmo que le permita obtener el texto en claro de poste-
riores mensajes cifrados.
∙ Ataque con texto en claro elegido (Chosen Plaintext Attack o CPA): el atacante
puede obtener los textos cifrados correspondientes a un conjunto arbitrario
de textos en claro de su propia elección. Para ello, es posible suponer que el
atacante hace uso de un oráculo de cifrado que puede utilizar durante un cierto
tiempo, con la restricción de que en ningún caso el atacante podrá obtener
del oráculo la clave de cifrado. El objetivo del ataque consiste de nuevo en
determinar la clave de descifrado o, en su defecto, un algoritmo que le permita
derivar el texto en claro de otros mensajes cifrados que no hayan sido generados
por el atacante.
∙ Ataque con texto cifrado elegido (Chosen Ciphertext Attack o CCA): el atacan-
te puede obtener los textos en claro correspondientes a un conjunto arbitrario
de textos cifrados de su propia elección mediante el uso de un oráculo de desci-
frado. De nuevo, se supone imposible obtener del oráculo la clave de descifrado.
El objetivo último del ataque en este caso consiste en obtener dicha clave de
descifrado.
tan la clave privada y pública respectivamente del usuario U, el mensaje original sin
cifrar se denotará por la letra 𝔪, la información cifrada será identificada como 𝔠, y
el criptograma 𝒞 incluye no solamente el mensaje cifrado sino también los elementos
adicionales que el receptor del criptograma necesita para proceder a su descifra-
do (aunque en algunas ocasiones, ante la falta de dichos elementos adicionales, el
criptograma 𝒞 será completamente equivalente al mensaje cifrado 𝔠).
2.4.1.1. Descripción
3. De forma análoga, V tiene que generar un número aleatorio 𝑣, con 1 < 𝑣 <
𝑝 − 1, calcular 𝛼𝑣 ∈ ℤ∗𝑝 y transmitir el elemento calculado a U.
2.4.1.2. Ejemplo
transmitiendo el valor 94 a V.
2.4.1.3. Seguridad
En 1978, Ron Rivest, Adi Shamir y Leonard Adleman [229] propusieron una
implementación práctica de los conceptos presentados anteriormente por Diffie y
Hellman. Aprovechando la dificultad de factorizar números enteros muy grandes,
describieron los pasos necesarios para cifrar y descifrar mensajes que previamente
hubieran sido convertidos en cadenas numéricas. Su propuesta incluía detalles sobre
cómo realizar las operaciones de cifrado y descifrado de forma eficiente, y cómo
60 2. Criptografía de clave pública basada en curvas elípticas
calcular los parámetros que componen las claves públicas y privadas. El esquema
de cifrado, tal como está descrito en [229], es independiente del tipo de mensaje,
estando la información cifrada directamente con la clave pública 𝑉 y no por una
clave simétrica temporal. En 1983 les fue concedida la patente que solicitaron en
1977 [164], aunque en el año 2000 los autores dejaron sin efecto dicha patente para
que el algoritmo RSA pudiera ser utilizado libremente.
El protocolo RSA consta de tres partes [66, 232]:
Cada usuario (lo que representa tanto al usuario U que desea enviar el mensaje
𝔪 como al usuario V que recibe la información cifrada 𝔠, equivalente en este caso al
criptosistema 𝒞) debe elegir su par de claves, pública y privada. Para ello es necesario
completar los pasos del Algoritmo 2.2, descrito utilizando la notación del usuario V.
3. Elegir de forma aleatoria un entero positivo 𝑒, con 2 < 𝑒 < 𝜙(𝑛), tal que
mcd(𝑒, 𝜙(𝑛)) = 1.
5. Asignar como clave pública del usuario V el par 𝑉 = (𝑛, 𝑒), siendo su
clave privada correspondiente 𝑣 = 𝑑. Además del elemento 𝑑, también deben
permanecer secretos los números 𝑝, 𝑞 y 𝜙(𝑛).
𝑐 = 𝑚𝑒𝑉 (mod 𝑛𝑉 ),
Una vez que el usuario V recibe el mensaje cifrado 𝔠, para recuperar el mensaje
original 𝔪 debe seguir las instrucciones del Algoritmo 2.4.
2. Calcular el valor
2.4.2.2. Ejemplo
Para determinar las claves que utilizará el usuario V, se siguen los pasos expues-
tos en §2.4.2.1:
1. El usuario V debe elegir dos números primos de forma secreta, en este caso
𝑝 = 383 y 𝑞 = 521.
mcd(3, 198640) = 1.
𝐴 7→ 0, 𝐵 7→ 1, 𝑐 7→ 2, . . . , 𝑌 7→ 24, 𝑍 7→ 25.
cada mensaje parcial puede contener, como máximo, tres letras. En el ejemplo
considerado se utilizarán las letras
𝑅 7→ 17, 𝑆 7→ 18, 𝐴 7→ 0,
Este valor podría escribirse en base hexadecimal para ser enviado a su desti-
natario, o transformarlo de nuevo a base 26 para convertirlo en letras. En este
último caso:
Una vez que el usuario V reciba el mensaje cifrado enviado por U, 𝔠=WWC,
debe realizar los pasos indicados en §2.4.2.1:
2.4.2.3. Seguridad
En 1985, Taher ElGamal [69] propuso un esquema de firma digital y cifrado que
utilizaba la clave pública de V para cifrar una clave simétrica 𝐾, con la que a su vez
se cifraba el mensaje original. La principal novedad de su propuesta consistía en unir
para su envío tanto la clave simétrica temporal como la información original cifrada
con dicha clave, aprovechando la complejidad del cálculo de los logaritmos sobre
cuerpos finitos. En su propuesta, ElGamal aconsejaba no cifrar más de un mensaje
(o más de un bloque del mensaje original, si por su longitud el mensaje debía ser
2.4. Principales esquemas de cifrado y establecimiento de clave 65
dividido en varias partes) con la misma clave 𝐾, por lo que en la práctica una
nueva clave 𝐾 siempre acompañará al mensaje cifrado en cada envío de información
confidencial de U a V.
Como en todo criptosistema de clave pública, en el de ElGamal se pueden iden-
tificar tres fases [179]:
1. Generación de claves.
2. Cifrado de mensajes.
3. Descifrado de mensajes.
Generación de claves
Todo usuario V que desee generar claves para el criptosistema de ElGamal debe
seguir el Algoritmo 2.5.
Cifrado de mensajes
Descifrado de mensajes
Una vez que el usuario V recibe el criptograma 𝒞 = (𝑓, 𝑔) enviado por el usuario
U, para obtener el mensaje original, 𝔪, V debe realizar el Algoritmo 2.7:
2.4.3.2. Ejemplo
Para generar sus claves, el usuario V debe seguir los pasos expuestos en §2.4.3.1:
Los pasos a realizar por el usuario U para enviar un mensaje cifrado a V son
los descritos en §2.4.3.1.
4. Por último, U debe obtener el equivalente alfanumérico del par (𝛼𝑢 , 𝑚⋅(𝛼𝑣 )𝑢 ) =
(12001315, 2829967), que constituye el criptograma.
2829967 = (((6 ⋅ 26 + 5) ⋅ 26 + 0) ⋅ 26 + 8) ⋅ 26 + 23
= 6 ⋅ 264 + 5 ⋅ 263 + 8 ⋅ 26 + 23 7→ GFIX.
Por lo tanto, el par de valores a enviar a V es: 𝒞 = (BAGVLB, GFIX).
68 2. Criptografía de clave pública basada en curvas elípticas
Para proceder al descifrado, V debe calcular los siguientes elementos, tal como
se encuentra descrito en §2.4.3.1:
1. V debe utilizar su clave privada, 𝑣 = 21702, para realizar los siguiente cálculos,
teniendo en cuenta que 𝑓 = 𝛼𝑘 (mod 𝑝):
Una vez obtenido 𝑚, V podrá recuperar el texto del mensaje original mediante
la siguiente conversión:
2.4.3.3. Seguridad
DEM.Decrypt(K,L,DEM.Encrypt(K,L,M ))=M.
Por su parte, Victor Miller [174] realizó su propuesta desde un punto de vista más
teórico en relación al modelo general descrito por Diffie y Hellman, pero sin realizar
comparaciones con otras implementaciones existentes.
En los siguientes apartados se presentan los conceptos fundamentales relaciona-
dos con las curvas elípticas y con su aplicación a la criptografía.
En función del género de una curva, es posible establecer unas pautas sobre
la posible existencia o no de puntos racionales (y como caso particular, de puntos
enteros donde las coordenadas necesariamente pertenecen a ℤ), tal como se resume
a continuación [140]:
A partir de las definiciones anteriores, se puede afirmar que una curva elíptica
𝐸 sobre el cuerpo 𝔽 es una curva proyectiva regular de género 1 que tiene al menos
un punto racional [140, 149, 245]. Toda curva elíptica admite un tipo de ecuación
canónica llamada forma de Weierstrass, cuya expresión en coordenadas homogéneas
es
(2.2) 𝐸 : 𝑌 2 𝑍 + 𝑎1 𝑋𝑌 𝑍 + 𝑎3 𝑌 𝑍 2 = 𝑋 3 + 𝑎2 𝑋 2 𝑍 + 𝑎4 𝑋𝑍 3 + 𝑎6 𝑍 6 ,
donde 𝑎1 , 𝑎2 , 𝑎3 , 𝑎4 , 𝑎6 ∈ 𝔽 y Δ ∕= 0, siendo Δ el discriminante de 𝐸 que se calcula
de la siguiente manera [168]:
⎫
Δ = −𝑑22 𝑑8 − 8𝑑34 − 27𝑑26 + 9𝑑2 𝑑4 𝑑6
𝑑2 = 𝑎21 + 4𝑎2
⎬
𝑑4 = 2𝑎4 + 𝑎1 𝑎3
𝑑6 = 𝑎23 + 4𝑎6
𝑑8 = 𝑎21 𝑎6 + 4𝑎2 𝑎6 − 𝑎1 𝑎3 𝑎4 + 𝑎2 𝑎23 − 𝑎24
⎭
(2.3) 𝐸 : 𝑦 2 + 𝑎1 𝑥𝑦 + 𝑎3 𝑦 = 𝑥3 + 𝑎2 𝑥2 + 𝑎4 𝑥 + 𝑎6 .
Las Figuras 2.4 y 2.5 muestran dos ejemplos de curvas elípticas definidas sobre
el cuerpo de los números reales.
74 2. Criptografía de clave pública basada en curvas elípticas
Esta característica implica que todos los puntos racionales de una curva elíptica
definida sobre ℚ (o sobre una extensión de ℚ) pueden obtenerse a partir de un
número finito de ellos. En el caso de los cuerpos finitos, el número de generadores
es 1 ó 2 [228].
Los parámetros que definen el tamaño del cuerpo finito son imprescindibles para
calcular la longitud de las curvas elípticas y de las claves asociadas a dichas cur-
vas. Esta longitud debe ser interpretada como el número de bits necesarios para
representar el entero 𝑝 en curvas sobre cuerpos primos (es decir, el valor ⌈log2 𝑝⌉),
mientras que en el caso de curvas sobre cuerpos binarios la longitud coincide con el
valor del elemento 𝑚.
√
#𝐸(𝔽𝑞 ) = 𝑞 + 1 − 𝑡, ∣𝑡∣ ≤ 2 𝑞,
(2.4) 𝑦 2 = 𝑥3 + 𝑎𝑥 + 𝑏,
(2.5) 𝑦 2 + 𝑥𝑦 = 𝑥3 + 𝑎𝑥2 + 𝑏.
(2.6) 𝑦 2 + 𝑐𝑦 = 𝑥3 + 𝑎𝑥 + 𝑏.
Δ = 𝑐4 .
(2.7) 𝑦 2 = 𝑥3 + 𝑎𝑥2 + 𝑏.
(2.8) 𝑦 2 = 𝑥3 + 𝑎𝑥 + 𝑏.
mientras que para obtener 2 𝑃 a partir del punto 𝑃 es necesario realizar 1 inversión,
2 multiplicaciones y 2 elevaciones al cuadrado en 𝐹𝑝 . Las operaciones de suma y
diferencia de elementos del cuerpo finito no se suelen contabilizar debido a que, en
comparación con las otras operaciones mencionadas, son las que requieren menor
tiempo de computación.
Las siguientes figuras muestran de forma gráfica las siguientes operaciones reali-
zadas en la curva 𝑦 2 = 𝑥3 + 11𝑥 + 3 definida sobre 𝔽17 : suma de los puntos 𝑃 = (4, 3)
y 𝑄 = (9, 7), con resultado 𝑅 = (6, 9) (Figura 2.10); suma de 𝑃 = (7, 7) con
𝑃 = (7, 7), siendo el resultado 𝑅 = 2𝑃 = (2, 13) (Figura 2.11) y suma de 𝑃 = (7, 7)
con 2𝑃 = (2, 13), siendo el resultado 𝑅 = 3𝑃 = (4, 3) (Figura 2.12).
⎫
𝑥𝑅 = 𝜆2 + 𝜆 + 𝑥𝑃 + 𝑥𝑄 + 𝑎,
𝑦𝑅 = 𝜆 (𝑥𝑃 + 𝑥𝑅 ) + 𝑥𝑅 + 𝑦𝑃 ,
⎬
𝑦𝑃 + 𝑦𝑄
𝜆 = .
𝑥𝑃 + 𝑥𝑄
⎭
= 𝜆2 + 𝜆 + 𝑎,
⎫
𝑥𝑅
⎬
𝑦𝑅 = 𝜆 (𝑥𝑃 + 𝑥𝑅 ) + 𝑥𝑅 + 𝑦𝑃 ,
𝑦𝑃
𝜆 = 𝑥𝑃 + .
⎭
𝑥𝑃
Con las fórmulas anteriores, tanto la suma de dos puntos 𝑃 y 𝑄 como la obtención
de 2 𝑃 a partir del punto 𝑃 necesitan 1 inversión, 2 multiplicaciones y 1 elevación al
cuadrado en 𝐹2𝑚 . Al igual que en el caso de los cuerpos primos, las operaciones de
suma y diferencia de elementos del cuerpo binario no se han contabilizado debido a
su menor tiempo de ejecución respecto al de las otras operaciones referidas, por lo
que su aportación al tiempo de procesamiento total puede considerarse despreciable.
𝑛 𝑃 = 𝑃 + 𝑃 + . . . + 𝑃.
#𝐸(𝔽𝑞 ) 𝑃 = 𝒪.
86 2. Criptografía de clave pública basada en curvas elípticas
#𝐸(𝔽𝑞 )
ℎ= .
𝑛
𝑚−1
∑
𝑎= 𝑎𝑖 𝛼𝑖 = (𝑎0 , 𝑎1 , . . . , 𝑎𝑚−1 ), donde 𝑎𝑖 ∈ {0, 1} ,
𝑖=0
Para mayor información, tanto en [16] como en [108] es posible encontrar listas
de trinomios y pentanomios irreducibles sobre 𝔽2 .
donde 𝛽 ∈ 𝔽2𝑚 . Por tanto, cualquier elemento 𝑎 ∈ 𝔽2𝑚 queda representado como
𝑚−1
𝑖
∑
𝑎= 𝑎𝑖 𝛽 2 , donde 𝑎𝑖 ∈ {0, 1} .
𝑖=0
En el caso de las bases normales, a los elementos 𝑎 ∈ 𝔽2𝑚 se les suele represen-
tar como la cadena de bits (𝑎0 𝑎1 . . . 𝑎𝑚−1 ) de longitud 𝑚 (nótese el cambio en el
orden de los subíndices respecto a las bases polinómicas), donde 𝑎𝑖 ∈ {0, 1}. Em-
pleando esta técnica, el elemento unitario se representa mediante la cadena de bits
(1 1 . . . 1 1 1), mientras que el elemento neutro queda representado mediante la ca-
dena (0 0 . . . 0 0 0). Al igual que en las bases polinómicas, la suma de dos elementos
de 𝔽2𝑚 se realiza mediante la operación XOR aplicada sobre los bits de las cadenas
que los representan.
88 2. Criptografía de clave pública basada en curvas elípticas
∙ Forma descomprimida
La forma descomprimida de un punto 𝑃 = (𝑥, 𝑦) es la cadena 0x04||𝑋||𝑌 ,
donde 𝑋 e 𝑌 son las representaciones hexadecimales de la primera y segunda
coordenadas del punto, teniendo ambas cadenas hexadecimales una longitud
de ⌈(log2 𝑞)/8⌉ bytes.
∙ Forma comprimida
La forma comprimida de un punto 𝑃 = (𝑥, 𝑦) es la cadena 𝐶 || 𝑋, donde
𝑋 es la representación hexadecimal de la primera coordenada del punto, y
el elemento 𝐶 puede tener como valores 0x02 ó 0x03 dependiendo del punto,
calculándose este valor según el Algoritmo 2.8, tal como se encuentra descrito
en [254].
4. Incluir 𝑏 en la expresión 𝐸 : 𝑦 2 + 𝑥 ⋅ 𝑦 = 𝑥3 + 𝑥2 + 𝑏.
4. Comprobar que 𝑛 > 2160 para evitar los ataques de tipo BSGS/Rho [29].
6. Comprobar que 𝑙𝑡 ∕≡ 1 (mod 𝑛) para todos los valores 𝑡 ≤ 100 a fin de evitar
el ataque de tipo supersingular (también conocidos como MOV/Frey-Rück
[29]).
2.6.7. Seguridad
𝑞 𝐵 ∕≡ 1 (mod 𝑛) , ∀ 𝐵, 1 ≤ 𝐵 ≤ 100.
#𝐸(𝔽𝑞 ) ∕= 𝑞.
En 2002, Gaudry, Hess y Smart [91] adaptaron una idea de Frey [77] para resolver
el ECDLP utilizando el descenso de Weil para convertir el ECDLP en un problema de
curvas hiperelípticas. Tanto Jacobson, Menezes y Stein [141] como Maurer, Menezes
y Teske [167] encontraron varias curvas definidas sobre cuerpo 𝔽2𝑚 , siendo 𝑚 un
número compuesto, donde el método era viable.
Por otra parte, Menezes y Qu [173] demostraron que este método no es aplicable
a cuerpos finitos 𝔽2𝑚 cuando 𝑚 es un número primo, por lo que los estándares y
recomendaciones más recientes únicamente incluyen (en los apartados que tratan
sobre cuerpos binarios) curvas elípticas donde 𝑚 es un número primo.
∙ ISO
La Organización Internacional para la Estandarización (International Orga-
nization for Standardization o ISO) es el organismo encargado de promover
el desarrollo de las normas internacionales de fabricación, comercio y comu-
nicación para todas las ramas industriales (a excepción de la eléctrica y la
electrónica), especialmente en los temas relacionados con las normas de pro-
ductos y seguridad para las empresas y organizaciones a nivel internacional.
∙ IEC
La Comisión Electrotécnica Internacional (International Electrotechnical Com-
mission o IEC) es un organismo de estandarización en los campos eléctrico,
electrónico y de otras tecnologías relacionadas. Numerosas normas se desarro-
llan conjuntamente con ISO, siendo entonces denominadas normas ISO/IEC.
∙ IEEE
El Instituto de Ingenieros Eléctricos y Electrónicos (Institute of Electrical and
Electronics Engineers o IEEE) es una asociación técnico-profesional mundial
dedicada a la estandarización de tecnologías derivadas de la electricidad: inge-
niería computacional, tecnologías biomédica y aeroespacial, energía eléctrica,
control, telecomunicaciones, electrónica de consumo, etc.
∙ IETF
El Grupo de Trabajo en Ingeniería de Internet (Internet Engineering Task
Force o IETF) es una organización internacional de estandarización que tiene
como objetivo velar para que la arquitectura de la red y los protocolos técni-
cos de Internet funcionen correctamente, actuando en áreas como transporte,
seguridad, etc.
∙ ANSI
El Instituto Nacional Estadounidense de Estándares (American National Stan-
dards Institute o ANSI) es una organización sin ánimo de lucro que supervisa
el desarrollo de estándares para productos, servicios, procesos y sistemas en
los Estados Unidos, siendo miembro de ISO y de IEC. ANSI también se en-
carga de coordinar estándares estadounidenses con estándares internacionales,
de modo que los productos de Estados Unidos puedan utilizarse en todo el
mundo.
∙ NIST
El Instituto Nacional de Estándares y Tecnología (National Institute of Stan-
dards and Technology o NIST) es una agencia de la Administración de Tecno-
logía del Departamento de Comercio de los Estados Unidos. La misión de este
instituto es promover la innovación y la competencia industrial en Estados
Unidos mediante avances en las normas aplicadas y en la propia tecnología.
94 2. Criptografía de clave pública basada en curvas elípticas
∙ SECG
El Grupo de Estándares para la Criptografía Eficiente (Standards for Efficient
Cryptography Group o SECG) es un consorcio internacional fundado en 1998,
siendo su principal objetivo facilitar la adopción de la criptografía de curva
elíptica. Entre sus miembros se encuentran compañías como Certicom, Entrust,
Fujitsu y Visa.
La norma FIPS 186-2 [184] incluye los algoritmos y esquemas de firma digital que
pueden ser empleados por las distintas agencias del gobierno de los EE.UU. Dichos
algoritmos son DSA, RSA y ECDSA (Elliptic Curve Digital Signature Algorithm).
ECDSA es el equivalente al algoritmo DSA empleando curvas elípticas [257].
En los apéndices de FIPS 186-2 [184] y en el estándar ANSI X9.62 [15] se presenta
el esquema ECDSA y se describen distintas curvas que pueden ser utilizadas en los
procedimientos de firma. Aunque el documento [184] sólo tiene ámbito de aplicación
interna en los EE.UU., al ser información de dominio público, en la práctica se utiliza
también fuera de ese ámbito.
El esquema ECDSA también se encuentra recogido en el estándar IEEE 1363
[108] y en el documento SEC 1 [254]. Por último, ECDSA es el algoritmo seleccionado
por la NSA en la Suite B [194].
2.6. Criptografía basada en curvas elípticas 95
Los primeros esquemas de cifrado basados en curvas elípticas que surgieron fue-
ron el equivalente de los sistemas Massey-Omura [205] y ElGamal [69], ambos pre-
sentados por Koblitz en 1985 (y publicados en 1987) [147] y el Menezes-Vanstone
Elliptic Curve Cryptosystem [169], de los que se proporcionan detalles adicionales
en §4.1.
El esquema de cifrado y descifrado más extendido en la actualidad que emplea
curvas elípticas es conocido de forma genérica como ECIES (Elliptic Curve Integra-
ted Encryption Scheme), y se basa en el modelo propuesto por Bellare y Rogaway
en 1997 [26] y refinado posteriormente por Abdalla, Bellare y Rogaway en 1998 [8]
y 2001 [9, 10], constituyendo una variante del esquema ElGamal.
ECIES puede encontrarse en el estándar ANSI X9.63 [16], en el anexo IEEE
1363a [109] al documento IEEE 1363 [108] y en el estándar ISO/IEC 18033-2 [136].
Asimismo, puede encontrarse una amplia descripción de ECIES, así como numerosos
detalles técnicos para su implementación, en el documento SEC 1 [254] realizado por
el consorcio industrial SECG.
2.6.9. Patentes
En la actualidad existe un gran número de patentes reconocidas sobre ECC. La
siguiente lista muestra algunas de las patentes de mayor relevancia para la presente
Tesis.
∙ US 5.146.500 - Public key cryptographic system using elliptic curves over rings
[207]: describe la utilización de curvas elípticas sobre el anillo ℤ𝑚 , donde 𝑚 es
un número compuesto.
∙ US 5.854.759 - Methods and apparatus for efficient finite field basis conversion
[231]: describe un método para realizar cambios de base en cuerpos 𝔽2𝑚 de
manera eficiente.
∙ EP 1 496 644 A2 - Method for signature and session key generation [41]: des-
cribe el protocolo de acuerdo de clave MQV, representando una continuación
de la patente EP 0 739 105 A1 (no incluida en este listado por ese motivo).
Capítulo 3
99
100 3. Capacidades criptográficas en Java
3.1.1. Encapsulación
La encapsulación consiste en la ocultación de variables y métodos de un objeto,
permitiendo su modificación sólo a través de determinados métodos “públicos”. Este
procedimiento conlleva los siguientes beneficios:
3.1.2. Herencia
La herencia es un concepto que relaciona clases de manera jerárquica. Esto per-
mite que los descendientes de una clase hereden todas las variables y métodos de sus
ascendientes, además de crear los suyos propios. A estos descendientes se les llama
subclases. Al padre inmediato de una clase se le denomina superclase. Una subclase
es una versión especializada de su superclase correspondiente que hereda todos sus
métodos y variables de instancia.
3.1.3. Polimorfismo
A los métodos que actúan sobre los objetos se les pasa información en forma
de parámetros en la llamada al método. Estos parámetros representan los valores
de entrada a cada función implementada por la aplicación. Para completar dos
tareas diferentes en la mayoría de los lenguajes de programación es necesario tener
dos funciones independientes con nombres diferentes. El polimorfismo (un objeto y
muchas formas) es un concepto simple que permite que un método tenga múltiples
implementaciones que se seleccionan en base al tipo de objeto que se le pasa en la
llamada al método, lo que se conoce como “sobrecarga del método”.
∙ Java Enterprise Edition (Java EE): esta edición constituye un conjunto amplia-
do respecto de la versión Standard, estando orientada a entornos empresariales.
∙ Java Micro Edition (Java ME): esta versión define un subconjunto extendido
de la edición Standard, especialmente diseñada para su utilización en teléfonos
móviles y PDAs (Personal Digital Assistant).
∙ Java Card (JC): es la versión específica del lenguaje Java para el mercado de
tarjetas inteligentes.
La Figura 3.1 muestra de manera gráfica las distintas ediciones del lenguaje Java.
∙ Operaciones aritméticas.
∙ Conversión de tipos.
∙ Lanzamiento de excepciones.
∙ SUN
∙ SunRsaSign
∙ SunJCE
∙ SunPKCS11
∙ SunJGSS
∙ SunSASL
∙ XMLDSig
∙ SunPCSC
∙ SunMSCAPI
∙ spec.ECField
∙ interfaces.ECKey
∙ interfaces.ECPublicKey
∙ interfaces.ECPrivateKey
y las clases
∙ spec.ECFieldF2m
∙ spec.ECFieldFp
∙ spec.ECGenParameterSpec
∙ spec.ECParameterSpec
∙ spec.ECPoint
∙ spec.ECPrivateKeySpec
∙ spec.ECPublicKeySpec
∙ spec.EllipticCurve
108 3. Capacidades criptográficas en Java
Además, se definieron los nombres estándar que podían ser utilizados en las
llamadas a las clases, tal como se indica a continuación:
∙ Cipher: ECIES.
∙ KeyPairGenerator: EC.
∙ KeyFactory: EC.
∙ KeyAgreement: ECDH, ECMQV.
∙ Signature: NONEwithECDSA, SHA1withECDSA, SHA256withECDSA, SHA-
384withECDSA y SHA512withECDSA.
Con estos elementos, aunque los motores criptográficos de Sun no incluyan im-
plementaciones de ECC, las aplicaciones que deseen utilizar funcionalidades de crip-
tografía de curva elíptica al menos pueden hacer uso de bibliotecas criptográficas
interoperables y adaptadas a la arquitectura JCA/JCE que hayan sido desarrolla-
das por terceras empresas.
∙ Botan (botan.randombit.net)
∙ Bouncy Castle (www.bouncycastle.org)
∙ Cryptix (www.cryptix.org)
∙ Cryptlib (www.cryptlib.com)
∙ Crypto++ (sourceforge.net/projects/cryptopp)
∙ IAIK (jce.iaik.tugraz.at)
∙ libecc (libecc.sourceforge.net)
∙ FlexiProvider (www.flexiprovider.de)
3.3.1. Cryptix
Cryptix [56] fue la primera biblioteca criptográfica de código libre para el desarro-
llo de aplicaciones Java. Entre los subproyectos gestionados en el ámbito de Cryptix
destacan un proveedor JCE para JDK 1.1.x, 1.2, 1.3 y 1.4 (Cryptix JCE), una im-
plementación Java del estándar OpenPGP (Cryptix OpenPGP) y un paquete para
la utilización de criptografía de curva elíptica (Cryptix Elliptix).
Sin actividad desde 2005, en su propia página web se indica que el proyecto se
encuentra abandonado. Sin embargo, a efectos comparativos con otras distribuciones
resulta interesante conocer el grado de desarrollo del paquete Cryptix Elliptix. Su
objetivo era poder proporcionar una implementación Java de los estándares IEEE
1363 [108], ANSI X9.62 [15] y X9.63 [16]. En la última versión proporcionada, el
paquete incluía soporte para aritmética tanto sobre 𝔽𝑝 (con coordenadas proyectivas)
como sobre 𝔽2𝑚 (con coordenadas afines sobre base polinómica). Sin embargo, no
proporcionaba soporte para la generación de los parámetros de la curva. Asimismo,
las operaciones de alto nivel (por ejemplo, la firma digital y la verificación de dichas
firmas) tampoco estaban disponibles en dicha versión.
∙ Una API independiente (lo que Bouncy Castle denomina light-weight) de bajo
nivel que puede ser utilizada en cualquier entorno (desde Java ME hasta Java
SE 6) sin necesidad de compatibilidad con la arquitectura JCE.
3.3.3. IAIK
El Institut für Angewandte Informationsverarbeitung und Kommunikationstech-
nologie (Institute for Applied Information Processing and Communications) de la
Universidad de Graz [260] ha desarrollado un conjunto de herramientas criptográfi-
cas escritas en Java, cuyos principales exponentes son IAIK-JCE (módulo principal
con los algoritmos RSA, DES, AES, Blowfish, etc., y cuya versión más reciente es la
3.18, lanzada en agosto de 2009), IAIK-iSaSiLk (implementación Java de TLS 1.0 y
SSL 3.0, cuya versión 4.4 está disponible desde febrero de 2010) e IAIK-ECC (cuya
versión 2.19 fue lanzada en agosto de 2009).
3.3. Bibliotecas criptográficas 111
∙ Es compatible con los estándares IEEE 1363 [108] y ANSI X9.62 [15].
3.3.4. FlexiProvider
∙ Java Card API: define los paquetes Java tanto del núcleo como de las exten-
siones disponibles para las tarjetas inteligentes.
∙ Java Card Runtime Environment (Java Card RE): define el comportamiento
en tiempo de ejecución de los applets.
∙ Java Card Virtual Machine (JCVM): define un subconjunto del lenguaje Java
y una máquina virtual para las tarjetas inteligentes.
∙ java.lang
Este paquete representa el pilar fundamental del lenguaje Java, con sopor-
te para algunas de sus clases básicas. En Java Card, este paquete constituye
un subconjunto del paquete java.lang de Java Standard Edition, donde sólo
están permitidas algunas clases como Object (la raíz de todas las clases Ja-
va) o Throwable (la clase base para todas las excepciones), y dentro de ellas
únicamente se encuentran disponibles algunos métodos.
∙ java.io
Se trata de un subconjunto del paquete java.io de la edición Standard que
contiene como única clase java.io.IOException, la cual es la superclase de
java.rmi.RemoteException. Su presencia es necesaria para mantener una
jerarquía de excepciones idéntica a la de la versión Standard.
∙ java.rmi
Incluye las clases básicas para la funcionalidad JCRMI.
∙ javacard.framework
Representa el conjunto de clases e interfaces que conforman el núcleo de la
funcionalidad de un applet Java Card. Por ejemplo, incluye la clase Applet
que es básica para la ejecución e interacción de un applet con el JCRE, o
la clase APDU utilizada para la comunicación con la tarjeta inteligente con
independencia del protocolo físico empleado.
∙ javacard.framework.service
Proporciona un entorno de clases e interfaces que permiten a los applet Java
Card ser incluidos en un registro de manera que posteriormente se puedan re-
enviar las APDU entrantes a las aplicaciones registradas. También incluye una
interfaz que incluye métodos para procesar los comandos APDU de múltiples
servicios.
∙ javacard.security
Su diseño se basa en el paquete java.security de Java SE e incluye las clases
e interfaces que dan soporte a algunas de las funcionalidades criptográficas de
las tarjetas Java Card, por ejemplo las relacionadas con generación de números
aleatorios, resúmenes y firmas digitales.
∙ javacardx.apdu
Se trata del primer paquete de extensión del API Java Card. Los paquetes de
extensión son fácilmente identificables por comenzar siempre por el término
javacardx. En concreto, este API permite la comunicación con la tarjeta
mediante APDU según el formato definido en las normas ISO/IEC 7816.
116 3. Capacidades criptográficas en Java
∙ javacardx.biometry
Esta interfaz contiene la funcionalidad necesaria para implementar capacidades
biométricas en Java Card.
∙ javacardx.crypto
Se trata de un paquete de extensión que incluye las funcionalidades crip-
tográficas para el cifrado y descifrado de datos, funcionalidades que pue-
den estar sujetas a controles de exportación. Tanto este paquete como el
javacard.security definen las interfaces que los applet utilizarán, pero no
proporcionan ninguna implementación, que debe ser desarrollada por el pro-
veedor de la JCRE (quien, habitualmente es el propio fabricante de la tarjeta).
Los elementos fundamentales de este paquete son la clase Cipher, que propor-
ciona métodos para cifrar y descifrar mensajes, y la interfaz KeyEncryption
que define los métodos para permitir el acceso a la implementación de una
clave determinada.
∙ javacardx.external
Este paquete permite el acceso a subsistemas de memoria que no son directa-
mente gestionables por el entorno de ejecución de las tarjetas Java Card. Se
compone principalmente de la clase Memory y la interfaz MemoryAccess.
∙ javacardx.framework
Este paquete opcional incluye las clases e interfaces para la implementación
eficiente de applets Java. Si el paquete está presente, también deben estarlo
los subpaquetes math, tlv y util.
∙ javacardx.framework.math
Este paquete contiene funcionalidad común para la utilización de aritmética
BCD (Binary-Coded Decimal) y el cálculo de paridades.
∙ javacardx.framework.tlv
Paquete para la gestión de datos con formato BER TLV basados en las reglas
de codificación ASN.1 BER del estándar ISO/IEC 8825-1 [127], incluyendo la
edición y procesamiento de objetos BER TLV en los buffers de entrada/salida.
∙ javacardx.framework.util
Se trata de una API que contiene utilidades para la gestión de arrays de
componentes de tipo byte, short o int.
∙ javacardx.framework.util.intx
Este paquete incluye la clase JCint, equivalente en su definición a la clase
javacard.framework.Util, pero con el objetivo de utilizar datos de tipo int.
3.4. Java Card 117
Cada applet que pueda residir en una tarjeta Java Card queda unívocamente
identificado por su Application ID (AID). Tal como queda definido en la norma
ISO/IEC 7816-5 [117], un AID es una secuencia de entre 5 y 16 bytes que sirve para
la selección directa de aplicaciones.
Para adaptarse a las especificaciones Java Card, todos los applets deben exten-
der la clase abstracta Applet, que define los métodos utilizados por el JCRE para
controlar el ciclo de vida de un applet, tal como puede apreciarse en la Figura 3.4.
Figura 3.4: Métodos para la gestión del ciclo de vida de un applet Java Card
Java Card utiliza el concepto de canal lógico para permitir varias sesiones simul-
táneas, con un límite fijo de una sesión por canal lógico. Puesto que el procesamiento
de una APDU no puede ser interrumpido, y cada APDU contiene en su byte CLA
una referencia al canal lógico a utilizar, sucesivas APDU pueden comunicarse con
un número distinto de applets, permitiendo la ilusión de la ejecución simultánea de
distintos applets, cuando en realidad en un momento dado sólo un applet está siendo
ejecutado.
El número de canales lógicos soportados en Java Card ha aumentado con el paso
del tiempo. Mientras que en las versiones Java Card 2.1.x los comandos sólo podían
ser procesados por un único applet, Java Card 2.2 y 2.2.1 permitían utilizar un
máximo de cuatro canales lógicos, número que se ha incrementado hasta veinte en
Java Card 2.2.2 y se ha mantenido en Java Card 3.0.
Algunas tarjetas Java Card permiten que exista un applet que sea seleccionado
de forma automática a través del canal 0 cada vez que la tarjeta recibe alimentación.
Éste es el caso de las tarjetas Java Card utilizadas en telefonía móvil, donde la apli-
cación SIM es seleccionada automáticamente, de manera que los teléfonos móviles
no necesitan realizar la selección de dicha aplicación. La documentación, sin embar-
go, no detalla cómo especificar estos applets por defecto, por lo que los mecanismos
utilizados hasta el momento se basan en procedimientos propietarios dependientes
de cada fabricante.
120 3. Capacidades criptográficas en Java
∙ Ejecución multihilo
A diferencia de Java SE, Java Card no permite múltiples hilos de ejecución.
Por dicho motivo, los applets Java Card no pueden utilizar la clase Thread ni
ninguno de los términos relacionados con la ejecución multihilo.
∙ Clonado
Java Card no permite el clonado de objetos, por lo que la clase Object no
implementa el método clone, ni proporciona un interfaz Cloneable que pueda
ser utilizado por las aplicaciones.
3.4.6.1. javacard.security
3.4.6.2. javacardx.crypto
Java Card 2.2 fue la primera versión en incluir soporte para criptografía de curva
elíptica. En concreto, en dicha versión se definieron los siguientes elementos:
Las versiones Java Card 2.2.1 y 2.2.2 no introdujeron ninguna novedad en re-
lación a la criptografía de curvas elípticas. En cambio, la versión Java Card 3.0 sí
presenta algunas novedades en cuanto al soporte ECC, tal como se detalla a conti-
nuación:
∙ Mientras que las longitudes permitidas para los cuerpos binarios continúan
siendo 113, 131, 163 y 193 bits, en los cuerpos primos es posible elegir como
longitud 112, 128, 160, 192, 224, 256 y 384 bits.
exportación con extensión .exp que contiene información sobre la interfaz pública
de todas las clases del paquete.
La Figura 3.8 muestra de forma gráfica el proceso completo de desarrollo de un
applet Java Card.
Capítulo 4
129
130 4. Estudio y análisis del esquema de cifrado ECIES
pares ordenados del producto cartesiano 𝔽∗𝑞 × 𝔽∗𝑞 , donde 𝔽∗𝑞 = 𝔽𝑞 ∖ {0} (los pares
ordenados no tienen que ser necesariamente puntos de la curva). De esta manera, era
posible dividir cualquier mensaje en claro en bloques, donde cada bloque pudiera ser
codificado fácilmente en un par ordenado (por ejemplo, utilizando una codificación
similar a la empleada en los ejemplos de §2.4.2.2 y §2.4.3.2). Como contraparti-
da negativa, en lugar de transformar cada mensaje en un único punto de la curva
(independientemente de cuál fuera el mensaje, como ocurría con las versiones de
Massey-Omura y ElGamal), la longitud del mensaje cifrado depende de la longitud
del mensaje en claro.
El Algoritmo 4.3 muestra de forma resumida los pasos necesarios para completar
los procesos de cifrado y descifrado de un mensaje representado como el elemento
𝑥 = (𝑥1 , 𝑥2 ) ∈ 𝔽∗𝑞 × 𝔽∗𝑞 utilizando el criptosistema Menezes-Vanstone con curvas
elípticas. En la notación empleada, el punto 𝐺 tiene orden 𝑛 y es un generador de
un subgrupo cíclico de 𝐸, mientras que como es habitual 𝑣 y 𝑉 = 𝑣 𝐺 representan
respectivamente la clave privada y pública del usuario V.
Como puede apreciarse en el Cuadro 4.1, las principales diferencias entre los
esquemas ECIES, PSEC y ACE son las siguientes:
∙ Tanto en ECIES como en PSEC, la clave pública del receptor del criptograma
es el punto de la curva 𝑉 = 𝑣 𝐺, mientras que en ACE la clave pública está
formada por cuatro puntos, de manera que 𝑉 = (𝑊, 𝑋, 𝑌, 𝑍).
∙ PSEC utiliza dos veces la función KDF, mientras que ECIES y ACE sólo la
utilizan una vez.
∙ Los criptogramas de ECIES están formados por tres elementos (el punto 𝑈 , el
mensaje cifrado 𝔠 y la etiqueta tag), mientras que los criptogramas de PSEC
añaden además el elemento 𝑠 y los de ACE incluyen dos puntos de la curva
elíptica (𝑃 y 𝑄).
Una vez presentado el esquema general del proceso de cifrado de los tres esque-
mas, y con el fin de seleccionar el más adecuado, es necesario evaluar tres aspectos
fundamentales: eficiencia, seguridad y adaptabilidad a las plataformas hardware de
trabajo.
Respecto al análisis de su eficiencia, los siguientes cuadros muestran datos to-
mados de [196]. En concreto, el Cuadro 4.2 muestra una comparativa del número de
operaciones necesarias para llevar a cabo el proceso de cifrado en los tres esquemas.
En él se puede comprobar que ECIES es el esquema que, de forma global, utiliza
menos operaciones.
Otro de los aspectos a tener en cuenta para evaluar la eficiencia de los tres es-
quemas de cifrado es su factor de expansión. El Cuadro 4.4 muestra las longitudes
en bytes de las claves públicas y privadas, así como del criptograma generado, con-
siderando que la longitud de los elementos del cuerpo, del mensaje a cifrar y de la
salida de la función resumen son, respectivamente, 20, 16 y 20 bytes, y habiendo
sido utilizada la técnica de compresión de puntos en la representación binaria de los
puntos de la curva.
En los siguientes apartados se presentan los elementos que ambos usuarios deben
acordar de manera previa, utilizando canales de información donde la privacidad no
es un factor importante, ya que la información a intercambiar no es crítica.
4.3. Componentes funcionales de ECIES 139
𝒫= (𝑝, 𝑎, 𝑏, 𝐺, 𝑛, ℎ),
∙ 𝑎 y 𝑏 son los elementos de 𝔽𝑝 que definen la curva 𝐸(𝔽𝑝 ) dada por la expresión
𝑦 2 = 𝑥3 + 𝑎𝑥 + 𝑏.
∙ 𝑎 y 𝑏 son los elementos de 𝔽2𝑚 que definen la curva 𝐸(𝔽2𝑚 ) dada por la
expresión 𝑦 2 + 𝑥𝑦 = 𝑥3 + 𝑎𝑥2 + 𝑏.
∙ WHIRLPOOL [131].
Para que los cálculos con cualquiera de las dos primitivas sean válidos, es nece-
sario comprobar que el punto de la curva generado, ya sea 𝑃 o 𝑃 ′ , es distinto del
punto en el infinito 𝒪.
∙ ANSI-X9.63-KDF [16].
∙ NIST-800-56-Concatenation-KDF [189].
∙ KDF1 [136].
∙ KDF2 [136].
∙ ANSI-X9.63-KDF.
Sea 𝑍 una cadena de bits que representa el secreto compartido, 𝐻 una función
resumen aprobada por ANSI, keydatalen un entero que representa la longitud
en bits de la clave a generar tal que keydatalen < hashlen⋅232 − 1, siendo
hashlen la longitud en bits del resultado de la función resumen empleada, y
SharedInfo una cadena de bits opcional que consiste en un dato compartido
de forma previa por emisor y receptor. Con estos elementos, la clave se genera
mediante el Algoritmo 4.4.
142 4. Estudio y análisis del esquema de cifrado ECIES
∙ NIST-800-56-Concatenation-KDF.
Se considera una cadena de bits 𝑍 que representa el secreto compartido, una
función resumen 𝐻, un entero keydatalen que representa la longitud en bits de
la clave a generar, y que debe ser menor o igual que el valor hashlen⋅232 −1, sien-
do hashlen la longitud en bits del resultado de la función resumen empleada,
y una cadena de bits opcional OtherInfo, que consiste en un dato compartido
de forma previa por emisor y receptor. Con estos elementos, la clave se genera
mediante el Algoritmo 4.5.
En cuanto al elemento OtherInfo de NIST-800-56-Concatenation-KDF, su es-
tructura es
OtherInfo=AlgID||UInfo||VInfo[||SuppPubInfo][||SuppPrivInfo],
AlgID: cadena de bits que informa sobre cómo obtener la clave y con qué
algoritmos será utilizada.
UInfo: cadena de bits con información pública sobre el emisor del mensaje
cifrado, incluyendo al menos un identificador de ese usuario.
VInfo: cadena de bits con información pública sobre el receptor del men-
saje cifrado, incluyendo al menos un identificador de ese usuario.
SuppPubInfo: cadena de bits opcional con información pública mutua-
mente conocida por el emisor y el receptor del criptograma.
4.3. Componentes funcionales de ECIES 143
Cada uno de esos cinco elementos debe tener una longitud fija, o en su defecto
adaptarse al formato Datalen||Data, donde Datalen debe tener una longitud
fija y se utilizará para informar de la longitud en bytes del elemento Data.
∙ KDF1.
La función KDF1 toma como entrada una cadena de bytes 𝑥 y un número
entero positivo 𝑙 que representa una longitud, generando como salida una ca-
dena de bytes distinta de la inicial y de longitud 𝑙 que se obtiene mediante el
Algoritmo 4.6.
∙ KDF2.
La función KDF2 es igual que KDF1, con la única diferencia de que el contador
recorre los números 1 a 𝑘 en lugar de recorrer el rango entre 0 y 𝑘 − 1, tal
como queda recogido en el Algoritmo 4.7.
144 4. Estudio y análisis del esquema de cifrado ECIES
4. Concatenar cada una de las cadenas resumen individuales para obtener como
resultado de la función el dato
4. Concatenar cada una de las cadenas resumen individuales para obtener como
resultado de la función el dato
∙ XOR.
Aunque los borradores del estándar ANSI X9.63 incluían dos esquemas de ci-
frado (Elliptic Curve Encryption Scheme y Elliptic Curve Augmented Encryption
Scheme), cuya diferencia consistía en que el segundo esquema utilizaba una fun-
ción MAC para generar una etiqueta (mientras que el primero no la utilizaba), en la
versión final del estándar [16] se describe una única versión con el nombre de ECIES.
Los datos que emisor y receptor necesitan acordar antes de comenzar el proceso
de cifrado son, utilizando la notación empleada por ANSI X9.63, los siguientes:
En ANSI X9.63, las funciones KDF, KA y ENC están descritas en el propio do-
cumento, siendo respectivamente las funciones ANSI-X9.63-KDF, DH/DHC y XOR.
Los demás elementos que intervienen en las operaciones son:
∙ 𝑄𝑒 : clave pública temporal del emisor, componente del par (𝑑𝑒 , 𝑄𝑒 ). Su repre-
sentación como cadena de bits es QE.
4. A partir del elemento KeyData, el emisor adoptará sus enckeylen bits más a
la izquierda como la clave de cifrado EncKey, y utilizará los mackeylen bits
más a la derecha como la clave MacKey a utilizar con la función MAC.
QE ||MaskedEncData||MacTag,
∙ Función HASH :
Cualquier función resumen aprobada por ANSI. El catálogo de estándares de
ANSI de 2010 [17] indica que dichas funciones son las siguientes:
SHA-1.
SHA-224.
SHA-256.
SHA-384.
SHA-512.
∙ Función KA:
DH.
DHC.
∙ Función KDF :
ANSI-X9.63-KDF.
∙ Función ENC :
∙ Función MAC :
Está permitida cualquier función MAC aprobada por ANSI que utilice claves
de al menos 80 bits y que genere salidas cuya longitud mínima sea igualmente
de 80 bits, citando el propio estándar como ejemplo la familia de funciones
HMAC, por lo que junto con la lista de funciones resumen permitidas por
ANSI se obtienen las siguientes opciones:
HMAC-SHA-1.
HMAC-SHA-224.
HMAC-SHA-256.
HMAC-SHA-384.
4.4. Versiones de ECIES 151
HMAC-SHA-512.
Como aclaración, aunque el documento X9.63 data del año 2001, en la lista de
funciones permitidas se han incluido algoritmos estandarizados en fecha posterior
(SHA-224, HMAC-SHA-224, etc.) puesto que, en lugar de citar específicamente en
algunos apartados los nombres de los algoritmos permitidos, el documento X9.63 se
limita a indicar que las funciones permitidas son aquellas aprobadas por ANSI, lo
que permite hábilmente la actualización del estándar sin que sea necesario publicar
nuevas versiones.
En IEEE 1363a, las funciones KDF y MAC son fijas y están descritas en el propio
documento. Aunque en su notación denominan a la función de derivación de claves
KDF2, en realidad se trata de la función ANSI-X9.63-KDF descrita en §4.3.4, y para
evitar confusiones con la función KDF2 del estándar ISO/IEC 18033-2, se utilizará
en este apartado el término ANSI-X9.63-KDF para referirse a ella. En cuanto a la
función MAC1 del documento, se trata de la construcción HMAC-Hash-x [154].
La notación empleada en [109] incluye los siguientes elementos:
∙ 𝑢: clave privada temporal del emisor, componente del par de claves (𝑢, 𝑣).
∙ 𝑣: clave pública temporal del emisor, componente del par de claves (𝑢, 𝑣).
En este estándar, tanto la cadena 𝑃1 como 𝑃2 pueden estar vacías, por lo que
realmente su uso es opcional.
4.4. Versiones de ECIES 153
∙ Función HASH :
SHA-1.
SHA-256.
SHA-384.
SHA-512.
RIPEMD-160.
∙ Función KA:
∙ Función KDF :
∙ Función ENC :
∙ Función MAC :
El estándar define la función MAC1, equivalente a las funciones de tipo HMAC,
donde las funciones resumen permitidas son las del propio documento [109],
obteniendo por tanto como lista de funciones MAC permitidas las siguientes:
HMAC-SHA-1.
HMAC-SHA-256.
HMAC-SHA-384.
HMAC-SHA-512.
HMAC-RIPEMD-160.
Los datos que los usuarios emisor y receptor necesitan acordar antes de comenzar
el proceso de cifrado son los siguientes, donde se ha mantenido la notación utilizada
por ISO/IEC 18033-2 [136]:
∙ Utilización del modo OldCofactorMode, que implica el uso del cofactor tanto
en la fase de cifrado como de descifrado.
156 4. Estudio y análisis del esquema de cifrado ECIES
∙ Utilización del modo CofactorMode, que requiere del uso del cofactor única-
mente en el proceso de descifrado.
∙ (𝑥, ℎ): par formado por las claves privada y pública del receptor.
∙ (𝑟, 𝑔˜): par formado por una clave privada y una clave pública temporales ge-
neradas por el emisor.
∙ PEH : primera coordenada del punto que actúa como valor secreto compartido.
4.4. Versiones de ECIES 157
4. Una vez obtenidos los puntos 𝑔˜ y ℎ̃, el emisor obtendrá la codificación he-
xadecimal 𝐶0 correspondiente a la clave pública temporal 𝑔˜ en función del
formato de codificación elegido (comprimido o sin comprimir).
Algoritmo 4.12 Función DEM1 de la fase DEM del cifrado ECIES en ISO/IEC
18033-2
1. El emisor debe comenzar dividiendo el elemento 𝐾 en 𝑘∣∣𝑘 ′ , donde 𝑘 actuará
como clave para el algoritmo de cifrado simétrico, con longitud SC.KeyLen,
y 𝑘 ′ será la clave de la función MAC, con longitud MA.KeyLen.
Algoritmo 4.13 Función DEM2 de la fase DEM del cifrado ECIES en ISO/IEC
18033-2
1. El emisor debe interpretar el elemento 𝐾 como 𝑘∣∣𝑘 ′ , donde 𝑘 actuará como
clave para el algoritmo de cifrado simétrico, con longitud SC.KeyLen, y 𝑘 ′
será la clave de la función MAC, con longitud MA.KeyLen.
Algoritmo 4.14 Función DEM3 de la fase DEM del cifrado ECIES en ISO/IEC
18033-2
1. El emisor debe dividir el elemento 𝐾 en 𝑘∣∣𝑘 ′ , donde 𝑘 actuará como clave
para el algoritmo de cifrado de flujo (y por lo tanto su longitud debe coincidir
con la longitud del mensaje a cifrar), y 𝑘 ′ será la clave de la función MAC,
con longitud MA.KeyLen.
∙ Función HASH :
Cualquiera de las las funciones resumen definidas en ISO/IEC 10118-2 [130]
que utilizan internamente una función de cifrado de bloques con la condición
de que el número de bytes ofrecidos como salida de la función sea múltiplo de
8. Los nombres asignado por [130] a las funciones son los siguientes:
Hash-function one.
Hash-function two.
Hash-function three.
Hash-function four.
SHA-1.
SHA-256.
SHA-384.
SHA-512.
RIPEMD-128.
RIPEMD-160.
WHIRLPOOL.
160 4. Estudio y análisis del esquema de cifrado ECIES
∙ Función KA:
DH.
DHC.
∙ Función KDF :
KDF1.
KDF2.
∙ Función ENC :
∙ Función MAC :
Cualquiera de las cuatro variantes CBC-MAC incluidas en ISO/IEC 9797-1
[128] que utilizan internamente una función de cifrado de bloques, denominadas
en [128] de la siguiente manera:
4.4. Versiones de ECIES 161
MAC Algorithm 1.
MAC Algorithm 2.
MAC Algorithm 3.
MAC Algorithm 4.
Cualquiera de las tres variantes incluidas en ISO/IEC 9797-2 [129] que utilizan
internamente una de las funciones resumen referidas en ISO/IEC 10118-3 [131]:
Los datos que los usuarios, identificados como emisor y receptor, necesitan acor-
dar antes de comenzar el proceso de cifrado son los siguientes, donde se ha mantenido
la notación utilizada por SEC 1:
∙ Función de derivación de clave KDF, que genera una cadena de bytes de lon-
gitud enckeylen+mackeylen.
∙ (𝑘, 𝑅): par formado por una clave privada y una clave pública temporales
generadas por el emisor.
∙ SharedInfo1 : cadena de bytes con información compartida por los dos usuarios,
y que será utilizada en la función KDF.
2. Dependiendo del tipo de compresión que los usuarios hayan decidido utilizar
para representar los puntos de la curva elíptica, es necesario convertir el
punto 𝑅 en la cadena de bytes 𝑅.
4. El emisor utilizará la función KDF acordada con el otro usuario para generar
a partir de 𝑍 (y opcionalmente también del valor SharedInfo1 ) un dato 𝐾
cuya longitud será enckeylen+mackeylen.
𝐶 = 𝑅∣∣EM ∣∣𝐷.
164 4. Estudio y análisis del esquema de cifrado ECIES
∙ Función HASH :
SHA-1.
SHA-224.
SHA-256.
SHA-384.
SHA-512.
∙ Función KA:
DH.
DHC.
∙ Función KDF :
ANSI-X9.63-KDF [16].
NIST-800-56-Concatenation-KDF [189].
∙ Función ENC :
∙ Función MAC :
∙ 1363a establece como longitud mínima del orden del elemento generador 160
bits, mientras que 18033-2 no hace referencia a longitudes mínimas.
Es interesante comentar que, entre el estándar IEEE 1363a y los primeros borra-
dores de ISO/IEC 18033-2, existían más diferencias, como se puede apreciar en el
documento de Shoup [243], que denotaremos por ‘Shoup01’, y que sirvió como punto
de partida para el estándar ISO/IEC 18033-2. Esas diferencias, que posteriormente
desaparecieron en la versión final del estándar con el fin de asegurar una mayor
compatibilidad con otros estándares, son las siguientes:
y KDF2 son las funciones especificadas en ISO/IEC 18033-2 [136] y el término NIST-
800-56 representa la función definida en el documento NIST SP800-56A [189]. Es
importante indicar que, si la función X9.63-KDF no incluye el elemento SharedInfo,
entonces es equivalente a la función KDF2.
Por último, el Cuadro 4.9 presenta las funciones MAC permitidas en los dife-
rentes estándares, donde con el objetivo de optimizar el tamaño del cuadro re-
sultante se ha sustituido el prefijo HMAC por H. Las funciones HMAC-SHA-1 y
170 4. Estudio y análisis del esquema de cifrado ECIES
Como resumen final, el Cuadro 4.10 muestra las funciones permitidas simultá-
neamente por los cuatro estándares revisados.
Opciones de configuración
Arg. KDF Interp. K Alg. simétrico Arg. MAC
C01 𝑥𝑃 𝑘𝐸𝑁 𝐶 ∣∣𝑘𝑀 𝐴𝐶 Flujo 𝔠
C02 𝑥𝑃 𝑘𝐸𝑁 𝐶 ∣∣𝑘𝑀 𝐴𝐶 Flujo 𝔠, Param 2
Id. de configuración
Una vez presentadas las personalizaciones de ECIES que son aceptadas al menos
en un estándar, el Cuadro 4.12 muestra el resumen de los estándares que permiten
cada una de las configuraciones.
172 4. Estudio y análisis del esquema de cifrado ECIES
Identificador de personalización
C01 C02 C03 C04 C05 C06 C07 C08 C09 C10 C11
X9.63 ✓ ✓
1363a ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓
18033-2 ✓ ✓ ✓ ✓ ✓ ✓
SEC 1 ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓
Cuadro 4.12: Comparativa de las configuraciones permitidas en cada estándar
Algoritmo 4.16 Cifrado ECIES compatible con los cuatro estándares (ECIES-4)
1. Elegir un valor aleatorio 𝑢 ∈ {1, 2, . . . , 𝑞 − 1} como clave privada temporal
de U, y generar la clave pública 𝑈 = 𝑢 𝐺.
6. Calcular la etiqueta tag utilizando el método tag = MAC (𝔠), donde la fun-
ción MAC elegida es HMAC-SHA-1 con salida de 160 bits.
Una posible forma de resolver este problema fue propuesta por el propio Shoup,
y consiste en añadir la clave pública temporal 𝑈 como entrada de la función KDF,
con lo que el criptograma (−𝑈 , 𝔠, 𝑡𝑎𝑔) ya no sería válido, dado que la salida de la
función KDF sería diferente en ambos casos.
Otra posible solución consiste en utilizar el punto 𝑃 generado mediante la función
KA en lugar de únicamente su primera coordenada como entrada de la función
KDF, con lo que de nuevo dejaría de ser válido un criptograma que contuviera −𝑈
en lugar de 𝑈 . Respecto a la solución mencionada anteriormente, algunos autores
como Jacques Stern [256] indican la validez y equivalencia desde el punto de vista
de seguridad de ambas opciones. Sin embargo, a pesar de estar recogida esta opción
en algunas obras [30], en los cuatro estándares estudiados la segunda opción no es
utilizada.
Independientemente de la vulnerabilidad reseñada, Shoup indicó que, en caso de
utilizar la función Diffie-Hellman con cofactor, es igualmente posible crear un ataque
que afecte a la maleabilidad del esquema, puesto que si al punto 𝑈 se le añade un
elemento distinto de 𝒪 cuyo orden divida el cofactor ℎ, entonces de nuevo a partir
de un criptograma válido sería posible generar otro criptograma igualmente válido.
La solución más sencilla para este problema consiste en utilizar la función DH sin
emplear el cofactor.
Shoup caracterizó estos problemas como maleabilidad benigna, dando a entender
que no representan un peligro demasiado importante, ya que hasta la fecha no se
ha demostrado que este ataque sirva para obtener ningún resultado práctico. Sin
embargo, desde el punto de vista formal, si se desea que el esquema ECIES sea no
maleable, es necesario solucionar estos problemas.
(𝑈 , 𝔠,tag),
ˆ
(𝑈 , ˆ𝔠, tag)
Para mayor claridad, la Figura 4.4 muestra las relaciones existentes entre los
diversos datos de ambos criptogramas. Para solucionar este problema es posible
emplear distintas soluciones:
1. Forzar una longitud fija en el caso de utilización de la función XOR [109, 136,
243].
∙ Utilizar la clave pública temporal del emisor como entrada de la función KDF.
Aunque algunos autores como Shoup [243] consideran que es fundamental para
la seguridad de ECIES mantener las mismas funciones KDF, ENC y MAC durante
el ciclo de vida de un par de claves determinado, y en algunos estándares como IEEE
1363a esté recomendada esta forma de proceder, en la práctica no existe consenso
[224] sobre el riesgo real que implicaría el cambio de parámetros y funciones durante
el ciclo de vida de unas claves dadas.
Por otra parte, puesto que seguir la recomendación de Shoup no parece tener
ningún efecto negativo, la prudencia sugiere en este caso imponer como requisito
que ni las funciones ni los parámetros puedan ser modificados durante el ciclo de
vida de un par de claves. Esto significa que, en la fase inicial de acuerdo de opciones
de los usuarios legítimos, éstos deben realizar las comprobaciones adecuadas para
asegurar que, para un par de claves específico, solamente se utilizará un conjunto de
parámetros a lo largo del ciclo de vida de esas claves.
sibles variantes compatibles con las configuraciones C05 y C06 definidas por IEEE
1363a, ISO/IEC 18033-2 y SECG SEC 1. ECIES-3 incluye los elementos necesarios
para resistir cualquiera de los ataques contra ECIES conocidos y descritos en §4.9,
utilizando funciones que aseguren una correcta eficiencia y estén disponibles en las
librerías criptográfica actuales.
Algoritmo 4.17 Cifrado ECIES compatible con los cuatro estándares (ECIES-3)
1. Elegir un valor aleatorio 𝑢 ∈ {1, 2, . . . , 𝑞 − 1} como clave privada temporal
de U, y generar la clave pública 𝑈 = 𝑢 𝐺.
Implementación de ECIES en
entorno PC
181
182 5. Implementación de ECIES en entorno PC
5.1.1. Cifrado
a) 𝐾 = KDF (𝑥𝑃 ).
c) 𝐾 = KDF (𝑈 ∣∣𝑥𝑃 ).
a) 𝑘𝐸𝑁 𝐶 ∣∣𝑘𝑀 𝐴𝐶 .
b) 𝑘𝑀 𝐴𝐶 ∣∣𝑘𝐸𝑁 𝐶 .
5.1.2. Descifrado
a) 𝐾 = KDF (𝑥𝑄 ).
c) 𝐾 = KDF (𝑈 ∣∣𝑥𝑄 ).
a) 𝑘𝐸𝑁 𝐶 ∣∣𝑘𝑀 𝐴𝐶 .
b) 𝑘𝑀 𝐴𝐶 ∣∣𝑘𝐸𝑁 𝐶 .
∙ Multiplicación: 𝑎 ⋅ 𝑏.
∙ Inversión: 𝑎−1 .
∙ Elevación al cuadrado: 𝑎2 .
Tal como se indicó en §2.6.3.3, la suma de los puntos 𝑃 y 𝑄 realizada con coorde-
nadas afines requiere 1 inversión, 2 multiplicaciones y 1 elevación al cuadrado tanto
en 𝔽𝑝 como en 𝔽2𝑚 , mientras que para obtener el punto 2 𝑃 a partir de 𝑃 igual-
mente con coordenadas afines es necesario realizar 1 inversión, 2 multiplicaciones y
2 elevaciones al cuadrado al utilizar la fórmula para 𝔽𝑝 y una elevación al cuadrado
menos si se emplea la fórmula para 𝔽2𝑚 .
Existen otros sistemas de coordenadas que utilizan coordenadas proyectivas y
ecuaciones homogéneas de las curvas (coordenadas proyectivas estándar, Jacobianas,
López-Dahab, mixtas, etc.) [50, 99]. Estos sistemas implementan la aritmética de
puntos de manera más eficiente, dado que en los cálculos con coordenadas proyectivas
no es necesario realizar operaciones de inversión, que son las más costosas desde un
punto de vista computacional (aunque es cierto que, a cambio, en estos sistemas
crece el número de multiplicaciones y elevaciones al cuadrado). Sin embargo, en
esta Tesis se han utilizado exclusivamente las fórmulas con coordenadas afines en la
implementación de la aritmética de puntos. Los motivos para esta decisión son los
siguientes:
∙ Constantes
Interfaz que incluye algunas constantes utilizadas por las demás clases del
programa.
∙ Curva
La clase abstracta Curva define los métodos que serán implementados por las
clases CurvaFp y CurvaF2m, y que contienen la lógica para crear y utilizar
curvas elípticas definidas sobre un cuerpo finito.
∙ CurvaF2m
La clase CurvaF2m incluye la implementación adaptada a los cuerpos finitos
binarios de los métodos definidos por la clase abstracta Curva.
∙ CurvaFp
La clase CurvaFp incluye la implementación adaptada a los cuerpos finitos
primos de los métodos definidos por la clase abstracta Curva.
∙ ECIES
ECIES es la clase principal de la aplicación, y por ello contiene el método main.
Desde ECIES se realizan las invocaciones a las demás clases del paquete, siendo
responsable además de generar la interfaz gráfica y gestionar el procesamiento
provocado por las acciones del usuario.
∙ ElementoCuerpo
5.2. Diagrama de clases 187
∙ JDialogDescompresión
La clase JDialogDescompresión implementa la funcionalidad ofrecida por la
ventana emergente del submenú Descompresión de puntos, descrito en §5.3.7.3.
∙ JDialogFicheros
La clase JDialogFicheros representa la ventana emergente utilizada por el
submenú Crear ficheros con claves, cuya funcionalidad está descrita en §5.3.7.1.
∙ JDialogGenerarClave
La clase JDialogGenerarClave implementa la lógica utilizada por la ventana
emergente del submenú Clave aleatoria, descrito en §5.3.7.2.
∙ Punto
La clase abstracta Punto define los métodos que serán implementados por las
clases PuntoFp y PuntoF2m, y que contienen la lógica para crear puntos de una
curva elíptica definida sobre un cuerpo finito y operar con ellos.
∙ PuntoF2m
La clase PuntoF2m incluye la implementación adaptada a los cuerpos finitos
binarios de los métodos definidos por la clase abstracta Punto.
∙ PuntoFp
La clase PuntoFp incluye la implementación adaptada a los cuerpos finitos
primos de los métodos definidos por la clase abstracta Punto.
∙ Utilidades
La clase Utilidades incluye los métodos para realizar conversiones entre ele-
mentos de tipo array de bytes, BigInteger y las cadenas de texto que repre-
sentan un contenido hexadecimal o decimal. De manera adicional, esta clase
incluye las funciones para generar y convertir texto en los formatos ASCII y
Base64.
tal como muestra la Figura 5.3. En ella pueden observarse las tres zonas principales
en que se divide la pantalla, y que se corresponden con las áreas delimitadas mediante
un recuadro rojo, azul y verde respectivamente en la Figura 5.3.
∙ Barra del menú principal: proporciona acceso a todos los menús y opciones
del programa. Los elementos que se encuentran disponibles en el modo sencillo
cuando se inicia la ejecución son Programa, Modo, Curvas, Utilidades y Cuerpo
GF(𝑝), mientras que si se utiliza el modo avanzado entonces también estarán
disponibles los elementos Perfiles y Test.
La opción Aspecto (ver Figura 5.4) permite adaptar las características de todos
los elementos de la aplicación (textos, iconos, colores, etc.) a las de los temas grá-
ficos disponibles en Java. Las posibilidades existentes en la versión Java SE 6 para
plataformas PC son:
∙ Windows Clásico: tema gráfico muy similar al anterior pero con un aspecto
más clásico.
192 5. Implementación de ECIES en entorno PC
La opción Ayuda (ver Figura 5.4) permite acceder a una ventana en la que se
presenta la ayuda del programa en formato HTML, tal como puede apreciarse en la
Figura 5.7.
194 5. Implementación de ECIES en entorno PC
La opción Acerca de (ver Figura 5.4) muestra información general sobre la versión
del programa y los responsables del desarrollo, tal como aparece en la Figura 5.8.
La opción Salir (ver Figura 5.4), al igual que el icono situado en la esquina su-
perior derecha en todas las aplicaciones Windows, permite abandonar la aplicación.
Sin embargo, en previsión de la activación accidental de esta opción, antes de
abandonar el programa se mostrará al usuario una pantalla de confirmación, tal
como queda reflejado en la Figura 5.9.
El menú Modo permite seleccionar el modo de uso sencillo o avanzado, tal como
se detalla en los siguientes apartados.
5.3. Descripción funcional de la aplicación 195
El modo sencillo (Figura 5.10) utiliza una parametrización fija del esquema
ECIES, correspondiente a la versión ECIES-3, que consiste en los siguientes ele-
mentos:
∙ Función KDF.
∙ Función MAC.
El submenú ISO/IEC (Figura 5.13) incluye los tests C.2.2 y C.2.3 recogidos en
ISO/IEC 18033-2 [136].
El submenú SECG (Figura 5.14) incluye los tests GEC2-3.1 y GEC2-3.2 recogi-
dos en el documento SECG GEC 2 [253].
202 5. Implementación de ECIES en entorno PC
El submenú ANSI (Figura 5.15) incluye las siguientes curvas definidas sobre
cuerpos primos y binarios en el documento ANSI X9.62 [15]:
∙ Primera cadena de dígitos: expresa el tamaño en bits del cuerpo sobre el que
está definida la curva.
∙ Dígito final: permite diferenciar curvas donde el resto de los parámetros utili-
zados por esta notación coinciden.
Es importante resaltar que las curvas publicadas en la versión de 2005 del es-
tándar X9.62 no coinciden con las incluidas en la edición de 1998, puesto que tal
como se describe en [15], algunas se eliminaron por no ser consideradas seguras a
la vista de los últimos avanzas en criptoanálisis (c2pnb176w1, c2pnb163v3, etc.).
De manera adicional, la edición de 2005 cambió los identificadores de las restantes
curvas (por ejemplo, la curva ansix9p192r1 de la edición de 2005 es la misma que la
curva prime192v1 de la edición de 1998).
204 5. Implementación de ECIES en entorno PC
El submenú Brainpool (Figura 5.16) incluye las siguientes curvas definidas sobre
cuerpos primos, tal como aparecen recogidas en la página web del grupo de trabajo
Brainpool [33]:
El submenú NIST (Figura 5.17) incluye las siguientes curvas definidas sobre
cuerpos primos y binarios en el documento FIPS 186-3 [184]:
∙ K : indica que se trata de una curva de Koblitz (definida sobre cuerpos bina-
rios).
∙ Cadena de dígitos: expresa el tamaño en bits del cuerpo sobre el que está
definida la curva.
El submenú SECG (Figura 5.18) incluye las siguientes curvas definidas sobre
cuerpos primos y binarios en el documento SEC 2 [255]:
∙ Primera cadena de dígitos: expresa el tamaño en bits del cuerpo sobre el que
está definida la curva.
5.3. Descripción funcional de la aplicación 207
∙ k : informa que se trata de una curva de Koblitz (definida sobre cuerpos bina-
rios).
∙ Dígito final: permite identificar diferentes curvas donde el resto de los pará-
metros utilizados por esta notación coinciden.
La opción Crear ficheros con claves (ver Figura 5.19) permite generar un par de
claves utilizando la información de las curvas estándares referidas en §5.3.6, alma-
cenando la información resultante en un fichero con extensión .pri que contiene la
clave privada y un fichero con extensión .pub que alberga la clave pública.
∙ Nombre de fichero (obligatorio): los dos ficheros a generar, tanto el que contiene
la clave pública como el utilizado para almacenar la clave privada, comparti-
rán el mismo nombre de fichero, diferenciándose en la extensión (.pub y .pri,
respectivamente).
deseado.
4. Concatenar esos tres dígitos con los obtenidos en las anteriores iteraciones,
formando una cadena final de dieciocho dígitos.
<Vy>7B492D22D7872C4CCAB5B58620CC</Vy>
</param>
</parámetros>
Continuando con el mismo ejemplo, el fichero .pri que contiene la clave privada
del usuario anterior tendría el siguiente contenido:
</clave>
<info>Clave de Luis</info>
<m>71</m>
<k3></k3>
<k2></k2>
<k1>09</k1>
<a>3088250CA6E7C7FE649CE85820F7</a>
<b>E8BEE4D3E2260744188BE0E9C723</b>
<Gx>9D73616F35F4AB1407D73562C10F</Gx>
<Gy>A52830277958EE84D1315ED31886</Gy>
<n>0100000000000000D9CCEC8A39E56F</n>
<Vx>5AC878E613A8C0EB857D2C007453</Vx>
<Vy>5F9964C68A87793F17F13669DB44</Vy>
</param>
</parámetros>
∙ <param id =’1’>: número de clave (ya sea pública o privada) relativo al fi-
chero, dado que los ficheros .pri y .pub permiten ser utilizados como agendas
de claves y almacenar más de una clave.
∙ <clave>: cadena informativa que incluye los elementos <tipo> (que puede
tener los valores Privada y Pública), <proveedor> (cuyos valores posibles
son ANSI, Brainpool, NIST y SEC) y por último <identificador>, el nombre
específico que cada proveedor otorga a sus curvas.
∙ <a>, <b>, <Gx>, <Gy>, <n>: parámetros comunes para curvas definidas tanto
sobre un cuerpo primo como binario.
∙ <Vx>, <Vy>: coordenadas del punto que representa la clave pública creada.
∙ <uC>: clave privada del usuario cifrada con el algoritmo AES mediante el código
de acceso.
La opción Clave aleatoria (ver Figura 5.19) ofrece la posibilidad de generar una
clave privada pseudoaleatoria a partir de los datos de entrada, que dependiendo del
cuerpo de trabajo son:
La opción Descompresión de puntos (ver Figura 5.19) permite, tras introducir los
datos asociados a una curva elíptica y a un punto de la curva en formato comprimido,
obtener ambas coordenadas de dicho punto.
Dependiendo del cuerpo de trabajo, la ventana del menú Descompresión de pun-
tos es diferente, tal como puede comprobarse en las Figuras 5.23 y 5.24.
SHA-1.
SHA-256.
SHA-384.
SHA-512.
KDF1.
KDF2.
HMAC-SHA-1-160.
HMAC-SHA-256-256.
HMAC-SHA-384-384.
HMAC-SHA-512-512.
XOR.
AES en modo CBC con relleno PKCS#5.
AES en modo ECB con relleno PKCS#5.
TDES en modo CBC sin relleno.
TDES en modo CBC con relleno PKCS#5.
2. Selección de una de las curvas disponibles a través del menú Curvas, con lo
que la aplicación rellenará los campos relativos a la curva y el usuario de
la aplicación tendrá que añadir la información relativa a la clave pública del
receptor (para operaciones de cifrado) o de su propia clave privada (en el caso
de tratarse de una operación de descifrado).
En los casos en los que la aplicación aporte algunos de los datos (es decir, el
usuario seleccione una curva o indique al programa el fichero con la clave a recupe-
rar), las cajas de texto de esta pestaña se mantienen habilitadas, lo que implica que
el usuario podría modificar dichos datos. Si dicha modificación conlleva algún error
(por ejemplo, el elemento generador o la clave pública no pertenecen a la curva mo-
dificada), éste será convenientemente detectado durante la ejecución de cualquiera
de las operaciones del programa (cifrado, descifrado, generación de la clave pública
a partir de los datos de la curva y de la clave privada, etc.).
En cuanto al contenido de esta pestaña, dependiendo de si el cuerpo finito de
trabajo, denominado de forma genérica 𝔽𝑞 , es 𝔽𝑝 o 𝔽2𝑚 , la pestaña Parámetros
mostrará distintos elementos, tal como puede apreciarse en las Figuras 5.28 y 5.29.
Independientemente del cuerpo finito seleccionado, los parámetros comunes que
aparecen en esta pestaña en ambos casos son los siguientes:
∙ Uy: segunda coordenada de la clave pública temporal del usuario emisor, donde
𝑈𝑦 ∈ 𝔽𝑞 .
Cuando el menú Cuerpo GF(𝑝) está activado, el único elemento relacionado con
este cuerpo que aparece en la pestaña es:
Por el contrario, cuando el menú Cuerpo GF(2^m) está activado, los nuevos
elementos que aparecen en la pestaña son:
∙ Generar : botón que permite calcular las coordenadas de las claves públicas 𝑈
y 𝑉 a partir de las claves privadas 𝑢 y 𝑣.
Por el contrario, los posibles mensajes de error que puede mostrar el elemento
Resultado son:
∙ Clave pública receptor : clave pública permanente del destinatario del cripto-
grama. Si el usuario pulsa la opción Texto, la pestaña Parámetros pasará a ser
la pestaña en uso, de manera que el usuario pueda introducir manualmente los
datos asociados a la clave pública del receptor. En cambio, si el usuario elige la
opción Fichero, el programa permitirá seleccionar el fichero donde se encuentra
la clave pública, tal como puede apreciarse en la Figura 5.31. Si el procesa-
miento del fichero con la clave pública es correcto, en la pestaña Parámetros
aparecerán los datos obtenidos del fichero con extensión .pub seleccionado.
donde i tendrá como valor la posición de la clave. Por último, si el fichero contuviera
solamente una clave, y el elemento <info> no fuera válido o no estuviera presente, el
programa utilizará como identificador el nombre del fichero. La Figura 5.34 muestra
las diversas variantes existentes en la representación del identificador de la clave
pública.
La segunda sección de la pestaña Cifrado está compuesta por las siguientes cajas
de texto:
∙ Mensaje a cifrar : contenido del mensaje en claro a cifrar (o sus primeros 1024
bytes en caso de que el mensaje se haya obtenido de un fichero y su longitud
sea mayor que ese límite).
Las cajas de texto del mensaje en claro y de la etiqueta permiten mostrar su con-
tenido interpretado como texto o en formato hexadecimal. En caso de que el mensaje
226 5. Implementación de ECIES en entorno PC
a cifrar no sea interpretable como texto ASCII, al seleccionar el formato Texto apa-
recerá en una fuente de color rojo la leyenda El contenido no es interpretable
como texto, tal como muestra la Figura 5.35.
Asimismo, el programa permite visualizar el criptograma en formato hexadecimal
y Base64, permitiendo que pueda ser enviado de forma cómoda por correo electrónico
utilizando esta última codificación.
La tercera sección de la pestaña Cifrado está formada por los siguientes elemen-
tos:
∙ Borrar : botón que permite borrar el contenido de las cajas de texto de esta
pantalla y devolver las opciones de configuración de la primera sección a su
estado inicial.
Por el contrario, algunos de los posibles mensajes de error que puede mostrar el
elemento Resultado son:
azul y rojo, y que se corresponden con el área de gestión de opciones, las cajas de
texto y los botones de operación.
∙ Clave privada receptor : clave privada fija del destinatario del criptograma. Si el
usuario pulsa la opción Texto, la pestaña Parámetros pasará a ser la pestaña
en uso, de manera que el usuario pueda introducir manualmente los datos
asociados a su clave privada. En cambio, si el usuario elige la opción Fichero,
el programa permitirá seleccionar el fichero donde se encuentra la clave privada,
tal como puede comprobarse en la Figura 5.38. Si el procesamiento del fichero
con la clave privada es correcto, en la pestaña Parámetros aparecerán los datos
obtenidos del fichero con extensión .pri seleccionado.
∙ Criptograma: mensaje cifrado empaquetado (tripleta de elementos) que el emi-
sor ha enviado al receptor. Si el usuario pulsa la opción Texto (opción por de-
fecto), deberá introducir el criptograma manualmente, sin que exista ningún
5.3. Descripción funcional de la aplicación 229
más de una clave privada, y alguna de dichas claves no tuviera un campo <info>
válido, a fin de poder identificar dicha clave el programa calculará su posición en el
fichero de claves y mostrará el texto Clave sin identificador #i, donde i tomará
como valor la posición de la clave. Por último, si el fichero contuviera solamente una
clave, y el elemento <info> no fuera válido, el programa utilizará como identificador
el nombre del fichero. La Figura 5.41 muestra las diversas variantes existentes en la
representación del identificador de la clave privada.
Por el contrario, algunos de los posibles mensajes de error que puede mostrar el
elemento Resultado son:
Figura 5.46: Selección del fichero con la clave pública del destinatario
Figura 5.54: Selección del fichero con la clave privada del destinatario
243
244 6. Implementación de ECIES en Java Card
∙ Función ENC : AES con bloques de 128 bits utilizando los modos CBC y ECB,
en ambos casos sin relleno, y longitudes de claves 128, 192 y 256 bits.
∙ Claves ECC: soporte para claves de 113, 131, 163 y 193 bits en cuerpos binarios
y claves de 112, 128, 160 y 192 bits en cuerpos primos.
∙ Función ENC : AES con bloques de 128 bits utilizando los modos CBC y ECB,
en ambos casos sin relleno, y longitudes de claves 128, 192 y 256 bits.
∙ Claves ECC: soporte para claves de 113, 131, 163 y 193 bits en cuerpos binarios
y claves de 112, 128, 160 y 192 bits en cuerpos primos.
∙ Función ENC : AES con bloques de 128, 192 y 256 bits utilizando los modos
CBC y ECB sin relleno. Además se ofrecen los modo CBC y ECB con relleno
compatible con el documento PKCS#5 [234] y el modo ECB compatible con
los métodos 1 y 2 de la norma ISO 9797 [128], en ambos casos con bloques de
128 bits. En todos los casos mencionados, las longitudes de clave admisibles
son 128, 192 y 256 bits.
∙ Claves ECC: soporte para claves de 113, 131, 163 y 193 bits en cuerpos binarios
y claves de 112, 128, 160, 192, 224, 256 y 384 bits en cuerpos primos.
246 6. Implementación de ECIES en Java Card
6.3.1. NetBeans
Aunque en un primer momento se decidió utilizar la herramienta de desarrollo
NetBeans en su versión 6.7, por ser la primera con soporte de la tecnología Java Card,
esta opción fue descartada tras realizar las primeras pruebas y comprobar la correcta
estructura de la aplicación diseñada, ya que NetBeans sólo permite compilar applets
empleando las bibliotecas Java Card 3.0, lo que impide su descarga en tarjetas reales
por tratarse de una versión muy reciente para la que los fabricantes de tarjetas
inteligentes todavía no tienen productos comerciales.
6.3.3. Eclipse
Tras recibir las tarjetas JCOP 41 y JCOP J3A utilizadas en la Tesis (ver §6.6 y
§7.1), el entorno de desarrollo seleccionado para completar el desarrollo de los applets
fue Eclipse 3.2, puesto que primero IBM y más tarde NXP han desarrollado sucesivas
versiones de los complementos (plug-ins) para Eclipse que permiten programar y
descargar applets de manera sencilla en tarjetas de prueba JCOP.
La Figura 6.1 muestra la ventana principal de la aplicación Eclipse 3.2 con los
complementos de NXP instalados.
única diferencia fuera precisamente el tipo de curvas empleadas. Estas dos versiones
fueron desarrolladas y depuradas utilizando las herramientas de consola descritas
en §6.3.2, de manera independiente respecto al modelo de tarjetas sobre el que se
descargaran los applets.
El Listado 6.1 muestra el esquema general de la aplicación Java Card diseñada
para curvas elípticas definidas sobre cuerpos binarios. En el caso de curvas elípticas
sobre cuerpos primos la aplicación es equivalente, representando los valores 01, 02,
03 y 04 del parámetro P1 en ese caso las curvas de 112, 128, 160 y 192 bits de
longitud.
1 package v i c t o r . t e s i s ;
2
3 import j a v a c a r d . framework . ∗ ;
4 import j a v a c a r d . s e c u r i t y . ∗ ;
5 import j a v a c a r d x . c r y p t o . ∗ ;
6
7 public c l a s s JCECIESF2m extends Applet
8 {
9 // D e c l a r a c i ó n de v a r i a b l e s
10
16 {
17 // I n i c i a l i z a c i ó n de v a r i a b l e s y o b j e t o s
18 }
19
20 public boolean s e l e c t ( )
21 {
22 return true ;
23 }
24
25 public void p r o c e s s (APDU apdu )
26 {
27 // Procesamiento de l a s APDU r e c i b i d a s para su g e s t i ó n
28
29 byte [ ] b u f f e r = apdu . g e t B u f f e r ( ) ;
30
31 if ( selectingApplet () )
32 {
33 return ;
34 }
35
36 switch ( b u f f e r [ ISO7816 . OFFSET_INS ] )
37 {
38 case 0 x61 :
39 p r o c e s s I N S 6 1 ( apdu ) ;
40 break ;
41 case 0 x62 :
42 p r o c e s s I N S 6 2 ( apdu ) ;
43 break ;
44 case 0 x63 :
45 p r o c e s s I N S 6 3 ( apdu ) ;
46 break ;
47 case 0 x64 :
48 p r o c e s s I N S 6 4 ( apdu ) ;
49 break ;
50 case 0 x65 :
51 p r o c e s s I N S 6 5 ( apdu ) ;
52 break ;
53 case 0 x66 :
54 p r o c e s s I N S 6 6 ( apdu ) ;
55 break ;
56 case 0 x67 :
57 p r o c e s s I N S 6 7 ( apdu ) ;
58 break ;
59 case 0 x68 :
60 p r o c e s s I N S 6 8 ( apdu ) ;
61 break ;
62 case 0 x69 :
63 p r o c e s s I N S 6 9 ( apdu ) ;
64 break ;
65 }
66 }
67 private void p r o c e s s I N S 6 1 (APDU apdu )
6.4. Esquema de la aplicación 251
68 {
69 // Crea nuevas c l a v e s de l o n g i t u d 113 , 131 , 163 y 193
70 // INS : 61
71 // P1 : t i p o de c l a v e (01=113 , 02=131 , 03=163 , 04=193)
72 // P2 : 00 ( s i n uso en e s t a i n s t r u c c i ó n )
73 // Lc : 00 ( s i n d a t o s de e n t r a d a )
74 // Ejemplo : 0061010000
75
76 }
77
78 private void p r o c e s s I N S 6 2 (APDU apdu )
79 {
80 // O b t i e n e l o s par ámetr os de l a s c l a v e s
81 // INS : 62
82 // P1 : t i p o de c l a v e (01=113 , 02=131 , 03=163 , 04=193)
83 // P2 : t i p o de d a t o ( 0 1 : a , 0 2 : b , 0 3 : f ( x ) , 0 4 : G, 0 5 : h , 0 6 :
n , 0 7 : tamaño d e l c u e r p o GF( q ) en b i t s , 0 8 : U, 0 9 : u )
84 // Lc : 00 ( s i n d a t o s de e n t r a d a )
85 // Ejemplo : 0062010900
86
87 }
88
89 private void p r o c e s s I N S 6 3 (APDU apdu )
90 {
91 // Almacena v a l o r e s en l o s o b j e t o s de l a s c l a v e s
92 // INS : 63
93 // P1 : t i p o de c l a v e (01=113 , 02=131 , 03=163 , 04=193)
94 // P2 : t i p o de d a t o ( 0 1 : a , 0 2 : b , 0 3 : f ( x ) , 0 4 : G, 0 5 : h , 0 6 :
n , 0 7 : tamaño d e l c u e r p o GF( q ) en b i t s , 0 8 : U, 0 9 : u )
95 // Lc : l o n g i t u d en b y t e s d e l d a t o i n c l u i d o a c o n t i n u a c i ó n
96 // Ejemplo : 006301081F0401A4CD29 . . .
97 }
98
99 private void p r o c e s s I N S 6 4 (APDU apdu )
100 {
101 // Almacena e l v a l o r de l a c l a v e p ú b l i c a d e l d e s t i n a t a r i o
102 // INS : 64
103 // P1 : t i p o de c l a v e (01=113 , 02=131 , 03=163 , 04=193)
104 // P2 : t i p o de d a t o ( 0 0 : c r e a c l a v e a l e a t o r i a , 0 1 : a , 0 2 : b ,
0 3 : f ( x ) , 0 4 : G, 0 5 : h , 0 6 : n , 0 7 : tamaño d e l c ue r p o GF( q )
en b i t s , 0 8 : U, 0 9 : u )
105 // Lc : l o n g i t u d en b y t e s d e l d a t o i n c l u i d o a c o n t i n u a c i ó n
106 // Ejemplo : 006401081F0401A4CD29 . . .
107 }
108
109 private void p r o c e s s I N S 6 5 (APDU apdu )
110 {
111 // Almacena e l mensaje a c i f r a r
112 // INS : 65
113 // P1 : t i p o de o p e r a c i ó n ( 0 1 : mensaje nuevo , 0 2 : anexar a
mensaje almacenado )
114 // P2 : 00 ( s i n uso en e s t a i n s t r u c c i ó n )
252 6. Implementación de ECIES en Java Card
115 // Lc : l o n g i t u d en b y t e s de l a p o r c i ó n de mensaje i n c l u i d o a
continuación
116 // Ejemplo : 00650100080102030405060708
117 }
118
119 private void p r o c e s s I N S 6 6 (APDU apdu )
120 {
121 // Almacena l a e t i q u e t a
122 // INS : 66
123 // P1 : s i n uso en e s t a i n s t r u c c i ó n
124 // P2 : 00 ( s i n uso en e s t a i n s t r u c c i ó n )
125 // Lc : l o n g i t u d en b y t e s de l a e t i q u e t a i n c l u i d a a c o n t i n u a c i ó n
126 // Ejemplo : 006600000454657374
127 }
128
129 private void p r o c e s s I N S 6 7 (APDU apdu )
130 {
131 // S o l i c i t a l a g e n e r a c i ó n d e l c r i p t o g r a m a
132 // INS : 67
133 // P1 : t i p o de c l a v e (01=113 , 02=131 , 03=163 , 04=193)
134 // P2 : 00 ( s i n uso en e s t a i n s t r u c c i ó n )
135 // Lc : 00 ( s i n d a t o s de e n t r a d a )
136 // Ejemplo : 0067010000
137 }
138
139 private void p r o c e s s I N S 6 8 (APDU apdu )
140 {
141 // Almacena e l c r i p t o g r a m a a d e s c i f r a r
142 // INS : 68
143 // P1 : t i p o de o p e r a c i ó n ( 0 1 : c r i p t o g r a m a nuevo , 0 2 : anexar a
c r i p t o g r a m a almacenado )
144 // P2 : 00 ( s i n uso en e s t a i n s t r u c c i ó n )
145 // Lc : l o n g i t u d en b y t e s de l a p o r c i ó n de c r i p t o g r a m a i n c l u i d o
a continuación
146 // Ejemplo : 006801003 B040182D553 . . .
147
148 }
149
150 private void p r o c e s s I N S 6 9 (APDU apdu )
151 {
152 // Almacena e l d e s c i f r a d o d e l c r i p t o g r a m a
153 // INS : 69
154 // P1 : t i p o de c l a v e (01=113 , 02=131 , 03=163 , 04=193)
155 // P2 : 00 ( s i n uso en e s t a i n s t r u c c i ó n )
156 // Lc : 00 ( s i n d a t o s de e n t r a d a )
157 // Ejemplo : 0069010000
158 }
159
160 }
2. Ejecutar el comando
scriptgen -o JCECIES.scr .\victor\tesis\javacard\tesis.cap.
Tras realizar este paso, se generará el el fichero JCECIES.scr en el directorio
«C:\JCECIES\src».
powerup;
0x00 0xA4 0x04 0x00 0x09 0xA0 0x00 0x00 0x00 0x62 0x03 0x01 \\
0x08 0x01 0x7F;
0x80 0xB8 0x00 0x00 0x0B 0x0A 0xA0 0x00 0x00 0x00 0x62 0x03 \\
0x01 0x0C 0x01 0x01 0x7F;
powerdown;
0x00 0xA4 0x04 0x00 0x0A 0xA0 0x00 0x00 0x00 0x62 0x03 0x01 \\
0x0C 0x01 0x01 0x7F;
// Comando INS 10
// CLA: 0x80, INS: 0x10, P1: 0x00, P2: 0x00, Lc: 0x01
// Datos: 0x11
// Comando INS 20
// CLA: 0x80, INS: 0x20, P1: 0x00, P2: 0x00, Lc: 0x01
// Datos: 0x22
// Comando INS 30
// CLA: 0x80, INS: 0x30, P1: 0x00, P2: 0x00, Lc: 0x01
// Datos: 0x33
applet en lugar de las dos previstas inicialmente. Dichas versiones son las corres-
pondientes a las configuraciones de prueba M2, P2 y P3 descritas en §7.2, y para
diferenciar en lo sucesivo los tres applets Java Card, las tres versiones del applet se
han denominado JCOP-M2, JCOP-P2 y JCOP-P3.
La instalación de los applets en las tarjetas JCOP se realizó mediante el entorno
de desarrollo Eclipse 3.2 junto con los complementos JCOP Tools 3.2.8 y SmartMX
Target-Pack for JCOP Tools 1.2.9 proporcionados por NXP, que permiten realizar
la descarga de la aplicación desde el entorno Eclipse utilizando las claves que por
defecto incluyen todas las tarjetas JCOP de desarrollo.
En cuanto al tamaño de los applets, tal como puede apreciarse en la Figura 6.2
(compuesta por imágenes obtenidas del entorno de desarrollo Eclipse), la versión
JCOP-M2 (AID A00000000501) ocupa 5031 bytes, el tamaño de la versión JCOP-
P2 (AID A00000000601) es 4328 bytes, y por último la versión JCOP-P3 (AID
A00000000701) ocupa 4404 bytes. Dichas cantidades no incluyen ni las variables
que se alojarán en RAM (de tipo transient en Java Card) ni las que residirán en
memoria EEPROM (de tipo persistent), aunque sí incluye las matrices formadas
por elementos constantes (es decir, las matrices de tipo final static).
La versión JCOP-M2 tiene un tamaño superior a las otras dos puesto que las
tarjetas JCOP 41 implementan 4 tipos de curvas, mientras que las tarjetas JCOP
J3A permiten utilizar únicamente 3 curvas, por lo que la gestión de las curvas es
más compleja en la versión JCOP-M2.
Por otra parte, el tamaño de la versión JCOP-P3 es ligeramente superior al de
la versión JCOP-P2 debido a que las funciones MAC y HMAC (SHA-256 y HMAC-
SHA-256) utilizadas en dicha versión generan unos datos de salida de mayor longitud
que las funciones correspondientes de la versión JCOP-P2 (SHA-1 y HMAC-SHA-1),
siendo necesario aumentar el tamaño de los arrays con los que se trabaja de forma
interna.
Una vez realizada la descarga de la aplicación en las tarjetas JCOP mediante
el entorno Eclipse y los complementos de NXP, las pruebas de comunicación con el
applet Java se han realizado utilizando dos aplicaciones diferentes: el propio entorno
Eclipse, utilizado principalmente para depurar los diferentes applets mediante la
realización de pruebas individuales, y una aplicación Java SE con interfaz gráfica,
desarrollada por el autor de esta Tesis y presentada en detalle en §6.7.
∙ Pestaña Configuración (Figura 6.3): incluye los elementos que permiten selec-
cionar el lector (Figura 6.4), el tipo de tarjeta (JCOP 41 o J3A) y la curva
(que depende de la tarjeta elegida, ver Figura 6.5). De forma adicional, esta
pestaña permite generar nuevos pares de claves para una tarjeta y curva da-
da, así como recuperar el valor de la clave pública seleccionada, mostrando la
Figura 6.6 el resultado final de ambos procesos. Por último, esta pantalla in-
cluye una caja de texto donde se pueden visualizar las APDU intercambiadas
con la tarjeta inteligente en cualquiera de las operativas implementadas por
la aplicación (cifrado, descifrado, generación de pares de claves y recuperación
de la clave pública).
∙ Pestaña Cifrado (Figura 6.7): permite añadir la curva pública del destinatario
del criptograma, el mensaje en claro a cifrar y la etiqueta a utilizar de manera
opcional por la función MAC. El resultado del proceso de cifrado se muestra
en la caja de texto asociada al criptograma.
∙ Pestaña Acerca (Figura 6.9): muestra información sobre la versión del progra-
ma JCOPECIES y sus autores.
∙ Al mensaje original se le añaden tantos bytes como sea necesario hasta que la
longitud en bytes del mensaje así modificado sea múltiplo de 8 (en las tarjetas
JCOP 41, ya que implementa el algoritmo TDES) o múltiplo de 16 (en las
tarjetas JCOP J3A, puesto que el applet para esas tarjetas utiliza AES).
Tal como se puede apreciar en todas las figuras incluidas en el resto del presente
capítulo, el primer comando en todos los casos es el de selección del applet. Esta
selección no es necesaria para el correcto funcionamiento de la aplicación, pero se
ha incluido a fin de demostrar que no es necesario completar la secuencia de todos
los comandos en una única sesión.
La Figura 6.12 muestra todos los parámetros asociados a las claves del usuario U.
El último comando enviado permite obtener la clave privada de U, por lo que dicho
comando sólo está disponible en la versión de pruebas del applet, siendo eliminada
de la versión definitiva de la aplicación que sería utilizada por usuarios reales. Por
su parte, la Figura 6.13 muestra de manera equivalente los parámetros asociados a
las claves del usuario V.
Tal y como se puede apreciar en las Figuras 6.12 y 6.13, todos los parámetros
coinciden a excepción de las claves privadas y públicas, ya que las tarjetas JCOP
264 6. Implementación de ECIES en Java Card
41 utilizan una única curva para cada una de las longitudes posibles, cambiando en
cada generación aleatoria de claves únicamente los valores 𝑢 y 𝑈 para un usuario U.
Dada la curva 𝑦 2 + 𝑥𝑦 = 𝑥3 + 𝑎𝑥2 + 𝑏 caracterizada por el conjunto de pará-
metros 𝒫=(𝑚, 𝑓 (𝑥), 𝑎, 𝑏, 𝐺, 𝑛, ℎ), los comandos empleados en la Figura 6.12 para la
obtención de los parámetros de las claves asociadas al usuario U son los presentados
a continuación:
∙ Parámetro 𝑎: 0062040100.
∙ Parámetro 𝑏: 0062040200.
∙ Cofactor ℎ: 0062040500.
Tal como puede apreciarse en las Figuras 6.12 y 6.13, la respuesta de la tarjeta
al comando 0062040500 consiste en un código de error definido por el propio applet
(FF62), lo que indica que, a pesar de estar especificado el método para obtener
el cofactor en Java Card, esta funcionalidad no está implementada en las tarjetas
JCOP 41.
Una vez obtenidos los parámetros de las propias claves por parte de los usuarios
U y V (con el objetivo, por ejemplo, de distribuir su clave pública junto con los
parámetros de la curva a otros usuarios), para poder generar un criptograma es
necesario enviar a la tarjeta el mensaje a cifrar, la etiqueta a utilizar como parámetro
de entrada opcional en el cálculo del código MAC, y la clave pública del receptor
del mensaje cifrado. Una vez estos elementos estén almacenados en la memoria de
la tarjeta, el usuario U podrá solicitar al applet la generación del criptograma que
posteriormente deberá enviar al usuario V. La Figura 6.14 muestra los comandos
necesarios, y que se detallan a continuación:
0064040833040147EF73CAC299773F20AF95E64B01B8EFED22A0AD8
DC53DD300AE2A3607E5D51CF66A82F623A69FD6D876C265128FFF
D9FD.
00650100201112131415161718212223242526272831323334353637384142
434445464748.
0401BC9A5BE00DB6F5FDDEA249434FED1665A0749236160C622301736
8B704A497646EBD7D87249647B4F6C900E3978BB887887A40F0FFE036B
8E9364F525E107ED6B3BD6E00D651E689F3F70F813B30AC66FD7BECC
931E850D19FE644F1886656C43E91FAE913,
268 6. Implementación de ECIES en Java Card
que U deberá enviar a V. Una vez recibido este criptograma, la secuencia de co-
mandos que V necesita enviar a la tarjeta a fin de obtener el mensaje descifrado
están incluidos en la Figura 6.15 y listados a continuación:
1112131415161718212223242526272831323334353637384142434445464748,
la cual coincide con el contenido del mensaje original que U deseaba enviar a V.
6.8. Ejemplos de utilización 269
042A38ACD50BDBBE2FE80DB46492E10CE988310A9E7679FAAE739
5DCEAC208B64D0AFE521A0B61DF4C2A2700D48E164D05.
∙ Mensaje a cifrar: Texto Prueba cifrado 1, cuyo valor hexadecimal está re-
presentado por la cadena
507275656261206369667261646F2031.
04F465E627E750EDC11C0EF383AE077F964A9D12755CA94439A92A6C
DC89E259E41FCFBB3C1EADDDB4831EBBCA1D03F0BF89AD884D829
E76A98E100172F64E1054FDD117E97B04C9CFDBBE610BF3AACC75B4
10448EA679FC44C3C427C3466D275D
BPRl5ifnUO3BHA7zg64Hf5ZKnRJ1XKlEOakqbNyJ4lnkH8+7PB6t3bSD
HrvKHQPwv4mtiE2CnnapjhABcvZOEFT90RfpewTJz9u+YQvzqsx1tBB
EjqZ5/ETDxCfDRm0nXQ==.
Resultados empíricos
∙ Plataforma PC:
271
272 7. Resultados empíricos
Otro dato interesante es el hecho de que el chip tiene más entradas (nueve en
el caso de la Figura 7.1) que el número de contactos de las tarjetas (típicamente
ocho, ver §1.3.2.1). Ello se debe a que los chips se diseñan de manera genérica para
274 7. Resultados empíricos
Puesto que las tarjetas JCOP 41 permiten utilizar tanto la interfaz con contactos
como la interfaz sin contactos, las pruebas de cifrado y descifrado realizadas con las
tarjeas JCOP 41 han sido duplicadas a fin de obtener resultados mediante ambas
interfaces. Tal como se puede apreciar en la Figura 7.3, que muestra la informa-
ción proporcionada por una herramienta de Omnikey relativa a la tarjeta JCOP 41
utilizando el protocolo T=0 (con contactos) y T=CL (sin contactos), la frecuencia
utilizada en la interfaz con contactos es de 4.80 MHz, mientras si se utiliza la interfaz
sin contactos la frecuencia es 13.56 MHz.
Es importante señalar que, a pesar de conocer la frecuencia de la señal externa
de reloj proporcionada a la tarjeta, no es posible sin embargo conocer la frecuencia
interna a la que las tarjetas realmente están trabajando. La única información que
ha sido posible obtener es la asociada a las características técnicas de los dos modelos
de tarjetas, la cual indica que la frecuencia interna de trabajo tiene un valor máximo
de 30 MHz para ambos modelos.
7.2. Configuraciones de prueba 275
∙ Configuración M1:
M1 M2 P1 P2 P3
sect113r1 sect113r1 secp112r1 secp128r1 secp128r1
sect131r1 sect131r1 secp128r1 secp160r1 secp160r1
sect163r1 c2pnb163v1 secp160r1 P-192 P-192
sect193r1 sect193r1 secp192k1
sect233r1 secp224r1
sect239k1 secp256k1
sect283r1 secp384r1
sect409r1 secp521r1
sect571r1
2. La representación binaria de la clave pública temporal del emisor (ya sea com-
primida o sin comprimir).
2. Dado que tanto los mensajes a cifrar como los criptogramas a descifrar deben
ser almacenados temporalmente en la memoria de las tarjetas inteligentes para
su procesado, y puesto que la cantidad de RAM en las tarjetas es muy limitada,
la utilización de mensajes de excesivo tamaño provocaría que los elementos
de tipo array que albergan los datos a cifrar o descifrar tuvieran que ser
almacenados en memoria EEPROM en lugar de en memoria RAM, con el
consiguiente deterioro del rendimiento general.
∣𝒞∣ ∣𝔪∣ + 𝛿
(7.1) FE = = ,
∣𝔪∣ ∣𝔪∣
donde ∣𝒞∣ es la longitud en bytes del criptograma, ∣𝔪∣ es la longitud en bytes del
mensaje en claro y 𝛿 representa la diferencia entre las longitudes del criptograma y
del mensaje en claro (ambas medidas en bytes). Mientras que los cuadros y figuras
de los siguientes apartados recogen el factor de expansión calculado para distintas
combinaciones de claves y mensajes en claro, por sencillez en la exposición se incluirá
únicamente la fórmula del valor 𝛿 en cada caso.
Las pruebas llevadas a cabo con la configuración M1 tienen las siguientes pro-
piedades:
⌈𝑚⌉ ⌈𝑚⌉
𝛿𝑀 1 = 1 + + 16 + 32 = + 49,
8 8
donde el byte inicial es el prefijo que indica la compresión del punto que representa
la clave pública temporal 𝑈 , ⌈𝑚/8⌉ representa el número de bytes necesarios para
representar un elemento del cuerpo 𝔽2𝑚 , el relleno PKCS#5 añade 16 bytes durante
el proceso de cifrado simétrico y, por último, el código MAC ocupa 32 bytes.
El Cuadro 7.2 y la Figura 7.4 muestran el factor de expansión calculado a partir
de la ecuación (7.1) al cifrar mensajes de distinta longitud (16, 32, 64, 128, 256,
512 y 1024 bytes) utilizando las diferentes longitudes de clave consideradas en la
configuración M1.
7.3. Factor de expansión 281
sect131r1 4.44 2.72 2.15 1.86 1.69 1.57 1.49 1.43 1.38 1.34
c2pnb163v1 4.94 2.97 2.31 1.98 1.79 1.66 1.56 1.49 1.44 1.39
sect193r1 5.44 3.22 2.48 2.11 1.89 1.74 1.63 1.55 1.49 1.44
Cuadro 7.3: Factor de expansión en curvas sobre 𝔽2𝑚 con la configuración M2
∙ La longitud de los mensajes en claro es, en todos los casos, múltiplo de 16 (lo
que genera un bloque de 16 bytes adicional al utilizar el algoritmo AES en
modo CBC con relleno PKCS#5).
∙ Los puntos de la curva elíptica se representan de forma comprimida.
∙ El código MAC tiene una longitud de 32 bytes.
⌈ log 𝑝 ⌉ ⌈ log 𝑝 ⌉
2 2
𝛿𝑃 1 = 1 + + 16 + 32 = + 49,
8 8
donde el byte inicial es el prefijo añadido por el algoritmo de compresión de puntos
(y cuyos posibles valores son 0x02 ó 0x03), ⌈(log2 𝑝)/8⌉ representa el número de
bytes necesarios para representar un elemento del cuerpo 𝔽𝑝 , el relleno PKCS#5
añade 16 bytes durante el proceso de cifrado simétrico y, por último, el código MAC
ocupa 32 bytes.
El Cuadro 7.4 y la Figura 7.6 muestran el factor de expansión calculado mediante
la ecuación (7.1) al cifrar mensajes de distinta longitud (16, 32, 64, 128, 256, 512 y
284 7. Resultados empíricos
⌈ log 𝑝 ⌉ ⌈ log 𝑝 ⌉
2 2
𝛿𝑃 2 = 1 + 2 ⋅ + 20 = 2 ⋅ + 21,
8 8
donde el byte inicial es el prefijo añadido para indicar que el punto de la curva que
representa la clave pública temporal 𝑈 no está comprimido (y que por lo tanto toma
valor 0x04), el valor ⌈(log2 𝑝)/8⌉ aparece duplicado ya que al no utilizarse compresión
de puntos es necesario incluir las dos coordenadas del punto, y finalmente el código
MAC ocupa 32 bytes.
El Cuadro 7.5 y la Figura 7.7 muestran el factor de expansión calculado a partir
de la ecuación (7.1) al cifrar mensajes de distinta longitud (16, 32, 48, 64, 80, 96,
112, 128, 144 y 160 bytes) utilizando la configuración P2 con diferentes longitudes
de claves, según las curvas consideradas.
secp160r1 4.81 2.91 2.27 1.95 1.76 1.64 1.54 1.48 1.42 1.38
P-192 5.31 3.16 2.44 2.08 1.86 1.72 1.62 1.54 1.48 1.43
Cuadro 7.5: Factor de expansión en curvas sobre 𝔽𝑝 con la configuración P2
⌈ log 𝑝 ⌉ ⌈ log 𝑝 ⌉
2 2
𝛿𝑃 3 =1+2⋅ + 32 = 2 ⋅ + 33,
8 8
donde el byte inicial es el prefijo añadido para indicar que el punto de la curva
que representa la clave pública temporal no está comprimido, el valor ⌈(log2 𝑝)/8⌉
aparece duplicado puesto que representa la longitud en bytes de dos elementos del
cuerpo finito 𝔽𝑝 , y por último el código MAC ocupa 32 bytes.
El Cuadro 7.6 y la Figura 7.8 muestran el factor de expansión calculado mediante
la ecuación (7.1) al cifrar mensajes de distinta longitud (16, 32, 48, 64, 80, 96, 112,
128, 144 y 160 bytes) utilizando la configuración P3 con diferentes claves.
7.3. Factor de expansión 287
secp160r1 5.56 3.28 2.52 2.14 1.91 1.76 1.65 1.57 1.51 1.46
P-192 6.06 3.53 2.69 2.27 2.01 1.84 1.72 1.63 1.56 1.51
Cuadro 7.6: Factor de expansión en curvas sobre 𝔽𝑝 con la configuración P3
Figura 7.9: Tiempo de cifrado con curvas sobre 𝔽2𝑚 en PC (configuración M1)
Figura 7.10: Tiempo de cifrado con curvas sobre 𝔽2𝑚 en PC (configuración M2)
Figura 7.11: Tiempo de cifrado con curvas sobre 𝔽2𝑚 en JCOP 41 e interfaz sin con-
tactos (configuración M2)
Figura 7.12: Tiempo de cifrado con curvas sobre 𝔽2𝑚 en JCOP 41 e interfaz con con-
tactos (configuración M2)
Figura 7.15: Tiempo de cifrado con curvas sobre 𝔽𝑝 en JCOP J3A e interfaz sin con-
tactos (configuración P2)
7.4. Tiempo de cifrado 297
Figura 7.17: Tiempo de cifrado con curvas sobre 𝔽𝑝 en JCOP J3A e interfaz sin con-
tactos (configuración P3)
7.5. Tiempo de descifrado 299
Figura 7.18: Tiempo de descifrado con curvas sobre 𝔽2𝑚 en PC (configuración M1)
Figura 7.19: Tiempo de descifrado con curvas sobre 𝔽2𝑚 en PC (configuración M2)
302 7. Resultados empíricos
Figura 7.20: Tiempo de descifrado con curvas sobre 𝔽2𝑚 en JCOP 41 e interfaz sin
contactos (configuración M2)
7.5. Tiempo de descifrado 303
Figura 7.21: Tiempo de descifrado con curvas sobre 𝔽2𝑚 en JCOP 41 e interfaz con
contactos (configuración M2)
304 7. Resultados empíricos
Figura 7.24: Tiempo de descifrado con curvas sobre 𝔽𝑝 en JCOP J3A e interfaz sin
contactos (configuración P2)
7.5. Tiempo de descifrado 307
Figura 7.26: Tiempo de descifrado con curvas sobre 𝔽𝑝 en JCOP J3A e interfaz sin
contactos (configuración P3)
7.6. Rendimiento comparado 309
Figura 7.28: Comparación del tiempo de ejecución entre las versiones PC y Java Card
(configuración M2)
Figura 7.29: Comparación del tiempo de ejecución entre las versiones PC y Java Card
(configuración P2)
7.6. Rendimiento comparado 311
Figura 7.30: Comparación del tiempo de ejecución entre las versiones PC y Java Card
(configuración P3)
Figura 7.31: Comparación del tiempo de ejecución en las tarjetas JCOP 41 (configura-
ción M2) y JCOP J3A (configuración P2) al cifrar un mensaje de 64 bytes
8.1. Conclusiones
Tal como se ha comentado en diversos apartados, ECIES es un esquema de ci-
frado que dispone de múltiples opciones de implementación. En la presente Tesis
Doctoral se ha estudiado en profundidad el protocolo de cifrado ECIES y se han
desarrollado varias aplicaciones (para PC y tarjetas JCOP 41 y JCOP J3A) con el
objetivo de realizar pruebas en estas tres plataformas hardware con cinco configu-
raciones diferentes (M1, M2, P1, P2 y P3).
Como resultado del estudio previo realizado y de las pruebas efectuadas es posible
presentar las conclusiones detalladas en los siguientes apartados, las cuales están
agrupadas en función de los objetivos descritos en la Introducción.
313
314 8. Conclusiones, aportaciones y trabajo futuro
3. Para poder realizar comparaciones más fiables, sería deseable que los fabri-
cantes de tarjetas inteligentes desarrollaran modelos que permitieran utilizar
indistintamente curvas sobre cuerpos finitos tanto primos como binarios. En
el caso de los modelos utilizados en la Tesis, las tarjetas JCOP 41 únicamente
implementan curvas definidas sobre cuerpos binarios, mientras que las tarjetas
JCOP J3A sólo incluyen curvas construidas sobre cuerpos binarios.
5. A pesar de estar definida en las API de Java Card, la función HMAC no está
incluida en las tarjetas JCOP probadas. Aunque el desarrollo de la función
HMAC apropiada no ha sido complejo, el rendimiento global mejoraría si
dicha función fuera ejecutada a través de la llamada estándar al API Java
Card.
6. Igualmente sería deseable que el API Java Card añadiera en el futuro la función
KDF2, puesto que de hecho actualmente dicha API no incluye ninguna función
KDF.
7. De manera equivalente sería recomendable que las tarjetas comerciales incor-
poraran en el futuro próximo las modalidades con relleno del algoritmo AES
definidas en Java Card 3.0, lo que evitaría la codificación de sistemas alterna-
tivos de relleno por parte de las aplicaciones que se comunican con la tarjeta
inteligente.
De nuevo, con los datos disponibles sobre el modelo JCOP 41, únicamente se
puede conjeturar que, a igualdad del resto de los factores, el comportamiento
del coprocesador 3DES depende de la frecuencia de la señal externa de re-
loj. Los tiempos de descifrado muestran el mismo comportamiento en estas
circunstancias (Figuras 7.20 y 7.21).
Cuadro 8.3: Crecimiento del tiempo de cifrado y descifrado en JCOP 41 e interfaz sin
contactos (configuración M2)
Cuadro 8.4: Crecimiento del tiempo de cifrado y descifrado en JCOP 41 e interfaz con
contactos (configuración M2)
Cuadro 8.5: Crecimiento del tiempo de cifrado y descifrado en JCOP J3A e interfaz
sin contactos (configuración P2)
Cuadro 8.6: Crecimiento del tiempo de cifrado y descifrado en JCOP J3A e interfaz
sin contactos (configuración P3)
322 8. Conclusiones, aportaciones y trabajo futuro
10. Si se analizan los datos desde una perspectiva diferente, manteniendo fija la
longitud de la clave y aumentando la longitud del mensaje en claro, se pue-
de afirmar que en la mayoría de los casos de cifrado, el incremente relativo
al pasar de un mensaje de 16 bytes a otro de 160 bytes es de aproximada-
mente el 10 %, tal como puede observarse en los Cuadros 8.7 y 8.8 (relativos
8.1. Conclusiones 323
11. Debido a la falta de las clases relacionadas con la criptografía de curvas elíp-
ticas en tarjetas sin coprocesador PKI, no ha sido posible determinar el ren-
dimiento de las aplicaciones sin utilizar dicho criptoprocesador. Sin embargo,
debido a la naturaleza de las operaciones a realizar (multiplicación escalar de
324 8. Conclusiones, aportaciones y trabajo futuro
1. Las configuraciones C01 y C02 compatibles con los cuatro estándares son sus-
ceptibles de sufrir ataques debido a la utilización de la función XOR como
algoritmo de cifrado simétrico.
3. Puesto que con la única solución compatible con todos los estándares la fun-
cionalidad de ECIES queda seriamente limitada, se hace necesario seleccionar
otra configuración como punto de partida para cualquier implementación segu-
ra de ECIES. Dado que exceptuando C01 y C02 no existen más configuraciones
compatibles con los cuatro estándares, las candidatas lógicas son aquellas con-
figuraciones recogidas en los tres estándares más recientes, que resultan ser
C05 y C06. Al igual que sucedió en §4.8, es posible definir a partir de las
configuraciones C05 y C06 múltiples versiones compatibles con dichas confi-
guraciones, y que se diferencien en la función HASH, la función MAC, el uso
de argumentos opcionales en la función de autenticación o una combinación
de esos tres elementos.
8.2. Aportaciones
La presente Tesis doctoral incluye la especificación y desarrollo de una imple-
mentación software de ECIES, para lo cual se ha creado una versión utilizando Java
SE para entornos PC, y otra versión (con tres variantes) para tarjetas Java Card.
Hasta donde el autor de esta Tesis conoce, se trata de la primera implementación
del protocolo ECIES en ambas plataformas, permitiendo además en la versión para
PC la selección de manera dinámica de la configuración específica a utilizar por el
usuario.
Como era predecible, durante el desarrollo el autor ha encontrado diversas di-
ficultades y obstáculos. En primer lugar, los estándares que incluyen ECIES como
algoritmo de cifrado presentan un número de opciones muy elevado, estando en
326 8. Conclusiones, aportaciones y trabajo futuro
331
332 Notación
333
334 Glosario
STS Station-To-Station
SW1 Status Word 1
SW2 Status Word 2
TDE Triple Data Encryption
TDES Triple DES
TDEA Triple Data Encryption Algorithm
TLS Transport Layer Security
TLV Tag-Length-Value
TSP Time-Stamp Protocol
UICC Universal Integrated Circuit Card
UMTS Universal Mobile Telecommunication System
USAT USIM Application Toolkit
USB Universal Serial Bus
USIM Universal Subscriber Identity Module
UTF-8 Unicode Transformation Format 8-Bit
WAP Wireless Application Protocol
WIM WAP Identity Module
WSC Windows for Smart Cards
Referencias
339
340 Referencias
http://www.3gpp.org/ftp/specs/html-info/51014.htm
[18] AOKI K. et al. “Camellia: A 128-bit block cipher suitable for multiple plat-
forms - Design and analysis”. Lecture Notes in Computer Science, 2001, vol.
2012, pp. 39-56. ISBN 3-540-42069-X.
http://dx.doi.org/10.1007/3-540-44983-3_4
http://dx.doi.org/10.1007/BFb0028457
[27] BELLARE, M. et al. “Relations among notions of security for public-key en-
cryption schemes”. Lecture Notes in Computer Science. 1998, vol. 1462, pp.
549–570. ISSN 3-540-64892-5.
http://dx.doi.org/10.1007/BFb0055718
[31] BONEH, D. “Twenty years of attacks on the RSA cryptosystem”. Notices of the
American Mathematical Society. Febrero 1999, vol. 46, num. 2, pp. 203–213.
ISSN 0002-9920.
http://www.ams.org/notices/199902/boneh.pdf
[32] BOUNCE CASTLE. The legion of the Bouncy Castle. Página web.
http://www.bouncycastle.org
[34] BRAINPOOL. ECC Brainpool standard curves and curve generation. Ver. 1.0.
2005.
www.ecc-brainpool.org/download/Domain-parameters.pdf
[41] CERTICOM CORP. Method for signature and session key generation. Inven-
tores: S. A. Vanstone, A. J. Menezes, M. Qu. Fecha de solicitud: 1996-04-15.
Patente internacional, WO 96/33565. 1996-10-24.
http://v3.espacenet.com/publicationDetails/originalDocument?CC=
WO&NR=9633565A1&KC=A1&FT=D&date=19961024&DB=EPODOC&locale=es_lp
[47] CERTICOM CORP. Accelerated finite field operations on an elliptic curve. In-
ventores: S. A. Vanstone, R. Mullin, A. Antipa, R. Gallant. Fecha de solicitud:
2000-10-02. Estados Unidos, patente de invención, 6.782.100. 2004-08-24.
http://www.google.com/patents/about?id=XGESAAAAEBAJ&dq=6782100
[48] CHEN, Z. Java Card technology for smart cards: Architecture and program-
mer’s guide. Boston: Addison-Wesley, 2000. ISBN 0-201-70329-7.
[70] ELKIES, N. “Elliptic and modular curves over finite fields and related compu-
tational issues”. En: Proceedings of Computational Perspectives on Number
Theory. Chicago, 1998. pp 21–76. ISBN 0-8218-0880-X.
http://www.ams.org/mathscinet-getitem?mr=1486831
http://dx.doi.org/10261/21232
[100] HANSMANN, U.; et al. Smart card application development using Java. Ber-
lín: Springer, 2000. ISBN 3-540-65829-7.
[103] HESS, E. et al. “Information leakage attacks against smart card implemen-
tations of cryptographic algorithms and countermeasures - A survey”. En:
Proceedings of the EUROSMART Security Conference, pp. 55–64. Marsella,
2000.
http://www.torsten-schuetze.de/reports/leakage.pdf
[105] HID GLOBAL. HID Products OMNIKEY 5321 CL USB Reader. Página web.
http://www.hidglobal.com/prod_detail.php?prod_id=331
[107] HORTON, I. Beginning Java 2. Birmingham (Reino Unido): Wrox Press, 1999.
ISBN 1-86100-223-8.
[167] MAURER, M.; MENZES, A. y TESKE, E. “Analysis of the GHS Weil descent
attack on the ECDLP over characteristic two finite fields of composite degree
(extended abstract)”. Lecture Notes in Computer Science. 2001, vol. 2247, pp.
195–213. ISBN 978-3-540-43010-0.
http://dx.doi.org/10.1007/3-540-45311-3_19
[168] MENEZES, A. J. Elliptic curve public key cryptosystems. Boston: Kluwer Aca-
demic Publishers, 1993. ISBN 0-79239-368-6.
[171] MENEZES, A.; QU, M. y VANSTONE, S. “Some new key agreement proto-
cols providing implicit authentication”. En: Proceedings of the Workshop on
Selected Areas in Cryptography - SAC ’95, pp. 22–32. Ottawa (Canadá), 1995.
http://leonardo.ee.queensu.ca/sac/sac95/papers/SAC_95_003.pdf
[173] MENEZES, A. y QU, M. “Analysis of the Weil descent attack of Gaudry, Hess
and Smart”. Lecture Notes in Computer Science. 2001, vol. 2020, pp. 308–318.
ISBN 978-3-540-41898-6.
http://dx.doi.org/10.1007/3-540-45353-9_23
358 Referencias
[175] MILNE, J. S. Elliptic curves. Charleston (Carolina del Sur): BookSurge, 2006.
ISBN 1-4196-5257-5.
[180] Mordell, L. J. “On the rational solutions of the indeterminate equations of the
third and fourth degrees”. Proceedings of the Cambridge Philosophical Society.
1922, vol. 21, pp. 179–192. ISSN 0305-0041.
[182] NAGELL, T. “Sur les propriétés arithmétiques des cubiques planes du premier
genre”. Acta Mathematica. 1929, vol. 52, pp. 93–126. ISSN 0001-5962.
http://dx.doi.org/10.1007/BF02592681
[197] NEXT COMPUTER, INC. Method and apparatus for public key exchange in a
cryptographic system. Inventor: R. E. Crandall. Fecha de solicitud: 1993-12-14.
Estados Unidos, patente de invención, 5.463.690. 1995-10-31.
http://www.google.com/patents/about?id=9TYTAAAAEBAJ&dq=5463690
[198] NEXT COMPUTER, INC. Method and apparatus for digital signature aut-
hentication. Inventor: R. E. Crandall. Fecha de solicitud: 2000-04-06. Estados
Unidos, patente de invención, 5.581.616. 2001-09-04.
http://www.google.com/patents/about?id=92kIAAAAEBAJ&dq=5581616
[200] NXP SEMICONDUCTORS. P5CT072 - Secure dual interface PKI smart card
controller. Ver. 1.3. 2004.
http://www.nxp.com/acrobat_download2/other/identification/
sfs085513.pdf
[202] NXP SEMICONDUCTORS. Smart solutions for smart services. Ver. 1.0.
2009.
http://www.nxp.com/acrobat_download2/literature/9397/75016728.
pdf
[203] OETIKER, T. et al. The not so short introduction to LATEX 2𝜀 . Ver. 4.31. 2010.
http://ftp.udc.es/CTAN/info/lshort/english/lshort.pdf
[205] OMNET ASSOCIATES. Method and apparatus for maintaining the privacy
of digital messages conveyed by public transmission. Inventores: J. L. Mas-
sey, J. K. Omura. Fecha de solicitud: 1982-09-14. Estados Unidos, patente de
invención, 4.567.600. 1986-01-28.
http://www.google.com/patents/about?id=i-M5AAAAEBAJ&dq=4567600
[206] OMNET ASSOCIATES. Computational method and apparatus for finite field
arithmetic. Inventores: J. K. Omura, J. L. Massey. Fecha de solicitud: 1982-
09-14. Estados Unidos, patente de invención, 4.587.627. 1986-05-06.
http://www.google.com/patents/about?id=lNsyAAAAEBAJ&dq=4587627
[207] OMNISEC A.G. Public key cryptographic system using elliptic curves over
rings. Inventor: U. Maurer. Fecha de solicitud: 1991-03-22. Estados Unidos,
patente de invención, 5.146.500. 1992-09-08.
http://www.google.com/patents/about?id=iuMbAAAAEBAJ&dq=5146500
[211] ORACLE CORP. Java smart card I/O API. Página web.
http://jcp.org/en/jsr/detail?id=268
[217] PÉREZ ORTIZ, J. A. Diccionario urgente de estilo científico del español. Iné-
dito, 1999.
http://www.dlsi.ua.es/~japerez/pub/pdf/duece1999.pdf
[222] POLLARD, J. M. “Monte Carlo methods for index computation (mod 𝑝)”.
Mathematics of Computation. Julio 1978, vol. 32, num. 143, pp. 918–924.
http://dx.doi.org/10.1090/S0025-5718-1978-0491431-9
[226] RANKL, W. y EFFING, W. Smart card handbook. 3a ed. West Sussex (Ingla-
terra): John Wiley & Sons, 2003. ISBN 0-470-85668-8.
[227] RIEMANN, B. “Theorie der Abel’schen functionen”. Journal für die reine und
angewandte Mathematik. Enero 1857, num. 54, pp. 115–155. ISSN 0075-4102.
http://dx.doi.org/10.1515/crll.1857.54.115
[228] RIESEL, H. Prime numbers and computer methods for factorization. 2a ed.
Boston: Birkhäuser, 1994. ISBN 0-8176-3743-5.
[229] RIVEST, R. L.; SHAMIR, A. y ADLEMAN, L.. “A method for obtaining di-
gital signatures and public-key cryptosystems”. Communications of the ACM.
Enero 1983, vol. 26, num. 1, pp. 96–99.
http://dx.doi.org/10.1145/359340.359342
[231] RSA DATA SECURITY INC. Methods and apparatus for efficient finite field
basis conversion. Inventores: B. S. Kaliski, Jr., Y. L. Yin. Fecha de solicitud:
1997-05-05. Estados Unidos, patente de invención, 5.854.759. 1998-12-29.
http://www.google.com/patents/about?id=HHIYAAAAEBAJ&dq=5854759
364 Referencias
[232] RSA LABORATORIES. RSA cryptography standard. Ver. 2.1. PKCS #1.
2002.
ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf
[235] SATOH, T. y ARAKI, K. “Fermat quotients and the polynomial time dis-
crete log algorithm for anomalous elliptic curves”. Commentarii Mathematici
Universitatis Sancti Pauli. Enero 1998, vol. 47, num. 1, pp. 81–92.
http://mathpc-satoh.math.titech.ac.jp/en/A1998.html
[236] SATOH, T. “The canonical lift of an ordinary elliptic curve over a finite field
and its point counting”. Journal of the Ramanujan Mathematical Society. 2000,
vol. 15, num. 4, pp. 247–270.
http://mathpc-satoh.math.titech.ac.jp/en/A2000.html
[237] SCHNEIER, B. Applied cryptography. 2a ed. Nueva York: John Willey & Sons,
1996. ISBN 0-471-11709-9.
[238] SCHOOF, R. “Elliptic curves over finite fields and the computation of square
roots mod 𝑝”. Mathematics of Computation. Abril 1985, vol. 44, num. 170, pp.
483–494.
http://dx.doi.org/10.1090/S0025-5718-1985-0777280-6
[239] SCHOOF, R. “Counting points on elliptic curves over finite fields”. Journal de
Théorie de Nombres de Bordeaux. 1995, vol. 7, pp. 219–254.
http://www.mat.uniroma2.it/~schoof/ctg.pdf
[241] SHANKS, D. “Class number, a theory of factorization, and genera”. En: Pro-
ceedings of 1969 Number Theory Institute. Stony Brook (Nueva York), 1969.
pp 415–440. ISBN 0-82181-420-6.
http://www.ams.org/mathscinet-getitem?mr=47:4932
Referencias 365
[243] SHOUP, V. A proposal for an ISO standard for public key encryption. Ver.
2.1. Inédito, 2001.
http://eprint.iacr.org/2001/112.pdf
[247] SMART, N. “The discrete logarithm problem on elliptic curves of trace one”.
Journal of Cryptology. Noviembre 1999, vol. 12, num. 3, pp. 193–196. ISSN
0933-2790.
http://dx.doi.org/10.1007/s001459900052
[251] SOL, R. Manual práctico de estilo. Barcelona: Urano, 1992. ISBN 84-7953-
020-0.
[257] STINSON, D. R. Cryptography: Theory and practice. 3a ed. Boca Ratón (Flo-
rida): Chapman & Hall/CRC, 2006. ISBN 1-58488-508-4.
[262] UNIVERSAL SMART CARDS. JCOP range (Java Card OS). Página web.
http://www.usmartcards.com/prod-jcop-range-java-card-os-10.php
[269] WILES, A. “Modular elliptic curves and Fermat’s Last Theorem”. Annals of
Mathematics. Mayo 1995, vol. 141, num. 3, pp. 443–551. ISSN 0003-486X.
http://www.jstor.org/stable/2118559