12
ElevenPaths, innovación radical y disruptiva en seguridad

Integración de SealSign BSS en aplicaciones iOS

Embed Size (px)

Citation preview

Page 1: Integración de SealSign BSS en aplicaciones iOS

ElevenPaths, innovación radical y disruptiva en seguridad

Page 2: Integración de SealSign BSS en aplicaciones iOS

2015 © Telefonica Digital Identity & Privacy, S.L.U. All Rights Reserved. Página 2 de 12

CONTENIDO

1 Introducción ............................................................................................................... 3

2 Firma Biométrica ......................................................................................................... 4

2.1 Inclusión de Proxies de los Servicios Web ................................................................................ 4

2.2 Inclusión del Cliente SealSignBSSClientLibrary ......................................................................... 4

2.3 Firma Biométrica ...................................................................................................................... 5

2.3.1 Inclusión del Panel de Firma ....................................................................................................... 5

2.3.2 Registro de Eventos .................................................................................................................... 5

2.3.3 Establecer Fondo de Firma Transparente .................................................................................. 6

2.3.4 Inicio de la Captura ..................................................................................................................... 6

2.3.5 Borrar la Captura ........................................................................................................................ 6

2.3.6 Inicio de la Firma ........................................................................................................................ 6

2.3.7 Criptografía en Cliente................................................................................................................ 7

2.3.8 Fin de Firma ................................................................................................................................ 7

2.4 Verificación de Documentos Firmados ..................................................................................... 7

2.5 Firma Biométrica Desconectada ............................................................................................... 8

2.5.1 Captura Desconectada ............................................................................................................... 8

2.5.2 Sincronización de la Firma con el Servidor ................................................................................. 8

2.6 Firma Biométrica con Document Provider (Documento en el Servidor) .................................. 9

2.6.1 Inicio de la Firma ........................................................................................................................ 9

2.6.2 Criptografía en Cliente.............................................................................................................. 10

2.6.3 Fin de la Firma .......................................................................................................................... 10

2.7 Integración de BioSigner para IOS .......................................................................................... 10

Page 3: Integración de SealSign BSS en aplicaciones iOS

2015 © Telefonica Digital Identity & Privacy, S.L.U. All Rights Reserved. Página 3 de 12

1 Introducción

SealSign BSS (Biometric Signature Services) es un módulo dirigido a facilitar la integración de la firma manuscrita biométrica en aplicaciones corporativas. SealSign BSS expone su funcionalidad a través de Servicios Web basados en la tecnología WCF (Windows Communication Framework). Estos servicios pueden ser invocados por aplicaciones implementadas sobre la mayoría de las tecnologías del mercado.

Este documento recoge la descripción de dichos servicios así como ejemplos de desarrollo para ayudar a la integración de aplicaciones con el servidor de firma de SealSign.

Este documento no pretende ser un manual sobre los aspectos concretos de la firma electrónica sino un manual de referencia técnica, orientado al desarrollador, sobre cómo integrar SealSign BSS en aplicaciones iOS.

Page 4: Integración de SealSign BSS en aplicaciones iOS

2015 © Telefonica Digital Identity & Privacy, S.L.U. All Rights Reserved. Página 4 de 12

2 Firma Biométrica

2.1 Inclusión de Proxies de los Servicios Web

Para interactuar con la plataforma servidora se hace uso de la capa de servicios Web. El documento “SealSignDSS - Referencia de Servicios Web” detalla cada servicio y sus parámetros. Dentro del SDK de IOS se incluyen las clases proxy necesarias generadas con la herramienta www.easywsdl.com. Estas clases se aportan como facilitador de la integración pero no son parte del SDK de SealSignDSS y, por lo tanto, no están soportadas.

Para incluir dichas clases en el proyecto hay que seguir los pasos indicados en el fichero readme.txt incluido. Se pueden consultar aspectos de integración de los proxies en la página web de la herramienta http://easywsdl.com/Home/Faq.

