конвертация номера карты доступа
Делаем копию карты-пропуска по фото
Однажды мне срочно понадобилось попасть в один бизнес-центр с пропускной системой в виде турникетов, открывающихся при помощи карт-пропусков. Человек, у которого находился в этот момент пропуск, был далеко, передать мне его он не мог, а оформление новой карты в силу бюрократических особенностей заняло бы много времени.
С чем мы имеем дело
Итак, человек с пропуском находится далеко, считывателя для бесконтактных карт у него с собой конечно же нет, но есть телефон, на который можно сделать фотографию карты.
По фото карта была опознана как EM-Marin, она же EM4100. Эти бесконтактные карты работают на частоте 125 КГц и содержат номер (далее — ID) размером 40 бит или 5 байт, который записывается на карту еще на заводе и не может быть изменен. Какой-либо защиты от чтения или копирования в них нет. Для создания дубликатов этих карт используются заготовки T5577 и EM4305, которые свободно продаются.
Перезаписываемые карты-болванки выглядят как обычная пустая пластиковая карта в форм-факторе кредитки, а не перезаписываемые (с прошитым на заводе серийным номером) чуть толще и на лицевой стороне у них нанесен текст, состоящий из нескольких групп десятичных цифр. Встречаются и карты в виде брелков.
Для записи таких карт потребуется соответствующий копировщик. Я использую Proxmark3, но можно взять любой другой, который может работать с T5577 и позволяет ввести ID карты вручную. Или же вовсе использовать эмулятор, тогда можно обойтись без болванок.
Карта не имеет своего источника питания, оно поступает со считывателя «по воздуху», как в беспроводных зарядках. Считыватель генерирует электромагнитное поле, карта улавливает его через антенну и включается. Далее карта модулирует поле и начинает циклически передавать свой ID, который улавливается считывателем, связь при этом односторонняя.
Как именно передаются данные с карты: сперва идет преамбула из 9 бит «1», затем передается 1 байт Version Number, 2 байта Facility Code и 2 байта уникального номера карты, периодически следуют биты контроля четности. Взято по ссылке, там кстати еще неплохое описание протокола (на английском).
В самом простом варианте построения СКУД считыватель сам является контроллером доступа – сравнивает ID карты с номерами в памяти и принимает решение об открытии замка или турникета. В системах посложнее он отправляет эту информацию на контроллер по какому-либо интерфейсу.
Эксперимент
Итак, на карте нанесены некие цифры. Было логично предположить, что это и есть ее ID. Для того, чтобы это выяснить, я взял данные аналогичной карты, получилось следующее:
После преобразования ID из HEX в DEC, получилось 317840976040, что не похоже на цифры с карты. Спойлер: если бы я сделал наоборот, и конвертировал цифры с карты в шестнадцатеричный формат, то я добился бы успеха сразу, но тогда эта статья была бы не такой содержательной 🙂
Размышляя над тем, что еще оно может значить, я вспомнил, что Proxmark помимо ID карты показывает еще кое-какие данные:
Из кода выше становится ясно, что эти числа – части ID карты:
0013396136 (DEZ 10) – первые 4 байта, если считать от младшего к старшему.
204.26792 (DEZ 3.5C) – третий байт отдельно (он же Facility Code) и непосредственно 2 байта серийного номера карты.
Таким образом, по цифрам на карте можно восстановить часть ее ID. Но как быть, если известны 4 байта, а требуется 5? И если четвертый байт имел значение 0 на всех считанных мной картах, то пятый байт всегда ненулевой. Перебирать этот байт в конкретном случае не вариант — не хочется вызывать подозрения у охраны.
Тут я вспомнил, что СКУД в этом бизнес-центре установлен достаточно давно, поэтому я предположил, что там может использоваться для передачи данных популярный, но устаревший Wiegand-26. Этот протокол предназначен для связи считывателя с контроллером, и позволяет передавать за одну посылку 24 бита данных и 2 бита четности, итого 3 байта полезной нагрузки. Это означает, что ID карты не передается полностью и неизвестный пятый байт никак в идентификации не участвует и может быть рандомным.
Стоит отметить, что некоторые современные считыватели все же читают и сравнивают старший байт карты, в таком случае придется перебирать 255 комбинаций, но это можно сделать за приемлемое время, особенно если использовать эмулятор.
Ну что же, теперь осталось проверить на практике все изыскания выше. Для создания копии карты я взял заготовку T5577 и записал на нее полученный ID (пятый байт — случайный):
Получилась почти полная копия карты с фото, отличается только старший байт. Для уверенности можно еще раз ввести команду lf search и проверить, совпадают ли DEZ 10 и DEZ 3.5C с цифрами на оригинальной карте.
После этого я записал уже преобразованный аналогичным образом ID нужного мне пропуска.
Как и ожидалось, карта считалась корректно, турникет щелкнул, мигнул зеленым индикатором.
Пост-скриптум
Если вы отвечаете за безопасность, то скорее всего, все описанное в этой статье не будет для вас новостью. В противном случае все же не стоит преждевременно рвать волосы на теле. Проблема кроется в том, что данный формат карт изначально не обеспечивает высокого уровня безопасности. Эти карты не поддерживают каких-либо механизмов аутентификации и шифрования, следовательно могут быть скопированы в любой момент подходящим считывателем. На серьезных объектах, таких как банки, дата-центры и хранилища ядерных боеголовок, вместо EM-Marin применяются более защищенные форматы карт (по крайней мере, хочется в это верить). Например, это семейство MIfare, где карты разделены на сектора с индивидуальными ключами чтения и записи, а некоторые карты этого стандарта поддерживают даже алгоритм шифрования AES. Ну и не стоит забывать про дополнительные методы контроля доступа.
В любом случае, не копируйте чужие карты без согласия их владельцев.
Обзор форматов карт и преобразование номеров
При проектировании или модернизации системы контроля доступа важно определиться с типом используемых идентификаторов и, соответственно, — считывателей. В качестве идентификатора может использоваться бесконтактная смарт-карта, QR-код, пин-код, биометрические данные (отпечаток пальца, рисунок вен ладони, геометрия лица), а также их произвольные комбинации (например, карта + пин-код, карта + палец, пин-код + лицо). В данной статье приведён обзор основных существующих на рынке СКУД идентификационных и смарт-карт, а также варианты работы с ними в НЕЙРОСС.
Общие сведения
Карта является идентификатором лица либо транспортного средства в СКУД. Данные идентификатора (карты) передаются в контроллер доступа посредством считывающего устройства (считывателя). Будьте внимательны при подборе модели считывателя, особо обратите внимание на корректную поддержку стандарта и формата (битности) идентификатора. Соответственно, существует два независимых канала передачи данных:
Считыватель — Контроллер: для связи считывателя с БОРЕЙ/ЯРС используется проводной интерфейс Wiegand или 1-Wire.
Wiegand — это «стандартный» проводной интерфейс в СКУД, а также одноименный формат карт доступа. При проектировании системы и выборе между Wiegand и 1-Wire следует отдать предпочтение этому интерфейсу. Он поддерживает передачу на расстояние до 150 м. Благодаря двум проводам для передачи данных обеспечивается устойчивость к помехам, наводкам, контроль целостности данных. Интерфейс 1-Wire имеет ограничение на длину кабеля и используется только при модернизации существующей СКУД с идентификацией посредством «таблеток» (iButton) и RFID-меток.
Стандарты идентификаторов
Электронные бесконтактные идентификаторы на рынке СКУД представлены в большинстве своём идентификационными картами размером 86х54х0,8мм и брелоками. Толщина бесконтактной карты 0,8 мм и гладкая поверхность даёт возможность сублимационной печати на карте.
Контроллер доступа получает информацию от считывателя. Будьте внимательны при подборе модели считывателя, особо обратите внимание на корректную поддержку используемых форматов карт.
125 КГц (Proximity)
Все перечисленные выше стандарты бесконтактных идентификаторов имеют несовместимые друг с другом технологии кодирования и радиопередачи. Что, в свою очередь, приводит к невозможности считывания идентификатора одного стандарта считывателем другого стандарта.
13,56 МГц
2,4 ГГц
Форматы идентификаторов
Формат карты — это длина и структура двоичных данных (бит), хранящихся в памяти карты.
26 бит Wiegand (H10301)
Открытый промышленный формат карт. Самый распространённый. Состоит из 24 бит кода и 2 бит контроля на четность.
P — биты четности (первый и последний бит) – EXXXXXXXXXXXX XXXXXXXXXXXXO;
Контроль целостности переданных от считывателя в контроллер данных обеспечивается двумя битами чётности. Первый бит (E) принимает значение 1, если в следующих за ним 12 битах данных содержат нечетное количество 1 (делая общее количество единиц в 13 битах четным), иначе первый бит четности принимает значение 0. Последний бит (O) четности принимает значение 1, если идущие перед ним 12 бит данных содержат четное количество единиц (делая общее количество единиц в 13 битах нечетным), иначе его значение 0.
Например, есть карта Wiegand-26 с фасилити кодом = 142 и номером 02136. Тогда 26 бит данных на карте представлены в следующей последовательности: 0 1000 1110 0000 1000 0101 1000 1. Первый бит четности 0, т.к. последующие за ним 12 бит данных содержат четное количество единиц.
Wiegand 34 бит
Состоит из 32 бит кода и 2 бит контроля на четность.
P — биты четности (первый и последний бит);
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX — номер карты и фасилити. Размер и положение данных может изменяться, поэтому фасилити не выделяется. Все значимые биты относятся к номеру карты, а фасилити равен 0.
Wiegand 37 бит (HID H10304)
Стандарт HID Global. Состоит из 35 бит кода и 2 бит контроля на четность.
P — биты четности (первый и последний бит);
FFFF FFFF FFFF FFFF — фасилити-код (16 бит, диапазон значений: 0 — 65535);
Wiegand 37 бит (HID H10302)
Стандарт HID Global. Состоит из 35 бит кода и 2 бита контроля на четность.
P — биты четности (первый и последний бит) – E XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX O;
Другие
Существует несколько разновидностей интерфейса Wiegand, отличающихся количеством бит в посылке, наличием/отсутствием битов чётности. В этом случае значимыми считаются все биты, присылаемые считывателем. Двоичный код преобразуется в десятичный формат, фасилити равен 0. Считыватель 1-Wire всегда присылает 64 бита, которые преобразуются в большое десятичное число вида 12 802 481 456 215 952 123.
Преобразование номеров карт
При настройте точки доступа указывается алгоритм преобразование полученного идентификатора карты из двоичного формата.
БОРЕЙ/ЯРС поддерживают три алгоритма:
Номер карты в базе данных СКУД может не соответствовать номеру, указанному на карте.
При выборе разного алгоритма преобразования один и тот же номер карты будет представлен по-разному. Например, карта Wiegand-26 с фасилити кодом = 142 и номером 02136:
Проверить номер карты, получаемый контроллером, можно в приложении Журнал событий. Вы можете в реальном времени менять режим работы точки доступа и в «живом журнале» или в архиве событий просмотреть получаемый фасилити/номер карты. Сообщение «Неверный формат карты» отображается, если установлен автоматический режим, а карта в реальности не соответствует форматам Wiegand-26/34/37. Измените режим на «Сырой (с переменной длиной)».
ВНИМАНИЕ
В системе контроля доступа с несколькими источниками данных (usb-считыватель в бюро пропусков, разные контроллеры доступа, мобильные терминалы) необходимо добиться идентичности номера карты, получаемого от каждого источника.
Настольный USB-считыватель
В АРМ НЕЙРОСС Доступ вы можете ввести фасилити и номер карты в данные пропуска вручную, считать с помощью считывателя, подключенного к контроллеру БОРЕЙ/ЯРС, или с помощью настольного USB-считывателя, имеющего возможность работы в режиме клавиатуры (например, – в режиме Keyboard Wedge для считывателя HID® OMNIKEY® 5427 CK). При использовании стандартных карт Wiegand необходимо настроить вывод номера карты и фасилити в следующем формате:
Дополнительная информация приведена в разделе Настройка считывателя номера карты.
Мобильный терминал контроля МТК оснащён бесконтактным считывателем OMNIKEY® с поддержкой широко спектра идентификаторов. Также должен быть настроен в режим клавиатуры (выполняется при изготовлении) с выдачей номера в требуемом формате.
ITRIUM/ПАК Интеграция
Для работы в НЕЙРОСС с контроллерами «сторонних» производителей, интегрированными через ITRIUM/ПАК Интеграция, для идентичности номеров карт требуется воспользоваться функционалом автоматического преобразования номеров Службы бюро пропусков.
forum-bolid.ru
Прокс считыватели, формат карт
Код тач мемори нельзя посчитать из номера карты. Только Виганд.
На сайте болида в ЧаВо выложен алгоритм подсчета CRC8.
—
ЗЫ. И не болидовские, а Далласовские
Вам просто пакетный преобразователь нужен?
Посчитайте мне код тач мемори для этой карты.
Посчитайте мне код тач мемори для этой карты.
Контроль на четность
Если имеется контроль по четности, то к битам кода карты добавляются два бита — один перед кодом, другой после. Соответственно весь код карты делится ровно посередине на две части. Четность старшей половины кода контролируется первым битом, младшей — последним. Если количество бит в коде нечетное, то центральный бит кода входит в оба контроля четности.
Первый бит четности (старшей половины кода) ставится в 1 если количество единиц в его половине кода нечетное. Последний бит четности (младшей половины кода) ставится в 1 если количество единиц в его половине кода четное.
Надо заметить, что встречаются считыватели не подчиняющиеся этому правилу контроля четности. Поэтому реально большинство универсальных контроллеров СКУД просто игнорируют контроль на четность. Кроме того, некоторые форматы бесконтактных карт несут информацию о количестве бит кода и четности прямо на карте, соответственно считыватель не может никоим образом влиять на реальный выходной формат данных. Таков, например, формат HID ProxPass, Indala ASP и др.
Таким образом это все условно.
Код тач мемори состоит из 6 байтов и пятый байт, записанный в ключе, нельзя сформировать из номера карты (брелока).
Так что пакетный преобразователь можно сделать только для Виганд26 (я себе пожалуй сделаю, пригодитсо)
forum-bolid.ru
Преобразовать код карты
Как преобразовать код карточек Виганд в формат кода Dallas TouchMemory?
Для преобразования кода карточек Виганд в формат кода Dallas TouchMemory необходимо дополнить код Виганд нулевыми битами до 7-ми байт и посчитать для них циклическую контрольную сумму:
8-й байт 5-7 байт 2-4 байт 1-й байт
CRC дополнение до 7-ми байт код Вигант 01
Т.е. на примере кода 011 55982 получается следующий код:
8-й байт 7-й байт 6-й байт 5-й байт 4-й байт 3-й байт 2-й байт 1-й байт
CRC дополнение код Виганд дополнение
011 55982
05 00 00 00 0B DA AE 01
Циклическая контрольная сумма получается по правилу фирмы Dallas. Расчет осуществляется следующим образом:
Спойлер CRCTable : array [0..255] of byte = (
0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,
157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,
219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,
101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,
248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,
140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,
17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,
175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,
50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,
202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,
87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,
233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,
116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53);
KeyCode: array[1..8] of byte;
KeyCode[ 8 ] := 0;
For j := 1 to 7 do
KeyCode[ 8 ] := CRCTable[ KeyCode[ 8 ] xor KeyCode[ j ] ];
Полученный 8-ми байтный код можно заносить в БД для использования в АРМ «Орион».
Копировщик RFID-меток стандарта EM-Marin
Как известно, во многих системах доступа используются карты RFID стандарта EM-Marin с частотой 125 КГц. Не исключением стал и домофон моего дома. Одна проблема – неплохо бы научиться копировать такие карты, ибо ценники на их копирование не радуют. В сети, конечно, существует довольно много схем копировщиков (да и китайцы продают свои копировщики за копейки — правда, они часто при копировании ставят свой пароль на болванки), но почему бы не собрать свой собственный копировщик? Вот об этом и нижеприведённая статья.
Начинать разработку копировщика стоит с выяснения, а на что вообще можно скопировать такие метки? Почитав форумы, можно узнать, что наиболее распространёнными болванками для копирования являются T5577, T5557, EM4305.
Теперь нужна схема. Возьмём аналоговую часть такого копировщика у RECTO и подключим её к микроконтроллеру atmega8. Дополним преобразователем уровней для подключения к COM-порту на базе max232 (желающие могут использовать ST232 или ещё что, чтобы подключится по USB, но у меня на компьютере COM-порт есть, как есть и переходник USB-COM, так что у меня такой задачи не стояло).
Получится вот такая схема:
Что она из себя представляет? Сдвоенный эмиттерный повторитель, колебательный контур, детектор и RC-фильтры. За счёт того, что RC-фильтры имеют разные постоянные времени, сравнивая между собой уровни напряжения между каскадами можно выделять изменение сигнала RFID-метки. Данной задачей у нас будет заниматься встроенный в atmega8 компаратор. Генерацию 125 КГц сигнала у нас будет обеспечивать встроенный в atmega8 ШИМ-контроллер.
Комбинация RFID-метка – считыватель образуют трансформатор, где метка является вторичной обмоткой. Передача информации меткой производится путём изменения нагрузки вторичной обмотки. В результате в катушке считывателя (первичной обмотке) изменяется ток. Выделением этих импульсов тока и занимается приведённая выше аналоговая часть схемы. Колебательный контур нужно настроить на максимальное напряжение в контрольной точке, например, сматывая/наматывая витки катушки. Правда, говорят, лучше всё же напряжение немного меньше максимума — стабильнее работает. У меня в контрольной точке около 40 В.
Копируемая метка использует кодирование типа манчестер. Для того чтобы расшифровать данный код, достаточно по любому изменению фронта сигнала пропускать три четверти периода слота бита и по следующему за ним перепаду сигнала фиксировать значение бита, которое будет соответствовать значению сигнала после перепада. При декодировании стоит задать окно, в которое должен произойти перепад сигнала – не более половины периода слота бита.
Метод расшифровки манчестерского кодирования и код для этого я взял у Shads. Можно, конечно, было написать свой собственный, но я торопился запустить копировщик — хотелось убедиться, что схема рабочая и приём меток производится. Так этот фрагмент и остался в коде копировщика. Также оказалось, что у меня компаратор настроен инверсно, чем нужно коду декодирования. Изменил в коде. Итак, мы получили последовательности нулей и единиц. Как из них получить код карты?
А очень просто. Примем, что номер карты по нибблам имеет вид AB CD EF GH IJ. Карта выдаёт вот что:
1) Девять единиц в начале;
2) Ниббл A;
3) Чётность ниббла A (1 бит);
4) Ниббл B;
5) Чётность ниббла B (1 бит);
…
16) Ниббл I;
17) Чётность ниббла I (1 бит);
18) Ниббл J;
19) Чётность ниббла J (1 бит);
20) Ниббл чётности колонок для нибблов A B C D E F G H I J;
21) Бит 0.
Считываем все 64 бита, расшифровываем и получаем 40 бит кода карты. Логично, что если самому выдать такой код, замыкая катушку карты приложенной к считывателю, мы получим эмулятор карты. Но сейчас нас интересует не он.
Карту мы читать научились, а вот как передать данные карте? Для этого нужно просто включать или выключать частоту 125 КГц в соответствии с протоколом обмена с картой. На время “молчания” считывателя карта питается запасённой энергией.
Болванки T5557/T5577 полностью совместимы между собой по протоколам записи, однако, имеют немного разные минимальные и максимальные времена импульсов (к счастью, времена T5557 перекрываются с T5577). У EM4305 протокол записи иной.
Чтобы записать T5557 я воспользовался кодом BolshoyK. В таблице ниже указаны параметры сигналов для брелока T5557.
Запись начинается с сигнала StartGape – требуется отключить сигнал 125 КГц примерно на 300 мкс. Это сигнал карте, что сейчас ей начнут передавать данные. Дальше следует передать болванке информацию. Кодирование передаваемых данных – тот же манчестер.
Болванки T5557/T5577 и EM4305 многофункциональные и умеют разные виды модуляций, поддерживают пароли и ещё много чего. В каждой болванке на борту имеется набор блоков по 32 бита. Назначение этих блоков разное. В некоторых – выдаваемый код ключа (он занимает два блока). В других – конфигурация. В третьих – идентификатор производителя. Мы будем использовать ограниченный функционал, поэтому желающие разобраться, что значат все эти биты, могут заглянуть в документацию к болванкам (я приложил её к архиву).
Блоки собраны в две страницы (0 и 1).
В нулевой странице есть блок конфигурации с индексом 0. Его мы и будем задавать. Для T5557/T5577 у нас будут следующие конфигурационные байты: 0x00,0x14,0x80,0x40 в соответствии с таблицей из документации (красным я отметил выбранные единичными битами режимы):
Таким образом, у нас выбрано: частота передачи данных RF/64 (125 КГц/64), кодирование типа манчестер, выдача блоков до второго (в блоках 1 и 2 у нас будет располагаться код, выдаваемый картой). Перед записью следует отправить код операции (2 бита opcode) и один бит защёлки (lockbit). Коды операции 10b и 11b предшествуют записи данных для страниц 0 и 1 (младший бит задаёт номер страницы, старший — код записи страницы). У нас выдаётся 10b для кода операции (вся работа идёт с нулевой страницей) и 0b для бита защёлки. После передачи всех этих данных необходимо передать трёхбитный адрес записываемой страницы. Все передачи данных для T5557/T5577 ведутся от старшего бита к младшему.
Задав код карты в блоках 1 и 2 и конфигурацию в блоке 0 можно получить дубликат RFID-метки. Как видите, всё просто.
Следующий тип болванок – это EM4305. Вот разбираться с записью этой болванки мне пришлось самому. Она также состоит из блоков по 32 бита, но назначение их иное.
Кодирование передаваемых карте данных – по перепадам за интервал времени. Если перепад за интервал времени был, то это ноль, а если не было — единица. Конфигурационное слово хранится в 4 байте и для себя я определил его так: 0x5F,0x80,0x01,0x00 (кодирование манчестер, RF/64, выдача слова 6). В слова 5 и 6 я записываю код карты (те самые 64 бита, что выдаёт карта). EM4305 требует чтобы передача велась от младшего бита к старшему. Карта понимает, что с ней начинают обмен после выдачи ей комбинации импульсов:
Коды команд
Формат адреса блока
Таким образом задаётся конфигурация болванки EM4305 и её код.
Собственно, ничего большего простому копировщику и не требуется.
Я сделал несколько вариантов копировщика с разными дисплеями. Например, вот копировщик с дисплеем 1602:
А вот видео работы копировщика на дисплее LPH9157-02:
А вот причина, по которой я заинтересовался копировщиками таких ключей — нужно было сделать много копий ключа от домофона (ждать посылки из Китая при этом тоже было лень), но ценник вот какой:
В архиве все схемы, печатки, программы и документация на болванки. Есть версия для Arduino Nano (её нужно прошивать отдельно через программы для заливки сторонних прошивок).
Желающие могут открыть документацию на все эти болванки и реализовать поддержку паролей и иные режимы работы карт. Мне лично всё это было ненужно.
Отдельное большущее спасибо RECTO, BolshoyK и Shads — без вас я бы развлекался бы с разработкой довольно долго!






