Dans quelle mesure L'API NFC Android prend-elle en charge Mifare Desfire?

il est probable que je travaille sur un projet où les cartes Desfire existantes (utilisées pour accéder aux services payants) seront remplacées par un appareil mobile compatible NFC. Est-ce que quelqu'un peut m'indiquer des ressources pour m'aider à comprendre ce qui est impliqué dans a) réplique des données d'une carte Desfire sur un appareil mobile afin qu'il puisse prendre la place d'une carte, et b) Pour l'application de livrer des données NFC afin de présenter au lecteur comme si c'était une carte. Toutes les clés et accès pertinents seront fournis par l'émetteur de la carte (si le projet va de l'avant) mais je tiens à comprendre le processus à l'avance.

j'ai également besoin de comprendre comment l'API NFC Android prend en charge Desfire, parce que pour autant que je peux voir qu'il ne supporte correctement Classic. http://developer.android.com/reference/android/nfc/tech/package-summary.html

6
demandé sur NFC guy 2012-07-17 17:40:52

4 réponses

MIFARE DESFire est conforme à la norme ISO 14443-4. Le Support sur Android pour ISO 14443-4 (et donc MIFARE DESFire) est fait par la classe IsoDep . Vous pouvez envoyer n'importe quelle commande DESFire en utilisant la méthode transceive() de cette classe.

de plus, DESFire peut être configuré pour être compatible avec la balise NFC Forum type 4. Dans ce cas, Android lira automatiquement tous les messages NDEF de la balise et les envoyer dans une intention. Ainsi, vous pouvez faire votre l'application démarre automatiquement lorsqu'une étiquette spécifique est scannée. (Android peut également formater une puce DESFire pour contenir NDEF et y écrire des données NDEF.)

le remplacement d'une carte DESFire par un appareil mobile NFC est une autre question. L'émulation de carte sur les appareils Android actuellement disponibles est effectuée par un élément sécurisé intégré connecté à la puce NFC. Une application Android ne peut pas émuler une carte (il n'y a pas non plus D'API pour cela) et L'élément de sécurité ne peut pas émuler une puce DESFire. En outre, il est aucune API ouverte pour accéder à L'élément sécurisé d'une application.

la seule façon pour une application NFC Android de communiquer via NFC vers un autre appareil (qui n'est pas une carte) est d'utiliser Android Beam . Il s'agit toutefois d'un protocole différent de celui utilisé entre la carte et le lecteur.

15
répondu NFC guy 2012-07-17 14:20:00

NFC guy réponse est excellente, mais un peu dépassée, donc j'ai décidé d'ajouter une mise à jour.

à partir de KitKat (4.4), vous pouvez maintenant émuler des cartes sans élément de sécurité.

il est appelé émulation de carte basée sur L'hôte ( Hce ) et avec cela vous pouvez émuler une carte de type A ISO 14443.. Comme une carte desfire.

il y a deux petites mises en garde:

  • votre le lecteur doit publier, juste après le sondage de la "carte", un SELECT ISO (aide), avec un id d'application fixe (aide) de votre choix. Cette aide doit être enregistrée dans votre manifeste app. Android interceptera ce SELECT ISO, Lira l'AIDE, et vous appellera seulement si elle correspond à celle de votre manifeste. Ensuite, vous pouvez échanger n'importe quoi, il ne doit même pas être ISO APDUs (ISO 14443 encapsulation est fait par android). Ainsi, par exemple, si vous voulez , vous peut même émuler la réponse de challenge authentification de desfire (0XA0 key_num, 0xaf challenge, 0xaf response, 0x00 session_key)

  • vous ne pouvez pas compter sur l'UID (mais vous n'en avez pas, pas vrai? C'est une mauvaise pratique de toute façon, personne ne le fait... droit? :)) parce qu'il est aléatoire, et il change constamment (pas à l'intérieur d'une seule session, bien sûr, mais...)

nous émulons nos cartes desfire, et le seul le changement que nous avons dû faire était de passer de notre application initiale desfire select (0x5A) à une application ISO SELECT (0x00 0xA4 0x04).

émuler l'authentification (la chose challenge-response) peut être délicat, mais nous l'avions déjà fait "dans l'autre sens" (en utilisant NFC pour lire des cartes desfire), donc c'était facile pour nous.

et si vous comptez sur la carte UID pour l'authentification.. c'est un bon moment pour changer :)

12
répondu Lorenzo Dematté 2014-11-06 08:57:59

étant donné votre situation, je dirais que le SDK Android est plus que suffisant pour résoudre votre problème. Il y a deux parties à votre affaire:

  1. lecture des informations des cartes existantes.
  2. faire une application avec les informations que vous avez lues sur les cartes.

Partie 1:

votre seul souci doit être dans la lecture de la carte DESFire. Si l'information dans la carte DESFire est stocké au format NDEF, il rend les choses encore plus facile.

Ndef est une classe dans le SDK qui peut être utilisé pour récupérer les informations en NdefMessage type que vous pouvez ensuite utiliser pour enregistrer les informations extraites dans votre installation de stockage, que ce soit une base de données locale, ou une base de données à distance, ou tout simplement dans la mémoire de l'application.

ce qui précède suppose que la carte n'est pas protégée. Si c'est le cas, vous devez alors utiliser la fonction transceive pour interagir en utilisant la communication brute byte. Cela déverrouillerait pour le reste de l'information à lire. D'ici, vous pouvez lire les enregistrements NDEF.

partie 2: Ma suggestion est ignorer l'émulation de carte. Tu vas heurter un mur à un moment donné.

si l'appareil qui a lu la carte dans la solution existante est attaché à un appareil android, alors Android Beam est la voie à suivre. Qui n'est rien D'autre que L'application Android à L'application Android la communication! Android fait déjà le levage lourd, donc la plupart de votre travail va être facile.

les informations sur la carte peuvent être stockées sous forme de messages ndef et envoyés par beam, ou vous pouvez simplement créer un objet personnalisé et l'envoyer.

1
répondu gaara87 2012-07-18 07:04:57

vous pouvez regarder Mifare4Mobile, l'initiative mise en place pour passer des cartes Mifare aux périphériques NFC:

http://mifare4mobile.org /

0
répondu mpclark 2012-07-20 18:19:10