Копирование карт доступа

[вернуться в раздел СТАТЬИ]

MIFARE или Em Marin
Выбираем карту доступа для СКД

О.Быков
к.т.н., компания NCS

Журнал «ПЛАС», №10 (174) 2011
www.plusworld.ru

1. Обеспечивает ли СКД сохранность материальных ценностей

«Система контроля и управления доступом (СКД) — совокупность аппаратных и программных средств, направленных на ограничение и регистрацию доступа людей, транспорта и других объектов в (из) помещения, здания, зоны и территории.»

Из этого определения следует, что СКД выполняет две задачи:
— ограничение доступа;
— регистрация доступа.

Ограничение доступа означает предотвращение проникновения нежелательных лиц на охраняемую территорию и помещения.
Регистрация доступа означает распознавание того лица, которое получает доступ и фиксацию времени предоставления доступа.

Выбирать тип карты доступа следует исходя из приоритета той или иной функции СКД.
Если основная задача – регистрация, — то достаточно карты Em Marin.
Если основная задача – ограничение, — то карты типа Em Marin будет недостаточно (не только Em Marin, но и другие проксимити карты – HID, Indala, работающие на частоте 125 КГц) . Почему, — рассмотрим далее.

Ограничение доступа подразумевает, что СКД будет обеспечивать:
— защиту объекта от несанкционированного доступа;
— сохранность материальных и интеллектуальных ценностей.

Обеспечивает это система доступа с помощью своих компонентов или частей, основными из которых являются:

  • Контроллер
  • Считыватель
  • Карта доступа
  • Программное обеспечение

Надежность любой системы (и СКД в частности) определяется надежностью ее самого слабого элемента. Поэтому, все перечисленные выше компоненты СКД должны обладать равной надежностью и в равной степени обеспечивать безопасность объекта. Если какой-либо один компонент значительно ненадежнее остальных, то и надежность всей системы будет на уровне этого слабого компонента.

Таким ненадежным элементом являются карты Em Marin (наиболее популярная версия EM4100 и TK4100).
И, если в качестве карты доступа выбрана карта Em Marin, то надо понимать, что такая карта не защищена от копирования, и какими бы надежными ни были контроллеры и программное обеспечение, — защищенность всей СКД будет на низком уровне.

Em Marin – это тот ненадежный компонент, который и будет определять низкий уровень защищенности системы доступа.

2. Em Marin – слабое звено

В большинстве случаев под картой Em Marin понимается версия EM4100 или TK4100, имеющая память 64 бит, доступную только для чтения.

Память карты Em Marin (EM4100, TK4100) имеет объем 64 бита, разделенных на 5 групп данных. 9 бит отведены под заготовок, всегда “1”. Имеется 10 бит четности по рядам (P0-P9) и 4 бита четности по колонкам (PC0-PC3).

Поле данных составляет 40 бит (D00-D93), один стоповый бит (S0),- логический 0.
Биты D00 – D53 определяют фасилити карты (Facility).
Биты D60 – D93 определяют номер карты (два байта).
При использовании интерфейса Wiegand-26 с карты Em Marin фасилити считывается как биты
D40 – D53 (один байт), номер считывается как биты D60 – D93.
Всего через Wiegand-26 считывается с карты и передается в контроллер 3 байта данных (24 бита).

Память карты Em Marin открыта для чтения всегда, и нет механизма, чтобы закрыть эту память от несанкционированного считывания. Прочитав данные, не составляет труда изготовить дубликат карты. Для изготовления дубликатов карт Em Marin в настоящее время имеется большое разнообразие технических средств. Сделать такой дубликат можно даже в уличной мастерской, где предлагают ключи для домофона.

Но есть и более изощренные способы копирования карт доступа. Существуют компактные портативные считыватели, позволяющие прочитать карту Em Marin на некотором расстоянии. Злоумышленник, имеющий в кармане такой считыватель, легко прочитает карту, находясь недалеко от владельца карты (в кабинете, на улице, и т.п.), а потом изготовит ее дубликат.

3. MIFARE — надежная карта доступа

Для того, чтобы обоснованно ожидать от СКД обеспечения сохранности материальных ценностей, карты доступа должны быть на таком же высоком уровне надежности, как и остальные компоненты системы.
Карты, которые невозможно или технически сложно копировать.
И такие карты есть. Они широко известны. И стоят они совсем недорого.

Наиболее подходящим вариантом такой “защищенной” карты является карта стандарта MIFARE.

Сравним характеристики карт стандарта MIFARE и карт Em Marin (EM-4100).

Таким образом, главное отличие MIFARE – это наличие памяти для многократной чтения-записи и криптозащита этой памяти по операциям чтения и записи. Подделать такую карту практически невозможно.