2.2 Inclusión del Cliente SealSignBSSClientLibrary

Para incluir las funciones de captura biométrica y criptografía en el cliente de la plataforma es necesario añadir tanto la librería estática de captura SealSignBSSClientLibrary.a como el fichero de cabecera SealSignBSSClientLibrary.h al proyecto:

Imagen 01: Aspecto del proyecto.

Una vez incluidos es necesario declarar la importación del fichero de cabera:

#import "SealSignBSSClientLibrary.h"

Para soportar la funcionalidad del panel, es necesario añadir el framework Coremotion.framework.

Imagen 02: Elección del framework CoreMotion.

Adicionalmente, para que se incluyan todos los símbolos y evitar el problema de “Unknown class SealSignBSSPanelView in Interface Builder file” en runtime debido a una vista personalizada, se pueden añadir las opciones –all_load y –ObjC a la sección “Other Linker Flags”.

Page 5: Integración de SealSign BSS en aplicaciones iOS

2015 © Telefonica Digital Identity & Privacy, S.L.U. All Rights Reserved. Página 5 de 12

Imagen 03: Adición de las opciones –all_load y –ObjC a la sección “Other Linker Flags”.

2.3 Firma Biométrica

2.3.1 Inclusión del Panel de Firma El panel de firma es una clase heredada de UIView. Para incluirla se añade una vista normal y se especifica la clase SealSignBSSPanelView en el tipo de la clase.

Imagen 04: Especificación de la clase SealSignBSSPanelView en la vista.

2.3.2 Registro de Eventos Es posible recibir eventos del panel implementando el delegado SealSignBSSPanelViewDelegate. Los eventos que incluye el interfaz son:

-(void)didSignatureCleared: Se ha borrado la firma de la tableta.

-(void)didSignatureStarted: Ha comenzado la captura de firma y se ha tomado la primera muestra.

capturePanel.addEventListener(this);

Page 6: Integración de SealSign BSS en aplicaciones iOS

2015 © Telefonica Digital Identity & Privacy, S.L.U. All Rights Reserved. Página 6 de 12

2.3.3 Establecer Fondo de Firma Transparente La firma por defecto se muestra en la imagen sobre fondo blanco. Si en la representación gráfica es necesario que el fondo sea transparente, se puede utilizar el método setTransparentSignature:

capturePanel.setTransparentSignature(true);

2.3.4 Inicio de la Captura El panel comienza a registrar la captura con el primer punto detectado. No es necesario llamar a ningún método adicional.

2.3.5 Borrar la Captura Para reiniciar y borrar la captura realizada se puede llamar al método cleanSignature del panel de firma:

capturePanel.cleanSignature();

2.3.6 Inicio de la Firma Para firmar biométricamente, se realizan los siguientes pasos:

1. Se notifica a la plataforma el documento a firmar.

2. Con los datos obtenidos del servidor (instancia y token de firma) se realiza la operación de fusión de datos biométricos y criptografía mediante la librería cliente SealSignBSSClientLibrary.

3. Se notifica el resultado de la operación a la plataforma para finalizar la operación de firma y componer el documento final.

Se notifica el inicio de firma a la plataforma servidora mediante la llamada al método BeginSignature. El servicio consumido es el /SealSignBSSService/BiometricSignatureServiceBasic.svc.

Los valores retornados y la sintaxis del método se pueden consultar en el documento “Sealsign BSS - Referencia de Servicios Web”:

