Erfahrung mit Kartendruckern, Teil 1

Dieser Artikel ist hilfreich für Benutzer , die mit Kartendruckern ( Evolis Primacy und Smart-51 ) und NFC-codierten Karten wie Mifare Classic und Mifare DESFire EV2 arbeiten . Im ersten Teil beschreiben wir den allgemeinen Eindruck der Arbeit mit Kartendruckern sowie die Probleme, mit denen wir konfrontiert waren. Im zweiten Teil sollen weitere praktische Teile gezeigt werden: Code, Bedienungstipps.


1. Wie ist die Aufgabe entstanden?


Wir entwickeln ein elektronisches Ticketsystem, das auch die Arbeit mit NFC-Karten umfasst. Jede NFC-Karte hat eine benutzerfreundliche Nummer und eine individuelle ID . Die Nummer muss auf der Karte aufgedruckt sein und die ID wird in den NFC-Chip geschrieben. Eine der Aufgaben war es, eine stabile Produktion von Transportkarten aufzubauen.


In der ersten Phase wurde das Problem auf einfachste Weise gelöst: Abzüge mit Nummern werden vom NFC-Kartenanbieter gedruckt, und Ausweise werden von uns mithilfe von Desktop-Lesegeräten, spezieller Software und einer Person aufgezeichnet. Nach Erhalt der Karten vom Lieferanten ist es erforderlich, die Karte im System zu registrieren und die ID und die Nummer miteinander zu verknüpfen. Als Desktop-Reader verwendeten wir den Z-2 Reader [1].


Der Prozess sah ungefähr so ​​aus:


  • Der Bediener nimmt eine Karte auf. Die Kartennummer ist bereits auf der Karte aufgedruckt, die Registrierung der Karte im System und die Aufzeichnung der ID im NFC-Chip sind jedoch erforderlich
  • Der Bediener legt die Karte in den Z-2-Leser ein und registriert die Nummer im elektronischen Ticketsystem, indem er die Kartennummer manuell eingibt . Zur Bündelung und Registrierung wird ein HTTPS-API-Aufruf durchgeführt
  • Der Bediener nimmt die nächste Karte und macht es erneut.

Eine einfache und schnelle Lösung mit einem kleinen Nachteil. Der Einfluss des menschlichen Faktors erzeugt Phantomkarten, bei denen die auf der Karte aufgedruckte Nummer nicht der Link- ID- Nummer in der Systemdatenbank entspricht.


So entstand die folgende Aussage zum Problem: Es ist erforderlich, die Nummer auszudrucken, die ID aufzuschreiben und die NFC-Karten atomar und mit minimalem menschlichem Aufwand im System zu registrieren.


In diesem Artikel beschreiben wir alle Geräte, mit denen wir gearbeitet haben, und alle Fallstricke. Am Ende werden wir versuchen zu sagen, welche Ausrüstung uns besser erscheint.


1.1. NFC-Karten


Wir haben die NFC-Karten MIFARE Classic 1K und MIFARE DESFire EV2 getestet. MIFARE Classic ist am häufigsten und am anfälligsten für Kopien. Sie sind jedoch weiterhin beliebt an Orten wie Universitäten und öffentlichen Verkehrsmitteln. Bei der Abwicklung von Cashflows ist eine zuverlässigere Lösung erforderlich. Daher wurden MIFARE DESFire EV2-Karten zu einer Alternative. Dies ist einer der letzten Kartentypen, die DES-, TDES- (2KTDES-, 3KTDES-) und AES-Verschlüsselungsalgorithmen verwenden [2, 3]. Kurz zu jeder Karte:


MIFARE Classic


Die Speicherkarte ist ein Sektor und blockiert. Die erste Speichereinheit ist ein Sektor. Auf der Karte befinden sich 16 Sektoren mit jeweils 4 Datenblöcken. Der Speicher jedes Blocks beträgt 16 Bytes. Um Daten lesen und / oder schreiben zu können, muss sich der Leser am Sektor anmelden. Ein spezieller Block in jedem Sektor, der Trailer-Block, dient zum Speichern von Schlüsseln. Um mit dem Sektor arbeiten zu können, müssen Sie sich zunächst beim Trailer-Block anmelden. Der Trailer-Block speichert auch 16 Bytes: 6 Bytes pro Schlüsseltyp A, 4 Bytes pro Zugriffsrechte, 6 Bytes pro Schlüsseltyp B.


Abbildung 1 [4] zeigt deutlich die Sektoren, Blöcke und Schlüssel.




