Online Store

MIFARE Classic und MIFARE Plus IC Speicher NDEF Datenmapping-Methoden

MIFARE-Anwendungsverzeichnis #

Die Speicherdaten-Mapping-NDEF-Methoden des MIFARE Classic und MIFARE Plus IC verwenden die MIFARE-Anwendungsverzeichnisstruktur (MAD).

Das MIFARE-Anwendungsverzeichnis (MAD) gibt an, zu welcher Anwendung die in den einzelnen Speichersektoren gespeicherten Informationen gehören.

Es wurden zwei MIFARE-Anwendungsverzeichnisse angegeben:

      1. MIFARE-Anwendungsverzeichnis 1 (MAD1): MAD1 KANN in jedem MIFARE Classic-kompatiblen Produkt verwendet werden. Der MAD1 befindet sich im MAD-Sektor (Sektor 00h), Falls der MAD1 auf Produkten mit einer Speichergröße von mehr als 1 KB verwendet wird, können nur 1 KByte Speicher verwendet und vom MAD1 adressiert werden. Der verbleibende Speicher wird daher nicht für die NDEF-Speicherung verwendet und bleibt frei.
      2. MIFARE-Anwendungsverzeichnis 2 (MAD2): MAD1 KANN in jedem MIFARE Classic-kompatiblen Produkt mit einer Speichergröße von mehr als 1 KB verwendet werden. MAD2 gilt nicht für Produkte mit einer Speichergröße, die kleiner oder gleich 1 KB ist. Der MAD2 befindet sich in den MAD-Sektoren (Sektor 00h und 10h)

Jeder Anwendung ordnet die MAD eine eindeutige Anwendungskennung (AID) zu. Die Anwendungskennungen (AIDs) werden innerhalb des/der MAD-Sektor(en) 00h gespeichert.

Die AID ist zwei Bytes lang und in 2 Felder mit jeweils einem Byte unterteilt:

  1. den Funktionsclustercode (1 Byte), der den Cluster identifiziert, zu dem die Anwendung gehört, und
  2. Der Anwendungscode (1 Byte), der die Anwendung innerhalb des Clusters identifiziert. Weitere Informationen zu MAD1 und MAD2.

Das General Purpose Byte (GPB) des MAD-Sektors WIRD mit einem DA-Bit gleich 1b gesetzt (DA-Bit ist das verfügbare MAD-Bit des GPB).

Alle derzeit nicht verwendeten Sektoren SOLLTEN mit geheimen Schlüsseln, die vom Tag-Aussteller definiert werden, schreibgeschützt werden, um die unbeabsichtigte Neudefinition von Zugriffsbedingungen und Schlüsseln zu verhindern. Es wird EMPFOHLEN, für alle freien Sektoren unterschiedliche Schlüssel zu verwenden. Dies ermöglicht die zukünftige Freigabe einiger Sektoren für neue Dienstleister, ohne dass alle freien Sektoren freigegeben werden müssen.

Zugang zum MAD-Sektor #

Die Speichersektoren, in denen MAD1 und MAD2 gespeichert sind (siehe [MAD]), werden mit den Tasten A und B geschützt. [MAD] Nach den Speichersektoren sind:

        • MAD1: der MAD-Sektor 00h (Sektor 0) beträgt und
        • MAD2: Die MAD-Sektoren sind 00h und 10h (Sektor 0 und Sektor 16).

Jedermann SOLL die MAD-Sektoren lesen dürfen. Dies wird durch die Verwendung eines in Tabelle 1 beschriebenen öffentlichen Schlüssels A erreicht (siehe auch [MAD]).

Table 1. Public Key Ein Wert des/der MAD-Sektor(en)

Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5
A0h A1h A2h A3h A4h A5h

Die Zugriffsbits für den/die MAD-Sektor(en) sind wie folgt festgelegt:

        • wie in Tabelle 2 beschrieben, wenn dem MAD-Sektor Lese- und Schreibzugriff gewährt wurde, oder
        • wie in Tabelle 3 beschrieben, ob dem MAD-Sektor schreibgeschützter Zugriff gewährt wurde (siehe auch [MF1K, MF4K, MFPLUS]).

Der Begriff Lese- und Schreibzugriff bedeutet in diesem Zusammenhang, dass es für MAD-Sektoren, die zuvor mit dem geheimen Schlüssel B authentifiziert wurden, möglich ist, alle Sektorblöcke außer dem Sektortrailerblock zu lesen und zu schreiben (siehe Tabelle 2 für weitere Details).

Stattdessen bedeutet der Begriff read-only access grant, dass es für MAD-Sektoren, die zuvor mit dem öffentlichen Schlüssel A von Tabelle 1 oder dem geheimen Schlüssel B authentifiziert wurden, möglich ist, nur alle Sektorblöcke außer dem Sektortrailerblock zu lesen (siehe Tabelle 5 für weitere Details).

Mit der Taste A ist es immer nur möglich, die Blöcke des MAD-Sektors zu lesen. Sektortrailer haben eine bestimmte Zugriffskonfiguration, wenn Lese-/Schreibzugriff oder schreibgeschützter Zugriff gewährt wird (siehe Tabelle 2 und Tabelle 3).