NSString *documentPath = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"pdf"]; NSData *documentData = [NSData dataWithContentsOfFile:documentPath]; NSError *serviceError = nil; BSBBasicHttpBinding_IBiometricSignatureServiceBasic* service = [[BSBBasicHttpBinding_IBiometricSignatureServiceBasic alloc] init]; [service setUrl:@"https://master.sealsignonline.com/sealsignbssservice/biometricsignatureservicebasic.svc/B"]; NSMutableSet *biometricOptions = [[NSMutableSet alloc] initWithObjects:[BSBBiometricSignatureFlags Default], nil]; NSMutableSet *options = [[NSMutableSet alloc] initWithObjects:[BSBSignatureFlags Default], nil]; BSBBiometricImageParameters *biometricImageParameters = [[BSBBiometricImageParameters alloc] init]; [biometricImageParameters setSignatureVisible:YES]; [biometricImageParameters setOnAllPages:YES]; [biometricImageParameters setAutoSize:NO]; [biometricImageParameters setHeight:100]; [biometricImageParameters setWidth:120]; [biometricImageParameters setOffsetX:300];

Page 7: Integración de SealSign BSS en aplicaciones iOS

2015 © Telefonica Digital Identity & Privacy, S.L.U. All Rights Reserved. Página 7 de 12

[biometricImageParameters setOffsetY:100]; BSBArrayOfBiometricImageParameters *arrayBiometricImageParameters = [[BSBArrayOfBiometricImageParameters alloc] initWithObjects: biometricImageParameters, nil]; BSBBiometricSignatureParameters *biometricParameters = [[BSBBiometricSignatureParameters alloc] init]; [biometricParameters setAdvancedImageParameters:arrayBiometricImageParameters]; BSBBiometricSignatureBeginResponseBasic *beginResponse = [service BeginSignature:[BSBSignatureProfile PDF] biometricSignatureType:[BSBBiometricSignatureType Default] _id:nil account:nil biometricOptions:biometricOptions biometricParameters:biometricParameters options:options parameters:nil detachedSignature:nil signingDocument:documentData __error:&serviceError];

2.3.7 Criptografía en Cliente Mediante la llamada al panel de firma se realiza la obtención de los datos biométricos y la operación criptográfica:

NSString *finalBiometricStateBase64 = [_panelView getSignature:[beginResponse getInstance] biometricState:[beginResponse getBiometricState]]; NSData *finalBiometricState = [[NSData alloc] initWithBase64EncodedString:finalBiometricStateBase64 options:NSDataBase64DecodingIgnoreUnknownCharacters];

2.3.8 Fin de Firma Se notifica a la plataforma el fin de la firma y se obtiene el documento final. El servicio consumido es el /SealSignBSSService/BiometricSignatureServiceBasic.svc.

Los valores retornados y la sintaxis del método se pueden consultar en el documento “Sealsign BSS - Referencia de Servicios Web”:

NSData *signedDocument = [service EndSignature:[beginResponse getInstance] biometricState:finalBiometricState __error:&serviceError]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"sample.pdf.signed.pdf"]; [signedDocument writeToFile:filePath atomically:YES];

2.4 Verificación de Documentos Firmados

Es posible verificar una firma capturadas contra las firmas contenidas en un documento. Para ello se realiza una única llamada al método Verify de la plataforma servidora. El servicio consumido es el /SealSignBSSService/BiometricSignatureServiceBasic.svc.

Los valores retornados y la sintaxis del método se pueden consultar en el documento “Sealsign BSS - Referencia de Servicios Web”:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"sample.pdf.signed.pdf"];

Page 8: Integración de SealSign BSS en aplicaciones iOS

2015 © Telefonica Digital Identity & Privacy, S.L.U. All Rights Reserved. Página 8 de 12

