Расшифровывают данные с карт водителей в GR.CARDS
Свыше 140 тыс. водителей считали карту в GR.CARDS
Наши партнеры есть практически во всех регионах России
Опубликовано SCard SOFT на
30 Mar 2019
- Обновление
30 Mar 2019 - Загрузок
5,021 (1 прошлой неделе)
«Откройте любой ISO-7816 смарт картой легко!»
Откройте любой ISO-7816 смарт картой на уровне APDU просто!
Smart Pro ToolSet карта представляет собой программа для работы с любым из ISO-7816 совместимыми смарт-карт на уровне APDU.
1) для работы с любым из ISO-7816 смарт-карт совместимы использованием T0 и T1 протоколов;
2) использовать любой из PC / SC совместимый смарт-карт;
3), чтобы управлять читателей открытия / закрытия режимах;
4) для отправки одиночных команд APDU вручную и контролирует карта отвечает;
5) для сканирования смарт-карт использованием сканера APDU;
6) для группировки команд APDU файлов Пакетная;
7) поддерживает карты типов;
8) работать с шаблонами COS команд;
9) для работы с SW-коды шаблонов;
10), чтобы расширить функциональность программы с помощью третьей стороны или ваши собственные плагины;
11), чтобы создать собственное приложение для работы со смарт-картами с помощью управления ActiveX и COM + сервер Smart Pro ToolSet карты;
Исследования вашей GSM SIM-карты, EMV платежной карты, карты безопасности или любой другой смарт-карты!
Требования: PC/SC Smart Card Reader
Что нового в этой версии: Fixed all known bags.
- Антивирус информации
- Смарт-карт ридеры для компьютеров и ноутбуков
- Смарт-карт ридеры для мобильных устройств
- Считывание, расшифровка и анализ данных с карт водителей и тахографов
- Бесплатное считывание карт водителей
- Скачивайте программу для считывания карт водителей
- Разблокировка карт водителей
- Напоминания о сроках перевыпуска и считывания карт
- Вебинары для пользователей GR. Cards
- Расширенные возможности
- Сравнительный обзор смарт-карт ридеров
- Водительский состав
- Типовой шаблон программы
- Инструкции
- Важнейшие объекты пакета smartcard
- Подклассы CardType
- Примеры
- CardConnection
- CardConnectionDecorator
- Функция System. readers()
- Потомки CardConnectionObserver
- Зарегистрируйтесь сейчас и получите
- Открытие и расшифровка считанных файлов
- Доступ всегда и без ограничений
- Хранение считанных файлов
- Исполнение законодательства
- Командный процессор с APDU (CLI)
- Функция select_reader()
- Класс APDUShell
- Данные экземпляра нашей оболочки
- В конструкторе
- Update()
- Default()
- _set_up_connection()
- _clear_connection()
- Заключение
- Считываем и эмулируем карты с магнитной полосой
- Немного о кодировании
- Собираем считыватель сами
- Так что в итоге?
- Рекомендации по сравнению и выбору правильного смарт-карт ридера
- Критерии отбора (выбора) продуктов для сравнения
- Рассматриваемые продукты
- ASEDrive IIIe v2 (NXP/Athena)
- ASEDrive IIIe v3 Mini (NXP/Athena)
- ACR38U-I1 (ACS)
- ACR39U-U1 (ACS)
- Rockey 301 C25 (Feitian)
- Rockey 301 C11
- OMNIKEY (CardMan) 3021 (HID Global)
- IDBridge CT30 (Gemalto)
- Критерии выбора параметров и оценки
- Тип контактной группы, её ресурс
- Критерии оценки
- Поддержка различных типов карт
- Разнообразие модельного ряда
- Безопасность, доверие
- Возможность обновления прошивки
- Быстродействие
- Карта сравнения смарт-карт ридеров по ключевым параметрам
- Рейтинг ридеров по всем ключевым показателям
- Сравнение ридеров по показателю Цена/Качество
Антивирус информации
Download3k скачал и испытаны Smart Card ToolSet PRO, 30 Mar 2019 года с некоторыми из лучших антивирусных ядер настоящее время и вы можете найти ниже, для вашего удобства, результаты проверки:
Профессиональный и доверенный смарт-карт ридер Enterprise-класса
Удобный, лёгкий и компактный смарт-карт ридер для работы с ноутбуками
Биометрический смарт-карт ридер Enterprise-класса с прижимным сканером отпечатков пальцев
Устройство чтения/записи контактных смарт-карт, карт памяти (memory card) и платёжных карт (EMV) с горизонтальной загрузкой
Устройство со встроенным сканером отпечатка пальца и вертикальной загрузкой смарт-карт для использования на стационарных рабочих местах с повышенными требования к безопасности
Лёгкое и компактное устройство чтения/записи для работы со смарт-картами на iPhone или iPad с разъёмом Lightning
Bluetooth-устройство для работы с двумя или более мобильными устройствами Apple iOS и Android
Компания «Аладдин Р.Д.» представляет широкий ассортимент смарт-карт ридеров для использования со
смарт-картами JaCarta и eToken, а также с любыми другими
смарт-картами. Смарт-карт ридеры соответствуют международным стандартам CCID (Circuit Card Interface
Device), ISO 7816-1/2/3, 2/3 BUS I2C, Extended i2C Memory Cards, EMV, CAC, Microsoft PC/SC, JIS
X6303/6304, FIPS201, USB 2.0.
Смарт-карт ридеры для компьютеров и ноутбуков
Для работы со смарт-картой на компьютерах и ноутбуках мы предлагаем целый ряд смарт-карт ридеров
ASEDrive, разработанных с использованием новейших японских технологий (Athena Smartcard Solutions).
Отличительными особенностями этих устройств являются высокая надёжность, эргономичность и
увеличенный срок службы.
Помимо традиционных внешних смарт-карт ридеров с USB-интерфейсом, считыватели смарт-карт могут
представлять собой:
Все смарт-карт ридеры линейки ASEDrive оптимизированы для работы с инфраструктурой открытых ключей
(PKI).
Смарт-карт ридеры для мобильных устройств
Для комфортной работы со смарт-картами на смартфонах и планшетах операционных систем Apple iOS и
Android предлагается ряд универсальных смарт-карт ридеров, отличающихся стильным дизайном и высоким
качеством исполнения. Доступны следующие модели:
Возможно подключение смарт-карт ридеров не только к мобильным устройствам, но и компьютерам и
ноутбукам.
Время на прочтение
Сначала, на момент задумки, в 2014 году, данная статья планировалась как единая публикация, но, проработав материал (лень вынудила растянуть этот процесс), я понял, что необходимо её разделить на две части:
Думаю, для профи-карточников первая часть будет представлять бо́льший интерес, а вторая часть будет интересна, прежде всего, новичкам в этой теме (и будет иметь метку Tutorial).
Среди множества Python-библиотек, обзоры которых есть на Хабре, я не обнаружил pyscard — библиотеки для взаимодействия со смарт-картами.
В этой статье я постараюсь дать краткое описание основных фич pyscard, а на сладкое напишем простенький командный процессор, работающий с картой посредством APDU.
Прошу учесть, что для понимания того, как использовать эту библиотеку, и окружающей терминологии требуется знакомство со стандартом ISO 7816-4 или, хотя бы, GSM 11.11. К GSM-стандарту проще получить официальный доступ, скачав его с сайта ETSI, впрочем и ISO 7816-4 (pdf, старенькая версия) гуглится, несмотря на то, что за него на оф. сайте хотят денег).
Pyscard существует с 2007 года и является кроссплатформенной (win/mac/linux) надстройкой над PC/SC API.
Мое рабочее окружение, где я использую pyscard — Windows7
Материал данной статьи я тестировал, в основном, на mac OS, но на Windows7 тоже погонял, в виртуалке. Должен отметить, что, в отличие от XP, «семерка» и, вероятно, «десятка», с настройками по умолчанию, «ставит палки в колеса» при работе с картой в ридере:
Эти факторы доставили мне много боли при переходе с XP, пока я их не победил. Как это сделать, расскажу во второй части.
Разработка начата под эгидой одного из ведущих (и на момент создания, и сейчас) игроков карточного рынка.
Поддерживаются обе ветки Python (2 и 3).
В рабочем окружении я использую связку pyscard + Python 2.7, но, для статьи, мне показалось правильным задействовать актуальную на сегодня ветку Python (3.6)
На мой взгляд библиотека pyscard спроектирована не особо pythonic и больше напоминает порт какого-то Java фреймворка, однако полезности её это не уменьшает, по крайней мере для меня, хотя имена модулей выглядят странно, конечно.
Точкой входа в библиотеку является пакет smartcard.
Отдельно стоит упомянуть пакет smartcard.scard, который отвечает за связь с карточным API операционной системы. Если не нужны все абстракции библиотеки, а только голый PC/SC, то вам сюда. Мы же на нём подробно останавливаться не будем.
Установка pyscard возможна следующими способами:
Pyscard имеет информативное руководство пользователя, которое доступно на официальном сайте, pydoc и примеры, поэтому не вижу смысла дублировать все это здесь. Вместо этого мы:
Считывание, расшифровка и анализ данных с карт водителей и тахографов
Не является публичной офертой.
Бесплатное считывание карт водителей
Мы помогаем выполнять требование об обязательном считывании карт каждые 28 дней.
Все, что нужно: компьютер, наша бесплатная программа для считывания и картридер.
Программа оставляет отметку на карте, что она была считана.
Считанные файлы можно сразу отправить в сервис GR.Cards для расшифровки и анализа.
Инструкция по считыванию карт
Скачивайте программу для считывания карт водителей
● Полностью бесплатная ● Работает с картами СКЗИ, ЕСТР ● Разблокирует карты ● Оставляет отметку, что карта считана
Разблокировка карт водителей
Наша программа для считывания позволяет самостоятельно разблокировать карту водителя и установить новый PIN-код.
Главное, знать PUK-код от карты и иметь под рукой картридер, подключаемый к компьютеру.
Разблокировать карту вам поможет подробная инструкция из блога GR.Cards.
Напоминания о сроках перевыпуска и считывания карт
В еженедельном отчете пользователям приходит информация о том, какие карты необходимо считать в ближайшую неделю.
Уведомления о перевыпуске карт водителей тоже заранее поступают на email.
При использовании платных модулей приходят SMS-напоминания.
Вебинары для пользователей GR. Cards
▊ Материалы прошлых вебинаров: видео, презентации, памятки
Расширенные возможности
GR.CARDS – незаменимый помощник для должностных лиц автопарков
Отправит водителю SMS-напоминание считать карту
Заранее оповестит о перевыпуске карт водителей
Построит табель учета рабочего времени
Поможет сбалансировать нагрузку на водителей
Подготовит бланк инструктажа с водителями
Сравнительный обзор смарт-карт ридеров
Примеры отчетов модуля «Контроль автопарка» в GR.Cards
Обнаружит нарушения режима труда и отдыха
Покажет, как водители пользуются тахографом
Определит превышения скоростного режима
Водительский состав
Организуйте работу с водителями, проведите инструктаж
Следите за регулярностью считывания и сроком действия карты
Не допускайте переработок
Примеры отчетов модуля «Контроль водителей»
Автоматически обнаружит проблемы с тахографами
Напомнит о смене блока СКЗИ или перекалибровке
Подскажет, когда необходимо провести ТО или другую плановую работу по автомобилю
Типовой шаблон программы
Какие задачи решает (практически любая) программа, работающая со смарт-картами в ридере? А вот эти:
Замечу, что перечисленные задачи решает, например, прошивка мобильного телефона.
Инструкции
Еженедельно мы отправляем на электронную почту сводку по автопарку:
Любой отчет можно выгрузить в формате Excel или отправить сразу на печать.
Важнейшие объекты пакета smartcard
В этом разделе все имена указаны относительно пакета smartcard.
Подклассы CardType
Позволяют нам указать точный тип карт, с которыми наше приложение собирается работать. Можно сделать так, чтобы наше приложение даже не реагировало на помещение в ридер карты, которая нам не подходит.
Примеры
Позволяют свести воедино все требования нашего приложения, касающиеся установления связи с картой:
По умолчанию никаких ограничений в CardRequest не ставится.
CardConnection
Канал коммуникации нашего приложения с картой, позволяет отправлять на карту APDU и получать ответ, ключевой метод здесь — transmit(). Именно с его помощью происходит непосредственное взаимодействие нашего приложения с картой. Необходимо отметить, что метод transmit() всегда возвращает триплет (кортеж), состоящий из:
CardConnection является контекст-менеджером, что добавляет удобства при его использовании.
CardConnectionDecorator
Слово «декоратор» используется здесь в том же контексте, что и в Java, а не в том, к которому привыкли Python-разработчики.
Позволяет придать особые свойства объекту CardConnection. Библиотека предоставляет рабочие декораторы с говорящими названиями: ExclusiveConnectCardConnection и ExclusiveTransmitCardConnection. Лично я не ощутил эффекта от использования этих декораторов — если система (Windows) уж решила вклиниться со своими APDU в нашу сессию, то ни один из этих декораторов не спасет, но, возможно, я что-то не так делал.
Функция System. readers()
Позволяет получить список подключенных к системе кардридеров и установить связь с картой в определенном ридере.
По умолчанию, в ходе обмена данными между картой и нашего приложением, никакие ошибочные значения StatusWord (SW1, SW2) не возбуждают исключений. Это можно изменить, задействовав потомков ErrorChecker, которые:
Потомки CardConnectionObserver
Присоединяются к экземпляру CardConnection и получают информацию обо всех командных APDU и ответах карты, которые проходят через наблюдаемое соединение. Пример применения — ведение лога команд и ответов от карты.
Вооруженные таким знанием, мы вполне можем замахнуться на написание командного процессора, использующего описываемую библиотеку.
Зарегистрируйтесь сейчас и получите
● Базовые функции бесплатно на все время использования
+ 7 дней полного функционала!
Открытие и расшифровка считанных файлов
На основе данных, считанных с карт водителей, сервис GR.Cards:
Доступ всегда и без ограничений
Вы можете считывать карты водителей в разных местах. При этом все данные по автопарку будут доступны в личном кабинете с любого компьютера с доступом в Интернет.
В GR.Cards можно разделять водителей на группы и назначать лиц, ответственных за определенную группу.
Хранение считанных файлов
По закону автопарки должны хранить считанные данные с карт водителя 1 год.
GR.Cards обеспечивает надежное защищенное хранение ddd-файлов в течение 3-х лет, в том числе, по уволенным водителям.
Выгрузить архив себе на компьютер можно в любое время.
Исполнение законодательства
Примеры отчетов модуля «Контроль законодательства» в GR.Cards
Командный процессор с APDU (CLI)
Не буду подробно останавливаться на модуле cmd, который любезно предоставляет нам стандартная библиотека, о нем уже писали здесь, перейду к реализации.
Весь исходный код процессора находится на гитхабе.
Пройдемся по главным моментам, не размениваясь на мелочи.
Функция select_reader()
Возвращает первый ридер, подключенный к компьютеру или None, если подключенных ридеров нет.
Есть вариант этой функции (зависит от модуля msvcrt, т.е. только для Windows), который позволяет выбрать ридер, если их в компьютере несколько.
Класс APDUShell
Данный класс, помимо наследования от cmd.Cmd, реализует интерфейс обладает поведением наблюдателя smartcard.CardMonitoring.CardObserver
Данные экземпляра нашей оболочки
reader — устройство чтения, с которым будем работать.
card — объект карта, потребуется нам, чтобы определить момент смены карты в ридере.
connection — канал передачи APDU на карту и получения результата обработки.
sel_obj — строка, содержащая ID текущего объекта (файла или папки) выбранного командой SELECT. Эта строка меняется всякий раз, когда команда SELECT выполняется.
atr — здесь мы запоминаем ATR текущей карты, чтобы можно было вывести его на экран, не запрашивая карту каждый раз (такой запрос сбрасывает состояние выбора файла в карте).
card_connection_observer — наблюдатель, который привязывается к каждому connection, подробности ниже.
В конструкторе
def __init__(self):
super(APDUShell, self).__init__(completekey=None)
self.reader = select_reader()
self._clear_context()
self.connection = None
self.card_connection_observer = ConsoleCardConnectionObserver()
CardMonitor().addObserver(self)
Мы, помимо инициализации данных, добавляем себя в наблюдатели
smartcard.CardMonitoring.CardMonitor — объекта, который реагирует на события взаимодействия ридера и карты (карта помещена в ридер, карта извлечена из ридера) и оповещает об этих событиях smartcard.CardMonitoring.CardObserver, т.е. нас. Данный вид оповещения настраивается только один раз за время жизни нашей оболочки. CardMonitor является синглтоном, поэтому мы не заботимся о времени жизни его экземпляра.
Также обращаю внимание на экземпляр smartcard.CardConnectionObserver.ConsoleCardConnectionObserver — это готовый библиотечный объект-наблюдатель, отслеживающий состояние канала общения с картой и печатающий это состояние в консоль. Мы его будем навешивать на каждое новое соединение с картой.
Update()
def update(self, observable, handlers):
«»»CardObserver interface implementation»»»
addedcards, removedcards = handlers
if self.card and self.card in removedcards:
self._clear_connection()
self._clear_context()
for card in addedcards:
if str(card.reader) == str(self.reader):
self.card = card
self._set_up_connection()
break
Это, собственно, поведение smartcard.CardMonitoring.CardObserver. Если наша текущая карта находится в списке removedcards, то мы очищаем состояние оболочки для текущей карты.
Если в нашем выбранном ридере (и в списке addedcards, заодно) появилась новая карта, то мы инициализируем новое состояние оболочки для этой карты.
Default()
Здесь все введенные пользователем шестнадцатиричные APDU превращаются в списки байтов и отправляются на карту. Замечу, что единственное, что мы делаем с результатом здесь, это определяем, не является ли отправленная команда успешным SELECT-ом. Если да, то мы обновляем ID последнего выбранного объекта для печати в приглашении пользователю.
Всю остальную рутинную работу по интерпретации и отображению результата команды для пользователя выполняет наш ConsoleCardConnectionObserver.
Небольшое попутное отступление
лично мне не очень нравится, как ConsoleCardConnectionObserver отображает результат исполнения APDU — он не отделяет SW от результирующих данных так, как мне этого хотелось бы. Я использовал его только, чтобы не захламлять код примера маловажными деталями. Однако, если кому-то интересно, код метода update() моего наблюдателя есть в этом коммите.
_set_up_connection()
def _set_up_connection(self):
«»»Create & configure a new card connection»»»
self.connection = self.card.createConnection()
self.connection.addObserver(self.card_connection_observer)
self.connection.connect()
self.atr = toHexString(self.connection.getATR(), PACK)
Трудяга, который помогает нам каждый раз, когда карта в ридере меняется. Он создает соединение с картой, навешивает на него ConsoleCardConnectionObserver, и запоминает ATR карты (чтобы команда atr могла вывести его на экран).
_clear_connection()
def _clear_connection(self):
if not self.connection:
return
self.connection.deleteObserver(self.card_connection_observer)
self.connection.disconnect()
self.connection = None
Антипод _set_up_connection(), «проводит зачистку», когда карта извлечена из ридера.
Заключение
На данном этапе мы можем запустить нашу командную оболочку и, в зависимости от наличия кард-ридера, получить просто сообщение об ошибке (ридера нет) или увидеть шелл в работе (счастливчики с ридером). При наличии ридера ничто не мешает вставить в него любую смарт-карту и выполнить команду atr — должно сработать, однако, прошу не забывать, что на своих рабочих SIM и банковских картах вы экспериментируете на свой страх и риск.
Скриншот работы нашего командного процессора
До встречи во второй части, предполагаю, что там Python-а не будет (почти или совсем), но будут APDU и SW.
При подготовке статьи мне попалась пара проектов, которые используют данную библиотеку:
https://bitbucket.org/benallard/webscard/src
https://github.com/mitshell/card
Может реальные примеры кода окажутся полезными.
● 7 дней полного функционала
● Базовую функции бесплатно на все время использования
Считываем и эмулируем карты с магнитной полосой
О том, что магнитные карты совсем скоро навсегда уйдут в историю, говорят уже не первый год. Тем не менее, хоть они и постепенно вытесняются другими технологиями (например, RFID, ISO7816), окончательно исчезать они пока даже не собираются.
Итак, в данной статье поговорим о том, как работает запись данных на карты с магнитной полосой, разберёмся, в каком формате хранится там информация, узнаем, как устроены считыватель и энкодер и, конечно же, ещё много чего интересного.
На просторах можно найти огромное количество материалов об устройстве и принципе работы RFID-карт. О магнитных же картах информации куда меньше. Для этого есть свои причины: считыватели магнитной полосы сравнительно дороги, на карту вмещается весьма малое количество данных, сама технология безнадёжно устарела. Но, как по мне, детально рассмотреть такое оборудование будет весьма интересно. А раз так — погнали!
Настоятельно рекомендую также прочитать вот эту статью: О долгой жизни и неминуемой смерти карт с магнитной полосой.
Традиционно такая карта представляет собой обычную пластиковую карту стандарта ISO7810, на обратной стороне которой мельчайшими частицами ферромагнетика нанесена магнитная полоса. В опытных образцах использовались отрезки магнитной ленты.
По напряжённости поля, необходимого для перезаписи, карты делятся на высококоэрцитивные и низкокоэрцитивные. В настоящее время применяется преимущественно первый вариант, обладающий куда большей устойчивостью к износу и внешним магнитным полям, тогда как низкокоэрцитивные полосы размагничиваются от контакта даже с маломощными магнитами
или просто от косого взгляда
О чувствительности к магнитным полям карт высококоэрцитивного типа поговорим несколько позже.
Немного о кодировании
Все карты с магнитной полосой используют F/2F-кодирование для записи данных. В нём логической единице соответствует частота сигнала, вдвое большая таковой для нуля. В качестве обозначения перехода используется смена полярности при намагничивании карты. Причина для использования такого принципа кодирования весьма простая — можно существенно упростить устройство для считывания, так как результат не будет зависеть от скорости прокатывания через него карты. Другие методы кодирования потребовали бы установку электропривода для автоматического захвата и перемещения карты или механически связанного с энкодером ролика для контроля скорости.
Сама карта имеет три дорожки, первая имеет семибитную кодировку, вторая и третья — пятибитную. Непосредственно для данных используются соответственно шесть и четыре бита, старший же бит в коде каждого символа отведён для чётности. На магнитную полосу вначале записываются младшие биты, затем — старшие.
В начале и в конце дорожки находятся символы, обозначающие начало и конец последовательности, после стоп-символа записывается контрольное значение, представляющее собой последовательный XOR всех символов на дорожке, также дополненный своим битом чётности.
Таким образом, алгоритм для считывания карты получается следующий:
Помимо кодировки существует и стандарт, определяющий, что именно записано на магнитной полосе. Впрочем, в системах, отличных от платёжных (к примеру, электронные пропуска, скидочные, подарочные и клубные карты), может быть записана любая произвольная информация.
Остановимся поподробнее на банковских картах. Вот пример дампа второй дорожки:
Итак, цифры до разделителя (символа «=») — PAN (Primary Account Number), собственно, сам номер карты. Спешу вас заверить, что данные эти были созданы при помощи сервиса генерации «левых» номеров карт и не имеют никакого отношения к реальной карте.
Следующая группа из четырёх цифр — срок действия в формате YYMM. Далее идёт Service code. Это трёхзначное число, позволяющее задать ряд ограничений, к примеру, запретить использование магнитной полосы (при попытке прокатать такую карту на экране терминала загорится требование использовать чип). Более подробно значения Service code расписаны тут. По традиции, все упомянутые ссылки будут продублированы в конце поста.
Далее идут ещё пять цифр — PVV (PIN Verification Value). Первая цифра — это так называемый PIN Verification Key Index (PVKI) — идентификатор (индекс) ключа, который был использован для вычисления конкретного значения PVV. Обычно бывает в диапазоне от 1 до 6, то есть эмитент может использовать до шести различных ключей для вычисленияпроверки PVV. Оставшиеся четыре цифры представляют собой непосредственно значение PVV. Как нетрудно догадаться, это число используется для верификации PIN карты.
Последняя группа цифр в последовательности — CVV-1/CVC-1. Этот код используется для авторизации с использованием магнитной полосы. Не следует путать его с CVV-2/CVC-2, напечатанным на обратной стороне карты рядом с местом для подписи.
Большинство таких считывателей эмулируют клавиатуру, просто выводя данные дорожек, опционально добавляя перевод строки в конце. Это позволяет записывать данные карт хоть в Excel.
Разберём экземпляр. На плате отчётливо видны две микросхемы — одна отвечает за F/2F-декодирование, другая — за обработку данных и их отправку по USB. Перемычками настраивается режим работы, например, можно включить или отключить считывание одной или нескольких дорожек, либо отображение символов начала и конца каждой дорожки.
А вот и непосредственно считывающий узел. Головка закреплена в пластиковом шасси, на нём же находится платка с операционными усилителями. Точно такие же модули используются и в других изделиях компании Posiflex, например, в программируемых кассовых клавиатурах.
Магнитная головка отдельно. Она от POS-terminal’а Ingenico 5100. Отчётливо видны три её дорожки.
А вот другая головка. Такие применялись в терминалах VeriFone VX510.
Собираем считыватель сами
Как устроен заводской считыватель, разобрались. Теперь попробуем собрать свой собственный вариант.
У меня остались магнитная головка и микросхема декодера MRD531B-LQ от помершего VX510. Без проблем найдя даташит на эту микросхему (просто загуглив «MRD531 PDF»), собрал на макетке типовую схему включения.
Недолгие поиски какого-то примера работы с магнитным считывателем на МК вывели меня на библиотеку для подключения такого считывателя к Arduino.
Интерфейс подключения предельно прост: вывод CLS для контроля наличия карты и традиционные DATA/CLK для каждой из дорожек.
Как позже выяснилось, схема весьма дубовая и работает даже при существенно далёких от рекомендуемого номинала компонентах.
К головке тоже нет никаких существенных требований, при отсутствии таковой от считывателя, подойдёт даже экземпляр от кассетного магнитофона.
Если у вас нет и F/2F-декодера, а воспользоваться считывателем хочется, то можно собрать данную схему самому.
Ну что же, перейдём к самому интересному — к тому, как производится запись на магнитные карты.
Такое устройство, как нетрудно догадаться, намного сложнее и дороже считывателя. На нашей вторичке типичный энкодер стоит около восьми тысяч рублей (интересно, откуда такая цена?) при стоимости считывателя раз в десять меньше, что для меня чрезмерно дорого.
Тем не менее, мне таки повезло раздобыть экземпляр. Называется он MSR206U. Самая продвинутая модель — пишет и читает все три дорожки, поддерживает высокоэрцитивные карты. Устройство в хорошем состоянии, с блоком питания (на двадцать четыре вольта), но без USB-кабеля. Ну что же, отличный повод разобрать девайс, поскольку распиновку разъёма 8P8C я не нашёл.
Итак, аппарат чем-то напоминает считыватель, правда, примерно в полтора раза больше обычного. Спереди щель для магнитной карты, три индикаторных светодиода, обозначение модели.
Снизу резиновые ножки, наклейка с указанием модели, четыре винта, один из которых заклеен гарантийной пломбой. Мне её пришлось оторвать.
А вот и плата. Отчётливо видны мощные резисторы, два реле, микроконтроллер, ПЗУшка. Отдельного упоминания заслуживает драйвер записывающей головки: он выполнен на трёх H-мостах L293D (надо полагать, по одному на каждую дорожку). USB-интерфейс реализован на базе микросхемы конвертера USB-TTL Prolific PL-2303HX.
Распиновка, кстати, оказалась вот такая:
Основная часть. Маленький шлейфик (едва видимый рядом с наклеенным жёлтым скотчем) от считывающей головки. К записывающей ведёт жгут из голубых проводов. Оставшиеся провода ведут к оптопаре, детектирующей момент вставки карты, и индикаторным светодиодам. Чёрная пластиковая деталь, к которой ведут цветные провода — энкодер.
С другого ракурса. Отчётливо видны считывающая и записывающая головки. Над записывающей по-китайски аккуратно закреплена оптопара.
А вот и энкодер. На валу у него резиновый ролик, вращающийся при прокатывании карты и служащий для отслеживания её положения.
Помимо энкодера мне достались и карты. А раз так, попробуем записать что-нибудь.
Ставим поставляющийся с энкодером софт, 206DDX51. Запускаем.
В настройках указываем COM-порт, выбираем высококоэрцитивный тип карты, вводим какие-нибудь данные и жмём кнопку записи. На энкодере загорается жёлтый светодиод. Теперь прокатываем карту, и, если запись и верификация пройдены успешно, жёлтый светодиод погаснет, а зелёный — загорится. Всё, карта успешно записана. Прокатываем её в считывателе и убеждаемся, что всё успешно читается.
Разумеется, магнитные карты можно эмулировать. Многие из нас даже помнят функцию MST в некоторых телефонах Samsung. И сейчас мы попробуем разобраться с эмуляцией карт и собрать устройство для этого всего из трёх деталей (аж вспомнился пост товарища dlinyj про эмулятор RFID из трёх деталей). В этот раз, правда, всё будет намного проще.
Есть такой проект как MagSpoof. В своё время его даже упоминали здесь, но особого интереса тогда всё это не вызвало.
MagSpoof представляет собой эмулятор магнитных карт, состоящий из катушки, поле которой и будет регистрировать головка считывателя, микроконтроллера ATTiny85, а также уже оказавшегося упомянутым здесь H-моста L293D.
Код проекта был написан для платформы Arduino и может быть запущен с минимальными изменениями (лишь поменять номера ножек) практически на любой плате. Под рукой у меня как раз оказалась Mega. На ней мы и будем всё это собирать. Монтажную плату использовать на этот раз не стал, разместил всё на беспаечной макетке.
У меня не было цели изготовить полностью автономное устройство, так что отталкивался от того, что имелось у меня. Мотать катушку ради устройства, с которым я поиграюсь десять минут, а потом разберу, решительно не хотелось, так что пришлось поискать что-то подходящее в закромах. Очень кстати на глаза попалась коробка с деталями от отслуживших своё принтеров. Шаговики, направляющие, оптопары и платы HVPS оставим для каких-нибудь других опытов, а вот соленоид, из числа тех, что стоят в захватывающем механизме лазерных принтеров, будет в самый раз.
Отсоединяем от него подвижную часть (аккуратно, чтобы не потерять пружинку, нам ведь, как-никак, потом это ещё и назад ставить), и, в общем-то, всё.
Собираем схему. Выводы ENABLE, A и B L293D подключаем к цифровым пинам МК, питание логики — к пяти вольтам, питание нагрузки — к двенадцати (вообще, соленоид рассчитан на двадцать четыре вольта, но в данном опыте я бы столько не подавал, так как можно и саму головку намагнитить). Теперь забиваем свой дамп карты и заливаем скетч. Всё, можно пробовать.
Ну, где считыватель, там и POS-terminal. И на нём это тоже прекрасно срабатывает. Всё так, как нам хотелось.
Принцип работы этого эмулятора крайне прост — программа рассчитывает чётность и контрольное значение для заданной дорожки, после чего воспроизводит её на катушке при помощи H-моста, позволяющего менять полярность. По идее, если подключить записывающую головку и энкодер, а подачу тока завязать не на фиксированные тайминги, а на сигналы с энкодера, то можно даже создать устройство для записи карт.
Как показала парочка опытов, высококоэрцитивные карты весьма стойко переносят нахождение рядом с металлическими предметами и даже кратковременное присутствие магнита.
Пластиковый и ферритовый магниты вообще не смогли оказать влияния на магнитную полосу. Стереть данные удалось только неодимовым магнитом, проведя им по полосе.
Так что носить магнитные карты в кошельках с магнитными застёжками или с некоторыми ключами (например, Mottura выпускала замки, ключи от которых содержали неодимовые магниты) всё-таки не стоит.
Также не стоит забывать и про банальный износ карты. В своё время выпускавшиеся магнитные карты Maestro буквально расслаивались от частого использования, разумеется, переставая при этом читаться.
Так что в итоге?
В банковской сфере магнитные карты уже уходят в историю. Крупнейшие платёжные системы уже заявили о прекращении выпуска карт с магнитной полосой буквально через пять лет.
И даже в других областях, где такие карты применялись, RFID постепенно берёт своё.
Безусловно, RFID или смарт-карты использовать сейчас намного проще и дешевле. Впрочем, совершенно уверен, что все эти материалы смогут кому-то пригодиться.
Рекомендации по сравнению и выбору правильного смарт-карт ридера
Данная статья содержит краткое введение в проблематику смарт-карт ридеров (их устройство, классификация, определение параметров для сравнения), предлагает набор критериев и методику для сравнения и анализа конкурирующих продуктов.
Критерии отбора (выбора) продуктов для сравнения
В данном сравнении подробно не рассматриваются портативные, мобильные, ридеры с PIN-клавиатурой, беспроводные (в т.ч. Bluetooth), PCMCI, Express Card, с поддержкой бесконтактных карт, встроенные в клавиатуру и др.
Конкурирующие продукты, которые время от времени появляются на российском рынке, но не имеют сколь-нибудь заметного влияния и/или выраженной инновационной составляющей, в данном сравнении также не рассматриваются.
Рассматриваемые продукты
Другие модели линейки JCR7xx:
ASEDrive IIIe v2 (NXP/Athena)
Другие модели линейки ASEDrive:
ASEDrive IIIe v3 Mini (NXP/Athena)
ACR38U-I1 (ACS)
Другие модели линейки ACR38U-I1:
ACR39U-U1 (ACS)
Rockey 301 C25 (Feitian)
Другие модели линейки:
Rockey 301 C11
OMNIKEY (CardMan) 3021 (HID Global)
IDBridge CT30 (Gemalto)
Другие модели линейки IDBridge CT30:
Критерии выбора параметров и оценки
Ключевой показатель – параметр, по которому производится анализ и сравнение.
Важность – параметр, определяющий важность или весовой коэффициент данного ключевого показателя при комплексном сравнении по всем показателям (экспертная оценка).
Тип контактной группы, её ресурс
Тип контактной группы является важнейшим параметром при выборе ридера.
Обычно в офисные (настольные) ридеры устанавливают недорогие фрикционные (Sliding) контактные группы (припаиваются прямо на печатную плату, без собственного корпуса картоприёмника), при этом карта поджимается к ним за счёт полозьев и направляющих, сделанных в корпусе ридера. При подключении карты скользящие контакты процарапываю поверхностный жировой/грязевой слой на карте, обеспечивая плотный контакт.
Два дополнительных контакта-концевика обеспечивают подачу питания на карту с некоторой задержкой – только после полного вставления карты в слот.
Такая конструкция самая простая и дешёвая, но она очень чувствительна к отклонениям в толщине карты и качеству сборки (люфтам) корпуса ридера, его жёсткости.
Ряд производителей таких контактных групп декларирует их ресурс 100,000 подключений, но при этом не делает на контакты даже золотое напыление (либо оно настолько тонкое, что почти не заметно на глаз как на фото ниже), на практике ресурс ридеров с такой контактной группой обычно выдерживает порядка 50,000 подключений.
Типовая конструкция ридера с фрикционной контактной группой выглядит так:
В профессиональные ридеры Enterprise-класса, или в ридеры, использующиеся при работе с комбинированными картами (с NFC/RFID), в проектах типа „Электронное удостоверение/пропуск“ должны устанавливаться другие контактные группы (картоприёмник), более дорогие и надёжные, с опускающейся (Landing) контактной группой только после того, как карта вставлена в картоприёмник.
Такая конструкция не царапает поверхность пластика и контактной площадки карты, не создаёт избыточного неравномерного давления на неё, снижается риск повреждения карты и повышается срок её службы.
Надёжность контактов обеспечиваются за счёт небольшого скольжения с „процарапыванием“ жирового/грязевого слоя при вставлении карты уже опустившимися контактами прямо на контактной площадке карты, не царапая пластик.
Типовая конструкция ридера с опускающейся контактной группой выглядит так:
От правильного выбора типа контактной группы зависят:
Критерии оценки
Поддержка различных типов карт
Поддержка ридерами различных типов смарт-карт, карт с памятью и с защищённой памятью, протоколов, режимов работы, автоматического выбора типа и параметров карты
Разнообразие модельного ряда
Разнообразие модельного ряда в продуктовой линейке включает в себя наличие функционально идентичных ридеров в разных форм-факторах, исполнениях, модификациях, в том числе, наличие моделей:
Безопасность, доверие
Поставляемые в Россию импортные ридеры не являются доверенными, хотя используются для целей информационной безопасности, имеют закрытые для анализа прошивки, могут иметь проблемы с безопасностью, недокументированные возможности и опасные уязвимости, которые могут быть использованы для атак на целевые системы.
Например, некоторые, довольно популярные в России, ридеры выполнены на базе типовой элементной базы – специализированных микроконтроллерах HT66F4370 компании Holtek Semiconductor, имеют известные проблемы с безопасностью и подвержены атакам типа BadUSB с возможностью
подмены прошивки на содержащую вредоносный код и закладки для атак на целевую систему (компьютер, локальная сеть).
Подавляющее большинство проанализированных моделей ридеров имеют прошивки, закрытые для анализа на уязвимости и закладки.
Также подавляющее большинство производителей в целях экономии не ставят в свои ридеры дополнительную защиту по питанию (для защиты от соответствующих атак) и полагаются на встроенную в микроконтроллеры антистатическую защиту по входу (обычно, не более 5 КВ), чего часто бывает недостаточно от атак с использованием электрошокеров и/или просто для защиты от атак по питанию и от пробоя статическим электричеством.
Возможность обновления прошивки
В процессе эксплуатации ридера может понадобиться обновление его встроенного программного обеспечения (»прошивки»), например, для исправления обнаруженных ошибок, выявленных уязвимостей, добавления новых протоколов и спецификаций, обеспечения совместимости с новыми версиями ОС и другого ПО.
Быстродействие
Быстродействие ридера при работе со смарт-картой зависит от нескольких факторов:
Карта сравнения смарт-карт ридеров по ключевым параметрам
Чтобы не усложнять визуальное восприятие сравниваемых ридеров для карты сравнения выбраны только самые распространённые и современные, производимые и поддерживаемые, по одной модели от каждого производителя.
Рейтинг ридеров по всем ключевым показателям
При построении рейтинга оценка, полученная каждой моделью ридера по каждому ключевому показателю, умножается на весовой коэффициент важности (значимости) данного показателя и для наглядности выводится в виде графика-гистограммы.
Сравнение ридеров по показателю Цена/Качество
При построении графика-гистограммы сравнения ридеров по показателю Цена-Качество полученное выше значение рейтинга делится на значение цены (:1000 для удобства восприятия графика).