PFC Javier Hernandez Fisac 2015
PFC Javier Hernandez Fisac 2015
PFC Javier Hernandez Fisac 2015
VERIFICADOR MÓVIL DE
DOCUMENTOS DE TRÁNSITO
26 de junio de 2015
Título: VERIFICADOR MÓVIL DE DOCUMENTOS DE TRÁNSITO.
La defensa del presente Proyecto Fin de Carrera se realizó el día 26 de junio de 2015 siendo
calificada por el siguiente tribunal:
Calificación:
3
Agradecimientos
A mis padres, Jose y Rosa. La paciencia, más que la del Santo Job, acaba teniendo recompensa.
A Inés y Ricardo, por vuestro apoyo y comprensión en todo momento. A Guille y Marcos, pequeños
pero matones.
A Ascensio, David, Fernando y Pablo por su ayuda y su inestimable (e inabarcable) cono-
cimiento. A Jorge y Ángel, por su predisposición y sus ganas de aprender; sin su ayuda este
proyecto habría sido mucho más complicado.
A Álvaro, Antonio, Celia, Dani, Dante, David, Fernando, Igeño, Jordi, Juan Carlos, Lorena y
Miguel Ángel por acompañarme en estos años de crecimiento personal y laboral.
A los viejos charlies, el tiempo pasa, la huella queda.
A la pipol de la UC3M: Alex y Manme, Almu, Anita, Bari, Barroso, Charlie, Chema, Cris,
Demi, Gabo y Merche, Irene, Jorge, Laura, Lo, Luly, Manu, Majo, Miguel, Mora, Pepe, Repi,
Rober y Nuria, Stanley Wilson, Tania, Toco, Xergio y todos los demás. Tantas horas de estudio
y muchas más de cafetería.
A los indriles y exindriles: Amaia y Karim, Deivit, Diego GG, Ibone, Jordi y Diana, Johana,
Juanfran, Luis, Mariano, Oria, Rubs, Secre, Soto, Txomin, Yago, Yisas. Buenos ratos, que sean
por muchos años.
A los supervivientes del Curso de Noviembre, contrarios y añadidos: Carlos y Lourdes, David
y Maribel, Vero y Ferrán, Cerrato e Irene, Bea. Más de siete años y aún como el primer día.
A los segovianitas: Clara, Laura, Miguel y Javi, Pitu. Volver a casa es más fácil con vosotros.
A los Cenadores del Mundo: Diana, Irene, Luis, Adrián, Manuela, Vicente. Seguiremos
desafiando a la báscula de punta a punta del planeta Madrid.
Al much-more-than-six-pack y toda su prole: Javi, Rocío, Juli, Marina, Maite, Juan y llegados
o por venir que llenarán nuestros corazones (y pagarán nuestras pensiones).
A los weGroos: Debe, Diego y Juli. Mucho más que compañeros, más que amigos, ya sois
familia.
A mis hermanos y sus consortes: David e Inma, Jaime y María, Vicente y Maitane. Sobran
las palabras.
A toda mi familia, los que están y los que se fueron, por su apoyo y cariño incondicionales.
A todos los que no están sobre estas líneas pero sí en mis pensamientos, por acompañarme
en tantos buenos y malos momentos.
5
A Elena, mi razón de ser
Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa.
Blaise Pascal
7
Resumen
Optical Character Recognition (OCR): Para la lectura de los datos MRZ del docu-
mento a partir de una imagen preprocesada obtenida a través de la cámara del dispositivo.
Near Field Communication (NFC): Para el acceso de lectura de los elementos internos
del chip RFID del pasaporte electrónico.
Integrated Circuit Card (ICC): Para el acceso de lectura de los elementos internos del
DNIe.
9
Biometría: Cotejo de huella dactilar e imágenes faciales.
Uso de Transport Layer Security (TLS) a través de HTTPS con autenticación de cliente
para la conexión con servicios externos.
En este proyecto se diseña una solución a modo de aplicación móvil para plataformas Android
implementada utilizando el lenguaje Java y empleando Maven para la gestión de dependencias
y librerías, así como para la generación de entregables y empaquetamiento. Se emplean en el
desarrollo múltiples librerías de código libre (jMRTD, tess-two, KSoap2-android, Spongy Castle,
etcétera) que permiten realizar las verificaciones lógicas de los documentos MRTD, efectuar
verificaciones biométricas y cotejar los datos del titular del documento con bases de datos
policiales para comprobar posibles antecedentes o incidencias con el documento.
Además se evalúa el código con herramientas de calidad de código (PMD, Checkstyle) y se
implementan pruebas unitarias con JUnit comprobando su alcance con Cobertura.
10
Índice general
1. Introducción 19
1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.2. Objetivos del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3. Estructura del documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2. Preliminares 23
2.1. Machine Readable Travel Document (MRTD) . . . . . . . . . . . . . . . . . . . . 23
2.1.1. Estructura lógica de los datos (LDS) . . . . . . . . . . . . . . . . . . . . . 23
2.1.2. Esquema de Data Groups definidos para LDS . . . . . . . . . . . . . . . . 24
2.1.3. Mecanismos de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2. Documento Nacional de Identidad electrónico (DNIe) . . . . . . . . . . . . . . . . 31
2.2.1. Estructura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.2.2. Mecanismo de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.3. Sistemas externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.4. Elementos biométricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.4.1. Biometría facial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.4.2. Biometría dactilar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.5. Plataforma móvil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.5.1. Arquitectura del sistema Android . . . . . . . . . . . . . . . . . . . . . . . 38
2.6. Aplicaciones existentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
11
3.1. Componentes Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1.1. Smartphone Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1.2. Lector de huellas Bluefin . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.2. Componentes Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.2.1. Utilidades comunes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.2.2. API de inspección de documentos (InspectionService) . . . . . . . . . . . 45
3.2.3. API de consulta de documentos (DSQService) . . . . . . . . . . . . . . . . 47
3.2.4. API de antecedentes policiales (CRService) . . . . . . . . . . . . . . . . . 48
3.2.5. API de captura dactilar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.2.6. Módulo Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4. Implementación y pruebas 55
4.1. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.2. Librerías de terceros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.3. Implementación final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.3.1. Selección de modo de lectura . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.3.2. Verificación lógica, acceso y verificación policial . . . . . . . . . . . . . . . 59
4.3.3. Biometría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.3.4. Configuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.4. Calidad de código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.4.1. PMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.4.2. Reglas de Checkstyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.5. Pruebas y tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
12
6. Conclusiones 75
6.1. Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Acrónimos 77
Glosario 83
Bibliografía 101
Apéndices 111
13
14
Lista de Figuras
15
4.8. Resultado de verificación del DNIe . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.9. Representación de datos del DNIe . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.10. Intento de captura facial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.11. Captura facial satisfactoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.12. Selección de lector de huellas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.13. Solicitud de huella . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.14. Recuperación de huella . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.15. Verificación biométrica en pantalla de estado . . . . . . . . . . . . . . . . . . . . 63
4.16. Verificación biométrica en pantalla de datos . . . . . . . . . . . . . . . . . . . . . 63
4.17. Pantalla de configuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
16
Lista de Tablas
17
18
Capı́tulo 1
Introducción
1.1. Motivación
19
20 CAPÍTULO 1. INTRODUCCIÓN
Existen ya en la actualidad soluciones para realizar estos controles con equipos fijos situados
en puntos estratégicos de paso de fronteras, como los controles de los aeropuertos. Valga como
ejemplo de esto el ABC System que se ha implementado en gran parte de los aeropuertos españoles
de referencia [6].
Si bien es cierto que estos sistemas solucionan gran parte de la problemática descrita, surge
naturalmente la necesidad de disponer de sistemas análogos que sean portables y se puedan utilizar
con un nivel de fiabilidad similar en lugares en los que no estuviera disponible la infraestructura
propia de un aeropuerto, de manera que su uso se pueda extender a casi cualquier lugar.
El objetivo de este proyecto es desarrollar una solución móvil que permita realizar las
verificaciones lógicas de los documentos MRTD que cumplen el estándar de ICAO, además de
verificaciones biométricas tanto facial como dactilar, así como cotejar los datos del titular del
documento con bases de datos policiales para comprobar posibles antecedentes o incidencias con
el documento.
Adicionalmente se persigue la implementación de mecanismos similares para el DNIe del
estado español en sus versiones con chip por contactos (ICC).
A continuación se describen de forma resumida los diferentes capítulos de esta memoria para
facilitar su lectura y comprensión proporcionando una visión de conjunto.
Capítulo 3, Diseño del sistema: Este capítulo aporta el diseño de alto nivel y la
1.3 Estructura del documento 21
Capítulo 5, Presupuesto: Se trata de una sección en la que se detallan los costes totales
del proyecto, incluyendo materiales utilizados, horas de trabajo, etcétera.
Toda la información que posee el MRTD se almacena en una Estructura Lógica de Datos,
Logic Data Structure (LDS), definida por ICAO para que todos los países emisores dispongan de
los datos de la misma forma. Toda la información se encuentra organizada en grupos llamados
Data Groups (DGs) que agrupan la información relacionada. Cada uno de estos DGs se encuentra
almacenado en una serie de Ficheros Elementales, Elemental File (EF). Además existen un par
de EFs con funciones especiales. La disposición de los datos se muestra en la figura 2.2.
23
24 CAPÍTULO 2. PRELIMINARES
DG1 que contiene los datos registrados en la Zona de Lectura Mecánica, Machine Readable
Zone (MRZ).
DG2 que contiene al menos una imagen frontal del rostro del titular según se define en la
sección II del documento 9303, parte 3, Volumen 1 [4]. De forma opcional puede contener
imágenes secundarias como perfil izquierdo, perfil derecho, etcétera.
EF.COM que contiene información sobre el LDS, la versión, la lista de etiquetas, etcétera.
2.1 Machine Readable Travel Document (MRTD) 25
EF.SOD que contiene información sobre la integridad y autenticidad de los datos. Al igual
que EF.COM no aparece en el esquema anterior, pero se encuentra almacenado en un EF.
En la sección de medidas de seguridad se explicara con más detalle la función de éste.
Para más información respecto a cómo se almacenan la información, las etiquetas que
se utilizan para identificar cada sección, la longitud de los campos, etcétera, se recomienda
encarecidamente leer la sección III del documento de ICAO 9303, parte 3, volumen 2 [5].
Aunque existen múltiples mecanismos de seguridad física presentes en los MRTDs como
pueden ser el uso de tinta ultravioleta, integración de la foto con los patrones del pasaporte,
Impresión Rainbow, patrones anti-escáner, etcétera, en esta sección nos vamos a centrar en los
mecanismos de seguridad lógica que se encuentran relacionados con el proyecto.
Los mecanismos de seguridad lógica que establece ICAO para los MRTDs se muestran en la
tabla 2.1.
El objetivo del Control de Acceso Básico es garantizar que, en el caso de los chips sin contacto
(lectura a distancia), el dispositivo que está inspeccionando el MRTD está teniendo contacto
visual con el interior del pasaporte. Esta es la principal contramedida para accesos no legítimos a
distancia. Por ejemplo, disponiendo de la suficiente potencia, sería posible copiar el MRTD de
una persona que estuviera sentada a nuestro lado en el autobús o el metro. El Control de Acceso
Básico es opcional según ICAO, pero obligatorio según la Unión Europea.
El proceso para el Control de Acceso Básico es el siguiente:
Generación del par de claves necesarias para el cifrado (𝐾𝐸𝑁 𝐶 ) y la autenticación mediante
Message Authentication Code (MAC) (𝐾𝑀 𝐴𝐶 ) del canal de comunicación [4].
El Control de Acceso Básico únicamente nos permite acceder a los datos menos sensibles del
pasaporte, por ejemplo DG1, DG2.
Certificados CSCA
2.1 Machine Readable Travel Document (MRTD) 27
Los estados emiten dos tipos de certificados CSCA: certificados autofirmados y autoemitidos.
Los certificados autofirmados -comúnmente conocidos como raíz CSCA- se emiten normal-
mente cuando un CSCA inicia sus operaciones. Sin embargo, opcionalmente, se pueden
emitir nuevos certificados autofirmados cuando las claves CSCA se reemplazan por otras
nuevas. La clave pública en un certificado raíz CSCA verifica la firma de ese certificado [7].
Los certificados autoemitidos -comúnmente conocidos como enlaces CSCA- son emitidos
cuando una CSCA existente reemplaza sus claves con un nuevo par de claves. La clave
pública contenida en un certificado de enlace CSCA es la nueva clave pública de la CSCA.
La anterior pública del CSCA es la que verifica la firma en un certificado de enlace [7].
de la emisor del certificado y el asunto del certificado, que es, el propietario de la clave
pública certificada, son idénticos [7].
Son certificados emitidos por la CSCA cuyo sujeto es la identidad del firmante de documentos
cuya clave pública está contenida en el certificado [7].
Al igual que con los certificados CSCA, el elemento Key Usage restringe el uso de la clave
pública certificada. Las claves públicas de DS sólo deben utilizarse para verificar firmas
digitales [7].
Calcular los hashes de los DGs, es decir, calcular su propia versión del SOD. Verificar la
firma del SOD, es decir, utilizar la clave pública del DS para obtener el valor de la firma
en claro.
Comparar el valor de la firma calculado, con el obtenido a través del pasaporte. En caso de
que ambos valores sean iguales se puede asegurar la autenticidad de los DGs del pasaporte.
Como contrapartida, no se puede asegurar que todos estos datos no hayan sido clonados.
La Autenticación Activa, AA, previene la clonación de todos los datos del documento mediante
la utilización de un par de claves únicos del dispositivo. La clave pública del chip es almacenada
en el DG15, y por lo tanto protegida de ser modificada por la Autenticación Pasiva y la clave
privada se encuentra en la zona de memoria segura del chip y no puede ser leída y/o modificada
de forma externa. La Autenticación Activa es opcional según ICAO.
Los pasos a seguir en este procedimiento son los siguientes:
2.1 Machine Readable Travel Document (MRTD) 29
Utilizando la clave pública, del DG15, se verifica que el reto enviado es el mismo que el
recibido. Si los valores son los mismos entonces se puede asegurar que el chip no ha sido
clonado, puesto que de haberlo sido no poseería la clave privada.
A partir de ese momento se utilizarán las nuevas claves de sesión derivadas para establecer el
canal seguro.
30 CAPÍTULO 2. PRELIMINARES
Cada país que quiera participar en un entorno EAC necesita establecer una CVCA. La
CVCA autoriza Autoridades de Certificación de Verificación de Documentos (DVCA) que
a su vez emiten certificados de Inspección de Documentos (IS).
que hayan expedido. El DVCA emitirá entonces los certificados a todos los Sistemas de
Inspección (IS) del país.
los Sistemas de Inspección (IS) serán los encargados de realizar los procesos de acceso EAC
en los pasaportes inspeccionados.
• El MRTD se encuentra en posesión del certificado CVCA del país donde se emitió,
por lo que, utilizando dicha clave pública, verifica la cadena recibida del sistema de
inspección.
• El MRTD descifra el reto con la clave pública que recibió con la cadena de certificados
en el punto anterior, y compara el reto enviado con el obtenido. En caso de que ambos
retos sean iguales se puede asegurar de que el sistema de inspección se trata de un
dispositivo autorizado.
de su titular.
Para responder a las nuevas necesidades de la sociedad de la información se actualiza el
DNI a su versión electrónica, el Documento Nacional de Identidad electrónico (DNIe), similar al
tradicional y que incorpora un chip ICC, capaz de guardar de forma segura información y de
procesarla internamente. Esta nueva versión permite, además de su uso tradicional, acceder la
realización de firmas digitales, el acceso a servicios estatales o privados a través de Internet y la
identificación electrónica del titular [8].
El DNIe presenta su información distribuida en tres zonas con diferentes niveles y condiciones
de acceso [9]:
• Claves Diffie-Hellman.
• Datos de filiación del ciudadano (los mismos que están en el soporte físico).
• Imagen de la fotografía.
Entre los certificados que se almacenan en la tarjeta se encuentran los siguientes certificados
electrónicos:
Si bien entre los datos que proporciona el DNIe no está la huella dactilar del titular, existe
una operativa disponible que permite un proceso de Match-On-Card de la huella dactilar
proporcionando las minucias de una huella escaneada según el formato definido en la parte 2 de
la ISO/IEC 19794-2.
Los accesos al chip del DNIe se rigen por los siguientes componentes de seguridad:
34 CAPÍTULO 2. PRELIMINARES
Autenticación de los elementos que intervienen en el proceso para asegurar que la tarjeta
que se accede ha sido emitida por la DGP española.
Servicio para la realización de los mecanismos de seguridad de los MRTDs que gestiona
de forma centralizada la inspección de los documentos. En este sentido cabe señalar la
existencia del sistema Electronic Document Inspection System (EDIS) que permite estas
operaciones a nivel español [14].
Servicio para la realización de los mecanismos de seguridad de los DNIe que implementa
la autenticación interna/externa indicada en la norma CWA 14890 [10, 11] para ICC del
DNIe. Existe a estos efectos el sistema policial Servicio de Autenticación de ICC (SAI) que
permite estas operaciones a nivel español.
Tanto los documentos MRTD como los DNIe contienen elementos biométricos faciales y
dactilares, en algunos casos extraíbles, en otros verificables:
Los documentos MRTD proveen las imágenes faciales en el DG2, tras haber accedido a los
datos mediante BAC, según la estructura Common Biometric Exchange Formats Framework
(CBEFF) definida en el estándar CBEFF NISTIR 6529-A. El formato de las imágenes cumple el
estándar ISO/IEC 19794-5 y puede estar codificado en JPEG o JPEG 2000.
En el caso del DNIe la imagen facial se almacena codificada en JPEG.
36 CAPÍTULO 2. PRELIMINARES
Las huellas dactilares de los documentos MRTD se proveen en el DG3, previa realización
del proceso EAC, en la estructura CBEFF definida en el estándar CBEFF NISTIR 6529-A. El
formato de las imágenes cumple el estándar ISO/IEC 19794-4 y el algoritmo de codificación es
WSQ que es un algoritmo de compresión desarrollado por el FBI, el Laboratorio Nacional de Los
Alamos, y el National Institute of Standards and Technology (NIST) y ampliamente utilizado
para imágenes de huellas dactilares en escala de grises. Además de éstos, se emplea el estándar
NISTIR 7151 para procesos relacionados con la calidad de la imagen.
En el caso del DNIe, como ya se ha comentado anteriormente, no existe la posibilidad de
extraer la huella del ICC, si bien es posible realizar un proceso de Match-On-Card de la huella
dactilar proporcionando las minucias de una huella escaneada según el formato definido en la
ISO/IEC 19794-2.
Amplia implantación del sistema en el mercado español en el que, si bien ha tocado techo
en el último año, se sitúa muy por encima del resto de sistemas con una gran diferencia
como muestra la figura 2.2.
Coste medio menor que otras plataformas, sobre todo en comparación con iOS como se
puede ver en la figura 2.6.
2.5 Plataforma móvil 37
En general Android destaca como opción elegida cuando se trata de desarrollos en los que
son importantes criterios como:
• Facilidad de portabilidad.
En la figura 2.8 se puede ver la relación entre la elección habitual de plataforma y los
criterios comentados.
Figura 2.8: Porcentaje de prioridad de elección de plataforma por criterios de selección [18]
Entre las múltiples características del sistema Android, a continuación se señalan aquellas
más importantes para el desarrollo del proyecto.
2.6 Aplicaciones existentes 39
Soporte Java: Aunque la mayoría de las aplicaciones están escritas en Java, no hay una
Java Virtual Machine (JVM) en la plataforma. El Java bytecode no es ejecutado, sino que
primero se compila en un ejecutable y corre en la Máquina Virtual Dalvik.
Multitarea: Las aplicaciones o procesos que no estén ejecutándose en primer plano reciben
ciclos de reloj.
Existen actualmente en el Google Play Store varias aplicaciones relacionadas con la lectura de
documentos electrónicos. Son interesantes a este respecto las que se mencionan a continuación:
ajMRTD: Esta aplicación, se sirve de la librería jMRTD (que se menciona más adelante
en esta memoria) para realizar lecturas de documentos MRTD. La aplicación permite la
introducción manual de datos de diferentes documentos para la realización del BAC. Una
vez accedido el pasaporte lee los datos del DG1 y muestra la imagen facial extraída del
DG2 [19].
40 CAPÍTULO 2. PRELIMINARES
NFC Passport Reader: Al igual que la aplicación anterior, ésta emplea la librería jMRTD
para realizar la lectura de documentos MRTD. En este caso se ofrece la lectura a través de
OCR de los datos de la MRZ para la obtención de los datos necesarios en el BAC. Igual que
en el caso anterior, se leen los datos del DG1 y muestra la imagen facial extraída del DG2,
además de ofrecer un resumen de los elementos de seguridad presentes en el pasaporte [20].
En general se puede observar que las aplicaciones disponibles permiten la realización del BAC,
pero no del resto de mecanismos de seguridad como EAC, PA o AA y por lo tanto tampoco
permiten el acceso completo a los datos del pasaporte, incluido el DG3.
Las aplicaciones descritas no incluyen ningún tipo de verificación de señalamientos policiales,
esto es, antecedentes policiales, órdenes de búsqueda y captura, avisos de pérdida o robo del
documento, etcétera. Igualmente no proveen mecanismos para la verificación de los elementos
biométricos incluidos en el documento.
Capı́tulo 3
Diseño del sistema
Como se pudo ver en la sección 2.6, existen en el mercado algunas aplicaciones capaces de
acceder a la información principal de los documentos MRTD. Si bien dichas aplicaciones realizan
una primera aproximación a la lectura de los documentos de tránsito, no son capaces de leer
tarjetas ICC y sólo permiten gestionar el mecanismo de seguridad BAC. Sería deseable una
solución capaz de gestionar todos los mecanismos descritos en el apartado 2.1.3 y acceder a la
información biométrica completa, incluida la dactilar presente en el DG3.
En este sentido, el sistema propuesto consiste en una aplicación móvil para dispositivos
Android que permitirá:
Verificación de todos los mecanismos de seguridad (BAC, PA, EAC, AA) de los documentos
MRTD a través de sistemas externos con acceso a certificados CSCA y CVCA si fuera
necesario.
Lectura de los datos de de los documentos, incluidos los elementos biométricos faciales y
dactilares si están disponibles.
41
42 CAPÍTULO 3. DISEÑO DEL SISTEMA
En la figura 3.1 se presenta un esquema general de la aplicación que permite aclarar cuáles
serán los componentes hardware imprescindibles para el funcionamiento de la solución.
Lector NFC: El teléfono incluirá una antena NFC para realizar las comunicaciones con
los documentos MRTD.
USB OTG: El móvil debe soportar el uso de USB OTG para gestionar las comunicaciones
con las tarjetas ICC del DNIe.
3.2 Componentes Software 43
Bluetooth: Se utilizarán conexiones por Bluetooth para leer las huellas dactilares (más
adelante se especifica el hardware del lector de huellas) y poder realizar la verificación
biométrica dactilar correspondiente.
Conexión a Internet: Para poder acceder a los diferentes sistemas policiales de verifica-
ción, autenticación y señalamientos.
Entre las múltiples opciones disponibles, se ha elegido para la solución el lector de huellas
Bluefin del fabricante TopLink. Éste es un dispositivo portátil de escaneo de huellas dactilares
que utiliza un sensor capacitivo de silicio para capturar las huellas dactilares. Cuenta con una
interfaz Bluetooth inalámbrica para la comunicación con el teléfono. El dispositivo se identifica a
sí mismo y ofrece un puerto Serial Port Profile (SPP) con el host de conexión. Además de la clave
de acceso Bluetooth y la autenticación, se puede establecer otra sesión de comunicación segura
para los comandos y la transferencia de datos con el teléfono utilizando Advanced Encryption
Standard (AES) [21].
Se desarrolla un componente general, de uso habitual para el resto de componentes, con una
serie de utilidades generalistas y frecuentes. Entre las utilidades a implementar se incluirán:
Este módulo describe un API para realizar las tareas de inspección de documentos, esencial-
mente el proceso de verificación de SOD que se produce durante la Autenticación Pasiva (PA)
y los procesos de verificación y firma durante la realización del Control de Acceso Extendido
(EAC).
En la figura 3.3 se puede ver un diagrama de clases del API de inspección de documentos
llamada InspectionService.
<<Java[Class>>
CSCACertificatesReturn
certificateMode:[byte
<<Java[Interface>>
NONE:[CSCACertificatesReturn <<Java[Class>>
IInspectionService
DS_CERTIFICATE:[CSCACertificatesReturn CVCAReference
CSCA_CERTIFICATE:[CSCACertificatesReturn getCVCertificateChainNStringLCVCAReference_:CertificateChainResponse
referenceObject:[Object
ALL_CERTIFICATES:[CSCACertificatesReturn signChallengeNStringLbyte[]LStringLString_:SignChallengeResponse
verifySODNStringLbyte[]LCSCACertificatesReturnLDate_:SODVerifyResponse CVCAReferenceNObject_
CSCACertificatesReturnNbyte_
verifySignatureNStringLbyte[]LCSCACertificatesReturnLDate_:SignatureVerifyResponse toStringN_:String
equalsNObject_:boolean
getCertificateModeN_:byte
hashCodeN_:int
<<Java[Class>> <<Java[Class>>
toStringN_:String
SignatureVerifyResponse SODVerifyResponse
signData:[byte[] sodData:[byte[]
<<Java[Class>> signature:[byte[] serialNumber:[byte[]
<<Java[Class>>
SignChallengeResponse serialNumber:[byte[] issuer:[String
CertificateChainResponse
issuer:[String signer:[String
challengeSignature:[byte[]
CertificateChainResponseN_ signer:[String cscaCertificate:[byte[]
SignChallengeResponseN_
CertificateChainResponseNErrorInfo_ crl:[byte[] dsCertificate:[byte[]
SignChallengeResponseNbyte[]_
CertificateChainResponseNList<CVCertificate>_ tokenOCSP:[byte[] crl:[byte[]
SignChallengeResponseNErrorInfo_
numCertificates:[int SODVerifyResponseN_
certificatesChain:[byte[] SODVerifyResponseNbyte[]Lbyte[]LStrinjjj
SignatureVerifyResponseN_ SODVerifyResponseNErrorInfo_
Dcertificates mjjT
SignatureVerifyResponseNbyte[]Lbjjj getCSCACertificateN_:byte[]
Este método debe devolver la cadena completa de certificados CVC-EAC del CAR indicado
a partir de los siguientes datos:
Devolverá la respuesta con la cadena completa de certificados CVC-EAC del CAR indicado o los
motivos del error.
Este método debe realizar la firma del reto para la validación EAC a partir de los siguientes
datos:
La referencia del titular de certificado (CHR) del certificado CVC -EAC de IS asociado
a la clave privada con la cual se desea que se emita la firma del reto enviado según la
especificación TR-03110 [22, 23].
Devolverá la respuesta con la firma del reto o los motivos del error.
Este método debe verificar los datos de SOD del documento a inspeccionar a partir de los
siguientes datos:
Este método debe verificar los datos de firma del documento a inspeccionar a partir de los
siguientes datos:
Se describe un API para lanzar las consultas sobre el estado policial de los documentos
verificados.
En la figura 3.4 se puede ver un diagrama de clases del API de inspección de documentos
llamada InspectionService.
En el diagrama se aprecia que se define como elemento principal la interfaz IDSQService que
provee el método
<<JavaNInterface>>
IDSQService
checkRecord0DSQServiceRequest.:DSQServiceResponse
<<JavaNClass>> <<JavaNClass>>
DSQServiceResponse DSQServiceRequest
DSQServiceResponse0. DSQServiceRequest0.
DSQServiceResponse0List<DSQServiceDocument>. DSQServiceRequest0List<DSQServiceDocument>.
addResult0DSQServiceDocument.:void addDocument0DSQServiceDocument.:void
<<JavaNClass>>
DSQServiceDocument
idNumber:NString
supportNumber:NString
country:NString
message:NString
category:NString
DSQServiceDocument0.
DSQServiceDocument0String,String,String.
DSQServiceDocument0String,String,String,String,String.
Este método debe realizar una consulta de estado de documentos según los datos de
entrada indicados en el tipo DSQServiceRequest que contiene una colección de elementos
DSQServiceDocument cuyos parámetros principales son:
Se describe un API para lanzar las consultas sobre señalamientos policiales de los titulares de
los documentos verificados.
En la figura 3.5 se puede ver un diagrama de clases del API de registro policial llamada
CRService.
3.2 Componentes Software 49
<<JavaOInterface>>
ICRService
checkRecordLCRServiceRequest-:CRServiceResponse
<<JavaOClass>> <<JavaOClass>>
CRServiceResponse CRServiceRequest
CRServiceResponseL- CRServiceRequestL-
CRServiceResponseLList<CRServiceSubject>*CRServiceError- CRServiceRequestLList<CRServiceSubject>-
addResultLCRServiceSubject-:void addSubjectLCRServiceSubject-:void
getErrorL-:CRServiceError getSubjectsL-:List<CRServiceSubject>
getResultsL-:List<CRServiceSubject> setSubjectsLList<CRServiceSubject>-:void
setErrorLCRServiceError-:void
setResultsLList<CRServiceSubject>-:void
<<JavaOClass>> <<JavaOClass>>
CRServiceError CRServiceSubject
code:OString name:OString
description:OString surname:OString
1errors dateOfBirth:ODate
CRServiceErrorL-
CRServiceErrorLString*String- 0..0 positiveMatch:Oboolean
getCodeL-:String active:Oboolean
getDescriptionL-:String CRServiceSubjectL-
setCodeLString-:void CRServiceSubjectLString*String*Date*boolean*boolean-
setDescriptionLString-:void addErrorLCRServiceError-:void
En el diagrama se aprecia que se define como elemento principal la interfaz ICRService que
provee el método
Este método debe realizar una consulta de estado de documentos según los datos de entrada
indicados en el tipo CRServiceRequest que contiene una colección de elementos CRServiceSubject
cuyos parámetros principales son:
<<JavaqInterface>>
IFingerprintReader
connectDevice]Object,booleanM:void
isReaderDevice]ObjectM:boolean
listDevices]M:List<?qextendsqObject>
releaseConnection]M:void
requestFingerprint]M:void
setReaderListener]ReaderListenerM:void
stopAll]M:void
stopFingerprintRead]M:void
<<JavaqInterface>>
ReaderListener
getContext]M:Context
onConnecting]ObjectM:void
onConnectionFailed]Object,booleanM:void
onFingerprintsRead]List<byte[]>,int,boolean,booleanM:void
onFingerprintsReadFailed]M:void
onFingerprintsReading]M:void
onOperationMessage]StringM:void
onReaderConnected]ObjectM:void
onReaderDisconnected]M:void
Lectura mediante un lector de tarjetas ICC conectado al móvil a través de USB OTG de
un DNIe.
52 CAPÍTULO 3. DISEÑO DEL SISTEMA
Introducción manual del número del documento, fecha de nacimiento y fecha de caducidad,
datos necesarios para el BAC, también para documentos MRTD.
Una vez elegida la opción deseada, se iniciarán los procesos de verificación y lectura del
documento, realizándose primero las verificaciones de seguridad correspondientes y a continuación
accediendo a todos los datos disponibles.
Verificación y acceso
Basic Access Control (BAC), que da acceso a los datos básicos de la MRZ, a la imagen
facial y a la firma manuscrita, si es que existe.
En el caso del DNIe se trata de establecer un canal administrativo con la tarjeta a través del
servicio policial correspondiente. El solo hecho de establecer dicho canal ya garantiza mutuamente
la autenticidad de la tarjeta y del sistema de lectura.
3.2 Componentes Software 53
Tras la verificación del documento y habiendo obtenido los datos, se mostrará el resultado de
las distintas verificaciones y se presentarán los datos extraídos del documento incluidos, si son
accesibles y están presentes en el documento, fotografía facial, huella dactilar y firma manuscrita.
En el caso concreto del DNIe, se mostrará también información relacionado con los certificados
X.509 de firma y autenticación.
Verificación Policial
Captura facial
Obtención de huellas
Configuración
Para gestionar todos los parámetros de configuración (URLs de servicios, usuarios, contraseñas,
parámetros del lector de huellas, configuraciones de seguridad, etcétera) existirá en la aplicación
una zona de configuración al efecto.
Capı́tulo 4
Implementación y pruebas
4.1. Herramientas
Para el desarrollo del proyecto se han empleado las siguientes herramientas y tecnologías:
55
56 CAPÍTULO 4. IMPLEMENTACIÓN Y PRUEBAS
A parte de todo lo señalado anteriormente, cabe destacar el uso de una serie de herramientas
relacionadas con LATEX [29] para la redacción de esta memoria:
TEXnicCenter, IDE de Código Abierto que integra la funcionalidad para crear, escribir,
corregir, ver e imprimir documentos LATEX, en su versión 2.02, que se ha utilizado para la
edición de los ficheros TEX [31].
jMRTD, implementación Java de Código Abierto de los estándares MRTD de ICAO. Esta
librería permite leer, decodificar, y validar la información de los pasaportes, si bien se han
sobrescrito ciertos comportamientos para la realización de los mecanismos de seguridad que
dependen de sistemas externos (PA y EAC descritos en la sección 2.1.3) [33]. Esta librería
emplea a su vez SCUBA para el acceso a las tarjetas Smart Card (SC) [34].
slf4j ylog4j, librerías utilizadas para la gestión de trazas de la aplicación [39, 40].
jmulticard (DNIDroid Inteco), librería que encapsula los accesos al DNIe modelándolo
como un proveedor de seguridad de Java JCA [41].
KSoap2-android para gestionar las llamadas y respuestas a Web Services SOAP [42].
Esta librería se emplea junto con Simple XML que se encarga de la serialización y
deserialización de XML.
Spongy Castle para realizar las tareas criptográficas, firmas, hashes y en general cualquier
acción relacionada con la Java Cryptography Extension (JCE).
Inicialmente se presenta al usuario una pantalla en la que elegir qué modo de lectura desea para
el documento que quiere verificar. Según todo lo descrito en el apartado 3.2.6, se proporcionarán
3 posibilidades que se pueden ver en la figura 4.1:
Lectura mediante un lector de tarjetas ICC conectado al móvil a través de USB OTG de
un DNIe.
Introducción manual del número del documento, fecha de nacimiento y fecha de caducidad,
datos necesarios para el BAC, también para documentos MRTD.
hasta que se produzca una lectura correcta por OCR de los datos como la de la figura 4.3. El
proceso para cada lectura será:
3. Conversión a blanco y negro con un filtro que elimine todos los colores que no sean negro o
próximos al negro (es decir, que los componentes de color rojo verde y azul sean pequeños
y muy poco diferentes).
5. Eliminación de márgenes izquierdo, inferior y derecho para descartar las zonas que pudieran
pasar el primer recorte y que estén fuera del propio documento.
b) Se elimina cualquier línea con una longitud menor al mínimo de línea para los tipos
de MRZ admitidos.
c) Se completan con caracteres de relleno las líneas que no llegan al tamaño de la máxima
línea encontrada.
d) Se comprueba que la longitud sea válida, es decir que sea de 88 caracteres para las
MRZ tipo ID3 de 2 líneas de los MRTDs o de 90 caracteres para las MRZ tipo ID1 de
3 líneas de los DNIe y que los dígitos de control de la MRZ sean correctos [1]. En caso
negativo, se vuelve a realizar el proceso con una nueva captura.
Figura 4.2: Intento de captura de MRZ Figura 4.3: Captura de MRZ correcta
Con los datos necesarios, ya sea MRZ, datos manuales de BAC o de manera directa para el
DNIe, se comenzará la verificación y lectura del documento.
Figura 4.4: Proceso de verificación de MRTD Figura 4.5: Resultado de verificación de MRTD
Imagen facial.
Figura 4.6: Representación de datos de MRTD Figura 4.7: Resultado con señalamiento policial
Figura 4.8: Resultado de verificación del DNIe Figura 4.9: Representación de datos del DNIe
4.3.3. Biometría
Captura facial
La captura se realizará hasta obtener una imagen clara, como se ve en la figura 4.10. Una vez
obtenida una imagen con suficiente calidad, se realizará el cotejo con los elementos biométricos
del documento y se informará de la coincidencia o de su ausencia. Un ejemplo de coincidencia
facial se ve en la figura 4.11.
62 CAPÍTULO 4. IMPLEMENTACIÓN Y PRUEBAS
Figura 4.10: Intento de captura facial Figura 4.11: Captura facial satisfactoria
Obtención de huellas
Al igual que en la captura facial, en caso de estar disponibles y ser accesibles las huellas del
documento, se podrá pulsar sobre la imagen correspondientes para ver las huellas disponibles y
pulsar una segunda vez para realizar la captura a través del lector de huellas Bluefin descrito en
el apartado 3.1.2.
Para este proceso se utilizará la implementación correspondiente del API FingerprintReader
descrito en el apartado 3.2.5 como interfaz de comunicación con el lector de huellas. La aplicación
guiará el proceso del usuario desde la elección del lector de huellas hasta la captura final como se
ven en las figuras 4.12, 4.13 y 4.14.
Los resultados de verificación biométrica, tanto facial como dactilar, podrán verse en la
pantalla de resumen de estado o en la de datos del documento, como se ve en las figuras 4.15
y 4.16.
4.3.4. Configuración
Para gestionar todos los parámetros de configuración (URLs de servicios, usuarios, contraseñas,
parámetros del lector de huellas, configuraciones de seguridad, etcétera) existe en la aplicación
una pantalla al efecto accesible desde la barra de acciones de la pantalla de bienvenida. Una
captura se puede ver en la figura 4.17.
4.4 Calidad de código 63
Figura 4.12: Selección de lector Figura 4.13: Solicitud de huella Figura 4.14: Recuperación de
de huellas huella
Todas las librerías desarrolladas se han validado con las herramientas de calidad de código
PMD, para el análisis de eficiencia y calidad del código y Checkstyle (CS) para el control,
estandarización, documentación y mejora de la calidad del código, superando todas las validaciones
con el 100 % de éxito. Se han utilizado para dicha validación las reglas definidas en los apéndices A y
64 CAPÍTULO 4. IMPLEMENTACIÓN Y PRUEBAS
B cuya utilización se detalla más adelante en esta sección. Además se ha realizado una verificación
de cobertura de código con la herramienta Cobertura sobre el módulo de utilidades comunes,
cuyos resultados están presentes en el apéndice D
Estas reglas se definen como restricciones comunes para cualquier tipo de librería ((ver
apéndice A.1)). Se han aplicado a los siguientes módulos:
Módulo del API de inspección descrito en el apartado 3.2.2 junto con la librería cliente
específica para el servicio policial correspondiente y el conector de implementación de dicha
librería con la API.
Módulo del API de señalamientos policiales descrito en el apartado 3.2.4 junto con la librería
cliente específica para el servicio policial correspondiente y el conector de implementación
de dicha librería con la API.
Módulo del API de estado de documentos descrito en el apartado 3.2.3 junto con la librería
cliente específica para el servicio policial correspondiente y el conector de implementación
de dicha librería con la API.
Se han definido reglas específicas en función de las peculiaridades del framework de Android
(ver apéndice A.1) que se han aplicado al módulo principal de la aplicación, el componente
Android MRTDVerifier, que incluye el API de lector de huellas dactilar descrita en 3.2.5 y que
integra todo el resto de componentes y librerías mencionadas a lo largo de este capítulo.
Se han definido restricciones comunes para cualquier tipo de librería (ver apéndice B.1) que
se han aplicado a todos los módulos ya mencionados, a saber:
Se han realizado tests unitarios con la herramienta JUnit en todas las librerías desarrolladas
en el proyecto. Como muestra se incluye en el apéndice C el informe de ejecución de los tests de
JUnit de la librería de utilidades comunes.
Además, se ha utilizado la herramienta Cobertura también para dicha librería, con el resultado
que se ve en el apéndice D.
66 CAPÍTULO 4. IMPLEMENTACIÓN Y PRUEBAS
Capı́tulo 5
Presupuesto del proyecto
En este capítulo se justifican los costes de la realización de este proyecto. Se detallan los
costes en gastos de personal, de material, indirectos y en general todos los gastos derivados del
proyecto.
Al haber sido suprimidos por ley los baremos orientativos de honorarios que tradicionalmente
venían publicando los Colegios Profesionales para alinearse con las directivas europeas, actual-
mente los honorarios son libres y responden al libre acuerdo entre el profesional y su cliente [43].
Debido a esto se ha realizado un cálculo razonable basado en [44]:
Costes directos del ingeniero y de sus colaboradores. Se tiene que considerar el coste de las
horas de todos los integrantes del equipo de trabajo y las empleadas en trabajos técnicos y
las visitas a realizar.
Porcentaje del total del año de gastos generales que se repercuten a cada trabajo concreto
como los derivados de impuestos del trabajo personal, alquiler de local, amortización de
equipos, seguridad social, intereses de préstamos, etcétera.
Para la realización del presupuesto, los costes se expresan en Euros (C) y las cantidades
calculadas se han redondeado a las centésimas.
67
68 CAPÍTULO 5. PRESUPUESTO DEL PROYECTO
En la tabla 5.1 se muestran las fases del proyecto y el tiempo aproximado para cada una de
ellas.
De los datos se desprende que el tiempo total dedicado por el proyectando ha sido de 1 000
horas, de las cuales aproximadamente un 20 % han sido compartidas con el tutor del proyecto
(200 horas), por lo que el total asciende a 1 200 horas.
Estas horas se han dedicado al proyecto durante un periodo completo aproximado de 9 meses.
Para calcular el coste de personal se pueden utilizar como referencia las bases y tipos de
cotización de 2015 de la seguridad social que se ven en la tabla 5.2.
A partir de los datos de cotizaciones se puede inferir una media de 2 331,45 Cal mes para
ingenieros y licenciados y de 2 241,30 C al mes para ingenieros técnicos. Si suponemos 22 días
laborables al mes con jornadas de 8 horas, podremos considerar unas 176 horas al mes. Así
obtendríamos 13,25 C por hora para ingenieros y licenciados y de 12,73 C por hora para ingenieros
técnicos.
Para el cálculo completo del coste de personal será necesario añadir a las tasas de gasto bruto
del personal, los cálculos de gasto en seguridad social del empleado en función de los datos de la
tabla 5.3, el gasto en formación profesional en función de la tabla 5.4 y el gasto por desempleo
en función de la tabla 5.5.
5.1 Costes de personal 69
A partir de estos datos se ha establecido una tarifa de 12,73 C/hora para el proyectando y
de 13,25 C/hora para el tutor. Considerando que las horas empleadas son horas ordinarias y que
los contratos son de tipo general, el cálculo completo de gastos en personal quedaría como se
refleja en la tabla 5.6.
En la tabla 5.8 se recogen los costes de equipamiento utilizados para la realización del proyecto.
Concepto Importe
Impresión de memorias 200,00 C
Gastos en papelería 20,00 C
Coste total 220,00 C
Se considerarán como costes indirectos del proyecto aquellos relacionados con el gasto de luz,
la conexión a Internet, y los desplazamientos realizados. El cálculo de estos costes resulta difícil
de cuantificar debida a la elevada volatilidad en los precios. Aún así, se establece una estimación
razonable en la tabla 5.11. Para estas estimaciones se ha considerado:
El cálculo de coste por hora del resto de gastos indirectos se realiza en la tabla 5.10.
Finalmente, se desprende de los datos anteriores que el coste total del proyecto ha sido de
26 545,26 C después de impuestos.
74 CAPÍTULO 5. PRESUPUESTO DEL PROYECTO
Capı́tulo 6
Conclusiones
Cabe destacar, tras la elaboración del proyecto y de esta memoria que los documentos
de identificación personal y de tránsito de personas han evolucionado en los últimos años, de
manera paralela a la revolución tecnológica de los Smartphones, permitiendo la automatización
de procesos sin intervención humana de maneras difícilmente imaginables hace 20 años.
Esta evolución junto con la vertiginosa reducción del tamaño y precio, la mejora de las
prestaciones y fiabilidad de periféricos antes en manos de muy pocos y el asentamiento y mejora
de fiabilidad de múltiples tecnologías inalámbricas (NFC, Wi-Fi, Bluetooth) permite imaginar
escenarios casi futuristas en los que las autoridades del estado o cualquier otro usuario autorizado
tiene al alcance de su bolsillo la posibilidad de identificar o identificarse de forma rápida, segura
y fiable, accediendo a sistemas centralizados.
Las ideas comentadas y este proyecto abren una puerta a soluciones e ideas variadas, que se
comentan a continuación.
75
76 CAPÍTULO 6. CONCLUSIONES
alineado con los estándares MRTD de ICAO, y añadiendo también el mecanismo de control
de acceso PACE [48, 50]. Sería pertinente extender la solución para soportar esta nueva
capacidad.
#|A|B|C|D|E|G|H|I|J|L|M|N|O|P|R|S|T|U|V|W|X
AC Autoridad de Certificación. 46
ADT Android Development Tools. 39, 55, 77, Ver: Android Development Tools
AES Advanced Encryption Standard. 43, 77, Ver: Advanced Encryption Standard
API Application Programming Interface. 12, 38, 45, 47–51, 53, 59, 62, 64, 65, 77, 83, 86, 91,
Ver: Application Programming Interface
APK Application Package File. 77, 84, Ver: Application Package File
ASCII American Standard Code for Information Interchange. 77, 91, Ver: American Standard
Code for Information Interchange
77
78 Acrónimos
BAC Basic Access Control. 10, 25, 26, 29, 35, 39–42, 52, 57, 59, 75, 89
CA Chip Authentication. 29
CAR Certification Authority Reference. 31, 46, 78, Ver: Certification Authority Reference
CBEFF Common Biometric Exchange Formats Framework. 35, 36, 88, Ver: CBEFF NISTIR
6529-A
CHR Certification Holder Reference. 46, 78, Ver: Certification Holder Reference
CRL Certificate Revocation List. 10, 26, 47, 78, 92, Ver: Certificate Revocation List
CSCA Country Signing Certification Authority. 10, 15, 26–28, 35, 41, 47, 52, 78, Ver: Country
Signing Certification Authority
CVC Country Verifying Certificate. 46, 78, Ver: Country Verifying Certificate
CVCA Country Verifying Certificate Authority. 15, 30, 31, 41, 52, 78, Ver: Country Verifying
Certificate Authority
DG Data Group. 23–26, 28, 29, 35, 36, 39–41, 60, 78, Ver: Data Group
DNIe Documento Nacional de Identidad electrónico. 9, 11, 20, 31–36, 41, 42, 51, 52, 57, 59–61,
75, 78, 88, 92, Ver: Documento Nacional de Identidad electrónico
DOM Document Object Model. 44, 79, Ver: Document Object Model
DVCA Document Verifier Certificate Authority. 30, 31, 79, Ver: Document Verifier Certificate
Authority
EAC Extended Access Control. 25, 29, 31, 35, 36, 40, 41, 45, 46, 52, 56, 85–87
ECDH Elliptic Curve Diffie-Hellman. 29, 79, Ver: Elliptic Curve Diffie-Hellman
GPL GNU General Public License. 37, 79, 89, Ver: GNU General Public License
HSM Hardware Security Module. 34, 79, Ver: Hardware Security Module
ICAO International Civil Aviation Organization. 19, 20, 23, 25, 26, 28, 30, 56, 75, 76, 89, 90,
92, Ver: ICAO
ICC Integrated Circuit Card. 9, 20, 32, 34–36, 41, 42, 51, 57, 79, 81, 88, 90, 92, Ver: Integrated
Circuit Card
80 Acrónimos
IDE Integrated Development Enviroment. 39, 55, 56, 79, 83, 84, 86, Ver: Integrated Development
Enviroment
IVA Impuesto sobre el Valor Añadido. 73, 80, Ver: Impuesto sobre el Valor Añadido
JCA Java Cryptography Architecture. 57, 80, Ver: Java Cryptography Architecture
JCE Java Cryptography Extension. 57, 80, Ver: Java Cryptography Extension
JVM Java Virtual Machine. 39, 80, 88, Ver: Java Virtual Machine
LGPL GNU Lesser General Public License. 80, Ver: GNU Lesser General Public License
MRTD Machine Readable Travel Document. 9, 10, 15, 17, 19, 20, 23–26, 28–31, 34–36, 39–42,
46, 52, 56, 57, 59–61, 75, 76, 80, 84–86, 88, 89, 91–93, Ver: Machine Readable Travel
Document
MRZ Machine Readable Zone. 9, 24, 26, 40, 42, 52, 56–60, 80, 89, 91, Ver: Machine Readable
Zone
NFC Near Field Communication. 9, 37, 39, 42, 75, 80, Ver: Near Field Communication
Acrónimos 81
NIST National Institute of Standards and Technology. 36, 80, 83, 84, 91, Ver: National Institute
of Standards and Technology
OCR Optical Character Recognition. 9, 40, 42, 52, 56–58, 80, Ver: Optical Character Recognition
PA Passive Authentication. 10, 25, 26, 28, 35, 40, 41, 45, 52, 56
PACE Password Authenticated Connection Establishment. 75, 76, 81, Ver: Password Authenti-
cated Connection Establishment
PIN Personal Identification Number. 32, 81, Ver: Personal Identification Number
PKI Public Key Infrastructure. 25, 30, 81, 92, Ver: Public Key Infrastructure
SAI Servicio de Autenticación de ICC. 35, 81, Ver: Servicio de Autenticación de ICC
SDK Software Development Kit. 57, 81, 84, Ver: Software Development Kit
SOAP Simple Object Access Protocol. 57, 81, 90, Ver: Simple Object Access Protocol
SOD Security Object Data. 25, 26, 28, 45–47, 81, 85, Ver: Security Object Data
SPP Serial Port Profile. 43, 81, Ver: Serial Port Profile
82 Acrónimos
TA Terminal Authentication. 30
TLS Transport Layer Security. 10, 45, 81, Ver: Transport Layer Security
URL Uniform Resource Locator. 54, 62, 82, Ver: Uniform Resource Locator
USB Universal Serial Bus. 9, 71, 76, 82, 90, 94, Ver: Universal Serial Bus
VGA Video Graphics Array. 39, 82, Ver: Video Graphics Array
W3C World Wide Web Consortium. 82, Ver: World Wide Web Consortium
WSQ Wavelet Scalar Quantization. 36, Ver: WSQ IAFIS IC 0110 Versión 3.1
XML eXtensible Markup Language. 44, 57, 82, 86, 90, 92, 93, Ver: eXtensible Markup Language
Glosario
A|B|C|D|E|G|H|I|J|K|L|M|N|O|P|R|S|T|U|V|W|X
ABC System Sistema automático de control de fronteras que controla el paso de personas en
los principales aeropuertos de España. 20, 77
Advanced Encryption Standard También conocido como Rijndael (pronunciado Rain Doll
en inglés), es un esquema de cifrado por bloques adoptado como un estándar de cifrado
por el gobierno de los Estados Unidos. El AES fue anunciado por el National Institute of
Standards and Technology (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197)
el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se
transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de
los algoritmos más populares usados en criptografía simétrica [53]. 43, 77
Android Sistema operativo basado en el núcleo Linux. Fue diseñado principalmente para
83
84 Glosario
dispositivos móviles con pantalla táctil, como teléfonos inteligentes o tabletas; y también
para relojes inteligentes, televisores y automóviles. Inicialmente fue desarrollado por Android
Inc., empresa que Google respaldó económicamente y más tarde, en 2005, compró [24, 54].
10, 11, 15, 36–39, 41, 42, 51, 55, 64, 65, 76, 83–85, 87, 90, 93
Android Development Tools Plugin para el IDE Eclipse que amplía las capacidades de éste
para que pueda configurar rápidamente nuevos proyectos para Android, crear una interfaz
de usuario de aplicaciones, agregar paquetes basados en la API de Android, depurar
aplicaciones usando el SDK de Android e incluso exportar firmados (o sin firmar) archivos
Application Package File (APK) con el fin de distribuir la aplicación [55]. 55, 77
Android Studio IDE oficial para el desarrollo de aplicaciones Android basado en el IDE
IntelliJ-IDEA de JetBrains [57]. 39
Application Package File Formato de paquete para el sistema operativo Android, variante
del formato Java Archive de Java que se usa para distribuir e instalar componentes
empaquetados para la plataforma Android. 77, 84
Bluetooth Especificación industrial para Redes Inalámbricas de Área Personal que posibi-
lita la transmisión de voz y datos entre diferentes dispositivos mediante un enlace por
radiofrecuencia. 9, 37, 39, 43, 75, 76, 92
Bouncy Castle Colección de APIs utilizadas en criptografía con versiones para los lenguajes
Java y C#. Nació como resultado del esfuerzo de dos colegas que sufrieron la necesidad
de recrear librerías criptográficas en cada cambio de empleo. La API de bajo nivel está
Glosario 85
Card Verificable Siglas utilizadas para referirse a un certificado Card Verificable, de acuerdo
a la norma CWA 14890 [10, 11]. 34, 78
CBEFF NISTIR 6529-A Norma desarrollada entre 1999 y 2000 por el Equipo de Desarrollo
de CBEFF (NIST) y el Consorcio BioAPI. Esta norma proporciona la capacidad a diferentes
dispositivos y aplicaciones biométricas para el intercambio de información biométrica entre
componentes del sistema de manera eficiente de una manera común y con un conjunto
elementos de datos obligatorios [59]. 35, 36
Certification Holder Reference Referencia que se encuentra dentro de un MRTD para iden-
tificar al titular del certificado [23]. 78
Checkstyle Herramienta de desarrollo para ayudar a los programadores escribir código Java que
se adhiere a un estándar de codificación. Automatiza el proceso de comprobación de código
Java. Esto lo hace ideal para proyectos que quieren imponer un estándar de codificación
[26]. 10, 56, 63, 64, 78, 113
Cobertura Cobertura es una herramienta libre de Java que calcula el porcentaje de código
accedido por tests. Se puede utilizar para identificar qué partes de un programa carecen de
cobertura de tests [28]. 10, 56, 64, 65, 125
Código Abierto Expresión con la que se conoce al software distribuido y desarrollado libremente.
Se focaliza más en los beneficios prácticos (acceso al código fuente) que en cuestiones éticas
o de libertad que tanto se destacan en el software libre. 56, 70, 86, 93
86 Glosario
COM Ficheros de un Machine Readable Travel Document que contiene información sobre la
versión y la lista de rótulos. 24, 25
Complejidad ciclomática Métrica del software propuesta por Thomas McCabe en 1976 que se
basa en el diagrama de flujo determinado por las estructuras de control de un determinado
código y que proporciona una medición cuantitativa de la complejidad lógica de un programa.
Es una de las métricas de software de mayor aceptación, ya que ha sido concebida para ser
independiente del lenguaje [60, 61]. 125
Content Commitment Uno de los posibles valores del campo Key Usage de un certificado
X.509 que se determina que el certificado se puede utilizar para garantizar el no repudio
por parte del firmante de los contenidos firmados. 33
Elemental File Ficheros elementales que componen las estructuras de datos de un MRTD. 23,
79
Glosario 87
Digital Signature Uno de los posibles valores del campo Key Usage de un certificado X.509 que
se determina que el certificado se puede utilizar para garantizar la identidad del firmante
de los contenidos firmados. 33
Digital Signature Algorithm Estándar del Gobierno Federal de los Estados Unidos de Amé-
rica o FIPS para firmas digitales. 79
Document Object Model API que proporciona un conjunto estándar de objetos para re-
presentar documentos XML, un modelo estándar sobre cómo pueden combinarse dichos
objetos, y una interfaz estándar para acceder a ellos y manipularlos. A través del DOM, los
programas pueden acceder y modificar el contenido, estructura y estilo de los documentos
XML [63]. 44, 79
Document Signer Certificado emitido para un documento MRTD por una CSCA. 79
compartido por un canal inseguro. Este secreto compartido puede ser utilizado directamente
como una clave, o para derivar otra clave que luego puede ser utilizada para cifrar las
comunicaciones posteriores utilizando un sistema de cifrado de clave simétrica. Es una
variante del protocolo Diffie-Hellman usando ECC. 29, 79
eXtensible Markup Language Lenguaje de marcas desarrollado por el World Wide Web
Consortium utilizado para almacenar datos en forma legible. Deriva del lenguaje SGML y
permite definir la gramática de lenguajes específicos (de la misma manera que HTML es a
su vez un lenguaje definido por SGML) para estructurar documentos grandes. 82
GNU General Public License Licencia más ampliamente usada en el mundo del software
que garantiza a los usuarios finales (personas, organizaciones, compañías) la libertad de
usar, estudiar, compartir (copiar) y modificar el software. Su propósito es declarar que el
software cubierto por esta licencia es software libre y protegerlo de intentos de apropiación
que restrinjan esas libertades a los usuarios [66]. 79
GNU Lesser General Public License Licencia de software creada por la Free Software Foun-
dation que pretende garantizar la libertad de compartir y modificar el software cubierto
por ella, asegurando que el software es libre para todos sus usuarios [67]. 80
Google Play Store Es el mercado oficial de productos relacionados con la plataforma Android
que incluye contenidos multimedia, dispositivos y, sobre todo, aplicaciones [68]. 39
Hardware Security Module Dispositivo criptográfico basado en hardware que genera, alma-
cena y protege claves criptográficas y suele aportar aceleración hardware para operaciones
criptográficas. Estos dispositivos pueden aportar funcionalidad criptográfica de clave pública
(PKI) de alto rendimiento que se efectúa dentro del propio hardware. 79
hash Las funciones hash (adopción más o menos directa del término inglés hash function),
funciones resumen o funciones de digest son funciones que tiene como entrada un conjunto
de elementos, que suelen ser cadenas, y los convierte (mapea) en un rango de salida finito,
normalmente cadenas de longitud fija. 26, 28, 57, 88
Glosario 89
HTTP Hypertext Transfer Protocol (en español: Protocolo de transferencia de hipertexto), más
conocido por sus siglas HTTP, es un protocolo de aplicación utilizado de forma generalizada
en Internet para el intercambio de datos. 45, 87
HTTPS Hypertext Transfer Protocol Secure (en español: Protocolo seguro de transferencia de
hipertexto), más conocido por sus siglas HTTPS, es un protocolo de aplicación basado en
el protocolo HTTP, destinado a la transferencia segura de datos de Hipertexto, es decir, es
la versión segura de HTTP. 10, 34, 45
ICAO Organización internacional de aviación civil que se encarga de definir los estándares
relacionados con los documentos electrónicos de tránsito. 19, 23, 79
Impuesto sobre el Valor Añadido Carga fiscal sobre el consumo, es decir financiado por el
consumidor, aplicado en muchos países, y generalizado en la Unión Europea. 80
Integrated Circuit Card Tarjeta de bolsillo con circuitos integrados, que permite la ejecución
de cierta lógica programada. 9, 34, 56, 79, 81, 92
Interface Device Dispositivo o entidad que pertenece al mundo externo (fuera de la ICC según
el estándar CWA 14890 [10, 11]). 34, 79
90 Glosario
iOS Sistema operativo móvil de la multinacional Apple Inc. Originalmente desarrollado para el
iPhone (iPhone OS), siendo después usado en dispositivos como el iPod touch y el iPad. 36
ISO/IEC 19794-5 Estándar que define específicamente un esquema estándar para la codifica-
ción de datos que describen los rostros humanos dentro de una estructura de datos CBEFF
compatible, para su uso en sistemas de reconocimiento facial utilizado por los documentos
MRTD [73]. 35
Java Archive Tipo de archivo que permite ejecutar aplicaciones escritas en el lenguaje Java. 80
Java bytecode Tipo de instrucciones que ejecuta una Java Virtual Machine (JVM), su bytecode.
Suele ser el resultado de utilizar un compilador del lenguaje de programación Java [75]. 39
Java Cryptography Architecture Pieza de la plataforma Java, que contiene una arquitectura
de proveedor y un conjunto de APIs para firmas digitales, hashes, certificados y validación de
certificados, encriptación (simétrica, asimétrica de cifrado de bloque, etcétera), generación
y gestión de claves y generación de números aleatorios, entre otros. Estas APIs permiten a
los desarrolladores integrar fácilmente la seguridad en las aplicaciones [76]. 80
Java Virtual Machine La máquina virtual de Java es un elemento de ejecución específico para
cada plataforma, capaz de interpretar y ejecutar instrucciones expresadas en un código
binario especial (el bytecode Java), el cual es generado por el compilador del lenguaje Java
[75]. 39, 80, 88
jMRTD Librería GPL Java de los estándares MRTD especificados por ICAO. El pasaporte
electrónico (o ePassport) es una implementación de estos estándares [33]. 10, 39, 40, 56, 75,
92
JPEG Formato de archivo y su método de compresión de imágenes definido por el Joint Photo-
graphic Experts Group que utiliza habitualmente un algoritmo de compresión con pérdida
para reducir el tamaño de los archivos de imágenes. Esto significa que al descomprimir o
visualizar la imagen no se obtiene exactamente la misma imagen de la que se partía antes
de la compresión [78]. 35, 39
JPEG 2000 Estándar de compresión y codificación digital de imágenes. Fue creado por el Joint
Photographic Experts Group (Grupo Conjunto de Expertos en Fotografía o JPEG), en
el año 2000 con la intención de sustituir el formato original creado en 1992. El nuevo
formato se basa en la transformada wavelet, en lugar de la transformada de coseno discreta
establecida para el estándar original. La extensión de los archivos en formato JPEG 2000
es .jp2 [78]. 35
JUnit JUnit es un conjunto de bibliotecas creadas por Erich Gamma y Kent Beck que son
utilizadas en programación para hacer pruebas unitarias de aplicaciones Java [27, 79]. 10,
56, 65, 117
𝐾𝐸𝑁 𝐶 Clave simétrica para la encriptación derivada a partir de la MRZ de un MRTD que se
usa junto a la 𝐾𝑀 𝐴𝐶 para el establecimiento del Basic Access Control (BAC). 26, 29, 89
Key Usage Uno de los campos de un certificado X.509 que se utiliza para determinar los
posibles fines para los que se ha emitido dicho certificado. 28, 33, 85, 86
92 Glosario
𝐾𝑀 𝐴𝐶 Clave simétrica para la generación del Message Authentication Code (MAC) que autentica
el canal derivada a partir de la MRZ de un MRTD que se usa junto a la 𝐾𝐸𝑁 𝐶 para el
establecimiento del Basic Access Control (BAC). 26, 29, 89
KSoap2-android Proyecto que proporciona una biblioteca cliente SOAP ligero y eficiente para
la plataforma Android [42]. 10, 57
BibTEX Herramienta y formato de archivo que se utilizan para describir y proceso de listas de
referencias, la mayoría en conjunción con documentos LATEX [80]. 56
Machine Readable Zone Zona especial de lectura mecánica en documentos electrónicos. 24,
80
Match-On-Card Es una tecnología que permite el chequeo de una huella dactilar en una llave
USB o ICC. 33, 36, 60, 88
Material Design Es una guía completa para diseño visual, de movimiento y de interacción
transversal a plataformas y dispositivos definida por Google y adoptada por Android a
partir de su versión 5.0 [52]. 76
minucia En biometría y ciencia forense, son las principales características de una huella digital,
utilizando las cuales se pueden hacer comparaciones entre huellas [83]. 33, 36, 88
NISTIR 7151 Estándar del NIST para la determinación de calidad en imágenes de huella
dactilar [85]. 36
OCR-B Fuente de espacio sencillo desarrollado en 1968 por Adrian Frutiger para Monotype
siguiendo el estándar de la European Computer Manufacturer’s Association. Su función era
facilitar las operaciones de reconocimiento de caracteres ópticos por dispositivos electrónicos
específicos. Se ha aceptado como estándar mundial en 1973.Sigue el estándar ISO 1073/II-
1976 (E) estándar, refinado en 1979 (diseño "leterpress", tamaño I). Ha sido creado para
obtener características financieras, bancarias orientadas específicamente. Incluye todos
94 Glosario
OpenGL Especificación estándar que define una API multilenguaje y multiplataforma para
escribir aplicaciones que produzcan gráficos 2D y 3D. La interfaz consiste en más de 250
funciones diferentes que pueden usarse para dibujar escenas tridimensionales complejas
a partir de primitivas geométricas simples, tales como puntos, líneas y triángulos. Fue
desarrollada originalmente en 1992 y se usa ampliamente [86]. 39
PKIX Grupo de trabajo de PKI, comúnmente conocido como PKIX por infraestructura de
clave pública (X.509) o PKIX, que adaptó el estándar X.500 a la estructura más flexible de
Internet. (X.509) incluye también estándares para implementación de listas de certificados
en revocación (Certificate Revocation Lists), y con frecuencia aspectos de sistemas PKI. 10
PMD Analizador de código fuente que permite detectar defectos comunes de programación
como las variables utilizadas, bloques catch vacíos, la creación de objetos innecesarios, y
así sucesivamente. Es compatible con Java, JavaScript, XML y otros [25]. 10, 55, 63, 64, 97
proxy Servidor (un programa o sistema informático), que sirve de intermediario en las peticiones
de recursos que realiza un cliente (A) a otro servidor (C). 45
SCUBA Framework basado en Java para la programación aplicaciones con acceso a tarjetas
inteligentes ICC. Se separó de proyecto jMRTD y se utiliza en varios otros proyectos de
tarjetas inteligentes Java. SCUBA mejora el API Java de entrada/salida de Smart Card
(SC) con varias características, sobre todo de escucha para los eventos de inserción y
extracción de la tarjeta [34]. 56
Secure Hash Algorithm Familia de funciones hash de cifrado publicadas por el National
Institute of Standards and Technology (NIST). La primera versión del algoritmo fue creada
en 1993 con el nombre de SHA, aunque en la actualidad se la conoce como SHA-0 para
evitar confusiones con las versiones posteriores. 81
Security Object Data Fichero de un Machine Readable Travel Document que contiene infor-
mación sobre integridad y autenticidad de datos. 26, 81
Serial Port Profile Perfil de conexión que define cómo configurar puertos serie virtuales y
conectar dos dispositivos Bluetooth habilitados [87]. 43, 81
Simple Object Access Protocol Protocolo, recomendación del W3C, que proporciona la
definición de información basada en XML que puede ser utilizada para el intercambio de
información estructurada y de tipos concretos entre puntos en un entorno descentralizado
96 Glosario
Simple XML Proyecto que proporciona una biblioteca de serialización y deserialiación para
XML, similar a JAXB y compatible con Android [89]. 57
Smartphone Tipo de teléfono móvil construido sobre una plataforma informática móvil, con
una mayor capacidad de almacenar datos y realizar actividades similares a las de un
ordenador personal y con mayor conectividad que un teléfono móvil convencional. 36, 42,
75
Spongy Castle Conjunto de librerías adaptadas a partir de Bouncy Castle con los cambios
necesarios para que funcione en Android [90]. 10, 57
Tesseract Motor de OCR de código abierto capaz de leer una amplia variedad de formatos de
imagen y convertirlos a texto en más de 60 idiomas. Fue uno de los 3 mejores motores en la
prueba de precisión 1995 University of Nevada de Las Vegas. Entre 1995 y 2006 había poco
trabajo realizado sobre él, pero desde entonces se ha mejorado ampliamente por Google
[35]. 56, 93
tess-two Rama de Herramientas Tesseract para Android que añade algunas funciones adicionales
[36]. 10, 56
TEX Lenguaje de composición tipográfica desarrollado por Donald Knuth. El texto manuscrito
se introduce entrelazado con comandos de TeX en un archivo de texto plano, en lugar de
formatear visualmente el texto. A continuación, se ejecuta TeX para producir una salida
con formato, como un archivo PDF [93]. 56, 90
Glosario 97
Uniform Resource Locator Es una cadena compacta (una URI) que representa un recurso
disponible a través de Internet. Los recursos referidos por URLs pueden cambiar, esto es,
la dirección puede apuntar a recursos variables en el tiempo [97]. 82
Universal Serial Bus Bus estándar industrial que define los cables, conectores y protocolos
usados en un bus para conectar, comunicar y proveer de alimentación eléctrica entre
computadoras, periféricos y dispositivos electrónicos. 82, 94
USB OTG USB On-The-Go (también conocido por el acrónimo USB OTG y como USB host)
es una extensión de la norma Universal Serial Bus 2.0 que permite a los dispositivos
Universal Serial Bus tener mayor flexibilidad en la gestión de la interconexión, permitiendo
que ciertos dispositivos, por ejemplo: reproductor de audio digital o teléfono móvil, actúen
como host, por lo que se les puede conectar una memoria USB, un ratón, un teclado, un
disco duro, un módem, etcétera. 37, 42, 51, 57
98 Glosario
Video Graphics Array Pantalla de computadora analógica estándar con resolución 640 por
480 píxeles, conector del mismo nombre de 15 contactos y/o tarjeta gráfica comercializada
por IBM por primera vez en 1988. 82
World Wide Web Consortium Comunidad internacional que desarrolla estándares abiertos
para asegurar el crecimiento a largo plazo de la Web. La misión del W3C es llevar a la
World Wide Web a su máximo potencial mediante el desarrollo de protocolos y pautas que
aseguren el crecimiento a largo plazo de la Web [100]. 82
WSQ IAFIS IC 0110 Versión 3.1 Algoritmo de compresión utilizado para imágenes de hue-
llas dactilares en escala de grises. Se basa en la teoría de ondas y se ha convertido en un
estándar para el intercambio y almacenamiento de imágenes de huellas dactilares. WSQ
fue desarrollado por el FBI, el Laboratorio Nacional de Los Alamos, y el National Institute
of Standards and Technology (NIST) [101]. 82
X.509 Estándar UIT-T para infraestructuras de claves públicas. X.509 específica, entre otras
cosas, formatos estándar para certificados de claves públicas y un algoritmo de validación
de la ruta de certificación. 10, 26, 32, 43, 52, 53, 85, 86, 89, 92, 94
Glosario 99
[3] I. C. A. Organization, “Document 9303 (machine readable travel documents), part 2 (machi-
ne readable visas).” Website. http://www.icao.int/publications/Documents/
9303_p2_cons_en.pdf.
[6] I. Company, “Indra renews the automatic border control system for barajas and el
101
102 BIBLIOGRAFÍA
[7] I. C. A. Organization, “Icao mrtd report vol7 no3.” Website, 2012. http://www.icao.
int/publications/journalsreports/2012/MRTD_Report_Vol7_No3.pdf.
[10] C. W. Agreement, “Application interface for smart cards used as secure signature creation
devices - part 1: Basic requirements.” Website, Marzo 2004. ftp://ftp.cenorm.be/
PUBLIC/CWAs/e-Europe/eSign/cwa14890-01-2004-Mar.pdf.
[11] C. W. Agreement, “Application interface for smart cards used as secure signature creation
devices - part 2: Additional services.” Website, Mayo 2004. ftp://ftp.cenorm.be/
PUBLIC/CWAs/e-Europe/eSign/cwa14890-02-2004-May.pdf.
[13] P. Europeo, “Directiva 1999/93/ce del parlamento europeo y del consejo, de 13 de diciembre
de 1999, por la que se establece un marco comunitario para la firma electrÓnica.” Web-
site. http://www.dnielectronico.es/marco_legal/directiva_1999_93_CE.
html.
[16] IDC, “Worldwide smartphone shipments edge past 300 million units in the second quarter;
android and ios devices account for 96 % of the global market, according to idc.” Website.
http://www.idc.com/getdoc.jsp?containerId=prUS25037214.
BIBLIOGRAFÍA 103
[24] Google, “Android, the world’s most popular mobile platform.” Website. http://
developer.android.com/about/index.html.
[28] Cobertura, “Cobertura. a code coverage utility for java..” Website. http://cobertura.
github.io/cobertura/.
[33] jMRTD, “Jmrtd: An open source java implementation of machine readable travel documents.”
Website. http://jmrtd.org/.
[39] QOS.ch, “Simple logging facade for java (slf4j).” Website. http://www.slf4j.org/.
[41] INCIBE, “Los usuarios pueden utilizar su dni electrónico en tablets y móviles android
por medio de una aplicación de inteco..” Website, 2012. https://www.incibe.es/
pressRoom/Prensa/Actualidad_INCIBE/Publicacion_INTECO_DNIe_Droid.
[42] S. T. Inc., “ksoap2-android. a lightweight and efficient soap library for the android platform..”
Website. https://code.google.com/p/ksoap2-android/.
BIBLIOGRAFÍA 105
[49] I. C. A. Organization, “Technical report, supplemental access control for machine readable
travel documents.” Website. http://www.icao.int/security/mrtd/downloads/
technical%20reports/technical%20report.pdf.
[50] E. Pais, “Interior lanza el nuevo dni 3.0, que permite transmitir datos.” Website, Enero
2015. http://politica.elpais.com/politica/2015/01/12/actualidad/
1421059220_344934.html.
[70] JetBrains, “Intellij idea. the most intelligent java ide.” Website. https://www.
jetbrains.com/idea/.
[85] C. I. W. Elham Tabassi, Charles L. Wilson, “Nistir 7151, fingerprint image quality,” Agosto
2004. ftp://sequoyah.nist.gov/pub/nist_internal_reports/ir_7151/ir_
7151.pdf.
[93] T. U. Group, “Getting started with tex, latex, and friends.” Website. http://www.tug.
org/begin.html.
BIBLIOGRAFÍA 109
[94] B. für Sicherheit in der Informationstechnik, “Advanced security mechanisms for mrtds and
eidas token - part 2 - protocols for electronic identification, authentication and trust servi-
ces (eidas).” Website. https://www.bsi.bund.de/SharedDocs/Downloads/EN/
BSI/Publications/TechGuidelines/TR03110/BSI_TR-03110_Part-2-V2_2.
pdf;jsessionid=902B2A60CBDBF78D1C83C64EB8A6ACD1.2_cid368?__blob=
publicationFile.
[95] B. für Sicherheit ind der Informationstechnik, “Advanced security mechanisms for
mrtds and eidas token - part 4 - applications and document profiles.” Website.
https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/
TechGuidelines/TR03110/BSI_TR-03110_Part-4_V2-2.pdf;jsessionid=
902B2A60CBDBF78D1C83C64EB8A6ACD1.2_cid368?__blob=publicationFile.
[96] I. N. W. Group, “Uniform resource identifier (uri): Generic syntax.” Website. http:
//www.ietf.org/rfc/rfc3986.txt.
111
Apéndice A
Reglas PMD
113
114 APÉNDICE A. REGLAS PMD
129
130 APÉNDICE B. REGLAS DE CHECKSTYLE
C.0.1. Resumen
mrtd.utils.ssl.test
133
134 APÉNDICE C. INFORMES DE JUNIT
mrtd.utils.test
mrtd.utils.http.test
TestHTTPSUtils
Método Tiempo
OK testInitGetURLConnection 0,486
OK testRequestPostForm 0,016
OK testInitPostURLConnection 0,015
OK testPrivateConstructor 0,000
OK testIsHTTPS 0,000
135
TestHTTPUtils
Método Tiempo
OK testFormInputsToByteArray 0,000
OK testcheckEmptyConnection 0,000
OK testInitGetURLConnection 0,000
OK testRequestPostForm 20,199
OK testInitPostURLConnection 0,000
OK testcheckEmptyURL 0,000
OK testPrivateConstructor 0,000
TestProxyUtils
Método Tiempo
OK testHttpProxy2Params 0,094
OK testPrivateConstructor 0,000
OK testGetHTTPProxy 0,000
TestSSLUtils
Método Tiempo
OK testGetSSLContext 0,593
OK testGetPermissiveTrustManagers 0,031
OK testGetTrustManagers 0,000
OK testPrivateConstructor 0,000
OK testGetKeyManagers 0,016
TestArrayUtils
Método Tiempo
OK testByteArraysEquals 0,000
OK testEqualsArray 0,000
OK testCollection2LongArray 0,000
OK testNotContains 0,000
OK testContains 0,000
OK testPrivateConstructor 0,000
OK testCollection2IntArray 0,000
OK testCopyOfRange 0,000
OK testIndexOf 0,000
OK testIsEmptyOrNull 0,000
136 APÉNDICE C. INFORMES DE JUNIT
TestBase64Utils
Método Tiempo
OK testPrivateConstructor 0,000
OK testDecode 0,000
OK testEncode 0,000
OK testIsBase64Encoded 0,000
TestCertificateUtils
Método Tiempo
OK testGetCertificateChain 0,171
OK testGetTrustAnchors 0,000
OK testSaveCertificate 0,000
OK testGetSubjectKeyIdentifier 0,016
OK testloadPKCS8Key 0,000
OK testJoinWithKeyStore 0,000
OK testGetCertificate 0,000
OK testHasCertificate 0,000
OK testPrivateConstructor 0,000
OK testKeystoreCreateWithOverwrite 0,000
OK testGetCertificates 0,093
OK testIsCertificateInKeystore 0,000
TestCharUtils
Método Tiempo
OK testIsNumeric 0,000
OK testPrivateConstructor 0,000
TestClassUtils
Método Tiempo
OK testIsInstance 0,000
OK testPrivateConstructor 0,000
137
TestCollectionUtils
Método Tiempo
OK testArray2List 0,000
OK testEqualsList 0,000
OK testPrivateConstructor 0,000
OK testEnumeration2Iterator 0,000
OK testEqualsEnumeration 0,000
OK testRemoveObjectFromList 0,000
OK testIsEmptyOrNull 0,000
TestDOMUtils
Método Tiempo
OK testDocumentDOM2String 0,000
OK testGetXmlDefaultDeclaration 0,000
OK testStream2Document 0,109
OK testGetElementsByTagName 0,031
OK testHasFirstNodeFirstChild 0,000
OK testSource2Document 0,000
OK testGetElementsByTagNameNS 0,000
OK testString2DOMPrintedString 0,188
OK testPrivateConstructor 0,000
OK testPrintDOMElement 0,016
OK testSetNamespaceDefinition 0,016
TestFileUtils
Método Tiempo
OK testCombinePath 0,000
OK testPrivateConstructor 0,000
TestHexUtils
Método Tiempo
OK testHexString2ByteArray 0,000
OK testPrivateConstructor 0,000
OK testByteArray2HexString 0,000
138 APÉNDICE C. INFORMES DE JUNIT
TestIntegerUtils
Método Tiempo
OK testIntegerList2IntegerArray 0,000
OK testExistsInIntegerArray 0,000
OK testIntegerArray2StringList 0,000
OK testIntegerArray2String 0,000
OK testStringArray2IntegerList 0,000
OK testEqualsIntegerArray 0,000
OK testPrivateConstructor 0,000
OK testShortList2IntegerArray 0,000
OK testIntegerArray2IntegerList 0,000
OK testRandomNumbers 0,000
OK testTryParseInt 0,000
TestIOUtils
Método Tiempo
OK testTryClosingStreams 0,000
OK testWriteStreamData 0,031
OK testWriteByteData 0,047
OK testConsumeData 0,016
OK testReadData 0,031
OK testPrivateConstructor 0,000
OK testWriteBufferData 0,078
OK testDetectEncoding 0,000
OK testCheckEncoding 0,000
TestLoggingUtils
Método Tiempo
OK testPrintWarnLog 0,000
OK testPrintDebugLog 0,015
OK testPrintInfoLog 0,000
OK testPrintTraceLog 0,000
OK testPrintErrorLog 0,016
OK testPrivateConstructor 0,000
OK testLogParameter 0,000
139
TestLongUtils
Método Tiempo
OK testLongArray2StringList 0,000
OK testTryParseLong 0,000
OK testLongList2LongArray 0,000
OK testExistsInLongArray 0,000
OK testLongArray2LongList 0,000
OK testStringArray2LongList 0,000
OK testEqualsLongArray 0,000
OK testLongArray2String 0,000
OK testPrivateConstructor 0,000
OK testRandomNumbers 0,000
TestNetUtils
Método Tiempo
OK testGetIPAddress 0,110
OK testIsLoopbackOrLocal 0,000
OK testPrivateConstructor 0,000
TestResourceUtils
Método Tiempo
OK testParamGetters 0,000
OK testLoadProperties 0,000
OK testPrivateConstructor 0,000
OK testlistKeys 0,000
OK testlistValues 0,000
140 APÉNDICE C. INFORMES DE JUNIT
TestStringUtils
Método Tiempo
OK testIsNumeric 0,016
OK testUnescapeStrings 0,000
OK testFill2Length 0,000
OK testExistsInArray 0,000
OK testClearEmpty 0,000
OK testHasNumbers 0,000
OK testIndexOfIgnoreCase 0,000
OK testReplaceLast 0,000
OK testNormalizeBlanks 0,000
OK testEmptyString 0,000
OK testInitialCase 0,000
OK testPrivateConstructor 0,000
OK testByteArray2String 0,000
OK testString2SquaredArray 0,000
OK testArray2String 0,000
OK testRemoveAccents 0,000
OK testIsAlphabetic 0,000
TestThreadUtils
Método Tiempo
OK testTrySleep 3,263
OK testPrivateConstructor 0,000
Apéndice D
Informes de Cobertura
141
142 APÉNDICE D. INFORMES DE COBERTURA
mrtd.utils
Clases del paquete Cobertura de líneas Cobertura de ramas Complejidad
ArrayUtils 100 % 65/65 100 % 78/78 4,700
Base64Utils 100 % 91/91 100 % 41/41 3,667
CertificateUtils 94 % 130/138 83 % 50/60 2,682
CertificateUtils$1 N/A N/A N/A N/A 2,682
CharUtils 100 % 3/3 100 % 4/4 2,000
ClassUtils 100 % 7/7 100 % 10/10 3,500
CollectionUtils 100 % 42/42 100 % 46/46 4,143
DOMUtils 98 % 76/77 93 % 30/32 2,067
FileUtils 100 % 6/6 100 % 2/2 2,000
HexUtils 100 % 25/25 100 % 6/6 3,000
IOUtils 96 % 127/131 88 % 23/26 3,800
IntegerUtils 100 % 58/58 100 % 52/52 3,083
LoggingUtils 100 % 41/41 100 % 22/22 2,000
LongUtils 100 % 51/51 100 % 48/48 3,300
NetUtils 90 % 18/20 91 % 11/12 3,333
ResourceUtils 100 % 94/94 100 % 40/40 3,385
StringUtils 100 % 121/121 100 % 58/58 2,667
ThreadUtils 100 % 8/8 N/A N/A 2,000
mrtd.utils.http
mrtd.utils.ssl
Clases del paquete Cobertura de líneas Cobertura de ramas Complejidad
SSLUtils 100 % 33/33 100 % 8/8 2,600