Статьи рынка безопасности

События

  • Конференция 21/09/2022

    VIDEOMAXМосква, КЦ “Технополис”

Карты Mifare® и СКУД

  • 18.09.2014
  • 4810

Леонид Стасенко
группа компаний «Релвест»

Статья опубликована на сайте "Daily.Sec.Ru"

Эта статья была написана несколько лет назад, однако изложенный в ней материал не только не потерял, но скорее приобрел актуальность, поскольку самые популярные из бесконтактных смарт – карт Mifare® от компании NXP (ранее Philips Semiconductors) наконец-то начали завоевывать и рынок систем безопасности. Надеемся, что немного переработанный материал статьи поможет системным интеграторам и разработчикам шире использовать те огромные возможности, которые скрыты в этом маленьком устройстве.

Еще раз об истории

Бесконтактные смарт – карты Mifare® были анонсированы в 1994 году, а уже в 1996 году в Сеуле был реализован первый масштабный проект на этих картах. Это была карта с объемом памяти в 1 килобайт, что для того времени было большим технологическим достижением. Технология оказалась настолько интересной и востребованной, что уже через несколько лет после внедрения первого проекта общий объем произведенных карт Mifare® 1К приблизился к полумиллиарду, а в 2011 году был исчерпан резерв 4-х байтовых серийных номеров карт, что означает преодоление барьера в 232, то есть 4294967296 (более четырех миллиардов). Более новые модификации карт уже имеют 7-ми байтовый серийный номер, что обеспечивает уникальность серийных номеров карт в количестве 256, или 72057594037927936 — не возьмусь даже произнести такую цифру.

Такой практический успех стимулировал расширение семейства карт Mifare®: к 2000-му году появились модификации Mifare® Pro и ProX, в 2001 году Philips анонсировал «облегченную» версию бумажной карты Mifare® UltraLight, а еще годом позже - Mifare® Standard 4K с объемом памяти 4 килобайта. Сегодня к этому списку можно добавить Mifare® DesFire, а также новые версии самых популярных карт Standard и UltraLight - Mifare® Plus и Mifare® UltraLight С с улучшенной криптографией, но совместимые со своими предшественниками.

Успех технологии Mifare® объясняется не только уникальными техническими характеристиками карт, но и грамотной стратегией производителя – NXP сделала технологию открытой платформой, в рамках которой каждому из участников любого проекта отводится своя роль, позволяющая получить свой кусочек от этого «вкусного пирога».

И сегодня область применения карт Mifare® Standard очень широка – это, в первую очередь, общественный транспорт, где карта используется как средство оплаты, различного рода системы социальной защиты, системы лояльности, локальные платежные системы (например, оплата за услуги сети бензозаправочных станций). Сравнительно широко начали применяться эти карты и в системах безопасности. Об одном из таких применений мы расскажем несколько ниже.

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

Именно «ветерану» - картам семейства Mifare® Standard и посвящен остальной материал статьи.

Одна карта – много приложений

Мультиаппликационность – одна из «изюминок» карт. Смысл ее в том, что карта может быть поделена между разными приложениями, созданными разными компаниями – интеграторами, даже не знающими о существовании друг друга. Это свойство базируется на секторной структуре карт. Каждое приложение может использовать свои сектора, и в пределе на одной карте с объемом памяти в 1К может размещаться до 16 приложений, а на карте 4К – 40 приложений. Такой непропорциональный рост объясняется тем, что старшая половина памяти карты 4К разделена на сектора большего объема (по 256 байт в верхней половине против 32-х байт в нижней). Зато требовательным к памяти приложениям становится достаточно одного сектора вместо 3-х ... 4-х секторов малого объема.

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

Для примера в таблице 1 приведена информация о распределении памяти карты Mifare® 1К в Московских проектах.

Таблица 1

Сектор

Приложение

Доступ на чтение

Запись и модификация

0

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

Открытый

При изготовлении карты

1

Проезд в метрополитене

Метрополитен

