2015-07-04 21 views
9

Es gibt verschiedene Smartcards, die ISO 14443-4 unterstützen. Zum Beispiel Mifare Plus mit seinem nativen Befehlssatz. Oder andere Karten mit unterschiedlichen Befehlssätzen (d. H. 7816-4 APDUs).Wie kann ich verschiedene ISO 14443-4 Karten unterscheiden?

Ich entwickle einige Software für einen Kartenleser und ich muss identifizieren, welche Befehle die Karte unterstützt (zum Beispiel, wenn es Befehle in ISO 7816-4 Struktur unterstützt oder nicht).

Was ist der empfohlene Weg, um zwischen ihnen zu unterscheiden? Soll ich einfach einige Befehle aus dem Mifare Plus Befehlssatz ausprobieren und prüfen, ob ich richtige Antworten bekomme? Oder gibt es einen klügeren Weg?

Antwort

8

Während des Verbindungsprotokolls werden einige Parameter ausgetauscht, mit denen Sie die Fähigkeiten der Karte ermitteln können. Zum Beispiel informiert das SAK-Byte den Leser darüber, ob die Karte ISO 14443-4 ist und selbst wenn es MIFARE Plus ist (es gibt ein NXP-Dokument, das erklärt, welche Bits Sie lesen müssen). Dann haben Sie ATS (Antwort zu wählen), die eine Menge nützlicher Informationen über die Karte enthält. Sehen Sie sich ISO 14443-4 und ISO 7816-4 an.

+1

Ja, ich weiß das, aber ATS kann in Mifare Plus Karten geändert werden, also ist es nicht 100% zuverlässig. Und ich vermute, dass es andere Karten (nicht Mifare-Familie) geben kann, die denselben SAK haben. NXP empfiehlt, nur Bit 6 von SAK auszuwerten, um festzustellen, ob die Karte ISO 14443-4 unterstützt und andere Bits ignoriert. –

+1

Wahrscheinlich ist die beste Vorgehensweise, einen "pragmatischen" Ansatz zu implementieren: zuerst SAK und ATS (so dass Sie die meisten Karten abdecken) sowie einige Testbefehle für die Eckfälle. Muss Ihre Reader-Software alle generischen Mifare Plus-Karten unterstützen oder nur solche, die für eine bestimmte Anwendung oder Dienstleistung personalisiert sind? – mictter

+0

Ich denke, es wird ausreichen, um die personalisierten, sowie neue leere Karten für die Personalisierung zu behandeln. –

2

Niemals ATQ verwenden! Verwenden Sie SAK nur für Nicht-14443-4-Karten (z. B. Mifare Classic)! ATS ist auch eine schlechte Übung, da verschiedene Kartenanbieter es anders einstellen können. Jetzt

, wie es geht:

Nur Art und Weise, wie über Karte zu denken und nicht bekommen, verrückt ist es vorstellen, wie es voll Kommunikations-Stack (siehe OSI-Modell) ist.

Denken Sie daran, dass es Ihr Ziel ist, zwei Anwendungen zu verbinden, eine auf der Karte und eine auf Ihrem Computer. 14443-4 bietet Mechanismen zum Senden von Nachrichten und kümmert sich nicht um deren Inhalt.

Obendrein gibt es implementierte Schnittstellen verschiedener Karten und wenn beide Seiten: Karten - Kartentreiber kompatibel sind, werden sie kommunizieren. Wenn nicht, wird es auf dieser Ebene Fehler geben. Sie müssen also einen anderen Kartentreiber verwenden.

komplette Kommunikations-Stack wird wie folgt aussehen:

Your Application 
    | CardProtocol/7816-4 
    | | 14443-4 
    | | | 14443 
    | | | | radio waves 
    | | | 14443 (in card) 
    | | 14443-4 (in card) 
    | CardProtocol/7816-4 (in card) 
    Application/Appdata (in card) 

Natürlich zwischen jeder Schicht hat einige Schnittstelle.

Wenn Sie zwei Anwendungen haben, die kommunizieren möchten, versuchen Sie einen und versuchen Sie dann Sekunde.

Fehler auf Anwendungsebene => gibt es keine kompatible Anwendung auf der Karte

Fehler auf CardProtocol Ebene => es nicht kompatible Karte

Punkt ist Ihre Kommunikation auf allen Ebenen succed hat also nicht Sorgen Sie sich, um zu versuchen, mit Karte durch nicht kompatibles Protokoll zu kommunizieren - wenn Sie (durch irgendein Wunder) keinen Fehler auf KarteProtocol Niveau erhalten, erhalten Sie bestimmt einen auf Ihrer Anwendungsebene und Ergebnis ist das selbe. Viel Glück!

P.S. Es gibt einige komplexere Situationen wie "eine App über zwei Protokolle/Kartentypen", aber sie können auch leicht gehandhabt werden.