Abbildung 1 - Speichergerät in Mifare Classic


MIFARE DESFire


Das Kartengerät ähnelt einem Dateisystem. Die Karte besteht aus Anwendungen und Dateien. Auf der Karte befindet sich eine Hauptanwendung (application) mit der ID - 000000 (0x00, 0x00, 0x00). Innerhalb der Hauptanwendung können Sie eine neue Anwendung erstellen und darin Datendateien erstellen.
Die Eigenschaften von DESFire-Karten sind in Abbildung 2 [5] dargestellt. Jeder Anwendung werden eigene Zugriffsschlüssel für die Anwendungsdateien zugewiesen.



Abbildung 2 - Eigenschaften von Mifare DESFire-Karten


1.2. Drucker als Lösung


Um diese Aufgabe zu erfüllen, werden spezielle Kartendrucker verwendet. Gegenwärtig gibt es viele verschiedene Unternehmen, die diese Drucker anbieten. Zum Beispiel: Evolis, Smart, Zebra, Datacard usw. Wir haben die Drucker Evolis Primacy und Smart-51 verwendet. Diese Drucker haben im Kern des Auftrags viele Gemeinsamkeiten: Sie verwenden beide Bandkassetten zum Drucken und haben ein ähnliches Reinigungsprinzip. Es gibt auch Unterschiede - verschiedene NFC-Encoder. Beide Drucker können je nach Kundenwunsch ergänzt oder ausgetauscht werden.


Programmierer für NFC-Karten stützen sich auf die Standards ISO / IEC 14443A und ISO / IEC 7816-4 für DESFire, ISO / IEC 14443 Typ A für Classic. Abhängig vom Hersteller können die Programmierer jedoch entweder native Befehle gemäß Standards akzeptieren oder die nativen Befehle spezifisch für einen bestimmten Programmierer umbrechen. Wir sind mit dem einen und dem anderen konfrontiert.


Evolis-PrimatSmart-51
DruckenDas Band wird zum Drucken verwendet (Farbe oder Schwarzweiß). Eine ganze Bandkassette wird mitgeliefert.Das Band wird zum Drucken verwendet (Farbe oder Schwarzweiß). Es wird nur Klebeband mitgeliefert, eine Kassette und der Drucker selbst mitgeliefert. Eine Reinigungsrolle liegt dem Klebeband bei.
EncoderElyctis Encoder. Einfach zu bedienen, weil unterstützt die Interaktion mit Standard-Windows-Bibliotheken für die Kommunikation mit NFC-Karten, Winscard.DUALi-Encoder. Der technische Support bietet ein spezielles SDK für die Arbeit mit dem Encoder.
ReinigungDamit der Drucker in einwandfreiem Zustand bleibt, muss er ständig gereinigt werden. Es gibt zwei Arten der Reinigung: periodisch (nach jeweils 1000 Karten) und verlängert (nach 5000 Karten). Die Einhaltung des Reinigungsplans ist Voraussetzung in der Garantievereinbarung.Nach Verwendung des bedruckten Farbbands ist eine Reinigung erforderlich. Abhängig von der Art des Klebebands und der Größe des zu druckenden Bildes ist nach 2-4.000 Karten eine Reinigung erforderlich.
WohnenDurch das Kunststoffgehäuse ist der Drucker sehr leicht. Die Innenräume sind leicht zu erreichen, da sich die Wände des Druckers nach beiden Seiten öffnen.Das Metallgehäuse macht den Drucker betriebssicher. Einige Eingeweide sind nur sichtbar, wenn die obere Abdeckung geöffnet wird.
SoftwareKommt mit spezieller Software „Evolis Print Center“ und CardPresso. Die erste wird für Druckereinstellungen benötigt, die mit verschiedenen Hilfsprogrammen ausgestattet sind. Mit der zweiten Software können Sie die Funktionen des Druckers zum Drucken und Codieren schnell testen.Eine separate Software zur Steuerung des Druckers ist nicht erforderlich. Genügend Druckereigenschaften in der Liste der Windows-Geräte. Kommt mit SmartID-Software zum Drucken und Codieren.

Tabelle 1 - Vergleich von Evolis Primacy und Smart-51

2. Experimente


Im Allgemeinen kann die Arbeit mit Druckern in mehrere Teile unterteilt werden: Kommunikation mit dem technischen Support, Untersuchung des Zusammenspiels von Karten und Codierern, Drucken.