Метрополитен

2-3

Проезд по железной дороге

МЖД

МЖД

4

Проезд в наземном транспорте

Мосгортранс

Мосгортранс

5

Медицинское страхование

МГФОМС

МГФОМС

6

Социальная защита

КСЗН

КСЗН

7

Социальный дисконт

Предприятия торговли

Предприятия торговли

8

Телефония

Оператор связи

Оператор связи

9-12

Динамический резерв

13-14

Персональные данные владельца

Участники системы

При изготовлении карты

15

Реестровый номер карты и эмиссионные данные

Участники системы

При изготовлении карты

Таблица 1 достаточно наглядно демонстрирует возможности одновременного использования карты в разных приложениях или проектах. За счет чего это достигается мы ниже и рассмотрим. А для понимания того, как множество замечательных возможностей карт реализуется на практике, перейдем к рассмотрению их внутреннего устройства.

Структура карты Mifare® Standard 1K/4K

Сегодняшняя наша тема – это самые массовые карты из большого семейства Mifare® - карты Standard 1K/4K. Прежде, чем обсуждать области применения карт, напомним их структуру (таблица 2). Память карты имеет регулярную структуру, разбитую на сектора, которые, в свою очередь, делятся на блоки.

Независимо от размера сектора (32 байта или 256 байт для старших блоков карт 4К), за одну операцию всегда читается или записывается один блок размером 16 байт – это минимальный (атомарный) размер информации при обмене с картой. Также напомним, что самый старший блок любого сектора – это так называемый «сектор – трайлер», определяющий права доступа и набор операций с данным сектором, а нулевой блок нулевого сектора содержит неизменяемую информацию о карте, в том числе ее серийный номер. Сам нулевой сектор в публичных приложениях используется как директория карты.

Таблица 2

Сектор

Блок

Номер байта в блоке

Описание

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

Карта 4К

39

15

Ключ А

Биты доступа

Ключ B

Сектор трайлер 39

(блоки со 2 по 14)

1

Данные

0

Данные

(сектора с 33 по 38)

32

15

Ключ А

Биты доступа

Ключ B

Сектор трайлер 32

14

Данные

(блоки со 2 по 13)

1

Данные

0

Данные

31

3

Ключ А

Биты доступа

Ключ B

Сектор трайлер 31

2

Данные

1

Данные

0

Данные

(сектора с 16 по 31)

Карта 1К

15

3

Ключ А

Биты доступа

Ключ B

Сектор трайлер 15

2

Данные

1

Данные

0

Данные

(сектора со 2 по 14)

1

3

Ключ А

Биты доступа

Ключ B

Сектор трайлер 1

2

Данные

1

Данные

0

Данные

0

3

Ключ А

Биты доступа

Ключ B

Сектор трайлер 0

2

MAD (Mifare Application Directory)

Данные

1

Данные

0

Блок производителя

Защита доступа к памяти

Само по себе разделение карты на сектора не придает ей многофункциональности. Необходимым для этого условием является разделение доступа к «своим» и «чужим» секторам карты, для чего и служат сектор – трайлеры, упомянутые выше. Еще раз посмотрим на структуру последнего блока каждого сектора (рисунок 1).

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

Ключ А

Биты доступа

Ключ B

Рисунок 1 Структура сектор – трайлера

Первые и последние 6 байт сектор – трайлера служат для хранения ключей доступа к сектору. Из оставшихся четырех байт три представляют собой биты доступа, которые определяют назначение каждого из ключей (набор допустимых операций – чтение, запись, инкремент, декремент). Кроме того, биты доступа определяют и права ключей на изменение самого сектор - трайлера (и ключей, и битов доступа). Более подробно ознакомиться с этой информацией можно в оригинальном описании микросхемы карты (Standard Card IS MF IC S50. Functional Specification).

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

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

При этом карты для «публичных» приложений, как, например, московская карта, имеют заранее распределенную структуру памяти, отраженную в директории. Если же вы планируете использовать карту локально (вне муниципальных или общегосударственных проектов), то за вами остается и право распределения памяти между приложениями.

