Методы сопоставления данных NDEF памяти MIFARE Classic и MIFARE Plus IC
View Categories

Методы сопоставления данных NDEF памяти MIFARE Classic и MIFARE Plus IC

Каталог приложений MIFARE #

Методы сопоставления данных памяти NDEF MIFARE Classic и MIFARE Plus IC используют структуру каталогов приложений MIFARE (MAD).

Каталог приложений MIFARE (MAD) определяет, к какому приложению принадлежит информация, хранящаяся в каждом секторе памяти.

Были указаны два каталога приложений MIFARE:

      1. Каталог приложений MIFARE 1 (MAD1): MAD1 МОЖЕТ использоваться в любом продукте, совместимом с MIFARE Classic. MAD1 расположен в секторе MAD (сектор 00h), В случае, если MAD1 используется на продуктах с объемом памяти более 1 Кбайт, только 1 КБ памяти может использоваться и адресуться MAD1. Поэтому оставшаяся память не используется для хранения NDEF и остается свободной.
      2. Каталог приложений MIFARE 2 (MAD2): MAD1 МОЖЕТ использоваться в любом продукте, совместимом с MIFARE Classic, с объемом памяти более 1 Кбайт. MAD2 неприменим для продуктов с объемом памяти меньше или равным 1 Кбайт. MAD2 расположен в секторах MAD (сектор 00h и 10h)

С каждым приложением MAD связывает уникальный идентификатор приложения (AID). Идентификаторы приложений (AID) хранятся внутри сектора (секторов) MAD 00h.

AID имеет длину два байта и разделен на 2 поля по одному байту каждое:

  1. код кластера функций (1 байт), определяющий кластер, к которому принадлежит приложение, и
  2. код приложения (1 байт), идентифицирующий приложение внутри кластера. Для получения дополнительной информации о MAD1 и MAD2.

Байт общего назначения (GPB) сектора MAD ДОЛЖЕН быть установлен с битом DA, равным 1b (бит DA — это mad-доступный бит GPB).

Все неиспользуемые в настоящее время сектора ДОЛЖНЫ быть защищены от записи секретными ключами, определенными издателем тегов, чтобы предотвратить непреднамеренное переопределение условий доступа и ключей. РЕКОМЕНДУЕТСЯ использовать разные клавиши для всех свободных секторов. Это позволяет в будущем передавать некоторые сектора новым поставщикам услуг без необходимости высвобождения всех свободных секторов.

Доступ к сектору MAD #

Секторы памяти, в которых хранятся MAD1 и MAD2 (см. [MAD]), защищены с помощью ключей A и B. [MAD] По секторам памяти выделяют:

        • MAD1: сектор MAD составляет 00h (сектор 0), и
        • MAD2: секторы MAD — 00h и 10h (сектор 0 и сектор 16).

Любому лицу ДОЛЖНО быть разрешено читать разделы MAD. Это достигается с помощью открытого ключа A, описанного в таблице 1 (см. также [MAD]).

Таблица 1. Открытый ключ Значение сектора (секторов) MAD

Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5
А0ч А1ч А2ч А3ч А4ч А5ч

Биты доступа для секторов MAD задаются следующим образом:

        • как описано в таблице 2, если сектору MAD предоставлен доступ на чтение и запись, или
        • как описано в таблице 3, если сектору MAD предоставлен доступ только для чтения (см. также [MF1K, MF4K, MFPLUS]).

В этом контексте термин «предоставленный доступ на чтение и запись» означает, что для секторов MAD, которые ранее были аутентифицированы с помощью секретного ключа B, можно считывать и записывать все блоки секторов, кроме блока секторного прицепа (см. Таблицу 2 для получения более подробной информации).

Вместо этого термин «предоставленный доступ только для чтения» означает, что для секторов MAD, которые ранее были аутентифицированы с помощью открытого ключа A из таблицы 1 или секретного ключа B, можно считывать только все секторные блоки, кроме блока секторного прицепа (см. Таблицу 5 для получения более подробной информации).

С помощью клавиши A всегда можно считывать только блоки сектора MAD. Секторные трейлеры имеют определенную конфигурацию доступа, когда предоставляется доступ на чтение/запись или доступ только для чтения (см. таблицу 2 и таблицу 3).