Карта MIFARE может быть таким же равным по надежности звеном, как и остальные компоненты СКД.

4. Типичные ошибки при использовании карт доступа MIFARE

Ошибка 1. Считывание серийного номера карты

Но надежность карты доступа MIFARE, соизмеримая с надежностью других компонентов СКД, не появляется автоматически. Использование карт MIFARE в СКД требует более тщательной подготовки со стороны заказчика СКД. Самое главное, — нельзя для идентификации работников считывать серийный номер MIFARE (как это принято в случае Em Marin). Вернемся к сравнительной таблице вверху. В чем карты MIFARE похожи на карты Em Marin. В наличии серийного номера, всегда открытого для чтения. И только. По всем остальным параметрам – отличие. Поэтому, если в СКД для идентификации считывается серийный номер MIFARE, — это означает работу на уровне Em Marin, без защиты карты от копирования.

Чтобы правильно использовать карты MIFARE надо считывать не серийный номер, а данные из некоторого блока памяти карты (secure sector), доступ к которому защищен ключами.

Память карты MIFARE состоит из 16 секторов, каждый из которых поделен на 4 блока.

Рис.1 Структура памяти Miare 1K
Общая память, объемом 1 КБ, разделена на 16 секторов.

Возможно ли подделать/скопировать карточку?

Каждый сектор разбит на 4 блока.

Рис. 2. Структура сектора 0.

В блоке 0 хранится серийный номер и данные завода-изготовителя чипа. Блок 0 доступен только для чтения. Блоки 1 и 2 доступны для чтения-записи.. Блок 3 хранит ключи доступа, создаваемые пользователем. Заводские значения ключей A и B: FFFFFFFFFF. Заводское значение Условия Доступа (Access Condition): . Пользователь может менять эти значения по своему усмотрению.

Серийный номер формируется на заводе-изготовителе чипа MIFARE и записывается в блок 0 сектора 0. Серийный номер всегда открыт для чтения и не может быть изменен. Закрыть серийный номер от считывания невозможно. Идентифицировать персонал по серийному номеру – значит не использовать ничего из того, что заложено в карту MIFARE.

Ошибка 2. Подключения считывателя по Wiegand-26.

Ситуация, когда с карты MIFARE считывается серийный номер, а сам считыватель подключается к контроллеру через интерфейс Wiegand-26, — можно назвать типичной. Во многих системах применяется именно Wiegand-26. Но использование интерфейса Wiegand-26 для чтения серийного номера MIFARE 1K — это ошибка, которая приводит к появлению в системе дубликатов номеров карт.

Wiegand — простой проводной интерфейс связи между устройством чтения карты доступа и контроллером, широко применяемый в системах контроля доступа (СКД).

Изначально интерфейс применялся в считывателях магнитных карт и был максимально оптимизирован под простейшие считыватели. В сущности это был простой выход усилителя чтения. Из-за распространенности магнитных карт этот интерфейс стал стандартным де-факто. Позже магнитные карты были вытеснены бесконтактными картами, однако интерфейс был сохранен неизменным.

Существуют следующие разновидности интерфейса Wiegand:

Wiegand-26.
Wiegand-33.
Wiegand-34.
Wiegand-37.
Wiegand-40.
Wiegand-42…

Wiegand-26 – это самый распространенный интерфейс в СКД.

Состоит из 24 бит кода и 2 бит контроля на четность.

24 бита, которые передаются по Wiegand-26, — это 3 байта. Длина серийного номера MIFARE 1K – 4 байта. Легко заметить, что полностью серийный номер карты по интерфейсу Wirgand-26 передать нельзя. Если серийные номера идут подряд, то по Weigand-26 будет передаваться в контроллер одна и та же часть серийного номера карты, а переменная часть номера считываться не будет.

В результате в системе появятся одинаковые номера карт.

Для того, чтобы в системе на появлялись дубликаты номеров карт, серийный номер MIFARE 1K следует считывать полностью, т.е., все 4 байта, а для этого надо использовать интерфейс Wiegand-42.

Конечно, более правильно вообще не считывать серийный номер карты (а обращаться к данным в защищенном секторе). Вышеприведенная ситуация описана как типичная и самая распространенная ошибка при переходе на карты MIFARE.

5. Как сохранить Wiegand-26, избежать дублирования номеров и защитить карту от подделки

Необходимость сохранить интерфейс Wiegand-26 диктуется большой распространенностью контроллеров, применяемых в системах контроля доступа, в которых реализован именно Wiegand-26. При переходе на карты MIFARE вполне естественно попытаться использовать уже имеющиеся контроллеры.

Имеющиеся контроллеры с Wiуgand-26 использовать можно. Но, для того, чтобы в СКД не появлялись дубликаты номеров карт, вместо серийного номера следует считывать данные из защищенного блока MIFARE 1K (secure sector). Рассмотрим структуру остальных 15 секторов MIFARE (кроме нулевого сектора):