Die MAD-Sektoren SOLLTEN durch den geheimen Schlüssel B (z.B. vom Tag-Aussteller definiert) schreibgeschützt werden oder die MIFARE Classic- und MIFARE Plus-Tags mit den Zugriffsbits als schreibgeschützt setzen.

Tabelle 2. Zugriffsbitseinstellung für den MAD-Sektor mit gewährtem Lese- und Schreibzugriff

Zugriffsbits für Sektor 0 von MAD1 oder MAD2 und für Sektor 16 von MAD2
Zugriff auf Bits Werte Bemerkungen
C1 0 C20 C30 100bi Block 0 wird mit Taste A oder Taste B gelesen und mit Taste B geschrieben
C1 1 C21 C31 100b Block 1 wird mit Taste A oder Taste B gelesen und mit Taste B geschrieben
C1 2 C22 C32 100b Block 2 wird mit Taste A oder Taste B gelesen und mit Taste B geschrieben
C1 3 C23 C33 011b Der Sektor-Trailer-Block:

  • Schlüssel A wird mit Schlüssel B geschrieben und nie gelesen,
  • Zugriffsbits mit Taste A oder Taste B gelesen und mit Taste B geschrieben wird,
  • Schlüssel B wird mit Schlüssel B geschrieben und nie gelesen.
i. Empfohlener Wert für die Zugriffsbits C10 C20 C30 des Sektors 0 (Herstellerblock).

Tabelle 3. Zugriffsbitseinstellung für den MAD-Sektor mit Lesezugriff

Zugriffsbits für Sektor 0 von MAD1 oder MAD2 und für Sektor 16 von MAD2
Zugriff auf Bits Werte Bemerkungen
C1 0 C20 C30 010b Block 0 wird mit Taste A oder Taste B gelesen
C1 1 C21 C31 010b Block 1 wird mit Taste A oder Taste B gelesen
C1 2 C22 C32 010b Block 2 wird mit Taste A oder Taste B gelesen
C1 3 C23 C33 110b Der Sektor-Trailer-Block:

  • Schlüssel A wird nie geschrieben und gelesen,
  • Zugriffsbits werden mit Taste A oder Taste B gelesen und nie geschrieben,
  • Schlüssel B wird nie geschrieben und gelesen.
i. Empfohlener Wert für die Zugriffsbits C10 C20 C30 des Sektors 0 (Herstellerblock).

TLV-Blöcke #

Ein TLV-Block besteht aus ein bis drei Feldern:

T (Tag-Feld oder T-Feld) SHALL identifiziert den Typ des TLV-Blocks (siehe Tabelle 9) und MUSS aus einem einzelnen Byte bestehen, das eine Zahl von 00h bis FFh kodiert. Die Tag-Werte 01h, 02h, 04h bis FCh und FFh sind für die zukünftige Verwendung reserviert.

L (Längenfeld oder L-Feld) MUSS die Größe des Wertfelds in Byte angeben. Es hat zwei verschiedene Formate, die aus einem oder drei Bytes bestehen. Das Reader-Gerät SHALL versteht alle Feldformate mit zwei Längen. Abb. 5 zeigt die beiden unterschiedlichen Längenfeldstrukturen. Abhängig vom Wert des Tag-Felds ist das Längenfeld jedoch möglicherweise NICHT vorhanden.

  • Ein-Byte-Format: Das Ein-Byte-Format CODIERT die Länge des Wertfelds zwischen 00h- und FEh-Bytes. Dieses Byte WIRD als Kardinal interpretiert, wenn der Wert zwischen 00h und FEh liegt. Wenn er FFh enthält, wird der Wert als Flag interpretiert, das angibt, dass das Längenfeld aus mehr als einem Byte besteht.
  • Format von drei aufeinanderfolgenden Bytes: Dieses Format CODIERT die Länge des Wertfelds zwischen 00FFh und FFFEh bytes. Es wird angenommen, dass das erste Byte ein Flag ist, das FFh entspricht, was angibt, dass zwei weitere Bytes Länge als Wort interpretiert werden SOLLEN. Dieses Wort IST als Kardinal zu interpretieren, wenn der Wert zwischen 00FFh und FFFEh liegt. Der Wert FFFFh ist für die zukünftige Verwendung reserviert (RFU).

V (Wertefeld oder V-Feld) Wenn das Längenfeld gleich 00h ist oder es kein Längenfeld gibt, darf das Wertfeld NICHT vorhanden sein, d.h. der TLV-Block ist leer. Wenn das Längenfeld vorhanden ist und eine Länge des Wertfelds N größer als Null (N>0) angibt, MUSS das Wertefeld aus N aufeinanderfolgenden Bytes bestehen.

In Tabelle 4 sind die in diesem Dokument angegebenen TLV-Blöcke aufgeführt, die in den folgenden Abschnitten beschrieben werden.

Tabelle 4. DefinierteTLV-Blöcke  

