Menú principal

Mostrando entradas con la etiqueta PassKit. Mostrar todas las entradas
Mostrando entradas con la etiqueta PassKit. Mostrar todas las entradas

jueves, 28 de junio de 2018

Cómo crear tu propio pass del wallet de iOS (Parte 2 de 2)

Continuando con el artículo de ayer seguimos hablando de los pass del wallet de iOS. Los ficheros que se encontraban en el paquete descomprimido correspondían a los antes mencionados, por lo que el problema no debía estar allí, tendría que haber algún problema en el momento de creación del pass. Por lo que nuevamente consulté la documentación en busca de ideas. Dentro de la sección Firmado y Compression del pass se especifica que es necesario un certificado de desarrollador para poder comprimir y firmar el pase. Para ello, se facilita una herramienta que automatiza el firmado del pass en la sección de descargas de desarrolladores Con esta herramienta ya era capaz de verificar si el problema residía en la fase de compresión y firmado gracias a uno de los flags del script.

Al ejecutar `./signpass -v 805161206.pkpass` por fin pude dar con el fallo, había un problema en la entidad que firmaba el pass, el certificado había expirado. Conociendo ya el problema, era tan fácil como volver a firmar el paquete con la herramienta que acababa de descargar para tener un pass nuevo. Solo debía eliminar los ficheros ‘signature’ y ‘manifest.json’, generar un certificado con mi cuenta de dessarrollador e indicar en el ‘pass.json’ el identificador de ese certificado junto al identificador de mi equipo de desarrollo.

Figura 1: Firma

Al hacerlo, había conseguido generar un nuevo paquete .pkpass con un certificado renovado. Al firmarlo, me di cuenta que el único elemento importante para generar el pass es el certificado creado para el pass, por lo que la demás información podía ser alterada sin una comprobación al fichero original. Para ello fui echando un vistazo al fichero ‘pass.json’ para ver qué más se podía modificar. Volviendo a la documentación, podemos ver que pass.json es un diccionario JSON con clave valor, y dentro del apartado Top-Level Keys podemos encontrar todas claves para modificar el pass. Estas claves se dividen en las top-level y lower-level.

Así pues, podemos comprobar que es muy sencillo modificar cualquier pass que nos envíen a nuestro terminal, por lo que la información aquí presente no debería utilizarse como método de autenticación si no es acompañada por un código de barras o QR generado a través de una clave única. Siguiendo estas indicaciones, los passes de iOS se convierten en una forma muy cómoda y segura de almacenar entradas de eventos o identificación personal en determinados establecimientos.

miércoles, 27 de junio de 2018

Cómo crear tu propio pass del wallet de iOS (Parte 1 de 2)

Los pass de la Wallet de iOS son una representación digital de información referente a tickets o entradas de un evento determinado. Estos passes incorporan ciertos mecanismos que permiten al usuario realizar acciones en el mundo físico, como por ejemplo notificar de una reserva en un hotel, escanear una entrada en un cine o un billete de avión en un aeropuerto. Para permitir realizar estas acciones, los pass pueden estar compuestos por imágenes, códigos de barras o información que puede ser actualizada a través de notificaciones push.

El usuario puede gestionar todos sus pass a través de la aplicación Wallet donde podrá visualizarlos, organizarlos o eliminarlos a voluntad. La tecnología inherente a estos passes se divide en los siguientes componentes:
  • Un formato particular para crear pass
  • Una API Web Service para poder actualizar los pass, implementado en los servidores del desarrollador.
  • Una API para que las apps puedan interactuar con la Wallet.
PassKit es el framework que recoge estas APIs y permite implementar todo lo necesario para desarrollar los pases. Con este framework y junto a un kit de desarrollo que proporciona Apple podemos generar nuestros propios tickets para almacenar en el Wallet de iOS. Para ello solo es necesario tener una cuenta de desarrollador de Apple y XCode.

Figura 1: Esquema de funcionamiento

Introducción al caso

Hace unos meses, al comprar unas entradas por internet me mandaron adjunto un ticket con extensión .pkpass. Al intentar abrirlo, el fichero no respondía como otros passes que había descargado anteriormente. Normalmente al abrir uno de estos archivos adjunto a un correo, el sistema presenta una ventana modal que permite visualizar el contenido con varias opciones, como la posibilidad de añadirlo al Wallet.  

Figura 2: Ejemplo de Pass

Al no responder de esa manera, me hizo sospechar que el pass podría tener un problema, así que decidí destripar el archivo en busca de posibles fallos. Al descomprimir y comprobar en la página de desarrolladores de Apple el formato esperado, no había nada que difiriese a lo indicado en la documentación.

Composición de un pass
 
Los pass son creados como paquetes comprimidos con la extensión .pkpass. Todos los recursos utilizados son cargados en el sistema usando las técnicas estándar de localización en paquetes, implementadas en la clase NSBundle. Los elementos principales de un pass contienen los siguientes archivos:
  • background.png -> La imagen que se mostrará como el fondo del pass.
  • footer.png -> La imagen mostrada en la parte frontal del pass, cercano a el código de barras. 
  • icon.png -> El icono del pass. Este icono se mostrará en notificaciones y emails que tienen el pass adjunto o en la pantalla de bloqueo cuando sea necesario mostrarlo.
  • logo.png -> La imagen que aparece en la esquina superior izquierda.
  • manifest.json -> Diccionario JSON en formato clave/valor donde cada clave es la ruta correspondiente al archivo y el valor es un hash en SHA1 de la clave para el archivo. Todos los elementos que aparezcan en el paquete deben estar contenidos en el manifest, a excepción del manifest y la firma.
  • pass.json -> Diccionario JSON que define el pass con un formato que explicaremos posteriormente.
  • signature -> Firma en PKCS #7 del manifest.json.
  • strip.png -> La imagen que se muestra debajo de los campos principales. thumbnail.png -> Una imagen adicional que se muestra en el frontal del pass, puede servir para mostrar un logo de la marca o información adicional.
Todas las imágenes son cargadas en el sistema siguiendo el estándar de UIImage, por lo que para poder visualizarlas correctamente en todos los dispositivos será necesario crear una versión en alta resolución con el doble de puntos que termine con el nombre @2x.png. En el próximo artículo se verá los ficheros, la modificación y el resultado final.

Entrada destacada

Proteger tu cuenta de Google y de Gmail con Latch Cloud TOTP #Latch #Gmail #Google

La semana pasada se liberó la nueva versión de Latch y nuestro compañero Chema Alonso hizo un repaso de todo ello en su artículo Latch...

Otras historias relacionadas

Entradas populares