Секторы MAD ДОЛЖНЫ быть защищены от записи с помощью секретного ключа B (например, определенного издателем тега) или установки тегов MIFARE Classic и MIFARE Plus в качестве доступных только для чтения с использованием битов доступа.

Таблица 2. Настройка битов доступа для сектора MAD с предоставленным доступом на чтение и запись

Настройка битов доступа для сектора 0 MAD1 или MAD2 и для сектора 16 MAD2
Биты доступа Значения Замечания
С10 С20 С30 100би Блок 0 считывается с помощью клавиши A или B и записывается клавишей B
С11 С21 С31 100б Блок 1 считывается с помощью клавиши A или клавиши B и записывается клавишей B
С12 С22 С32 100б Блок 2 считывается с помощью клавиши A или B и записывается клавишей B
С13 С23 С33 011б Сектор прицепного блока:

  • Ключ A записывается ключом B и никогда не читается,
  • Биты доступа считываются с помощью клавиши A или B и записываются клавишей B,
  • Ключ B записывается ключом B и никогда не читается.
i. Рекомендуемое значение для битов доступа C10 C20 C3 0 сектора 0 (блок производителя).

Таблица 3. Настройка битов доступа для сектора MAD с предоставлением доступа только для чтения

Настройка битов доступа для сектора 0 MAD1 или MAD2 и для сектора 16 MAD2
Биты доступа Значения Замечания
С10 С20 С30 010б Блок 0 считывается с помощью клавиши A или клавиши B
С11 С21 С31 010б Блок 1 считывается с помощью клавиши A или B
С12 С22 С32 010б Блок 2 считывается с помощью клавиши A или клавиши B
С13 С23 С33 110б Сектор прицепного блока:

  • Ключ А никогда не пишется и не читается,
  • Биты доступа считываются с помощью клавиши A или B и никогда не записываются,
  • Ключ B никогда не пишется и не читается.
i. Рекомендуемое значение для битов доступа C10 C20 C3 0 сектора 0 (блок производителя).

Блоки TLV #

Блок TLV состоит из одного-трех полей:

T (поле тега, или поле T) ДОЛЖНО определять тип блока TLV (см. Таблицу 9) и ДОЛЖНО состоять из одного байта, кодирующего число от 00h до FFh. Значения тегов от 01h, 02h, 04h до FCh и FFh зарезервированы для будущего использования.

L (поле длины или поле L) ДОЛЖНО указывать размер поля значения в байтах. Он имеет два разных формата, состоящих из одного или трех байтов. Считывающее устройство ДОЛЖНО понимать все двухдлинные форматы полей. На рисунке 5 показаны две различные по длине полевые структуры. Однако, в зависимости от значения поля тега, поле длины МОЖЕТ отсутствовать.

  • Однобайтовый формат: однобайтовый формат ДОЛЖЕН кодировать длину поля значения между 00h и FEh байтами. Этот байт ДОЛЖЕН интерпретироваться как кардинальный, если значение находится между 00h и FEh. Если он содержит FFh, значение ДОЛЖНО интерпретироваться как флаг, указывающий, что поле длины состоит из более чем одного байта.
  • Формат трех последовательных байтов: Этот формат ДОЛЖЕН кодировать длину поля значения между байтами 00FFh и FFFEh. Предполагается, что первый байт является флагом, равным FFh, указывающим, что длина еще двух байтов ДОЛЖНА интерпретироваться как слово. Это слово ДОЛЖНО толковаться как кардинальное, если значение находится между 00FFh и FFFEh. Значение FFFFh зарезервировано для будущего использования (RFU).

V (поле значения, или поле V) Если поле длины равно 00h или нет поля длины, поля значения НЕ ДОЛЖНО быть, т.е. блок TLV пуст. Если есть поле длины и указывает длину поля значений N больше нуля (N>0), то поле значения SHALL состоит из N последовательных байтов.

В таблице 4 перечислены блоки TLV, указанные в этом документе, которые описаны в следующих разделах.

Таблица 4. Определенныеблоки TLV  

Имя блока TLV Значение поля тега Краткое описание
NULL TLV 00ч Он может быть использован для заполнения областей памяти, и считывающее устройство ДОЛЖНО игнорировать это
Сообщение NDEF TLV 03ч Он содержит сообщение NDEF
Проприетарный TLV ФДХ Пометить конфиденциальную информацию
Терминатор TLV ФЭх Последний блок TLV в области данных

