web-dev-qa-db-fra.com

Carte Emulate Mifare avec Android 4.4

J'ai effectué des recherches sur le Mifare et d'autres émulations de cartes. J'ai de très bonnes connaissances en programmation (pas avec Android, mais avec C/C++). J'ai proxmark et j'ai créé plusieurs codes d'émulation pour proxmark, je sais donc comment les cartes communiquent.

Je ne comprends pas pour le moment, Android permet-t-il une émulation complète de la carte? Certaines personnes disent que c'est possible, d'autres disent que non. J'ai regardé à travers l'API Android et l'émulation de carte basée sur l'hôte semble pouvoir faire l'affaire, mais si je comprends bien, il s'agit d'une nouveauté de la version 4.4 de KitKat.

Pour simplifier les choses, j'étudie actuellement l'émulation la plus simple de base pour Mifare Ultralight. Cette carte est un cauchemar de sécurité, il n'y a pas de cryptage et seulement environ 10 fonctions. Je suis donc intéressé à commencer des recherches avec cette carte, car c'est la plus facile à reproduire.

Quelqu'un at-il des connaissances en émulation de cartes sur Android? Peut-être ne pas utiliser le système d'exploitation stock. Tout ce qui vaut la peine d'être connu serait très apprécié.

Merci.

30
user2570174

Avec l'émulation de carte basée sur l'hôte (HCE) dans Android 4.4, vous ne pouvez émuler que le protocole ISO/IEC 14443-4. Plus précisément, vous ne pouvez émuler que des structures d’application conformes à la norme ISO/IEC 7816-4 (les applications d’émulation de carte doivent donc être sélectionnées à l’aide d’un AID). De plus, l'API ne vous donne aucun moyen de spécifier si l'émulation de carte doit être effectuée à l'aide d'un protocole de type A ou de type B.

