MIFARE
MIFARE — это серия микросхем (IC), используемых в бесконтактных смарт-картах и карточках доступа. Её разработала компания NXP Semiconductors. Карты MIFARE соответствуют стандарту ISO/IEC 14443A и используют методы шифрования, например алгоритм Crypto-1. Самое распространённое семейство — MIFARE Classic, у него есть подтип MIFARE Classic EV1.
Структура памяти
Карта MIFARE Classic 1K разделена на 16 секторов, и каждый сектор содержит 4 блока. Каждый блок может хранить до 16 байт, поэтому общий объём памяти составляет 1 КБ.
16 секторов × 4 блока/сектор × 16 байт/блок = 1024 байта = 1 КБ
Трейлер сектора
Последний блок каждого сектора, известный как «трейлер», хранит два секретных ключа и программируемые условия доступа для блоков этого сектора. У каждого сектора есть собственная пара ключей (KeyA и KeyB), что позволяет поддерживать несколько приложений с иерархией ключей.
Note
Карта MIFARE Classic 1K по умолчанию настроена на ключ FF FF FF FF FF FF для KeyA и KeyB. При чтении блока трейлера значение KeyA возвращается как нулевое (00 00 00 00 00 00), а KeyB возвращается как есть.
По умолчанию байты управления доступом (6, 7 и 8 трейлера) установлены в FF 07 80h. Подробнее см. 10-ю страницу даташита. А 9-й байт можно использовать для хранения данных.
| Номер байта | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
| Описание | KEY A | Биты доступа | Пользовательские данные | KEY B | ||||||||||||
| Значения по умолчанию | FF | FF | FF | FF | FF | FF | FF | 07 | 80 | 69 | FF | FF | FF | FF | FF | FF |
Блок производителя
Первый блок (блок 0) первого сектора (сектор 0) содержит данные производителя микросхемы, включая UID. Этот блок защищён от записи.
Блок данных
У каждого сектора есть блок трейлера, поэтому в каждом секторе для хранения данных можно использовать только 3 блока. Однако в первом секторе доступно только 2 блока, потому что первый блок хранит данные производителя.
Чтобы читать или записывать данные, сначала нужно пройти аутентификацию с помощью KeyA или KeyB этого сектора.
Блоки данных можно разделить на две категории по битам доступа (о них расскажем позже):
- блок чтения/записи: обычные блоки данных, которые позволяют выполнять базовые операции чтения и записи;
- блок значения (value block): такие блоки подходят для приложений вроде электронных кошельков, где их обычно используют для хранения числовых значений, например баланса счёта. Поэтому можно выполнять инкремент (например, добавить 10 к балансу) или декремент (например, списать 5 за покупку).