Рис. 3. Структура секторов 1-15. Блоки 0, 1 и 2 доступны для записи-чтения. Блок 3 хранит ключи доступа, создаваемые пользователем. Каждый сектор может быть защищен своим ключом. Можно защищать отдельно операции чтения и записи. Можно защитить как чтение, так и запись.

Для того, чтобы организовать считывание данных из защищенного блока, заказчик СКД должен провести предэмиссию карт. На этапе предэмиссии карт в выбранный блок карты MIFARE записываются уникальные номера, и, самое главное, чтение данных из этого блока защищается ключами (как это показано на Рис.4).

В считыватель, также, записывается соответствующий ключ, который предъявляется для чтения выбранного блока.

Рис. 4. В блок 0 сектора 1 записан номер карты, используемый в СКД для идентификации держателя карты. Ключ A изменен. Условие доступа (Access Condition) изменено на защиту сектора от чтения-записи. Данное значение Условия Доступа означает, что для чтения блока предъявляется только ключ A (ключ B не используется). Прочитать карту можно только, зная секретный ключ пользователя. Записать в блок 0 больше ничего нельзя.

В результате получается карта, которую невозможно прочитать вне данной СКД, и которую невозможно подделать. Считыватели, которые читают данные из защищенного блока, подключаются к контроллеру по интерфейсу Wiegand-26 (имеется, также, версия интерфейса USB), что и позволяет сохранить имеющиеся контроллеры, а заменить только считыватели. Такие считыватели (читающие данные из защищенного блока) широко представлены на рынке.

Примеры

Пример 1. Переход от Em Marin к MIFARE

При использовании карт Em Marin через Wiegand-26 передается номер карты как фасилити код карты и номер карты:

Вместо имеющихся считывателей карт Em Marin подключаются считыватели MIFARE (например, типа “MF Reader” от фирмы Prox) с интерфейсом Wiegand-26, которые читают данные из защищенного блока.
В результате в системе сохраняется принятая нумерация карт, сохраняются контроллеры, но карта доступа становится защищенной от подделки и несанкционированного считывания.

Пример 2. Решение проблемы дубликатов номеров карт.

Напомним, что дубликаты номеров карт появляются, когда считыватель MIFARE подключается xерез Wiegand-26, а с карты считывается серийный номер (UID).

Например, серийный номер выглядит, как F0A1D9D5, а в контроллер передается только часть этого номера в виде: ХХХХХХ.

На этапе предэмисси карт в блок 0 сектора 0 (или другой блок по выбору пользователя) записывается та часть номера, которая ранее попадала в контроллер.

Вместо имеющихся считывателей карт MIFARE (читавших UID) подключаются считыватели MIFARE (например, типа “MF Reader” от фирмы Prox) с интерфейсом Wiegand-26, которые читают данные из защищенного блока.

В результате в системе сохраняется принятая нумерация карт, сохраняются контроллеры, но карта доступа становится защищенной от подделки и несанкционированного считывания.

[вернуться в раздел СТАТЬИ]

Проект 28: Считыватель RFID на примере RC522. Принцип работы, подключение

В этом эксперименте мы покажем, как плата Arduino получает доступ к данным RFID-карт и брелоков Mifare с помощью RFID-считывателя RC522C.

Необходимые компоненты:

• контроллер Arduino UNO R3;
• плата для прототипирования;
• RFID-считыватель RC522;
• брелок;
• карта;
• провода папа-папа.

Радиочастотная идентификация (RFID) – это технология автоматической бесконтактной идентификации объектов при помощи радиочастотного канала связи. Базовая система RFID состоит из:

• радиочастотной метки;
• считывателя информации (ридера);
• компьютера для обработки информации.

Идентификация объектов производится по уникальному цифровому коду, который считывается из памяти электронной метки, прикрепляемой к объекту идентификации. Считыватель содержит в своем составе передатчик и антенну, посредством которых излучается электромагнитное поле определенной частоты. Попавшие в зону действия считывающего поля радиочастотные метки «отвечают» собственным сигналом, содержащим информацию (идентификационный номер товара, пользовательские данные и т. д.). Сигнал улавливается антенной считывателя, информация расшифровывается и передается в компьютер для обработки. Подавляющее большинство современных систем контроля доступа (СКД) использует в качестве средств доступа идентификаторы, работающие на частоте 125 кГц. Это проксимити-карты доступа (только чтение), самыми распространенными являются карты EM-Marin, а также HID, Indala. Карты этого стандарта являются удобным средством открывания дверей и турникетов. Но не более. Эти карты не обладают никакой защищенностью, легко копируются и подделываются и, соответственно, ничего не дают для защиты объекта от несанкционированного проникновения.