2.1. Eindruck des technischen Supports


Die Arbeit mit Druckern beinhaltete die ständige Kommunikation mit dem technischen Support, da wir unsere eigene Software schreiben mussten. In beiden Fällen haben wir mehr mit Distributoren von Unternehmen in unserem Land und den Nachbarländern gesprochen.


Die Evolis-Händler waren größtenteils immer in Kontakt. Die Besonderheiten der Themen zeigten jedoch fast sofort, dass eine Kommunikation mit Vertretern von Evolis erforderlich ist. Leider gaben sie uns ihre Kontakte nicht bekannt und mussten Nachrichten über einen Distributor austauschen. Dies betraf jedoch nur Druckausgaben, bei Codierungsfragen erhielten wir die E-Mail eines Elyctis-Vertreters. Die direkte Kommunikation mit Elyctis hat den Kodierungsprozess erheblich vereinfacht. Rein technisch haben wir uns sofort verstanden und es gab kein Missverständnis. Bei Druck- und Codebeispielen für Evolis Primacy kam die Kommunikation irgendwann zum Erliegen. Grundsätzlich war der negative Eindruck von den Momenten geprägt, in denen Beispiele für doppelseitiges Drucken bei uns nicht funktionierten und es lange gedauert hat, dies zu beweisen. Ich kam zu den Aufzeichnungen der Druckvorgänge auf Video, woraufhin weitere produktive Tipps von Evolis folgten.


Eine der neuesten Fragen des technischen Supports von Evolis war der Anschluss des Druckers über Ethernet. Momentan verbinden wir den Drucker über USB mit dem Laptop, was bei 1-2 Druckern tolerierbar ist. Die Antworten warten noch. Elyctis hat jedoch bereits geantwortet, dass sein Encoder für den Evolis Primacy-Drucker keine Netzwerkverbindung bietet.


Bei der Kommunikation mit dem technischen Support von Smart-51 ging es auch darum, über einen Distributor mit Unternehmensvertretern zu kommunizieren. Am Anfang lief alles reibungslos. Beim Codieren von Karten wie Mifare DESFire traten Probleme auf. Probleme wurden durch bestimmte Teams verursacht, die Sie im Internet nicht finden werden. Aus diesem Grund mussten Sie nur einige Teile aus dem vom Hersteller als Beispiel bereitgestellten Arbeitscode kopieren. Das gedankenlose Kopieren führt jedoch nicht zum Guten. Infolgedessen wurden zwei Wochen damit verbracht, den Fehler dem Hersteller zu erklären, auf dessen Seite der Mann deutlich saß, nicht sehr nah an den Komplikationen des Systems, aber die allgemeinen Unterlagen bei sich zu haben. Es blieb ein unangenehmer Niederschlag zurück, der jedoch sehr gut begann.


Die Kommunikation über einen Distributor hat keine Pluspunkte, feste Minuspunkte. Zum Beispiel:


  1. Verspätete Antworten, da die verantwortliche Person auf der Seite des Händlers möglicherweise mit anderen Dingen beschäftigt ist oder in den Urlaub fährt.
  2. Wenn sich der Händler in einem anderen Land befindet, handelt es sich um zusätzliche Feiertage, also nicht um Arbeitstage. Im Fall von Smart-51 fand die Kommunikation unter Beteiligung von Personen aus 3 Ländern statt.
  3. Antworten werden nicht weitergeleitet. Der Antworttext wird vom Verteiler in einen neuen Brief eingefügt. Aus diesem Grund gehen manchmal angehängte Dateien verloren und erreichen nicht sofort.
  4. Es gibt keine klare Gewissheit, dass Ihre Nachricht den Hersteller unverändert erreicht hat.

Unten finden Sie eine Tabelle mit der Anzahl der Buchstaben, aus denen die Kommunikation mit dem technischen Support besteht. Grundsätzlich waren die Fragen für Evolis und Smart ungefähr gleich. Beispiel: "Warum wird keine einheitliche Farbe gedruckt? Haben Sie Codebeispiele in C # oder Java?" und spezifischere Fragen, warum etwas nicht wie erwartet funktioniert.


EvolisElyctisSmart-51
Anzahl der Buchstaben973761

Tabelle 2 - Vergleich der Anzahl der E-Mails mit dem technischen Support

2.2. Kodierung


Die Kommunikation mit dem Lesegerät erfolgt über APDU-Befehle. APDU (Application Protocol Data Unit) ist ein Standardformat für die Kommunikation zwischen einer Karte und einem Lesegerät. In diesem Artikel werden die grundlegenden APDU-Teams für MIFARE Classic und MIFARE DESFire beschrieben.


