libnfc mit Arduino NFC Shield nutzen

seeedstudio-arduino-nfc-shield

Auf dem Arduino NFC Shield von Seeedstudio ist der populäre PN532 NFC Chip von NXP verbaut, der auch in vielen kontaktlosen Smartcard Readern zum Einsatz kommt. In Verbindung mit libnfc kann auf eine Vielzahl von Funktionen zurückgegriffen werden, die seit einigen Jahren kontinuierlich ausgebaut werden. Genau für diesen Zweck gibt es das mfocuino Projekt bei Google Code.Im folgenden sind die Schritte zum bauen unter Ubuntu beschrieben:

# get and extract libnfc
$ cd ~
$ wget http://libnfc.googlecode.com/files/libnfc-1.7.0-rc1.tar.gz
$ tar -xvzf libnfc-1.7.0-rc1.tar.gz
$ cd libnfc-1.7.0-rc1

# get and apply patch
# fkt nicht weil haendische gepatched:
# wget https://mfocuino.googlecode.com/svn/trunk/nfcreader/libnfc.uart.patch
# besser
$ wget http://mfocuino.googlecode.com/svn-history/r29/trunk/nfcreader/libnfc.uart.patch
$ patch -p0 < libnfc.uart.patch

#configure libnfc for PN532/UART
$ ./configure --with-drivers=pn532_uart --sysconfdir=/etc --prefix=/usr --enable-debug

#compile
$ make clean
$ make
#evtl im system installieren
$ sudo make install

#configure libnf
$ sudo mkdir /etc/nfc
$ sudo mkdir -p /etc/nfc/devices.d

# create: /etc/nfc/libnfc.conf
allow_autoscan = true 
allow_intrusive_scan = false 
log_level = 3 
device.name = "microBuilder.eu" 
device.connstring = "pn532_uart:/dev/ttyUSB0:115200"

#download arduino sketch
$ cd ~/sketchbook
$ mkdir uartnfc
$ cd uartnfc
$ wget https://mfocuino.googlecode.com/svn/trunk/nfcreader/arduino/uartnfc.ino
$ wget http://mfocuino.googlecode.com/svn/trunk/nfcreader/arduino/libraries/PN532/PN532.cpp
$ wget http://mfocuino.googlecode.com/svn/trunk/nfcreader/arduino/libraries/PN532/PN532.h
#compile / upload arduino sketch
#test 
$ LIBNFC_LOG_LEVEL=3 nfc-list

Note: Leider funktionieren nicht alle examples und utils mit dem NFC Shield, zb emulate.
Links:
Anweisung wie man libnfc mit mfocuino baut http://code.google.com/p/mfocuino/wiki/buildingLibNfc
Using libnfc with the PN532 (Linux) http://www.microbuilder.eu/blog/11-02-19/Using_libnfc_with_the_PN532_Linux.aspx

Advertisements

Kalixa NFC paypass MasterCard

KalixaCard
Heute kam meine Kalixa Prepaid NFC MasterCard mit der Post. Seit dem Bestellen der Karte war ich schon gespannt was für ein Chip in der Karte eingesetzt wird. Also gleich nach dem Öffnen des Briefs Rechner hochgefahren und mal nachschauen auf welche Daten man zugreifen kann:

kontakt
ATR=3B 68 00 00 00 73 C8 40 11 00 90 00

kontaktlos
ATR=3B 86 80 01 4B 4F 4E 41 14 11 09

#SELECT ohne AID liefert Cardmanager AID A000000003000000 
=> 00 A4 04 00
<= 6F 10 84 08 A0 00 00 00 03 00 00 00 A5 04 9F 65
# => nice scheint eine GP2.1 Karte (AID = A000000003000000) zu sein

#GET DATA Tag 00E0 zeigt Keyinfos an
=> 80 CA 00 E0 00 
<= E0 12 C0 04 01 FF 80 10 C0 04 02 FF 80 10 C0 04 03 FF 80 10 90 00 
Key information: 
Key ID : 1 
Key version : 255 
Key component 1 : 
Type : DES 
Length : 16 bytes 
Key information: 
Key ID : 2 
Key version : 255 
Key component 1 : 
Type : DES 
Length : 16 bytes 
Key information: 
Key ID : 3 
Key version : 255 
Key component 1 : 
Type : DES 
Length : 16 bytes

Verwundert hat mich dann ein wenig, dass die JavaCard noch den Default Key für die Authentifizierung zum CardManager besitzt, sodass man sich die geladenen Applets anzeigen lassen kann:

#INITIALIZE UPDATE
=> 80 50 00 00 08 ...
...

#EXTERNAL AUTHENTICATE
=> 84 82 01 00 10 ...
...

#GET STATUS
=> 84 F2 20 00 0A ...
...

Card Manager AID   :  A000000003000000
Card Manager state :  SECURED

    Application:PERSONALIZED (---L----) A0000000041010
    Application:  SELECTABLE (--------) "2PAY.SYS.DDF01"
    Load File  :      LOADED (--------) A00000000310     (VSDC)
    Load File  :      LOADED (--------) A00000000410
    Load File  :      LOADED (--------) "2PAY.SYS.DDF0"
    Load File  :      LOADED (--------) D410650990001000
    Load File  :      LOADED (--------) D410650990003000
    Load File  :      LOADED (--------) D410650030
    Load File  :      LOADED (--------) D4106401604D4600
    Load File  :      LOADED (--------) A000000078584C50
    Load File  :      LOADED (--------) D41000000301
    Load File  :      LOADED (--------) A00000027710

Das Auslesen der CPLC-Daten liefert

#GET DATA 9F7F
=> 80 CA 9F 7F 00
<= 9F 7F … 90 00
IC Fabricator : 4790
IC Type : 5032
Operating System ID : 8241
Das Hochladen eines eigenen CAP-Files wird allerdings mit Fehler 6A 86 abgebrochen:

#INSTALL FOR LOAD
 => 84 E6 02 00 20 FA 75 F7 86 3C F7 A2 21 AB 43 19
    2E 0F F4 27 1B 31 10 48 E2 6F 69 CA DB D5 53 F5
    73 36 21 31 12 00
 <= 6A 86

Vielleicht weiss jemand wieso 6A86 also ‚Incorrect parameters (P1,P2)‘ ausgegeben wird?

Löschen eines vorhandenen Applets muss ich an dieser Stelle nicht ausprobieren, da ich die Karte ja grade erst neu habe und zumindest erst einmal das vorhandene Guthaben verbrauchen will.

#DELETE AID *lieber nicht*
 => 84 E4 00 00 18 ...
...

Die NFC Daten muss ich mir dann nochmal in Ruhe anschauen…