Настоящую защиту от копирования и подделки обеспечивают такие идентификаторы, в чипах которых реализована криптографическая защита. Это бесконтактные смарт-карты, работающие на частоте 13,56 МГц, наиболее распространенными из них являются карты Mifare®.

Клонирование (копирование) карт доступа

В картах этих стандартов криптозащита организована на высоком уровне, и подделка таких карт практически невозможна.

Модуль RC522 – RFID-модуль 13,56 МГц с SPI-интерфейсом.

В комплекте к модулю идут 2 RFID-метки – в виде карты и брелока.

Основные характеристики:

• основан на микросхеме MFRC522;
• напряжение питания: 3,3 В;
• потребляемый ток: 13–26 мА;
• рабочая частота: 13,56 MГц;
• дальность считывания: 0~60 мм;
• интерфейс: SPI, максимальная скорость передачи 10 МБит/с;
• размер: 40×60 мм;
• чтение и запись RFID-меток.

Схема подключения модуля к плате Arduino показана на рис. 28.1.

Рис. 28.1. Схема подключения модуля RFID-считывателя RC522C к Arduino

Напишем скетч считывания с карты и вывода в последовательный порт Arduino UID (уникальный идентификационный номер) RFID-метки (карты или брелока). При написании скетча будем использовать библиотеку MFRC522 (https://github.com/miguelbalboa/rfid). Содержимое скетча показано в листинге 28.1.

// Подключение библиотек #include <SPI.h> #include <MFRC522.h> // константы подключения контактов SS и RST #define RST_PIN 9 #define SS_PIN 10 // Инициализация MFRC522 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. void setup() { Serial.begin(9600); // инициализация последовательного порта SPI.begin(); // инициализация SPI mfrc522.PCD_Init(); // инициализация MFRC522 } void loop() { if ( ! mfrc522.PICC_IsNewCardPresent()) return; // чтение карты if ( ! mfrc522.PICC_ReadCardSerial()) return; // показать результат чтения UID и тип метки Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); delay(2000); } // Вывод результата чтения данных в HEX-виде void dump_byte_array(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } }
Порядок подключения:

1. Подключаем модули RFID-считывателя RC522 к плате Arduino по схеме на рис. 28.1.
2. Загружаем в плату Arduino скетч из листинга 28.1. Открываем монитор последовательного порта.
3. Подносим метку (карту или брелок) к считывателю и видим вывод в последовательный порт данных метки UID и тип (рис. 28.2).

Рис. 28.2. Вывод в последовательный порт информации о метках

Метки Mirafe позволяют записывать на них информацию. В следующем скетче мы организуем на карте счетчик, который будет инкрементироваться при поднесении карты к считывателю. В последовательный порт будем выводить показания счетчика. Содержимое скетча показано в листинге 28.2.

// Подключение библиотек #include <SPI.h> #include <MFRC522.h> // константы подключения контактов SS и RST #define RST_PIN 9 #define SS_PIN 10 // Инициализация MFRC522 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. MFRC522:MIFARE_Key key; byte sector = 1; byte blockAddr = 4; byte dataBlock[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; byte trailerBlock = 7; byte status; byte buffer[18]; byte size = sizeof(buffer); void setup() { Serial.begin(9600); // инициализация последовательного порта SPI.begin(); // инициализация SPI mfrc522.PCD_Init(); // инициализация MFRC522 // Значение ключа (A или B) – FFFFFFFFFFFFh значение с завода for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; } void loop() { if ( !

mfrc522.PICC_IsNewCardPresent()) return; // чтение карты if ( ! mfrc522.PICC_ReadCardSerial()) return; // показать результат чтения UID и тип метки Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); // Чтение данных из блока 4 Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" …")); Serial.print(F("Data for count ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 2); Serial.println(); Serial.println(); for (byte i = 0; i < 16; i++) // запись в buffer[] dataBlock[i]=buffer[i]; // получение байт счетчика (0 и 1) int count1=(buffer[0]<<8)+buffer[1]; Serial.print("count1=");Serial.println(count1); count1=count1+1; // инкремент счетчика dataBlock[0]=highByte(count1); dataBlock[1]=lowByte(count1); // Аутентификация key B Serial.println(F("Authenticating again using key B…")); // Запись данных в блок Serial.print(F("Writing data into block ")); Serial.print(blockAddr); Serial.println(F(" …")); dump_byte_array(dataBlock, 2); Serial.println(); } // Вывод результата чтения данных в HEX-виде void dump_byte_array(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } }
Порядок подключения:

Рис. 28.3. Вывод в последовательный порт информации о счетчике на метках
 

Листинги программскачать

.

Добавить комментарий

Закрыть меню