TitelGrößeBeschreibung
CLA1 ByteKlassenbytes
Ins1 ByteAnweisungsbyte
P11 ByteParameter 1
P21 ByteParameter 2
Datenlänge1 ByteGröße der übertragenen Daten
Daten...Übertragene Daten
Erwartete Datenlänge1 ByteDie Größe der erwarteten Daten in der Antwort

Tabelle 3 - Format der APDU-Befehle
TitelGrößeBeschreibung
SW11 ByteHäufiger Erfolgs- oder Fehlercode
SW21 ByteDetaillierter Fehlercode
Daten...Daten zurückgeben

Tabelle 4 - APDU-Antwortformat

Eine Beschreibung aller möglichen Antwortcodes finden Sie hier [6]. Ein Gerät zur Kommunikation von Karten mit einem Lesegerät ist unter [7] zu finden.


Ein kurzer Kodierungsalgorithmus lautet wie folgt:


  1. Holen Sie sich die UID der Karte. Dies ist eine eindeutige Nummer, die vom Lieferanten geflasht wird und sich nicht ändert.
  2. Daten aus jedem Sektor lesen:
    2.1 Melden Sie sich mit dem Standardschlüssel (0x00 oder 0xFF) beim Sektor an.
    2.2 Daten aus drei Datenblöcken lesen
  3. Wenn die gelesenen Daten leer sind, gehen Sie zum Datensatz
    3.1 Melden Sie sich mit dem Standardschlüssel (0x00 oder 0xFF) beim Sektor an.
    3.2 Daten in drei Sektordatenblöcke schreiben
    3.3 Erstellen Sie einen neuen Schlüssel basierend auf der UID der Karte
    3.4 Ersetzen Sie den Autorisierungsschlüssel im Trailer-Block durch einen neuen Schlüssel.

2.2.1. Elyctis