Режим «электронного кошелька»

Если вы записываете в карту обычную информацию (например, данные владельца в текстовом виде), то необходимо использовать операции read и write, которые не накладывают ограничений на структуру данных.

Но карта позволяет любой блок данных использовать в специальном режиме, называемом «электронный кошелек». В этом режиме карта поддерживает специальные операции increment (равноценно пополнению кошелька) и decrement (соответствует списанию денег из кошелька).

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

Формат блока value иллюстрируется рисунком 2.

Номер байта блока карты

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

value

-value

value

adr

-adr

adr

-adr

Рисунок 2 Формат value – блока

Из рисунка видно, что значение блока записывается три раза: в прямой, инверсной (знак «минус») и еще раз в прямой форме. Оставшиеся четыре байта могут содержать адрес блока в таком же «хитром» формате, если используется технология резервного копирования при выполнении операций (backup).

Единицы, которым соответствует единичное изменение блока value, определяет разработчик приложения. На транспорте это может соответствовать одной поездке, в системе автозаправок – одному литру бензина, а в наиболее общем случае – одной копейке. Размерность блока при единице измерения, равной копейке, позволяет хранить в «кошельке» сумму в 21.474.836 рублей – более чем достаточно для любой локальной платежной системы.

Mifare® в системах безопасности

Карты Mifare® в инфраструктуре любого предприятия могут, как мы видели, выполнять одновременно множество функций. Не следует пренебрегать ее использованием и в системах безопасности – за счет криптозащищенности карта хорошо подходит в качестве «удостоверения личности» в системах защиты информации: для доступа к компьютеру или базам данных, может использоваться в качестве носителя электронной цифровой подписи. Наконец, карта замечательно будет работать и в системе физического доступа на объект и в отдельные помещения.

Как идентификатор системы доступа карта может использоваться двояко: наиболее простой вариант – это использовать ее как полный аналог стандартных proximity карт за счет наличия уникального серийного номера, программируемого при производстве кристаллов. В таком режиме можно использовать для системы доступа карты, эмитированные другой компанией и совсем для других целей. Например, так можно использовать карту московского студента и школьника.

Если же вы хотите иметь систему, хорошо защищенную от подделок и имитаций, да еще и периодически менять ключи доступа в своей системе, то можно использовать защищенный режим, когда код доступа хранится в защищенных блоках карты. Такую функцию поддерживают некоторые из считывателей (например, считыватели PR-P09, PR-P016, PR-P05 российского производства).

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

Имеется еще одно решение, применимое на объектах с самыми суровыми требованиями к уровню защищенности. Как известно, в подобных случаях нормативные документы требуют использования одновременно нескольких идентификаторов, например, карта и ПИН-код, карта и отпечаток пальца, карта плюс ПИН плюс отпечаток пальца. Неприспособленность выпускаемых серийно сетевых систем доступа для работы с биометрической информацией с помощью карт Mifare® обойти достаточно просто. Шаблон опечатка владельца заносится в карту в момент ее выдачи, а в базу данных контроллеров системы заносится только ее серийный номер. На точке прохода биометрический считыватель считывает шаблон отпечатка из карты, сканирует «живой» палец и сопоставляет со считанным из карты. При совпадении в контроллер системы доступа посылается только серийный код карты, по которому контроллер допускает владельца на объект.

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

Дополнение такого считывателя клавиатурой делает систему практически неприступной – допуск осуществляется уже по трем параметрам: номеру карты, ПИН-коду и отпечатку пальца. И если карту могут украсть, ПИН вы можете выболтать нечаянно или умышленно, то уж передать отпечаток пальца практически нереально (при условии, что биометрический считыватель выполнен по всем правилам и имеет систему защиты от муляжей).

Работа с картой