TLV-Blockname Wert des Tag-Felds Kurzbeschreibung
NULL TLV 00h Es kann zum Auffüllen von Speicherbereichen verwendet werden, und das Lesegerät MUSS dies ignorieren
NDEF-Nachrichten-TLV 03h Es enthält die NDEF-Nachricht
Proprietäres TLV FDh Markieren proprietärer Informationen
Terminator TLV Feh Letzter TLV-Block im Datenbereich

Das Reader-Gerät MUSS die TLV-Blöcke in einer bestimmten Reihenfolge innerhalb des Datenbereichs nach den folgenden Regeln schreiben:

  • Die TLV-Blöcke MÜSSEN in der Reihenfolge geschrieben werden, beginnend mit Byte 0 des Blocks 0 des NFC-Sektors (Sektor mit NDEF-Daten) mit der kleinsten Adresse.
  • Ein TLB-Block KANN in zwei oder mehr NFC-Sektoren gespeichert werden.
  • Wenn vorhanden, ist der Terminator TLV der letzte TLV-Block auf dem MIFARE Classic- und MIFARE Plus-Tag.

NULL TLV und Terminator TLV sind die einzigen TLV-Blöcke, die 1 Byte lang sind (z. B. nur aus dem Tag-Feld bestehend, siehe unten).

Lesegeräte MÜSSEN die TLV-Blöcke ignorieren und überspringen, die reservierte Tag-Feldwerte verwenden (siehe oben). Um über einen TLV-Block mit reservierten Tag-Feldwerten zu springen, MUSS das Reader-Gerät das Längenfeld lesen, um die Länge des Wertfelds zu verstehen.

Zukünftige Definitionen von TLV-Blöcken, die nur aus dem Tag-Feld bestehen, sind mit diesem Anwendungshinweis nicht abwärtskompatibel.

NDEF-Nachrichten-TLV #

Mindestens ein NDEF-Nachrichten-TLV MUSS immer im MIFARE Classic- und MIFARE Plus-Tag vorhanden sein. Die NDEF-Nachrichten-TLV speichert die NDEF-Nachricht im Feld Wert. Das Lesegerät MUSS in der Lage sein, die NDEF-Nachrichten-TLV zu lesen und zu verarbeiten, die durch das NDEF-Erkennungsverfahren gefunden wurde (auch als obligatorische NDEF-Nachrichten-TLV oder erste NDEF-Nachrichten-TLV bezeichnet); Jedenfalls können weitere NDEF Message TLV-Blöcke vorhanden sein. Nachfolgend ist die Kodierung der 3 TLV-Felder von NDEF Message TLV dargestellt:

T MUSS gleich 03h sein (siehe Tabelle 4).

L MUSS gleich der Größe der gespeicherten NDEF-Nachricht in Byte sein.

V SOLL die NDEF-Nachricht speichern.

Eine leere NDEF-Nachrichten-TLV MUSS als NDEF-Nachrichten-TLV mit L-Feld gleich 00h und ohne V-Feld definiert werden (d. h. keine NDEF-Nachricht ist im V-Feld vorhanden, siehe [NDEF]).

Eine nicht leere NDEF-Nachrichten-TLV KANN entweder leere oder nicht leere NDEF-Nachrichten enthalten.

Proprietäres TLV #

Die proprietäre TLV enthält proprietäre Informationen. Ein MIFARE Classic- und MIFARE Plus-Tag MUSS null, ein oder mehrere proprietäre TLV enthalten. Das Reader-Gerät ignoriert möglicherweise die in diesem TLV-Block enthaltenen Daten. Nachfolgend ist die Kodierung der 3 TLV-Felder von Proprietary TLV dargestellt:

T MUSS gleich FDh sein (siehe Tabelle 4).

L MUSS gleich der Größe der proprietären Daten im Vale-Feld in Byte sein.

V MUSS alle proprietären Daten enthalten.

NULL TLV #

Der NULL TLV kann zum Auffüllen des Datenbereichs verwendet werden. Ein MIFARE Classic- und MIFARE Plus-Tag KANN null, eins oder mehr NULL-TLV enthalten. Das Lesegerät MUSS diesen TLV-Block ignorieren. NULL TLV besteht aus einem 1-Byte-Tag-Feld. Unten ist die Kodierung des Tag-Feldes der NULL TLV dargestellt:

T MUSS gleich 00h sein (siehe Tabelle 4).

L DARF NICHT anwesend sein.

V darf nicht anwesend sein.

Terminator TLV #

Der Terminator TLV KANN innerhalb des MIFARE Classic- und MIFARE Plus-Tags vorhanden sein, und ein Lesegerät MUSS in der Lage sein, ihn zu lesen/verarbeiten. Der Terminator TLV ist der letzte TLV-Block im Datenspeicherbereich. Terminator TLV MUSS aus einem 1-Byte-Tag-Feld bestehen. Unten ist die Kodierung des Tag-Feldes des Terminator TLV dargestellt:

T MUSS gleich FEh sein (siehe Tabelle 4).

L DARF NICHT anwesend sein.

V darf nicht anwesend sein.