Der Evolis-Drucker verwendet ein ELYCTIS CL-Lesegerät . Mit der WinSCard- Bibliothek (C ++ und C #) und jnasmartcardio (Java) können Sie problemlos mit dem Reader interagieren. Um schnell Software mit einer relativ einfachen Oberfläche zu erstellen, wurde beschlossen, Code in C # zu schreiben. Meistens schreibt unser Team Code in Java, was den Übergang zu C # weniger schmerzhaft machte. Ebenfalls für C # sprach die Tatsache, dass Windows besser für die Arbeit mit Druckern geeignet ist.


Die folgende Tabelle enthält Beispiele für native APDU-Befehle, die vom Elyctis-Reader akzeptiert werden.


BeschreibungDatenAPDU
Beziehen einer UID-Karte-0xFF 0xCA 0x00 0x00 0x00
Laden des Autorisierungsschlüssels in den Leserspeicher6-Byte-SchlüsselEin Beispiel für das Laden eines Standardschlüssels. 0xFF 0x82 0x20 0x00 0x06 0x00 0x00 0x00 0x00 0x00 0x00 0x00
EinloggenSektorautorisierungsblocknummer (3. Sektorblock) und Schlüsseltyp (A - 0x60 oder B - 0x61)Ein Beispiel für die Autorisierung von Sektor 1. Die Blocknummern dieses Sektors sind 4-7, der Trailer-Block ist Nummer 7. 0xFF 0x86 0x00 0x00 0X05 0x01 0x00 0x07 0X60 0x00 0x00
Daten aus einem Block lesen-Ein Beispiel für das Lesen von Daten aus Block 4 (1. Block von Sektor 1). Die Sektornummer wird in Parameter 2 eingetragen. 0xFF 0xB0 0x00 0x04 0x00 0x10
Daten in den Block schreiben16 DatenbytesEin Beispiel für das Schreiben von Daten in Block 4. 0xFF 0xD6 0x00 0x04 0x10 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 0x00

Tabelle 5 - Beispiele für APDU-Befehle für Mifare Classic

Nachdem wir sichergestellt hatten, dass die Kodierung von Karten wie Mifare Classic erfolgreich war, wechselten wir zu DESFire-Befehlen . Unter Referenz [8] finden Sie einfache Beispiele für Befehle mit Erläuterungen. Bereits im Autorisierungsteam sind wir auf ein interessantes Leserverhalten gestoßen. Kurz gesagt, der Leser hat die vollständige Autorisierung selbst vorgenommen. Es stellte sich heraus, dass der technische Support von Elyctis uns eine spezielle Firmware zur Verfügung stellte, die easyDESFire-Informationen enthielt. Es muss nur bestimmt werden, welchen Verschlüsselungsalgorithmus der Leser verwendet. In unserem Fall war es 3DES.


Im Normalfall erfolgt die Autorisierung durch den Austausch mehrerer Nachrichten.


  1. Wir senden den APDU-Befehl zur Autorisierung: 0x90 0x0A 0x00 0x00 0x00 0x00 .
  2. Abhängig vom Algorithmus reagiert ein Array von 8 zufälligen Bytes, die vom Kartenschlüssel codiert werden, auf den Befehl, den wir mit RandBEnc bezeichnen .
  3. Wir entschlüsseln RandBEnc und verschieben das Byte nach links. Bezeichne das Ergebnis mit RandBLeft .
  4. Wir erzeugen auf unserer Seite ein Array von 8 zufälligen Bytes, RandA .
  5. Wir gruppieren RandA und RandBLeft , verschlüsseln mit dem Kartenschlüssel und senden das resultierende Array von 16 Bytes.
  6. Als Antwort erhalten wir den Sitzungsschlüssel und melden uns damit bei der Anwendung auf der Karte an.

Weitere Details zum Autorisierungsprozess finden Sie hier [9]. Der Code aus dem Github ist auch sehr nützlich [10].


Während der Codierung traten Probleme mit der Verwendung von Befehlen aus der Quelle auf [8]. Mithilfe des technischen Supports von Elyctis haben wir die erforderlichen Befehle erhalten, die für easyDESFire Intelligence geeignet sind .


Während der Codierung auf Elyctis wurde ein großes Problem des Lesers aufgedeckt - Kommunikationsverzögerung . Sehr oft erreichen die Signale den Leser nicht, so dass derselbe Befehl manchmal mehrmals gesendet werden muss. Dieses Verhalten ist weniger verbreitet, wird jedoch weiterhin beim Senden von Befehlen zum Drucken bemerkt. Das Senden aller Befehle erfolgt daher in einer Schleife bis zur erfolgreichen Ausführung.


2.2.2. DUALi


Der Hersteller gibt sein SDK an, um mit einem DUALi-Encoder zu arbeiten. Während der Arbeit mit Mifare Classic konnten Befehle zum Lesen und Schreiben dem Vorlagencode entnommen werden, den die Distributoren uns gegeben hatten. Beispiele waren in C ++, Visual Basic, Java. Der Code konnte jedoch nur in C ++ vollständig kompiliert werden. Die erste Anfrage nach einem C # -Codebeispiel wurde uns verweigert, bzw. der Distributor hat keine. Wir haben keine zuverlässigen C ++ - Programmierer in unserem Team, daher war das Schreiben des gesamten Codes durch recht einfache Dinge sehr kompliziert. Zum Beispiel:


  1. Arbeite mit Arrays
    Bei der Übergabe eines Arrays als Parameter an eine Funktion wurde die Größe des Arrays nicht übergeben. Um die Länge des Arrays zu bestimmen, wurde die Funktion sizeOf () verwendet. Die Funktion gab jedoch unabhängig von der tatsächlichen Größe des Arrays konstant eine Größe von 4 zurück. Dieses Verhalten wurde nicht sofort aufgezeichnet, da einige Arrays tatsächlich eine Größe von 4 hatten.
  2. Konfigurieren Sie alle Bibliotheken
    Bei der Installation aller erforderlichen Umgebungen wurden große Schmerzen festgestellt. Wir sind zu sehr an Dinge wie maven und apt (auf Ubuntu) gewöhnt. Unser Programm sollte die Backend-API über HTTP-Anfragen aufrufen und die Daten in Base64 verschlüsseln. Zu diesem Zweck wurde entschieden, die Bibliotheken libcurl und openssl zu verwenden. Das Schreiben des Programms selbst erfolgte in der Microsoft Visual Studio-Umgebung. Längster Aufwand bei der Installation von libcurl.

Das SDK selbst ist eine in C ++ geschriebene DLL-Bibliothek. Dank des Codebeispiels haben wir relativ schnell ein Programm für die Interaktion mit der Mifare Classic-Karte geschrieben. Wie bereits erwähnt, waren die APDU-Befehle für DUALi sehr spezifisch: Die ersten beiden Bytes stimmten nicht mit den im Internet verfügbaren überein. Aus diesem Grund musste ich sie blind kopieren, da im Prinzip alles wie erwartet funktioniert. Probleme beginnen mit Tests mit DESFire-Karten.


Das Prinzip der APDU-Befehle für DESFire in DUALi ist zumindest verständlich. Es gibt zwei Bytes für {CLA, INS} , sie ändern sich nicht und sie sagen, dass der Befehl für Karten wie DESFire bestimmt ist. Parameter 1 und 2 ändern sich ebenfalls nicht. Die übertragenen Daten enthalten bereits einen Teil des nativen DESFire-Befehls, nämlich die Bytes {INS, Data} . Ungefähr eine Woche lang konnten wir nicht die erwarteten Antworten auf einfache Befehle erhalten, z. B. den Befehl "Anwendung auswählen". Ganz am Anfang des Codes haben wir die APDU-Ausführung des Befehls GetCardStatus verlassen, der kein Befehlsformat für DESFire war. Sie arbeitete jedoch und stellte UID-Karten aus. Wie sich herausstellte, arbeiteten DESFire-Teams nach der Ausführung von GetCardStatus nicht mehr. Dieses Versäumnis wurde von unseren Kräften nach einem einwöchigen Dialog mit dem Lieferanten festgestellt, der zu nichts führte.


Nach einem Monat stabilen Betriebs unseres Programms mussten wir das Programm in C # umschreiben. Der Hauptgrund war die Gründung von CI. Das C ++ - Programm wurde mit Microsoft Visual Studio kompiliert. Alle unsere Server laufen unter Linux, daher war es nicht möglich, den Docker mit Windows und dem erforderlichen Visual Studio ToolKit zu starten. Natürlich können Sie eine virtuelle Maschine mit Windows erstellen und trotzdem alles für C ++ konfigurieren, aber das wollte ich nicht. Nachdem wir wiederholt einen Beispiel-C # -Code vom Hersteller angefordert hatten, wurde uns ein Beispiel zur Verfügung gestellt. , C++, . C# CI.


2.3. Drucken


, , . . . , , .


. , , .


2.3.1. Evolis Primacy


JSON , HTTP . Evolis Services Provider, . 8 :


  1. : , , . .

- 4-6, . . . . SDK, . .
:



  1. .

  2. .

. , . . , . . . , , , 3.


drawing

3 —


3 .


, . . QR-. , QR- . , , 4 6 .


, Evolis , Evolis Print Center, , , . .


2.3.2. Smart-51


, SmartID, . , Evolis. :


  1. , .
  2. , .

, . Smart-51. :


  1. , .
  2. , QR-

, User Manuals . , , .


2.3.3.


, . , , . . . , .


Evolis Primacy 100 , 0,76 . , 86 . Smart-51 100 , . , .


3.


. . . 17 . .


,,Total
Evolis Primacy≈ 10≈ 10≈ 20
Smart-51≈ 17≈ 6≈ 23

drawing

a)