Donc, concernant l’émulation de divers protocoles MIFARE:

  • Le protocole MIFARE Ultralight (et ses dérivés) s’appuie sur la norme ISO/IEC 14443-3. Il n'est pas possible d'émuler des cartes utilisant de tels protocoles de couche inférieure avec Android HCE.
  • Le protocole MIFARE Classic fonctionne partiellement sur ISO/IEC 14443-3 (avec un cadrage différent). Ainsi, il n'est également pas possible d'émuler MIFARE Classic avec Android HCE.
  • Les protocoles MIFARE DESFire fonctionnent sur ISO/IEC 14443-4. Il existe trois variantes du protocole DESFire:

    1. protocole natif: comme ce protocole n'utilise pas d'APDU selon ISO/IEC 7816-4, il n'est pas possible de l'émuler avec Android HCE.
    2. protocole natif encapsulé: ce protocole utilise des APDU conformes à la norme ISO/IEC 7816-4. Toutefois, les lecteurs n'émettent généralement pas de commande SELECT à l'aide de l'identifiant DESFire lors de la communication avec une carte en mode de commande native encapsulée. (Remarque: les implémentations de lecteurs les plus récents sont plus susceptibles d'émettre une commande SELECT compatible avec Android HCE, car elle est également requise pour certains des produits de carte à puce les plus récents de NXP avec émulation de protocole DESFire.)
    3. Protocole ISO: Ce protocole est basé sur ISO/IEC 7816-4 et utilise la sélection d'applications par AID. Ainsi, il peut être possible d'émuler ce protocole en utilisant Android HCE.

    Certains lecteurs peuvent nécessiter certaines valeurs de paramètre dans les couches de protocole inférieures (telles qu'un niveau de cascade UID spécifique, une certaine valeur ATQA, une certaine valeur SAK ou un certain ATS). Android HCE ne dispose d'aucun moyen pour définir ces valeurs. Voir Fonctionnalités d'édition de l'émulation de carte d'hôte sous Android pour une approche possible de la modification de ces valeurs sur certains périphériques enracinés et ma réponse à l'émulation de carte basée sur l'hôte avec un identifiant de carte fixe pour une stratégie permettant de modifier ces valeurs par programme dans une ROM personnalisée.

Note sur la fonctionnalité HCE disponible dans CyanogenMod de la version 9.1 à la version 10.2: Ceci émulera tout protocole basé sur ISO/IEC 14443-4 sans qu’une structure d’application conforme à la norme ISO/IEC 7816-4 soit requise. Vous pouvez même choisir si vous souhaitez émuler un protocole de type A ou de type B. Il devrait donc être possible (même si je n’ai pas encore testé) d’émuler l’un des trois protocoles DESFire. Cependant, même avec la fonction HCE de CyanogenMod, il n'est pas possible d'émuler les protocoles MIFARE Ultralight ou Classic. De plus, il est également impossible d'influencer les paramètres de protocole de bas niveau tels que UID, ATQA, SAK ou ATS.

51
Michael Roland

Il y a un an, j'ai passé des semaines à faire des recherches sur ce sujet et ma conclusion, basée sur la mise en œuvre actuelle, était la suivante: L'émulation de MIFARE Classic est possible, mais cet élément est intégré uniquement dans l'élément NXP NFC de NXP puce (puce PN65 intégrée, par exemple le Samsung I9300).

J'ai pu émuler complètement une carte Mifare Classic à l'aide de fonctions cachées dans la bibliothèque Android_external_libnfc-nxp. Bien que je ne sache que lire la carte et que, pour que cela soit utile, vous devez accéder à l'élément sécurisé dans lequel une applet de NXP existe dans la plupart des cas. Cette applet est alors utilisée comme serveur frontal pour gérer les cartes émulées. 

Un bon moyen de poursuivre cette recherche serait de faire de l’ingénierie inverse avec l’application de portefeuille de Google.

16
Simplect

La puce MF0ICU1 MIFARE Ultralight (16 pages sur 4 octets chacune) est certes un cauchemar, mais elle ne peut pas être émulée sur les interfaces NXP, y compris PN53x, car elles ont câblé le premier octet UID (UID0) en 0x08; UID (selon les normes NXP). Vous avez besoin de UID0 = 0x04 pour émuler MIFARE Ultralight.

Il existe un émulateur autonome MIFARE Ultralight qui autorise toute valeur pour UID0, possède des bits OTP, de verrouillage et de verrouillage de bloc réinitialisables. Voir le manuel pour plus d'informations.

4
nCipher

La réponse courte est OUI. Cela dépend toutefois de nombreux facteurs tels que la version Android, la puce NFC du téléphone, etc. 

Pour savoir si votre appareil le prend en charge, il vous suffit de télécharger une application telle que " NFC Check " de Tapkey, qui vous indiquera si les systèmes MiFare Classic et Mifare Ultralight sont pris en charge. Il existe également une liste à jour, mais apparemment, il pourrait y avoir un décalage: https://www.shopnfc.com/fr/content/7-nfc-compatibility

Maintenant, la question est "comment". Je n'ai pas encore trouvé d'application pour utiliser la nouvelle émulation de carte basée sur l'hôte ( HCE ) d'Android (voir ici): Comment l'API Android NFC prend-elle en charge Mifare Desfire ?

En fait, MiFare a récemment suggéré d'utiliser la méthode "élément sécurisé": https://www.mifare.net/support/forum/topic/emulate-mifare-classic-1k/

Pour revenir à votre question sur l'Ultralight, la principale difficulté réside dans le fait que l'API Android définit aujourd'hui l'envoi d'un UID aléatoire sur chaque tap, comme suggéré par un utilisateur précédent nCypher: https://developer.Android.com/guide/topics/connectivité/nfc/hce

Un autre accès root (ou une ROM cyanogène personnalisée) peut aider à modifier l’UID, comme dans cet exemple: http://osgt7405i.bkt.clouddn.com/help/en/index.html?t= 1536931682474

Toutefois, la dernière API Android fait directement référence à l’objet Ultralight: https://developer.Android.com/reference/Android/nfc/tech/MifareUltralight

Je connais des entreprises qui imitent cela avec le stockage sur carte SIM. Pour utiliser votre téléphone comme carte RFID de ces types MIFARE, MiFare a déjà mis au point une solution permettant aux entreprises de charger des cartes dans le nuage https://www.mifare4mobile.org/ associées à leur opérateur SIM. Il existe une liste des puces NFC officiellement certifiées qui fonctionnent, la plupart d’entre elles sont des NPX, qui sont généralement incluses dans les smartphones.

Cependant, leur solution est une API SDK (à savoir TapLinx). NXP ne propose aucun produit logiciel pur, comme tout logiciel d'émulation de téléphone ou solution de cloud.

De plus, le forum MiFare en parle: https://www.mifare.net/support/forum/topic/creating-nfc-Android-app-to-act-as-mifare-card-to -interact-with-mifare-readers/ /

1
JCM