NSData *documentData = [NSData dataWithContentsOfFile:filePath]; NSError *serviceError = nil; BSBBasicHttpBinding_IBiometricSignatureServiceBasic* service = [[BSBBasicHttpBinding_IBiometricSignatureServiceBasic alloc] init]; [service setUrl:@"https://master.sealsignonline.com/sealsignbssservice/biometricsignatureservicebasic.svc/B"]; NSString *finalBiometricStateBase64 = [_panelView getSignature:@"00000000-0000-0000-0000-000000000000" biometricState:nil]; NSData *finalBiometricState = [[NSData alloc] initWithBase64EncodedString:finalBiometricStateBase64 options:NSDataBase64DecodingIgnoreUnknownCharacters]; NSMutableSet *biometricOptions = [[NSMutableSet alloc] initWithObjects:[BSBBiometricVerificationFlags Default], nil]; BSBBiometricSignatureVerification *signatureVerification = [service Verify:[BSBSignatureProfile PDF] biometricSignatureType:[BSBBiometricSignatureType Default] _id:nil account:nil biometricOptions:biometricOptions biometricParameters:nil biometricState:finalBiometricState detachedSignature:nil document:documentData __error:&serviceError]; NSLog(@"%@", [signatureVerification getResult]);

2.5 Firma Biométrica Desconectada

En algunos escenarios es posible que no haya conexión con el servidor de firma biométrica. SealSign permite realizar una firma preliminar para sincronizar con el servicio cuando el cliente vuelva a tener conexión. Es necesario disponer del documento en el cliente para poder asociar de manera única la firma capturada con el mismo.

2.5.1 Captura Desconectada Mediante la llamada al panel de firma se realiza la obtención de los datos biométricos y la operación criptográfica. En lugar de los datos obtenidos del servicio en una llamada normal, se obtiene el token biométrico pasando el documento a firmar como parámetro. Posteriormente, se obtiene también la instancia temporal generada en cliente:

NSString *documentPath = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"pdf"]; NSData *documentData = [NSData dataWithContentsOfFile:documentPath]; NSDictionary *offlineDict = [_panelView getOfflineSignature:documentData];

2.5.2 Sincronización de la Firma con el Servidor Una vez reestablecida la comunicación con el servicio, será necesario sincronizar la firma o firmas generadas de forma desconectada para obtener el documento final, incluyendo todos los elementos necesarios mediante la llamada al método SyncOfflineSignatures. El servicio consumido es el /SealSignBSSService/BiometricSignatureServiceBasic.svc:

BSBBasicHttpBinding_IBiometricSignatureServiceBasic* service = [[BSBBasicHttpBinding_IBiometricSignatureServiceBasic alloc] init]; [service setUrl:@"https://master.sealsignonline.com/sealsignbssservice/biometricsignatureservicebasic.svc/B"];

Page 9: Integración de SealSign BSS en aplicaciones iOS

2015 © Telefonica Digital Identity & Privacy, S.L.U. All Rights Reserved. Página 9 de 12

NSMutableSet *biometricOptions = [[NSMutableSet alloc] initWithObjects:[BSBBiometricSignatureFlags Default], nil]; NSMutableSet *options = [[NSMutableSet alloc] initWithObjects:[BSBSignatureFlags Default], nil]; NSData *finalBiometricState = [[NSData alloc] initWithBase64EncodedString:[offlineDict valueForKey:@"biometricState"] options:NSDataBase64DecodingIgnoreUnknownCharacters]; BSBOfflineBiometricSignature *offlineSignature = [[BSBOfflineBiometricSignature alloc] init]; [offlineSignature set_id:@""]; [offlineSignature setAccount:@""]; [offlineSignature setBiometricOptions:biometricOptions]; [offlineSignature setOptions:options]; [offlineSignature setInstance:[offlineDict valueForKey:@"instance"]]; [offlineSignature setOfflineBiometricState:finalBiometricState]; BSBArrayOfOfflineBiometricSignature *offlineSignatures = [[BSBArrayOfOfflineBiometricSignature alloc] initWithObjects:offlineSignature, nil]; NSData *signedDocument = [service SyncOfflineSignatures:[BSBSignatureProfile PDF] offlineSignatures:offlineSignatures detachedSignature:nil signingDocument:documentData __error:&serviceError]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"sample.pdf.signed.pdf"]; [signedDocument writeToFile:filePath atomically:YES];

2.6 Firma Biométrica con Document Provider (Documento en el

Servidor)

