ST M24SR – Low-Cost NFC Tag mit I2C-Schnittstelle

IC-SO8

STMicroelectronics bietet sehr günstige ($0.34 – $1.88) Bausteine an um die NFC-Schnittstelle in eigene Schaltungen/Produkte zu intergrieren: M24SR

Features

* NFC Forum Tag Type 4 (basierend auf ISO 14443 RF-Interface)
* 1 MHz I2C-Schnittstelle (2.7 bis 5.5 V)
* EEPROM Speichergrössen: 2, 4, 16, 64 Kbits mit built-in NDEF Unterstützung
* ‚RF disable‘-Pin erlaubt der Anwendung den RF Zugriff per NFC Phone zu kontrollieren
* 128-bit Passwortschutz
* Ausgangspin zum Triggern von Applikationen (bei unterschiedlichen Ereignissen)
* einfaches Antennen Design
* 7 Byte UID

Der M24SR wird u.a. im SO8-Package (neben TSSOP8- und UFDFPN8-Package ) angeboten sodass er sogar ohne SMD-Werkzeug auf PCB eingelötet werden kann. Das Konkurrenzprodukt NTAG I2C (NT3H1101/NT3H1201
) von NXP wird im Gegensatz nur als XQFN8-Package (Body 1.6 x 1.6 x 0.6mm) angeboten.

Praxis

M24SR-Pin-Layout
Schliesst man an die AC0 und AC1 Pins des Baustein nur eine Antenne an (5 Windungen aus dünnem Kabel um 2 Finger gewickelt) kann er als einfacher NFC-Tag genutzt werden. Mit einem NFC Android Smartphone z.B. kann man den Tag auslesen, bzw mit einer App mit Text-,URI-, etc NDEF-Records beschrieben werden. Das Besondere an dem Chip ist allerdings die I2C-Schnittstelle. Schliesst man zusätzlich die Pins VSS alias GND (Pin4), VCC (Pin8), SCL (Pin6) und SDA (Pin5) an einen Mikrokontroller an können hierüber Daten an den M24SR gesendet werden und aus dem statischen NFC-Tag wird ein dynamischer (z.B. Temperatur als NDEF-Record oder URI mit One-Time-Password).

GPO (General Purpose Output) Pin

Verbindet man zusätzlich noch den GPO-Pin (Pin7) kann der angeschlossene Mikrokontroller Events empfangen, wenn z.B. die Daten im Speicher via RF-Interface geändert worden sind. Somit ist es möglich Daten aus dem M24SR auszulesen ohne die RF-Kommunikation zu unterbrechen.

App Kompatibilität

ST bietet im Google Play Store die ST M24SR Demo App an, um den Tag zu beschreiben/auszulesen. Da der Tag aber NFC-Forum Tag Type 4 kompatibel ist können auch andere Apps beispielweise die NXP TagWriter App benutzt werden.

Screenshot_M24SR_Demo_App   Screenshot_M24SR_Demo_App_NDEF_Editor

Am PC lässt sich der NFC-Tag wie eine kontaktlose (ISO14443-4) Smartcard auslesen:

screenshot_mysmartcardioshell_m24sr

 

Links und Info

ST M24SR64-Y Datenblatt http://www.st.com/web/en/resource/technical/document/datasheet/DM00067892.pdf
Evalboard M24SR-DISCOVERY 32EUR http://www.exp-tech.de/Shields/Wireless/RFID/M24SR-DISCOVERY-Dynamic-NFC-RFID-tag.html
Google Play – ST M24SR Demo App https://play.google.com/store/apps/details?id=com.nfc.m24srdemo
ST M24SR Demo App – Source Code  http://www.st.com/web/catalog/tools/FM147/SC1871/PF260169
Mouser: STMicroelectronics M24SR Dynamic NFC/RFID Tag ICs http://www.mouser.com/new/stmicroelectronics/stm-m24sr-nfc-rfid/?cm_mmc=PressRelease-PR-_-STMicro-_-M24SR_RFIDNFC-_-2014-04-02
NXP NTAG I2C (NT3H1101/NT3H1201) http://www.nxp.com/documents/short_data_sheet/NT3H1101_1201_SDS.pdf

Android HCE(Host Card Emulation) JavaScript App alias Virtual JavaScript Smartcard

Die App zu diesem Artikel ist eigentlich aus drei Gründen entstanden:
* zur Evaluierung der Android HCE Funktionalität
* zur Evaluierung der Mozilla Rhino Bibliothek
* weil ich immer gern das passendes Tool parat habe

Was kann die App?

