2012-07-17 32 views
6

Es probable que esté trabajando en un proyecto donde las tarjetas Desfire existentes (utilizadas para acceder a servicios pagados) serán reemplazadas por un dispositivo móvil con capacidad NFC. ¿Alguien puede indicarme los recursos para ayudarme a comprender lo que implica a) replicar los datos de una tarjeta Desfire en un dispositivo móvil para que pueda tomar el lugar de una tarjeta, yb) para que la aplicación entregue datos NFC para presentar a el lector como si fuera una tarjeta. El emisor de la tarjeta proporcionará todas las claves relevantes y el acceso (si el proyecto continúa), pero estoy dispuesto a comprender el proceso por adelantado.¿Qué tan bien soporta Android API NFC Mifare Desfire?

También necesito entender qué tan bien la API Android NFC admite Desfire, porque por lo que puedo ver, solo admite Classic. http://developer.android.com/reference/android/nfc/tech/package-summary.html

Respuesta

15

MIFARE DESFire cumple con la norma ISO 14443-4. El soporte en Android para ISO 14443-4 (y por lo tanto MIFARE DESFire) se realiza mediante la clase IsoDep. Puede enviar cualquier comando DESFire utilizando el método transceive() de esa clase.

Además de eso, DESFire se puede configurar para que sea compatible con NFC Forum tipo 4. En este caso, Android leerá automáticamente cualquier mensaje NDEF de la etiqueta y lo enviará en un intento. Por lo tanto, puede hacer que su aplicación se inicie automáticamente cuando se escanea una etiqueta específica. (Android también puede formatear un chip DESFire para contener NDEF y escribir datos NDEF.)

Reemplazar una tarjeta DESFire por un dispositivo NFC móvil es otra cosa. La emulación de la tarjeta en dispositivos Android actualmente disponibles se realiza mediante un elemento seguro integrado conectado al chip NFC. Una aplicación de Android no puede emular una tarjeta (tampoco hay API para esto) y el elemento seguro no puede emular un chip DESFire. Además, no hay una API abierta para acceder al elemento seguro desde una aplicación.

La única forma en que una aplicación Android NFC puede comunicarse a través de NFC con otro dispositivo (que no es una tarjeta) está usando Android Beam. Sin embargo, este es un protocolo diferente al utilizado entre la tarjeta y el lector.

+0

Muchas gracias por la explicación. ¿Estás preparado para alguna consulta (ahora o en el futuro)? Si es así, por favor envíeme un correo electrónico a ollie AT novoda.com –

+0

DESFire no se puede bloquear en un dispositivo Android. Puede leerlos/escribirlos pero no bloquearlos. – Fuzzy

+2

No existe el concepto de bloqueo con DESFire. Sin embargo, puede configurar el control de acceso utilizando claves de autenticación para las aplicaciones DESFire y/o los archivos en una aplicación DESFire. –

1

Dada su situación, yo diría que el SDK de Android es más que suficiente para resolver su problema. Hay dos partes para su caso:

  1. Leyendo la información de las tarjetas existentes.
  2. Hacer una aplicación con la información que ha leído de las tarjetas.

Parte 1:

Su única preocupación tiene que estar en la lectura de la tarjeta DESFire. Si la información en la tarjeta DESFire se almacena en formato NDEF, hace las cosas aún más fáciles.

Ndef es una clase del SDK que se puede utilizar para recuperar la información en NdefMessage que puede usar para guardar la información recuperada en su almacenamiento, ya sea una base de datos local, remota o simplemente en la memoria de la aplicación.

Lo anterior es bajo la suposición de que la tarjeta no está protegida. Si es así, entonces tiene que usar la función transceive para interactuar usando la comunicación de bytes sin formato. Esto se desbloquearía para que se lea el resto de la información. Desde aquí puede leer los registros NDEF.

Parte 2: Mi sugerencia es omitir el aspecto de la emulación de la tarjeta. Vas a golpear una pared en algún momento.

Si el dispositivo que ha estado leyendo la tarjeta en la solución existente está conectado a un dispositivo Android, entonces Android Beam es el camino a seguir. ¡Lo cual no es más que la comunicación de la aplicación Android con la aplicación de Android! Android ya hace el trabajo pesado, por lo que la mayor parte de tu trabajo será fácil.

La información en la tarjeta se puede almacenar como mensajes ndef y enviarse a través de la viga, o simplemente puede crear un objeto personalizado y enviarlo.

0

Es posible que desee ver en MIFARE4Mobile, la iniciativa puesta en marcha para la transición de las tarjetas Mifare a dispositivos NFC:

http://mifare4mobile.org/

11

NFC chico respuesta es excelente, pero un poco anticuado, por lo que he decidido añadir una actualización.

Comenzando con KitKat (4.4), ahora puede emular tarjetas sin un elemento seguro.

Se llama emulación de tarjeta basada en el host (Hce) y con la que puede emular una tarjeta tipo A ISO 14443 .. Como una tarjeta de desfire.

Hay dos pequeñas salvedades:

  • sus problemas lector debe, justo después de la votación de la "tarjeta", un SELECT ISO (AID), con un ID de aplicación fija (AID) de su elección. Este AID debe estar registrado en el manifiesto de su aplicación. Android interceptará este ISO SELECT, leerá la ayuda y le llamará solo si coincide con la de su manifiesto. Luego puede intercambiar cualquier cosa, ni siquiera tiene que ser APDU ISO (la encapsulación ISO 14443 es hecha por android). Así, por ejemplo, Si desea, incluso se puede emular la autenticación de respuesta de desafío de DESFire (key_num 0xA0, desafío 0xAF, la respuesta 0xAF, 0x00 session_key)

  • no se puede confiar en el UID (pero no, ¿no? Esta es una mala práctica de todos modos, así que nadie lo hace ... ¿verdad? :)) porque es aleatorio, y cambia constantemente (no dentro de una sola sesión, por supuesto, pero ... .)

estamos emulando nuestras tarjetas DESFire, y el único cambio que tenía que hacer era cambiar de nuestro DESFire inicial de selección de aplicación (0x5A) a un SELECT ISO (0x0 0 0xA4 0x04).

La autenticación de emulación (la cuestión de desafío-respuesta) puede ser complicada, pero ya lo habíamos hecho "al revés" (usando NFC para leer tarjetas de desfire), así que fue fácil para nosotros.

Y si se basan en el UID tarjeta para la autenticación .. es un buen momento para cambiarlo :)

+0

Tenga en cuenta que si desea admitir un sistema mixto de tarjetas DESFire (existentes) y (nuevas) aplicaciones de HCE, esto puede ser complicado, debido a las diferencias entre los 2. Particularmente, la necesidad de enviar un ISO Select para activar una aplicación Android HCE probablemente chocará con el uso de tarjetas DESFire. –

+0

Cierto, puede ser complicado. Pero las tarjetas DESFire (al menos, el EV1 que tengo aquí) admiten un conjunto limitado de comandos ISO. ISO SELECT es uno de ellos: la tarjeta lo procesa correctamente. Solo tuve que sustituir mi primer DESFire select (0x5A AID) con un ISO SELECT (0x00 0xA4). La tarjeta se realizó de la misma manera Y HICE feliz a Android HCE :) –

+0

El problema es que 1) es posible que no pueda tocar su aplicación de acoplador/lector 2) tiene que volver a implementar todos los comandos de desfire en el software. lo cual puede no tener sentido (¿por qué usar 0xCD para débito cuando de todos modos tiene que implementarlo en sw?) –

Cuestiones relacionadas