El procedimiento de firma con un document provider es similar al de firma biométrica, con la diferencia de que el documento no tiene por qué estar en el cliente. En su lugar, se especifica una URI que el document provider utilizará para obtener el documento de un Backend documental en la parte servidora.

2.6.1 Inicio de la Firma Se notifica el inicio de firma a la plataforma servidora mediante la llamada al método BeginSignatureProvider. El servicio consumido es /SealSignBSSService/BiometricSignatureService Basic.svc.

Los valores retornados y la sintaxis del método se pueden consultar en el documento “Sealsign BSS - Referencia de Servicios Web”:

NSError *serviceError = nil; BSBBasicHttpBinding_IBiometricSignatureServiceBasic* service = [[BSBBasicHttpBinding_IBiometricSignatureServiceBasic alloc] init]; [service setUrl:@"https://master.sealsignonline.com/sealsignbssservice/biometricsignatureservicebasic.svc/B"];

Page 10: Integración de SealSign BSS en aplicaciones iOS

2015 © Telefonica Digital Identity & Privacy, S.L.U. All Rights Reserved. Página 10 de 12

BSBBiometricSignatureBeginResponseBasic *beginResponse = [service BeginSignatureProvider:nil account:nil uri:@"demo:\\y:\\proyectos\\sealsign\\samples\\sample.pdf" providerParameter:nil document:nil __error:&serviceError];

2.6.2 Criptografía en Cliente Mediante la llamada al panel de firma se realiza la obtención de los datos biométricos y la operación criptográfica:

NSString *finalBiometricStateBase64 = [_panelView getSignature:[beginResponse getInstance] biometricState:[beginResponse getBiometricState]]; NSData *finalBiometricState = [[NSData alloc] initWithBase64EncodedString:finalBiometricStateBase64 options:NSDataBase64DecodingIgnoreUnknownCharacters];

2.6.3 Fin de la Firma Se notifica a la plataforma el fin de la firma. El servicio consumido es el /SealSignBSSService/ BiometricSignatureServiceBasic.svc.

Los valores retornados y la sintaxis del método se pueden consultar en el documento “Sealsign BSS - Referencia de Servicios Web”:

[service EndSignatureProvider:[beginResponse getInstance] biometricState:finalBiometricState uri:@"demo:\\y:\\proyectos\\sealsign\\samples\\sample.pdf" providerParameter:nil returnSignedDocument:[NSNumber numberWithInt:0] __error:&serviceError];

2.7 Integración de BioSigner para IOS

La aplicación BioSigner para iPad/iPhone de ElevenPaths permite la firma biométrica de documentos electrónicos de diferentes formatos (PDF, Office, XML).

Esta aplicación puede ser invocada como un componente que realice la operación de firma desde una página web que se visualiza desde el navegador Safari del dispositivo móvil. El servidor SealSign debe poder acceder al documento a firmar y la lógica necesaria para recuperar el documento se implementa en los proveedores de documentos.

Los pasos necesarios para realizar esta integración son:

1. Instalar la aplicación BioSigner, en el iPad o iPhone. Simplemente a través de App Store, hay que localizar e instalar la aplicación “BioSigner”.

2. Crear una página web que invoque al componente de firma de BioSigner indicando los parámetros necesarios. La invocación de BioSigner desde una página web se realiza invocando a una URL especial que se ha registrado en el dispositivo al instalar la aplicación. La URL tiene la siguiente sintaxis:

mobilebssfe://?parametro1=valor&parametro2=valor&…

Los parámetros son:

a. viewerurl: Se abrirá dicha URL en un visor web por detrás de los campos de firma.

b. uri: Es el primer valor se pasará al document provider del servidor para identificar el documento.

Page 11: Integración de SealSign BSS en aplicaciones iOS

2015 © Telefonica Digital Identity & Privacy, S.L.U. All Rights Reserved. Página 11 de 12