virtualjavascriptcard
Eigentlich nichts Grosses. Ein Byte-Array einem JavaScript (via Rhino-Bibliothek) übergeben und den Rückgabewert des JavaScripts wieder in ein Byte-Array konvertieren. Das einzig Spannende daran ist dass das HCE-Framework damit (via Aufruf der processApdu Funktion) befüllt wird. D.h. mit dem richtigen JavaScript-Code, den man selber editieren muss, kann man beliebige NFC Smartcards emulieren. Einziger Wermutstropfen: fehlende AIDs muessten bei Bedarf im Source-Code der App(!) ergänzt werden und die App müsste dann natürlich neu kompiliert und installiert werden. Aber diese Restriktion lässt sich bei einem gerooteten Gerät auch umgehen.

 

In der Praxis

Das einfachste JavaScript würde so aussehen:

function processApdu(apdu){
return new Array(0x90, 0x00);
}

Die virtuelle Karte würde jede Anfrage mit einem Statusword (SW) von 0x9000 (OK) quitieren.
Testen kann man das ganze wie folgt:
1. App installieren: APK-Datei direkt mit dem Smartphone runterladen und Installationsdialog bestätigen (Sicherheit | Geräteverwaltung | Installation aus andeten Quellen zulassen). Oder
1a. aus den Sourcen kompilieren, weil man evtl eine andere AID ergänzen möchte. Hierzu den Source herunterladen, AID mit folgender Zeile:

<aid-filter android:name="xxxxxxxxxxxx" />

in apduservice.xml ergänzen, mit dem SDK kompilieren und dann installieren. Optional könnte man
1b. Xposed-Framework nutzen: bei einem gerooteten Gerät kann man sich 1a auch sparen, wenn man das XposedModifyAidRouting-Modul nutzt. Hiermit können alle SELECT-Kommandos auf die App umgebogen werden und das Ergänzen von neuen/benötigten AIDs wird dynamisch erledigt.
2. JavaScript evtl verändern: nach dem ersten Start der App kann die HCE.js Datei auf den per USB-Kabel angeschlossenen PC editiert werden. Hierzu die Datei erst vom Android Gerät per adb (befindet sich im Android SDK) kopieren, zB:

~/adt-bundle-linux-x86_64-20130219/sdk/platform-tools/adb pull /sdcard/VirtualJavaScriptCard/HCE.js ~/HCE.js

Nun das Skript je nach Wunsch anpassen, zB alle Kommandos mit der Ausgabe eines File Control Information (FCI) Templates für Mastercard beantworten (macht zwar kein Sinn soll nur ein Beispiel sein)

function processApdu(apdu) {
return new Array(0x6F, 0x23, 0x84, 0x0E, 0x32, 0x50, 0x41, 0x59, 0x2E, 0x53, 0x59, 0x53, 0x2E, 0x44, 0x44, 0x46, 0x30, 0x31, 0xA5, 0x11, 0xBF, 0x0C, 0x0E, 0x61, 0x0C, 0x4F, 0x07, 0xA0, 0x00, 0x00, 0x00, 0x04, 0x30, 0x60, 0x87, 0x01, 0x01, 0x90, 0x00);
}

Danach die editierte Datei einfach wieder auf das Gerät zurück kopieren:

~/adt-bundle-linux-x86_64-20130219/sdk/platform-tools/adb push ~/HCE.js /sdcard/VirtualJavaScriptCard/HCE.js

3. Interaktion mit Smartcard Reader testen, zB mit MySmartcardIOShell (interaktive Shell zum Senden von APDUs):

$ java -cp ./MySmartCardIOShell.jar -Dsun.security.smartcardio.library=/lib/x86_64-linux-gnu/libpcsclite.so.1 MySmartCardIOShell

Android Gerät auf den Kontaktlos-Reader des PCs legen, verbinden und APDU senden. Mit dem Nexus10 würde das ganze ungefähr so aussehen:

-/term
0: REINER SCT cyberJack RFID basis 0, sun.security.smartcardio.TerminalImpl, card present: true
protocol: T=1, ATR: 3b 80 80 01 01
>/sel 325041592E5359532E4444463031
=> 00 a4 04 00 0e 32 50 41 59 2e 53 59 53 2e 44 44
46 30 31
<= 6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46
30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 04
30 60 87 01 01 90 00
Status: OK
>

Das gewünschte JavaScript wird durch Auswahl in der Checkbox-Liste der App aktiviert, die App muss aber nicht aktiv sein um Anfragen zu beantworten, da hierfür eine Implementierung des HostApduService im Hintergrund läuft.

Probleme