drawing

b)
4 — : — , —


4.


NFC -. , .. . Smart-51 Evolis Primacy. Evolis , . Smart-51 . Smart-51 Evolis. , . Evolis Primacy , . . Smart-51 . , .


, .. . , .


Referenzliste


  1. https://ironlogic.ru/il.nsf/htm/ru_z2usb
  2. https://www.nxp.com/products/rfid-nfc/mifare-hf/mifare-desfire/mifare-desfire-ev2:MIFARE_DESFIRE_EV2_2K_8K
  3. https://www.nxp.com/docs/en/data-sheet/MF3DX2_MF3DHX2_SDS.pdf
  4. https://www.nxp.com/docs/en/data-sheet/MF1S50YYX_V1.pdf
  5. https://www.nxp.com/docs/en/data-sheet/MF3DX2_MF3DHX2_SDS.pdf
  6. https://www.eftlab.com/knowledge-base/complete-list-of-apdu-responses/
  7. Advanced Card Systems Guide http://downloads.acs.com.hk/drivers/en/API-ACR122U-2.02.pdf
  8. Mifare Desfire communication example https://ridrix.wordpress.com/2009/09/19/mifare-desfire-communication-example/
  9. Mifare DESFire Data Sheet http://neteril.org/files/M075031_desfire.pdf
  10. GitHub DESFire https://github.com/EsupPortail/esup-nfc-tag-server/blob/master/src/main/java/nfcjlib/core/DESFireEV1.java

Source: https://habr.com/ru/post/de481734/


All Articles