Считывающее устройство ДОЛЖНО записывать блоки TLV в определенном порядке внутри области данных в соответствии с приведенными ниже правилами:

  • Блоки TLV ДОЛЖНЫ быть записаны в порядке, начиная с байта 0 блока 0 сектора NFC (сектора, содержащего данные NDEF) с наименьшим адресом.
  • Блок TLB МОЖЕТ запоминаться в двух или более секторах NFC.
  • При наличии Терминатор TLV является последним блоком TLV в тегах MIFARE Classic и MIFARE Plus.

NULL TLV и Terminator TLV являются единственными блоками TLV длиной 1 байт (например, состоят только из поля Tag, см. Ниже).

Считывающие устройства ДОЛЖНЫ игнорировать и перепрыгивать через те блоки TLV, которые используют зарезервированные значения полей тегов (см. Выше). Чтобы перейти через блок TLV с зарезервированными значениями полей тегов, считывающее устройство ДОЛЖНО считывать поле длины, чтобы понять длину поля значения.

Будущие определения блоков TLV, состоящих только из поля тега, не являются обратно совместимыми с этим примечанием по применению.

Сообщение NDEF TLV #

По крайней мере, одно сообщение NDEF TLV ДОЛЖНО всегда присутствовать внутри тега MIFARE Classic и MIFARE Plus. Сообщение NDEF TLV хранит сообщение NDEF в поле Значение. Считывающее устройство ДОЛЖНО быть способно считывать и обрабатывать сообщение NDEF TLV, найденное в соответствии с процедурой обнаружения NDEF (также называемой обязательным сообщением NDEF TLV или первым сообщением NDEF TLV); В любом случае могут присутствовать дополнительные блоки TLV сообщения NDEF. Ниже показана кодировка 3 полей TLV сообщения NDEF:

T должен быть равен 03h (см. таблицу 4).

L ДОЛЖЕН быть равен размеру в байтах сохраненного сообщения NDEF.

V ДОЛЖЕН хранить Сообщение NDEF.

Пустое сообщение NDEF TLV должно быть определено как сообщение NDEF TLV с полем L, равным 00h, и без поля V (т.е. в поле V нет сообщения NDEF, см. [NDEF]).

Непустое сообщение NDEF TLV МОЖЕТ содержать пустые или непустые сообщения NDEF.

Проприетарный TLV #

Проприетарный TLV содержит конфиденциальную информацию. Теги MIFARE Classic и MIFARE Plus ДОЛЖНЫ содержать ноль, один или несколько проприетарных TLV. Устройство Reader может игнорировать данные, содержащиеся в этом блоке TLV. Ниже приведена кодировка 3 полей TLV Проприетарного TLV:

T должен быть равен FDh (см. таблицу 4).

L ДОЛЖЕН быть равен размеру в байтах проприетарных данных в поле Vale.

V ДОЛЖНЫ содержать любые данные, являющиеся собственностью компании.

NULL TLV #

NULL TLV МОЖЕТ использоваться для заполнения области данных. Тег MIFARE Classic и MIFARE Plus МОЖЕТ содержать ноль, один или более NULL TLV. Считывающее устройство ДОЛЖНО игнорировать этот блок TLV. NULL TLV ДОЛЖЕН состоять из 1-байтового поля тега. Ниже показана кодировка поля тега NULL TLV:

T должен быть равен 00h (см. таблицу 4).

Л НЕ ДОЛЖНЫ присутствовать.

V НЕ ДОЛЖНО присутствовать.

Терминатор TLV #

Терминатор TLV МОЖЕТ присутствовать внутри метки MIFARE Classic и MIFARE Plus, а считывающее устройство ДОЛЖНО быть способно считывать/обрабатывать его. Terminator TLV является последним блоком TLV в области памяти данных. Терминатор TLV ДОЛЖЕН состоять из 1-байтового поля тега. Ниже показана кодировка поля тега Терминатора TLV:

T ДОЛЖЕН быть равен FEh (см. таблицу 4).

Л НЕ ДОЛЖНЫ присутствовать.

V НЕ ДОЛЖНО присутствовать.