Каталог приложений MIFARE #
Методы сопоставления данных памяти NDEF MIFARE Classic и MIFARE Plus IC используют структуру каталогов приложений MIFARE (MAD).
Каталог приложений MIFARE (MAD) определяет, к какому приложению принадлежит информация, хранящаяся в каждом секторе памяти.
Были указаны два каталога приложений MIFARE:
-
-
- Каталог приложений MIFARE 1 (MAD1): MAD1 МОЖЕТ использоваться в любом продукте, совместимом с MIFARE Classic. MAD1 расположен в секторе MAD (сектор 00h), В случае, если MAD1 используется на продуктах с объемом памяти более 1 Кбайт, только 1 КБ памяти может использоваться и адресуться MAD1. Поэтому оставшаяся память не используется для хранения NDEF и остается свободной.
- Каталог приложений MIFARE 2 (MAD2): MAD1 МОЖЕТ использоваться в любом продукте, совместимом с MIFARE Classic, с объемом памяти более 1 Кбайт. MAD2 неприменим для продуктов с объемом памяти меньше или равным 1 Кбайт. MAD2 расположен в секторах MAD (сектор 00h и 10h)
-
С каждым приложением MAD связывает уникальный идентификатор приложения (AID). Идентификаторы приложений (AID) хранятся внутри сектора (секторов) MAD 00h.
AID имеет длину два байта и разделен на 2 поля по одному байту каждое:
- код кластера функций (1 байт), определяющий кластер, к которому принадлежит приложение, и
- код приложения (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 НЕ ДОЛЖНО присутствовать.