Wenn mehr als 1 App zum Bezahlen installiert ist kann man unter Einstellungen | Mobil bezahlen die gewünschte App auswählen. Aus Evaluierungszwecke war auf meinem Tablet die Tapp App installiert (und mit keinem Account verknüpft). Diese Konstellation führte dazu dass entsprechende SELECT Kommandos nicht beantwortet werden konnten und die aufrufende Reader Anwendung hing. Nach Auswahl der VirtualJavaScriptCard App als Bezahl-App war das Problem behoben.

payment_select

Ausserdem kann man emulierte Karte nur mit Android Devices ab 4.4 auslesen, da hierfür der NFC-Controller in einen speziellen Modus mit enableReaderMode gesetzt werden und Android Beam ausgeschaltet sein muss.

Auf meinem Nexus 10 scheint sich der Broadcomm NFC-Controller ab und zu mal zu verabschieden. Dann hilft nur ein deaktivieren der NFC-Funktionalität mit anschliessender Re-Aktivierung.

Beispiel: Kreditkarte / PPSE

Mit dem beigefügten HCE_PPSE.js Skript kann man bereits Teile einer Kreditkarte emulieren. Cardpeek zeigt zB folgende Daten an:screenshot-cardpeek-emv

Oder man schaut sich mit dem MasterCard Terminal Simulator an welche Kommandos an die Karte gesendet werden:

screenshot_mastercard_terminal_simulator

Links

Virtual JavaScriptCard App – Source Code https://github.com/rena2019/VirtualJavaScriptCard
XposedModifyAidRouting https://github.com/johnzweng/XposedModifyAidRouting
Blogartikel: List of HCE (Host Card Emulation) Apps

Protocoder – schnell mal eine Android App coden

Protocoder IDE
Protocoder IDE

Protocoder ist eine App, welche mich seit langem mal wieder sehr fasziniert hat. Der Name sagt schon alles über sie aus: Proto(type)coder. Denn genau dazu ist sie da: um sehr einfache Prototypen zu erstellen. Hierzu bringt die App ein völlig neues Konzept mit: eine IDE, welche direkt über den Browser eines PCs zu erreichen ist. Dazu wird nach App-Start ein Webserver auf Port 8585 bereitgestellt. Alternativ kann das Gerät auch per USB an einen PC angeschlossen und die Verbindung (mit dem adb Tool aus dem Android SDK) getunnelt werden:

$ ./adb forward tcp:8585 tcp:8585
$ ./adb forward tcp:8587 tcp:8587

Somit ist die IDE auch ohne Wifi via lokalem Webserver unter http://localhost:8585/ erreichbar.

Funktionsumfang

Nach dem Start der App können sofort die mitgelieferten Beispiele gestartet werden und man versteht recht schnell welchen Funktionsumfang die App in etwa bietet:

Screenshot Protocoder Examples  Protocoder MyProjects
Version 0.8 kommt mit folgenden Beispielen:

  • AccelerometerPlots (Beschleunigungssensorgrafisch darstellen)
  • Camera (Bild mit der Kamera aufnehmen und abspeichern)
  • Canvas (Kreise auf einen Canvas anhand von Beschleunigungssendordaten malen)
  • Dashboard (Plots auf dem Dashboard anzeigen)
  • FileIO (Daten in Datei schreiben)
  • GPS (Positionsdaten ausgeben)
  • KeyEvents (
  • NFC (NFC Tag lesen, bzw beschreiben)
  • OSC (OSC networking protocol Beispiel)
  • OpenStreetMaps (Teil der OpenStreetMaps anzeigen)
  • PureData (PureData Patch ausführen)
  • Sensors (Sensordaten anzeigen)
  • Sound (OGG-Datei sbspielen)
  • TextToSpeech (Text per Sprache ausgeben)
  • UBoard_IOIO (Ansteuerung des IOIO-Boards)
  • UBoard_MAKR (Ansteuerung des MAKR Boards)
  • UI (Bedienelemente anzeigen)
  • Video (m4v-Video abspielen)
  • VoiceRecognition (Spracherkennung und anschliessende Ausgabe)
  • Webview (HTML-Anzeige)
  • timer (wiederkehrende Funktionsaufrufe mit Timer)

Java/Android API via Javascript

Codiert werden die Prototypen in JavaScript, das zur Laufzeit interpretiert wird. Hierfür wird die Android API für einfache Funktionsaufrufe gewrappt.
Ein Beispiel: mit folgendem Skript wird ein NFC-Tag ausgelesen, bzw bei Betätigen des Knopfes beschrieben.

var nfcinfo = ui.addLabel("tap to get NFC id and content", 20, 20, 500, 100);

//when tapping on a nfc the id and content will be displayed
//on the label
sensors.onNFC(function (id, data) {
console.log(„the nfc id is: “ + id, data);
nfcinfo.setHTMLText(„id: “ + id + “
data: “ + data);
});

//when we click
//the next touched nfc will be written with the data
ui.addButton(„Write to NFC“, 0, 200, 500, 100, function(){
sensors.writeNFC(„this is a test“, function() {
nfcinfo.setText(„data written“);
});
});

Abzüge in der B-Note

Der API-Funktionsumfang ist zZt noch recht überschaubar. Viele Funktionen habe ich vermisst bzw sind noch in der Entwicklung. Wenn irgendwelche Android-API Klassen fehlen muss man sich die App wohl selber erweitern und kompilieren.
Eine typische Schwachstelle bei der App ist – wie bei vielen kostenlosen Programmen – die fehlende Doku. Wäre sie in ausreichender Form vorhanden hätte man innerhalb von Minuten den ersten Prototypen fertig gestellt.
Und ja, Protocoder ist noch nicht ganz fertig / Bug-frei: Protocoder_Crash

Weitere Infos

List of HCE (Host Card Emulation) Apps

host-based-card
I like lists and I like NFC therefore here comes a list of Android apps that emulate contactless smartcards on an Android Phone >=4.4 with HCE (Host-based Card Emulation):

Update: 2017-06-12
Backwerk
* AID A0000007220001
* https://play.google.com/store/apps/details?id=de.backwerk.app
* Backwerk Kundenkarte https://www.back-werk.de/kundenkarte/

Nordsee
* AID A0000007220000
* https://play.google.com/store/apps/details?id=com.nordsee.de.app
* Nordsee Gutscheinkarte http://www.nordsee.com/de/gutscheinkarte.html

Host-based Card Emulation
* Android API Guide https://developer.android.com/guide/topics/connectivity/nfc/hce.html

Android Host-based Card Emulation connected to ACR122U
* AID F0010203040506, F0394148148100
* Blog http://blog.opendatalab.de/hack/2013/11/07/android-host-card-emulation-with-acr122/
* Source Code https://github.com/grundid/host-card-emulation-sample

SEQR
* AIDs A0000000041010 (MasterCard), A0000000043060 (Mastercard Maestro Debit)
* App https://play.google.com/store/apps/details?id=com.seamless.seqr

boon
* AIDs A0000000041010 (MasterCard), A0000000043060 (Mastercard Maestro Debit)
* App https://play.google.com/store/apps/details?id=de.wirecard.boon

Shakepay
* AIDs A0000000031010 (Visa)
* App https://play.google.com/store/apps/details?id=com.shakepay.shake

tap-it
* AIDs F0394148148100
* App https://play.google.com/store/apps/details?id=ch.sandpiper.mwallet.tap_it

ByblosPay
* AIDs A0000000041010 (MasterCard), A0000000031010 (Visa International), A0000000980840 (Visa US Common Debit), F101010101
* App https://play.google.com/store/apps/details?id=mobi.foo.byblospay

PeoPay
* AIDs A0000006181010 (???), A0000000031010 (Visa), A0000000041010 (MasterCard)
* App https://play.google.com/store/apps/details?id=softax.pekao.powerpay

Payback
* AIDs D2760001670001 (PAYBACKPAY), D2760001670002 (PAYBACKCOLLECT)
* App https://play.google.com/store/apps/details?id=de.payback.client.android

ING Mobile Payments
* AIDs A0000000043060 (Mastercard Maestro Debit)
* App https://play.google.com/store/apps/details?id=com.ing.mobilepayments

MobilePay
* AIDs A0000000031010 (Visa), A0000000032010 (VISA Electron Debit)
* App https://play.google.com/store/apps/details?id=sk.tb.mp.tatraandroid

NAB (National Australia Bank)
* AIDs A0000000031010 (Visa), A0000000980840 (Visa US Common Debit)
* App https://play.google.com/store/apps/details?id=au.com.nab.mobile

La tua banca per Android
* AIDs A0000000041010 (MasterCard), A0000000032010 (VISA Electron Debit), A0000000031010 (Visa)
* App https://play.google.com/store/apps/details?id=com.latuabancaperandroid

Virtual PKI Smart Card
* AID A0000000010101
* Blog http://nelenkov.blogspot.de/2012/10/emulating-pki-smart-card-with-cm91.html
* Source Code https://github.com/nelenkov/virtual-pki-card/tree/master/hce-pki

SwipeYours
* AID A0000000031010 (Visa)
* Blog http://blog.simplytapp.com/2014/01/host-card-emulation-series-swipeyours.html
* App Download https://play.google.com/store/apps/details?id=to.noc.android.swipeyours
* Source Code https://github.com/dimalinux/SwipeYours
* also available as JavaCard Applet https://github.com/SimplyTapp/CardExamples/tree/master/CardApplet-VisaMSD-SwipeYours

TechBooster / C85-Android-4.4-Sample: NdefCard
* AID D2760000850101 (NXP Semiconductors, NDEF Tag Application V2.0)
* Source Code https://github.com/TechBooster/C85-Android-4.4-Sample/tree/master/chapter08

Google Wallet
* AID F0F00777FF5511
* App https://play.google.com/store/apps/details?id=com.google.android.apps.walletnfcrel

Tapp
* AID A0000000041010 (MasterCard), A0000000031010 (Visa), A0000002771010 (Interac)
* App https://play.google.com/store/apps/details?id=com.tapp
* SimplyTapp https://www.simplytapp.com/

Mobile Bitcoin Payment Solution
* AID F0F00777FF5511
* Mensa an Uni Züri akzeptiert Bitcoins http://www.netzwoche.ch/de-CH/News/2014/02/12/Mensa-an-Uni-Zueri-akzeptiert-Bitcoins.aspx?exURL=http://bitcoin.csg.uzh.ch/
* Download http://bitcoin.csg.uzh.ch/downloads/ or Google Play https://play.google.com/store/apps/details?id=ch.uzh.csg.mbps.client

LiqPay (Ukraine’s PrivatBank)
* AID A0000000041010 (MasterCard), 325041592E5359532E4444463031 (PPSE ‚2PAY.SYS.DDF01‘)
* App https://play.google.com/store/apps/details?id=ua.privatbank.liqpay
* Website http://old.privatbank.ua/en.html

NFC Spy
* AID F04E4643535059 (nfcspy xposed mod), F04E66E75C02D8 (androcheck’s xposed mod (xda)), …many many other / all
* App https://play.google.com/store/apps/details?id=com.sinpo.nfcspy
* Source Code https://code.google.com/p/nfcspy/

Module for NFC Host-Card-Emulation (HCE) Catch-All Routing
* AIDs: receive all APDUs packets for ANY AID
* Website/Info http://repo.xposed.info/module/at.zweng.xposed.modifyaidrouting
* XDA-Forum Thread:
[DEV] Xposed module: KitKat Card-Emulation catch-all AID Routing http://forum.xda-developers.com/showthread.php?t=2573430
* Source Code https://github.com/johnzweng/XposedModifyAidRouting

VirtualJavaScriptCard – Host-based Card Emulation with JavaScript
* AIDs: A000000151000000, A000000003000000, A0000000031010, A0000000041010, A000000167413000ff, 315041592e5359532e4444463031
* Source Code https://github.com/rena2019/VirtualJavaScriptCard

EMVemulator – Android app collects Mag-Stripe data and CVC3 codes from PayPass cards and emulates that informations
* AIDs: A0000000041010 (MasterCard), 325041592E5359532E4444463031 (PPSE ‚2PAY.SYS.DDF01‘)
* Source Code https://github.com/MatusKysel/EMVemulator

NFC-Matric-System-Demo – demo application for the Mobile Matric Card project for the National University of Singapore
* AIDs: F0010203040506, F0394148148100
* Source Code https://github.com/ryandao/NFC-Matric-System-Demo

CUA redi2PAY
* CUA (Credit Union Australia) redi2PAY payment app https://play.google.com/store/apps/details?id=au.com.cuscal.redi2pay.hcelite.cua001
* Homepage http://www.cua.com.au/

BBVA Wallet
* BBVA launches the first commercial solution for Visa cloud-based mobile payments http://vision.visaeurope.com/article/bbva-launches-the-first-commercial-solution-for-visa-cloud-based-mobile-payments/1cc552c76a9d06e567c113995e4ad784
* Google Play Store https://play.google.com/store/apps/details?id=com.bbva.bbvawallet

Announcements
* Wirecard erweitert Mobile Wallet Plattform um HCE-Technologie http://www.wirecard.de/newsroom/pressemeldungen/newsdetail/wirecard-erweitert-mobile-wallet-plattform-um-hce-technologie/
* Proxama and Cryptomathic: EMV Tokenised Transaction (EMV-TT) http://proxama.com/news/proxama-and-cryptomathic-create-mobile-contactless-payment-solution-leveraging-nfc-host-card-emulation/
* Visa to Enable Secure, Cloud-Based Mobile Payments http://pressreleases.visa.com/phoenix.zhtml?c=215693&p=irol-newsarticlePR&ID=1901153
* MasterCard to Use Host Card Emulation (HCE) for NFC-Based Mobile Payments http://newsroom.mastercard.com/press-releases/mastercard-to-use-host-card-emulation-hce-for-nfc-based-mobile-payments/
* SecureKey briidge.net Connect Authentication Service Supports Google Android HCE http://securekey.com/securekey-briidge-net-connect-authentication-service-supports-google-android-hce/
* Banco Sabadell picks Carta for HCE payments trial http://www.nfcworld.com/2014/03/04/328162/banco-sabadell-picks-carta-hce-payments-trial/
* Sberbank, Biggest Bank So Far to Adopt Host Card Emulation, Aims for 3 Million Users http://www.digitaltransactions.net/news/story/Sberbank_-Biggest-Bank-So-Far-to-Adopt-Host-Card-Emulation_-Aims-for-3-Million-Users

Liste von Arduino-/ARM-/ATtiny-/Eval-Boards unter 15EUR

Hier einfach mal eine Liste von Arduino-, ATtiny-, ARM-, Eval-Boards, die unter 15EUR kosten – für Projekte, wo einfach nur ein günstiges, fertiges Board (bzw Kit) erforderlich ist und das Rad nicht erst neu erfunden werden muss bzw der PCB-Service bemüht werden muss. Am Interessantesten finde ich den DigiSpark in Stick Form, welcher direkt an den USB-Port angeschlossen werden kann. Allerdings hat das Boards auch die geringste Performance und kann wohl auch nur zum Betreiben einer LED oder als Eingabe-/Ausgabe-Leitungen (zB zur Ansteuerung, Einlesen von Sensor) genutzt werden. Die leistungsstärkeren ARM-Boards verfügen teils auch gleich über Peripherie On-board.

Freescale FRDM-KL05Z

Freescale_FRDM-KL05Z
Freescale ARM Cortex-M0+ MCU, 32 KB flash, 4 KB SRAM, 48 MHz
+ 3-axis digital accelerometer, capacitive touch slider, RGB LED
10.17EUR (+5.95EUR Versand) http://de.farnell.com/freescale-semiconductor/frdm-kl05z/eval-kinetis-l-freedom-cortex-m0/dp/2254491?Ntt=2254491

Freescale FRDM-KL25Z ARM Cortex-M0+ Development Board

Freescale FRDM-KL25Z
Freescale ARM Cortex-M0+ MCU, 128KB flash, 16KB SRAM, 8 MHz
+ USB
12,95 EUR (+3.50EUR DHL Paket) exp-tech.de
https://mbed.org/handbook/mbed-FRDM-KL25Z

LPC800/LPC812 MAX Board

LPC800_LPC812_MAX_Board
NXP LPC812 Cortex-M0+, 16 kB Flash, 4 kB RAM, 12 MHz
15EUR (+7.60 EUR First Class Mail) embeddedartists.com

LPC-P1114 Development prototype board for LPC1114 CORTEX M0 ARM microcontroller

LPC-P1114_Development_prototype_board
LPC1114 Cortex-M0, up to 50 Mhz, 32 kB Flash, 8kB SRAM
11.95 EUR (+5.50EUR Airmail Europe) olimex.com

STM32VL Discovery

STM32LV_Discovery
STM32F100RB ARM Cortex-M3 Microcontroller, 128 KB Flash, 8 KB RAM
12,14 EUR (+3.50EUR Versand) watterott.com

TI LM4F120 Stellaris LaunchPad

med_ek-lm4f120xl_stellarislaunchpad_tool
TI ARM Cortex-M4F, 256KB Flash, 32 kB SRAM
+ USB, RGB LED
12,35 EUR (+3.50EUR Versand) watterott.com

Adafruit Trinket

adafruit_products_trinket_clear_products_1500_ORIG
Atmel ATtiny85, 8K Flash, 512 Byte SRAM, 512 Byte EEPROM
7,39 EUR (+3.50EUR Versand) watterott.com

OLIMEXINO-85-ASM

OLIMEXINO-85-1
The smallest Olimex Arduino-inspired board
Atmel ATtiny85, 8K Flash, 512 Byte SRAM, 512 Byte EEPROM
6EUR (+5.50EUR Airmail Europe) olimex.com

OLIMEXINO-85-KIT

OLIMEXINO-85-KIT
Arduino OLIMEXINO-85 in DO-IT-YOURSELF (DYI)
Atmel ATtiny85, 8K Flash, 512 Byte SRAM, 512 Byte EEPROM
4EUR (+5.50EUR Airmail Europe) olimex.com

OLIMEXINO-85S
OLIMEXINO-85S-1

ATtiny85-SU microcontroller with pre-loaded „micronucleus tiny85“ bootloader, World’s smallest Arduino-compatible board
5EUR (+5.50EUR Airmail Europe) olimex.com

OLIMEXINO-85BC
OLIMEXINO-85BC

ATtiny85, Two LEDs – power and status, Reset button
7EUR (+5.50EUR Airmail Europe) olimex.com

DFRobot Cheapduino

DFRobot_Cheapduino
Atmel AVR ATmega8, 8Kbytes Flash, 1KB SRAM, 512K EEPROM
3,40EUR (+5EUR Versand) www.lipoly.de
Hersteller Wiki www.dfrobot.com

Digispark USB Development Board

Digispark_USB_Development_Board
Atmel ATtiny85, 8Kbytes Flash, 512 Byte SRAM, 512 Byte EEPROM
8.95EUR (+2,50EUR Versand) shop.cboden.de
Alternativer Anbieter ~12.50EUR ($8.95 + $8.00 Versand) www.tindie.com
Hersteller http://digistump.com/product.php?id=1

Wattuino pro mini adv 5V/16MHz

Wattuino_pro_mini
ATmega328P, 32 Kbytes Flash, 1 KB EEPROM, 2KB SRAM
– kein USB
10EUR (+3.50EUR Versand) www.watterott.com

Nano V3.0 AVR ATmega328

arduino_Nano_V3.0
Atmel ATmega328, 32 Kbytes Flash, 1 KB EEPROM, 2KB SRAM
USB Kabel inklusive
8.24EUR (kostenloser Versand) dx.com

Adafruit Gemma

Adafruit Gemma

7.57EUR (+3.50 EUR Versand) www.exp-tech.de
Hersteller www.adafruit.com

PicoDuino

PicoDuino
ATtiny85 Board mit RGB LED und Taster, Hardware-kompatibel zum Adafruit GEMMA / TRINKET Board
ab ~12EUR ($12.20 + $4.00 Versand) www.tindie.com

ITeaduino Tiny

ITeaduino_Tiny
Attiny85 Board mit Power und Test/Status LED
~9.50EUR ($9.00 + Registered Air Mail $3.90) imall.iteadstudio.com

weitere Microcontroller Boards bei Tindie

Bei Tindie, einem Marktplatz für unabhängige Entwickler gibt es auch einige interessante MSP430- und ATtiny85-Boards
www.tindie.com

Log0x9000 – Poor Mans NFC Smartcard Logger

Vor längerer Zeit habe ich ein bisschen mit JavaCards rumgespielt: Applets kodiert, auf kontaktlose Smartcard geladen und an mein NFC Smartphone gehalten. Eine wirklich sinnvolle Idee für ein Applet kam mir irgendwie nicht bis zu dem Zeitpunkt als ich wissen wollte welche Daten (APDUs) eine bestimmte Android NFC App eigentlich so an (m)eine kontaktlose Smartcard sendet und welche Daten (Response-APDUs) auslesen werden. Da kam mir die Idee zu einer Dummy Smartcard, die jede Anfrage (Command-APDU) mitloggt, mit einer OK-Quitierung (Response-APDU: 0x9000) versieht und somit relativ preiswert das Erforschen der Kommunikation zwischen NFC App und Smartcard zulässt. Ausserdem kann man damit nebenbei schlecht kodierte NFC Apps zum Absturz bringen 🙂  Wird nämlich eine Response-APDU 0x9000 mit zusätzlichen Daten erwartet und bleibt das Datenfeld leer so kann es zB zu einer ArrayIndexOutOfBoundsException kommen.

Erforderlich dafür ist allerdings eine JavaCard, die das Setzen des Default Selected Privilege zulässt, da dann alle APDUs (auch das Selektieren eines nichtvorhandenen Applets) direkt an das Logging-Applet geleitet werden. Die Blank 64k Programmable JAVA SIM Card zB kann man dafür leider nicht verwenden, da die Karte das Laden/Installieren mit Privilegien per Global Platform nicht unterstützt.

Folgende Kommandos sind in der ersten lauffähigen Version implementiert:

00100000 get version (zeigt die Applet Version an)
00400200076C6F6739303030 logging = off (t0/t1/tcl off) (schaltet das Logging aus, Karte kann nun konfiguriert werden)
004002xx logging = on (bitwise) e.g:
00400201 logging = on @ t0 contact interface
00400202 logging = on @ t1 contact interface
00400204 logging = on @ tcl contactless interface
00400207 logging = on @ all contact and contactless interfaces
00400210 get logging setting (liest Logging Bits aus)
00400300 clear log (clear all log entries)
00400400 clear cr_apdus (
0041p1p2 set defaultSW p1p2=9000, 6D00, 6a80 (Default SW setzen)
00420000 get defaultSW (Default SW auslesen)
00500100 activate C/R-APDU: lc {data set}  {data-set}={len-apdu apdu-byte1...apdu-byteN len-response-apdu rapdu0... rapduN}  
00510000 get cr_index (number of C/R-APDUs) (Anzahl der konfigurierten C/R-APDUs ausgeben)
006000nn readLog n (Logeintrag n auslesen)
00610000 get log index (Anzahl der Logeinträge auslesen)

Somit kann das Logging an- und ausgeschaltet werden, Logeinträge gelöscht / konfiguriert werden und vorhandene Logeinträge aufgelistet werden.

Testkandiat

Als Proband musste die Electronic Pickpocket RFID von Identity Stronghold herhalten. Im Screenshot sieht man das angeblich eine Karte erkannt wurde.

identify_stronghold

Die geloggte APDU zeigen die Anfrage der App:

#selektieren des American Express AIDs
00 a4 04 00 05 a0 00 00 00 25

Scheinbar fragt die App nur nach einer American Express Karte.

Hall of Shame

Schlecht kodierte (ohne Überprüfung der Response APDU und ohne try-catch-Block) NFC Apps scheinen dann so auszusehen:
ec_kreditkarten_infos  speek  s-kontaktlos

Interessant ist auch der Unterschied zwischen einem Android-Gerät mit NXP NFC Controller und einem Android-Gerät mit STMicroelectronics-Oberthur-Broadcom-Gespann. Mein Nexus S (mit NXP-NFC-Controller) sendet keine weiteren APDUs wenn das Phone auf die Karte gelegt wird, während das Nexus 10 (Broadcom-NFC-Controller) scheinbar alle 0.5 Sekunden versucht eine Leseanfrage an die Karte zu senden – denn nach 10 Sekunden wurden folgende APDUs geloggt:

> l9ls
0: 00B000009000
1: 00B000009000
2: 00B000009000
3: 00B000009000
4: 00B000009000
5: 00B000009000
6: 00B000009000
7: 00B000009000
8: 00B000009000
9: 00B000009000
10: 00B000009000
11: 00B000009000
12: 00B000009000
13: 00B000009000
14: 00B000009000
15: 00B000009000
16: 00B000009000
17: 00B000009000
18: 00B000009000
19: 00B000009000

Das 00B00000 entspricht einem READ-BINARY-Kommando, das wahrscheinlich genutzt wird um zu überprüfen, ob sich die Karte noch im Feld befindet.

Antworten

Jede Anfrage stumpf mit einem 0x9000 zu beantworten macht im 2.Schritt natürlich wenig Sinn, da es so zu keiner korrekten Kommunikation zwischem dem Smartphone und der Karte kommen wird. Deshalb sollte das Applet besser mit vorkonfigurierten Response-APDU antworten. Hat man die passende NFC-Smartcard zur App parat kann man so im Wechsel eine C-APDU loggen, die C-APDU an die richtige Karte senden, das Applet mit der R-APDU konfigurieren und so Schritt für Schritt quasi die Karte emulieren. Das Unterfangen ist zwar ziemlich mühsam aber für einen Logger unter 20 Euro akzeptabel.

Bei meinen Experimenten hat es sich allerdings herausgestellt, dass es Sinn macht eine Statemachine in das Applet zu implementieren, da je nach Status der Karte Anfragen unterschiedlich beantwortet werden müssen.

Btw: Das Applet kann natürlich auch zum Loggen einer kontaktbehafteten Karte, wie zB der Gesundheitskarte genutzt werden, da es der Karte nahezu egal ist über welches Interface die APDUs gesendet werden. Lesezugriffe auf Mifare Classic bzw ISO14443-3-Level kann mit der JavaCard leider nicht geloggt werden, da die Mifare Kommunikation eine Protokollebene niedriger stattfindet und nicht über die JavaCard API läuft.

Tuit – ein weiterer NFC Ring

Tuit_Prototype

Einen Monat nachdem das NFC Ring Kickstarter Projekt erfolgreich abgeschlossen ist versucht ein weiterer Entwickler ebenfalls einen NFC Ring Projekt aufzusetzen? Tuit – A mobile security ring powered by NFC, so wird es von Jeff Fransen (Brooklyn, NY) betitelt. Der Ring soll aus 3 Teilen (+ NTAG203-Tag) bestehen, die per Ultraschallschweißen verbunden werden und kann für 25$ (Schwarz&Silber Style) vorbestellt werden.

Eine Tuit Lockscreen App zum Entsperren des Android NFC Smartphones wird es bei Gründung des Projektes geben, bei Erreichen eines Stretch Goals auch für Windows Phone.

Quelle: Kickstarter