c. providerParameter: Es un valor opcional que se pasará al document provider del servidor con información adicional sobre el documento (p.e. metadatos asociados al documento).

d. serviceUrl: identifica la URL del servidor de SealSign Engine que se va a utilizar.

e. serviceUsername: Si se especifica, la conexión al servidor de firma se realizará con este usuario. En caso de no especificar este parámetro se realizará una conexión anónima.

f. servicePassword: Indica la contraseña que se utilizará en la conexión al servidor de firma SealSign en caso de especificar un nombre de usuario.

g. exitUrl: Especifica la URL de salida a la que se navegará después de la operación de firma.

Un posible ejemplo de esta URL sería este:

mobilebssfe://?viewerurl=http://www.smartaccess.es&uri=demo://1-2-z.pdf&providerParameter=myProviderParameter&serviceUrl=http://demo.smartaccess.es/sealsigndssfrontend&serviceUsername=usuario&servicePassword=pwd&exitUrl=http://www.google.es

Page 12: Integración de SealSign BSS en aplicaciones iOS

2015 © Telefonica Digital Identity & Privacy, S.L.U. All Rights Reserved. Página 12 de 12

La información contenida en el presente documento es propiedad de Telefónica Digital Identity & Privacy, S.L.U. (“TDI&P”) y/o de cualquier otra entidad dentro del Grupo Telefónica o sus licenciantes. TDI&P y/o cualquier compañía del Grupo Telefónica o los licenciantes de TDI&P se reservan todos los derechos de propiedad industrial e intelectual (incluida cualquier patente o copyright) que se deriven o recaigan sobre este documento, incluidos los derechos de diseño, producción, reproducción, uso y venta del mismo, salvo en el supuesto de que dichos derechos sean expresamente conferidos a terceros por escrito. La información contenida en el presente documento podrá ser objeto de modificación en cualquier momento sin necesidad de previo aviso.

La información contenida en el presente documento no podrá ser ni parcial ni totalmente copiada, distribuida, adaptada o reproducida en ningún soporte sin que medie el previo consentimiento por escrito por parte de TDI&P.

El presente documento tiene como único objetivo servir de soporte a su lector en el uso del producto o servicio descrito en el mismo. El lector se compromete y queda obligado a usar la información contenida en el mismo para su propio uso y no para ningún otro.

TDI&P no será responsable de ninguna pérdida o daño que se derive del uso de la información contenida en el presente documento o de cualquier error u omisión del documento o por el uso incorrecto del servicio o producto. El uso del producto o servicio descrito en el presente documento se regulará de acuerdo con lo establecido en los términos y condiciones aceptados por el usuario del mismo para su uso.

TDI&P y sus marcas (así como cualquier marca perteneciente al Grupo Telefónica) son marcas registradas. TDI&P y sus filiales se reservan todo los derechos sobre las mismas.

PUBLICACIÓN:

Junio 2015

En ElevenPaths pensamos de forma diferente cuando hablamos de seguridad. Liderados por Chema Alonso, somos un equipo de expertos con inquietud para replantearnos la industria y gran experiencia y conocimiento en el sector de la seguridad. Dedicamos toda nuestra experiencia y esfuerzos en crear productos innovadores para que la vida digital sea más segura para todos.

La evolución de las amenazas de seguridad en la tecnología es cada vez más rápida y constante. Por eso, desde junio de 2013, nos hemos constituido como una start-up dentro de Telefónica para trabajar de forma ágil y dinámica, y ser capaces de transformar el concepto de seguridad anticipándonos a los futuros problemas que afecten a nuestra identidad, privacidad y disponibilidad online.

Con sede en Madrid, estamos presentes también en Londres, EE.UU, Brasil, Argentina, y Colombia.

TIENES ALGO QUE CONTARNOS, PUEDES HACERLO EN:

elevenpaths.com Blog.elevenpaths.com @ElevenPaths Facebook.com/ElevenPaths YouTube.com/ElevenPaths