Documentos de Académico
Documentos de Profesional
Documentos de Cultura
http://creativecommons.org/licenses/by-sa/3.0/es/
Pgina 1 de 24
HOJA DE CONTROL
Ttulo
Nombre del
fichero
Autor
Toms Garca-Mers
Versin
1.2
Copyright
MinHAP
Licencia
Aprobado por
CC-by-sa
MinHAP
Fecha Versin
05/11/2013
http://creativecommons.org/licenses/by-sa/3.0/es/
Fecha Aprobacin
05/11/13
N Total de pginas
24
Pgina 2 de 24
Contenido
1
Introduccin .................................................................................................................................. 5
3.2
3.2.1.1
3.2.1.2
3.2.1.3
3.2.1.4
3.2.2
3.2.2.1
PAdES......................................................................................................................... 14
3.2.2.2
XAdES......................................................................................................................... 15
Opcin 3: Uso de aplicaciones nativas invocadas mediante protocolo (protocolo a medida) ... 17
4.1
Pgina 3 de 24
Resumen ..................................................................................................................................... 23
Pgina 4 de 24
1 Introduccin
Desde hace ya tiempo, se vienen sufriendo ciertos problemas con Java que estn poniendo
cada da ms difcil considerar los Applets de Java como una solucin de futuro para el Cliente
@firma. Desde la falta de soporte en las nuevas plataformas operativas (Apple iOS, Google
Android, Microsoft Windows Phone, RT y 8 y superiores en modo UI Moderno, BlackBerry
10, etc.) hasta los grandes problemas de seguridad que plantean (continuas vulnerabilidades
descubiertas), pasando por las dificultades que los navegadores ponen a su ejecucin, como
advertencias y dilogos de confirmacin.
La sustitucin de los Applets de Java por otra tecnologa no es tarea fcil, ya que, por una
parte, se necesita una comunicacin bidireccional con el JavaScript de la pgina Web (la firma
electrnica es un paso ms dentro de un completo flujo de trabajo) y, por otra, un acceso a
los almacenes de claves y certificados, siendo por supuesto deseable el soporte de tarjetas
inteligentes y dispositivos externos (como el DNIe).
En este sentido, son varias las opciones posibles, siendo tres las ms asequibles y alineadas
con el proyecto Cliente @firma:
1. Desarrollo de extensiones para navegadores Web
2. Implantacin de un API JavaScript normalizado
3. Uso de aplicaciones nativas con invocacin por protocolo
Descripcin de la solucin
Microsoft Windows
o ActiveX para Internet Explorer, se necesitan versiones diferentes de 32 y 64
bits para las distintas arquitecturas del navegador.
o NSAPI/NPAPI para Chrome, Firefox y otros.
Microsoft Windows 8 y 8.1 en modo UI Moderno y Windows RT
o Internet Explorer no soporta complementos.
Apple iOS
o Safari no admite complementos.
o Chrome no admite complementos.
Apple Mac OS X
o NSAPI/NPAPI para Safari, Chrome, Firefox y otros.
Google Android
o Chrome no admite complementos.
o Extensiones XPCOM para Mozilla Firefox.
Linux
o NSAPI/NPAPI para Chrome, Firefox y otros.
Otros entornos
o Internet Explorer en Windows Phone no admite complementos.
o El navegador Web de BlackBerry 10 no admite complementos.
Se puede observar de los datos anteriormente enumerados que una estrategia de extensiones
de navegador podra dar una buena experiencia de usuario en Chrome y Firefox tanto en
Linux, Windows, Mac OS X y Android, pero sin poder ofrecer compatibilidad en Apple iOS.
Sera necesario para Internet Explorer un desarrollo especfico para el desarrollo de un control
ActiveX, si bien conviene tener en cuenta que no funcionara en las versiones UI Moderno
de Windows 8 y 8.1, ya que la tecnologa ActiveX est en pleno abandono por parte de
Microsoft.
No obstante, esta opcin dara soporte a la gran mayora de los usuarios, proporcionando una
experiencia de usuario muy buena, ya que si se exponen las operaciones de firma va
JavaScript el usuario realmente no apreciara ni cambios de contexto, ni advertencias, ni
necesidad de acciones manuales ni otros efectos adversos que s padecen los Applets de
Java.
No obstante, se introduce un inconveniente realmente difcil de evitar, que no se encontraba
con los Applets de Java, y es la heterogeneidad de los entornos operativos, aspecto que afecta
en dos sentidos:
Pgina 6 de 24
El resultado final sera un ncleo de cdigo comn, y luego, en base a un esfuerzo adicional,
toda una coleccin de mdulos de acceso a almacenes de claves y certificados y proyectos
de desarrollo en diferentes entornos (Visual Studio, Xcode, GCC, etc.).
En este sentido, sera necesario ejecutar las siguientes tareas para cerrar un control ActiveX
completamente funcional:
Tarea
Coste estimado
Estructura control ActiveX
4.509
Instalador
7.200
CAdES - Ampliacin motor CAdES a multifirmas
5.400
PAdES - Adaptacin iTextSharp
7.200
PAdES - Motor PAdES
5.400
XAdES - Motor XAdES
27.000
TOTAL
56.709
Extensin NPAPI / NSAPI / XPCOM
Al haberse programado el motor CAdES para Apple iOS en C estndar (en contraposicin a
Objective C, muy ligado a sistemas Apple), sera posible reutilizar ciertos activos del Cliente
Pgina 7 de 24
En este sentido, sera necesario ejecutar las siguientes tareas para cerrar una extensin
completamente funcional:
Tarea
Coste estimado
Estructura extensin NSAPI/NPAPI
3.500
Estructura extensin XPCOM
3.500
Instalador Windows
1.800
Instalador Mac OS X
2.300
Instalador Linux
3.500
CAdES - Ampliacin motor CAdES a multifirmas
11.500
PAdES - Ampliacin bibliotecas Haru para soporte firmas
32.000
PAdES - Motor PAdES en lenguaje C
15.200
XAdES - Motor XAdES
32.000
TOTAL
105.300
http://www-cs-students.stanford.edu/~tjw/jsbn/
Etc.
Partiendo de estos trabajos, se podra desarrollar la base para realizar cifrados RSA y huellas
digitales SHA-1 y SHA-2, ms un API ASN.1 bsico (lo indispensable para operaciones
PKCS#1), y con reutilizaciones adicionales y un trabajo extra de consolidacin, un buen API
JavaScript para X.509.
No obstante, esto no soluciona la incapacidad de acceder de forma segura a las claves
privadas de los ciudadanos desde JavaScript, asegurando que en ningn momento stas
queden accesibles para otro uso. De hecho, lo ideal es que el PKCS#1 por completo,
incluyendo la huella digital, se realizase de una forma opaca para el JavaScript,
proporcionando as una mayor seguridad.
Pgina 9 de 24
Pgina 10 de 24
En base al KeyUsage
Uso de DNIe.
Etc.
clave privada.
El API definido deber estar fuertemente basado en las actuales iniciativas de la
Pgina 11 de 24
Pgina 12 de 24
Agencia Tributaria
Etc.
Pgina 13 de 24
Tareas adicionales a realizar (cada tarea tiene dependencias con las anteriores):
API de tratamiento binario bsico sobre Base64.
API ASN.1 completo.
API X.509 completo.
API CAdES.
SigningCertificatev1 o SigningCertificatev2.
Debern reutilizarse los trabajos de software libre existentes que tengan una
calidad suficiente y una licencia compatible:
http://lapo.it/asn1js/
http://www.ohdave.com/rsa/
http://www-cs-students.stanford.edu/~tjw/jsbn/
http://kjur.github.io/jsrsasign/
https://github.com/ziyan/javascript-rsa
Etc.
3.2.2.1 PAdES
Tareas adicionales a realizar (cada tarea tiene dependencias con las anteriores, y
todo el bloque depende de la disponibilidad del soporte CAdES descrito en el
punto anterior):
Pgina 14 de 24
Local
Tipos de transformaciones:
XPATH
XPATH2
Enveloped
Base64
Modos de firma
Externally Detached
Internally Detached
Enveloped
Pgina 15 de 24
Enveloping
Pgina 16 de 24
Descripcin de la solucin
implementar medios adicionales para devolver por parte de la aplicacin nativa los datos
firmados al JavaScript que la invoc.
Dado que no se puede establecer una comunicacin IP local (causara problemas de XSS si
la Web original est alojada con SSL), una solucin es que la aplicacin nativa la enve al
servidor donde se aloja la aplicacin Web para que sta, mediante JavaScript asncrono, la
recoja cuando est disponible.
El proceso resultante sera ms o menos el descrito en la imagen:
1. El navegador Web invoca a una App nativa mediante una URI especial, indicando una
serie de informacin (datos a firmar, formato, opciones, etc.).
2. La App recibe los datos y realiza la firma electrnica usando las funciones nativas de
gestin de claves y certificados.
3. La App nativa deposita el resultado de la firma en un servidor intermediario mediante
una llamada a un servicio Web simple.
4. El navegador Web recoge el resultado de la operacin del firma del servidor
intermediario y contina la ejecucin de la lgica de negocio.
5. El resultado es que se consigue una comunicacin bidireccional asncrona entre
aplicacin JavaScript y Aplicacin nativa que permite prescindir de los Applets de Java.
Evidentemente, al proceso se le han aadido medidas de seguridad para que el
trnsito de su firma por la red en el camino desde la aplicacin Web hacia el JavaScript
no implique peligro.
Pgina 18 de 24
Este proceso es viable en la totalidad de sistemas operativos actuales, incluyendo Apple iOS,
Windows 8 y RT y Windows Phone (a partir de Windows Phone 8).
Adicionalmente, se podra pensar en la posibilidad de registrar este tratamiento de protocolo
a medida asocindolo a una aplicacin Java, lo cual permitira la reutilizacin de los activos
actuales del Cliente @firma en Java. Aunque las aplicaciones seguiran siendo Java, ya no
seran Applets de Java, que es lo realmente problemtico (por seguridad y compatibilidad) y,
al menos Windows, Linux y Mac OS X, estaran cubiertos con un esfuerzo ms o menos
acotado.
Apple OS X
o
Apple iOS
o
Soporte completo.
Google Android
o
Soporte completo.
Linux
o
Soporte completo.
Pgina 19 de 24
Para mejora del soporte, sera no obstante conveniente la ampliacin del soporte monofsico
del Cliente @firma para Windows 8 a PAdES.
Tarea
CAdES - Ampliacin motor CAdES a multifirmas
PAdES - Adaptacin iTextSharp
PAdES - Motor PAdES
TOTAL
5 Tareas comunes
implementacin
independientes
Coste estimado
5.400
7.200
5.400
18.000
de
opcin
de
Observando
las
cifras
del
actual
proyecto
Cliente
@firma
(http://devel.uji.es/sonar/dashboard/index/1993), con 30.000 lneas de cdigo, es fcil
observar que el esfuerzo necesario para lograr la actual funcionalidad ha sido ingente, y por
lo tanto que el migrarlo a distintos lenguajes de programacin, con distintas bibliotecas, no
ser tampoco pequeo.
Lo cierto es que una implementacin auto-contenida, sin dependencias externas, en el que
toda la funcionalidad se agrupe en un programa local (como el actual MiniApplet Cliente
@firma), es absolutamente deseable, y muy especialmente si optsemos por la va de API
JavaScript estndar en los navegadores Web, ya que este cdigo podra utilizarse sin
modificaciones no solo en cualquier cliente (Windows, iOS, Android, etc.), sino incluso en
servidores.
No obstante hay muchos factores que condicionan el esfuerzo necesario para llegar a este
objetivo:
Motores CAdES.
o iOS, Linux, Mac OS X y Windows (excepto RT, UI Moderno y Phone)
Una implementacin en C portable, usando compiladores ASN.1 y las
bibliotecas OpenSSL es perfectamente viable (de hecho, es lo que se
est haciendo actualmente en el Cliente @firma para iOS).
No obstante, es un esfuerzo considerable, y el actual motor para iOS
carece an de soporte de contrafirmas y cofirmas.
Pgina 20 de 24
Motores PAdES
o iOS, Linux, Mac OS X y Windows (excepto RT, UI Moderno y Phone)
El trabajo necesario para crear un API para el manejo de PDF en C o
C++ es enorme. Aunque hay productos de Software Libre sobre los
que empezar a trabajar (por ejemplo: http://podofo.sourceforge.net/),
ninguno ofrece las facilidades de iText (las bibliotecas que usa
actualmente el Cliente @firma).
o Navegadores Web con JavaScript
Est disponible el API pdf.js de Mozilla como punto de partida, pero
el trabajo que habra que realizar supera incluso al de un motor en
C/C++.
o Windows RT, Windows 8 y 8.1 (UI Moderno) y Windows Phone
La existencia de las bibliotecas iText en C# alivia mucho el esfuerzo
necesario, pero su calidad no es la misma que en Java, y no es
desdeable la dificultad de la tarea.
o Android
Afortunadamente, el trabajo sobre JSE es 100% compatible con
Android con unas pequeas modificaciones sobre iText, as que este
entorno operativo no presenta trabajo adicional (de nuevo gracias a la
alta calidad de los activos actuales).
Si bien existe iTextDroid, una versin de iText para Android, el
Cliente @firma usa un desarrollo propio basado en este, ya
que el original presentaba problemas en las firmas
electrnicas.
Pgina 21 de 24
Motores XAdES
o En cualquiera de los casos es necesaria una implementacin completa
partiendo de un API XML.
.NET dispone de ciertas facilidades y existen bibliotecas de Software
Libre para C y C++ No obstante, la cantidad de opciones que dan
las firmas XML (dereferenciaciones, transformaciones, modos,
manifest, etc.) hace que cualquier aproximacin al problema sea
problemtica.
En este punto, vemos que si bien la parte de viabilidad de las alternativas viene dada por el
acceso a los almacenes de claves desde JavaScript de forma segura (apoyndose en una
aplicacin externa), el peso de la dificultad en la implementacin puede estar en la
implementacin de los motores de firma en los distintos formatos.
En general, se podra tener cierto nivel de reutilizacin de los activos actuales del proyecto
Cliente @firma (en verde mdulos necesarios que pueden tener cierto nivel de reutilizacin,
en azul aquellos que deben desarrollarse desde cero):
Interfaz Esquema Protocolo URL o API JavaScript (nativo o va extensiones de navegador)
App
Apple
iOS
Clientes Trifsicos C
Clientes Trifsicos
Java
Motor CAdES C
Extensin NSAPI/NPAPI
Almacn
NSS
Llavero
Mac OS X
App
Windows
8 / RT
App
Windows
Phone
Almacn PKCS#12
Aplicacin
Windows
XP, Vista y
7
App
Google
Android
Applet
Java
No obstante, todo problema tiene siempre distintas formas de resolverse, ya que estamos
quizs olvidando que existen los llamados procesos de firma en varias fases, en los que
parte del proceso, y es justo la composicin del formato final de firma, se realiza en un servidor.
Pgina 22 de 24
Este modelo est ya implementado con xito en el Cliente @firma, en produccin para algunos
casos muy particulares (implantado en organismos como la Diputacin Provincial de Ciudad
Real o el Ayuntamiento de Guadarrama), y permite reutilizar los activos existentes en Java en
aplicaciones JEE, relegando a los clientes nicamente aquellas operaciones que siempre
deben realizarse all (las dependientes de las claves privadas).
Un pequeo resumen de la tcnica puede encontrarse en el SVN del Cliente @firma:
http://svn-ctt.administracionelectronica.gob.es/svn/clienteafirma/docs/ANEXO_Firmaelectronica-en-varias-fases.docx
(requiere
alta
en
el
CTT
y
el
PAE:
http://administracionelectronica.gob.es/).
Quiere decir esto que la firma multifase es la solucin ideal si prescindisemos de los Applets
de Java? No exactamente; ms bien quiere decir que son soluciones parcialmente adecuadas
para la mayora de los casos, mientras se desarrollan las tareas que permitan tener soluciones
absolutamente adecuadas para la mayora de los casos.
Por ejemplo, el enfoque del firma multifase del Cliente @firma es tener al menos la
implementacin de CAdES simple (sin cofirmas ni contrafirmas) en un modo tradicional
(ejecucin 100% en el cliente) y por eso se estn desarrollando motores en C# (Microsoft
Windows 8, 8.1, RT y Phone) y en C portable (Apple iOS), mientras se reutiliza el motor Java
en Android. De igual forma, si un organismo considerase que su mejor solucin sera una
firma PAdES local, podra iniciar el desarrollo necesario, y mientras este finaliza, dar servicio
con los Applets actuales o con los modos en tres fases
6 Resumen
En el documento se desarrollan diversas opciones de futuro para el Cliente @firma, cada una
de ella con sus ventajas y sus inconvenientes Cules de ellas deben abordarse? Cules
deben descartarse? El carcter abierto y colaborativo del proyecto permitir sin duda que se
tenga en cuenta la opinin de muchos y que muchos puedan colaborar en llevar a cabo las
tareas
A modo de resumen, se podra describir la situacin actual como:
Acceso a claves privadas y firma PKCS#1 (parte obligatoria en cliente)
o La opcin deseable sera la implementacin de un estndar Web, promovido
por la W3C e implementado por Google, Mozilla, Microsoft y Apple, y apoyado
tcnicamente por el equipo del Cliente @firma.
Aun si fuese viable, est al menos a ms de 12 meses de distancia
Pgina 23 de 24
Pgina 24 de 24