Предположим, что вы уже готовы применить карту Mifare® в своем проекте - что же необходимо для его реализации? Естественно, прикладной уровень остается за вами. Либо вы разрабатываете приложение своими силами, либо используете готовый программный продукт, доступный на рынке. Так, для систем торговли и складского учеты вы можете выбрать систему 1С: или более солидную Microsoft Axapta. Обе они хороши тем, что адаптируются практически под любые требования в своей предметной области. Остается подключить к системе считыватели, и возникает вопрос: каким из производимых зарубежными и российскими компаниями считывателям отдать предпочтение? Рекомендации достаточно простые. Во-первых, это должен быть продукт компании, хорошо известной на рынке и доступной для технической поддержки (не забывайте – вы покупаете не лампочку, которую достаточно ввернуть в патрон и нажать выключатель. Вы разрабатываете сложную высокотехнологичную систему, и оперативная поддержка вам ой-как понадобится!).

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

Так уж сложилось, что сегодня стандартом «де-факто» стал набор функций библиотеки от компании NXP, поставляемой как инструмент разработки со считывателями Pegoda. И совместимость с этой библиотекой есть залог того, что не придется дважды делать одну и ту же работу. Можно посоветовать библиотеку mfrc500.dll от компании «Релвест», которая протестирована на совместимость с программным обеспечением NXP.

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

На рисунке 3 приведен обобщенный алгоритм работы карты, который позволяет правильно построить логику работы приложения в соответствии с решаемой задачей.

Рисунок 3 Алгоритм работы карты

Особое внимание при работе с картой следует обратить на операции смены ключей доступа к секторам и изменения битов доступа – как правило, именно при этих операциях начинающие портят больше всего карт. Если вы в процессе экспериментов «убили» пару другую карт – не расстраивайтесь: это нормальные издержки в процессе разработки.

Особые случаи

Есть немало приложений, для которых в карту необходимо записывать достаточно большие порции информации. Примером такого приложения может служить биометрический считыватель, который извлекает из карты образ отпечатка пальца, который, как правило, занимает не менее 500 байт.

Если вы будете пользоваться стандартными процедурами поблочного чтения или записи (по 16 байт за операцию), то накладные расходы на передачу данных существенно замедлят процесс. Например, известный считыватель фирмы Bioscript считывает шаблон отпечатка около двух секунд. Если вы разрабатываете аналогичное приложение, то сделать время реакции системы приемлемым для человека помогут некоторые расширения к стандартному набору большинства считывателей. Так, считыватели серии PR-P08 с поставляемой с ними библиотекой имеют дополнительные функции посекторной работы с картой, то есть за одну операцию пишется или читается не блок размером всего 16 байт, а целиком сектор карты. Для карт с размером памяти в 1 килобайт это будет 48 байт за операцию, а для старшей половины карт Mifare® 4К это составит уже целых 240 байт (напомним, что в информационную часть сектора карты не входит блок сектора – трайлера, равный также 16 байтам).

С использованием упомянутых расширений при использовании считывателя PR-P08 объем данных примерно в два килобайта (сжатая фотография) читается из карты Mifare® 4К примерно за секунду, а запись этой же информации занимает не более пары секунд.

Заключение

Эта статья не претендует на подробное техническое руководство – это было бы слишком скучно для большей части аудитории. Мы постарались здесь просто дать канву и основные идеи использования бесконтактных смарт – карт, чтобы вы смогли со знанием дела оценить применимость таких карт в ваших проектах – будь то система расчетов за обеды в столовой, ваша собственная дисконтная системы или система доступа с расширенными возможностями в части защищенности от взлома.

А если у вас появились более глубокие вопросы – не стесняйтесь обращаться к другим источникам, в том числе и к автору.

Поделиться:

Все права защищены
© ООО АДВ Секьюрити,
2003—2022
Яндекс.Метрика
Метрика cайта: новости: 8141 | компании: 528 | бренды: 423 | статьи: 1138

О проекте / Контакты / Политика конфиденциальности и защиты информации

Techportal.ru в соц. сетях