Esup NFC Tag

Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...


Ensuite Android et Java fournissent également une bonne API pour lancer des commandes à la carte à puce ; c'est ce qu'utilise EsupNfcTagDroid.

Outillage sous Windows

ReadCard permet d'afficher la structure de la carte et de voir certaines information (CSN, etc... voir plus si on renseigne les clé de lecture) 

Outillage sous linux

PCSC (libpcsclite) est une api/bibliothèque permettant d'accéder aux cartes à puce.

Elle permet de passer des commandes à une carte … encore faut-il savoir quelles commandes passer !

Pour identifier ces commandes (+/- spécifique à chaque technologie de carte), il est intéressant de manipuler les cartes via PCSC (depuis spector par exemple) ou encore via libnfc.

PCSC supporte bon nombre de lecteurs nativement (avec les drivers open-source livrés avec) ou après installation du driver propriétaire.

Pour le lecteur “Identive cloud 4700 f” par exemple, il a fallu installer le driver propriétaire suivant pour que le lecteur sans contact fonctionne (en plus du lecteur avec contact) :

http://support.identive-group.com/download/driver/scmccid_5.0.33_linux_32bit_rel.zip

Aussi, concernant les lecteurs de cartes, on préférera des lecteurs qui permettent une mise en place facile et native de ces outils : PCSC *et* libnfc. libnfc n'est supporté que par très peu de lecteurs … avant d'acheter un lecteur, il vaut donc mieux regarder quels sont les lecteurs reconnus par la communauté comme compatibles. http://nfc-tools.org/index.php?title=Devices_compatibility_matrix

→ 3 lecteurs / clefs usb qui nous paraissent ainsi intéressants par exemple : 

  • SCL3711 (germany)
  • StickID (italy)
  • DDS PN533 (india)

Si on souhaite se réaliser un petit gadget indépendant (avec arduino par exemple), la puce “PN532 NFC/RFID” est intéressante : https://www.itead.cc/wiki/ITEAD_PN532_NFC_MODULE ou encore http://www.adafruit.com/products/364

Enfin notons qu'un outil qui semble fort apprécié des bidouilleurs/hackeurs en tout genre est le proxmark3 …

...

Ces outils nous permettent de passer des commandes via PCSC. 

Pour lancer scriptor (il faut positionner la carte avant sur le lecteur) : scriptor -r “CLOUD 4700 F Smart Card Reader [CLOUD 4700 F Contactless Reader] (53201322200637) 01 00”

FF CA 00 00 00 nous renvoie par exemple 04 53 71 D2 FD 3A 80 90 00

04 53 71 D2 FD 3A 80 est le CSN - 90 00 correspond au code de retour (opération ok).

90 6A 00 00 00 permet de lister les applications - il renvoie par exemple ici C0 85 F5 00 84 F4 40 85 F5 C1 85 F5 91 00.

En enlevant le code retour et sachant que les identifiants des applications sont sur 3 octets, nous retrouvons l'application “C0 85 F5”, “00 84 F4”, “40 85 F5” et “C1 85 F5”.

Grâce à la liste des applications enregistrées sur NXP nous arrivons finalement à retrouver à partir de ces identifiants les noms des applications.

En Desfire, les réponses se lisent de droite à gauche 2 bytes par 2 (cf 'LSB') :

“C0 85 F5” devient “F5 85 C0” - on retrouve alors 585C le code pour “identification for academic services” de “Normandie Universite”

“00 84 F4” devient “F4 84 00” - on retrouve alors 4840 le code pour “access contr,time&attendance,multifunccard” de “Horoquartz”

“40 85 F5” devient “F58540” - on retrouve alors 5854 le code pour “identification of students inench Universities (unique student number among all the country)” du “CNOUS”

“C1 85 F5” est la dernière application en date (“dérivée” de 585C) et est l'application demandée par la comue qui présente l'énorme intérêt que l'"on" dispose des clefs pour lire les fichiers présents. Ces fichiers présentent toutes un identifiant spécifique que l'on connait dans nos bases chiffrées avec 3 clefs différentes (pour des questions de confort).

On sélectionne l'application “C1 85 F5” ainsi : 90 5A 00 00 03 C1 85 F5 00

On liste les fichiers en passant la commande 90 6F 00 00 00 qui nous renvoie 00 01 02 91 00.

Le code retour 91 00 en moins, on obtient 3 octets représentant les identifiants des fichiers : 00, 01 et 02

On peut encore passer différentes commandes, notamment pour connaître les “file settings” de chaque fichier : 90 F5 00 00 01 00 00 nous renvoie 00 00 44 14 1F 00 00 91 00 - le deuxième 00 nous renseigne notamment sur le fait que le mode de communication est en plain text ( en clair), cad non encrypté … [ce qui ne doit usuellement pas être le cas sur les applications sécurisées en fait , sauf pour test].

Il faut ensuite s'authentifier en utilisant la clef spécifique au fichier que l'on souhaite lire.

C'est une authentification AES - pas des plus simples à mettre en oeuvre - et qui nécessite alors un peu d'algorithmique - celui-ci est bien expliqué sur ce document http://www.ti.com/lit/an/sloa213/sloa213.pdf à la page 6 précisément.

En suivant http://stackoverflow.com/questions/21257442/mifare-desfire-ev1-authentication-using-aes (nous permet notamment de savoir quoi mettre en tant que “IV”) on arrive à s'en sortir et il est possible de jouer l'ensemble de la procédure d'authentification en lignes de commandes (en s'aidant d'openssl pour décrypter/encrypter les différents nombres reçus et à envoyer - exemple :

echo bf7e381e6ae0c91abcdecac82abee3b2 |xxd -p -r|openssl enc -aes-128-ecb -d -K AE17129EA5C4D303F025032E2FCA2CC6 -iv 00000000000000000000000000000000 -nopad |xxd -

Nous l'avons fait de notre côté en Java (d'auant que du code est librement disponible pour ce faire, voir le code utilisé dans EsupNcTag par exemple).

Une fois l'authentification réussie, on peut enfin lire le fichier voulu : la commande suivante 90BD0000070000000016000000 permet de lire les 16 22 premiers octets du fichier 00. Fichier qu'il faut ensuite éventuellement déchiffrer.

...

Différent de PCSC, libnfc utilise NFC comme protocole de communication pour interagir avec la carte.

Propose de base, via le package libnfc-examples, des utilitaires plus avancées que ce que propose pcsc-tools. On y trouve notamment nfc-mfsetuid qui permet en une commande de modifier le CSN d'une carte (d'une magic-carte dont le bloc 0 n'est pas verrouillé).

Pour pouvoir par exemple facilement modifier le CSN d'une magic-card, il faudrait un lecteur comme la clef usb “Identive SCM SCL3711”.

Bibliographie

Quelques articles/pages précieuses :

NEW : projet

A lire … :