|
9 hónapja | |
---|---|---|
.. | ||
Bul1.jpg | 1 éve | |
Bul2.jpg | 1 éve | |
Bulavko.md | 1 éve | |
README.md | 1 éve | |
image1.png | 1 éve | |
image10.png | 1 éve | |
image11.png | 1 éve | |
image12.jpg | 1 éve | |
image13.png | 1 éve | |
image14.png | 1 éve | |
image15.png | 1 éve | |
image16.png | 1 éve | |
image17.png | 1 éve | |
image18.jpg | 1 éve | |
image19.jpg | 1 éve | |
image2.png | 1 éve | |
image20.jpg | 1 éve | |
image21.png | 1 éve | |
image3.png | 1 éve | |
image4.png | 1 éve | |
image5.png | 1 éve | |
image6.png | 1 éve | |
image7.png | 1 éve | |
image8.jpg | 1 éve | |
image9.png | 1 éve | |
piv1.jpg | 1 éve | |
piv2.jpg | 1 éve | |
piv3.jpg | 1 éve | |
pivovar.md | 1 éve | |
zenchenko.md | 1 éve | |
Борановский.md | 9 hónapja | |
Борановский_Вопросы.md | 9 hónapja |
О том, что магнитные карты совсем скоро навсегда уйдут в историю, говорят уже не первый год. Тем не менее, хоть они и постепенно вытесняются другими технологиями (например, RFID, ISO7816), окончательно исчезать они пока даже не собираются.
Итак, в данной статье поговорим о том, как работает запись данных на карты с магнитной полосой, разберёмся, в каком формате хранится там информация, узнаем, как устроены считыватель и энкодер
На просторах можно найти огромное количество материалов об устройстве и принципе работы RFID-карт. О магнитных же картах информации куда меньше. Для этого есть свои причины: считыватели магнитной полосы сравнительно дороги, на карту вмещается весьма малое количество данных, сама технология безнадёжно устарела.
Традиционно такая карта представляет собой обычную пластиковую карту стандарта ISO7810, на обратной стороне которой мельчайшими частицами ферромагнетика нанесена магнитная полоса. В опытных образцах использовались отрезки магнитной ленты.
По напряжённости поля, необходимого для перезаписи, карты делятся на высококоэрцитивные и низкокоэрцитивные. В настоящее время применяется преимущественно первый вариант, обладающий куда большей устойчивостью к износу и внешним магнитным полям, тогда как низкокоэрцитивные полосы размагничиваются от контакта даже с маломощными магнитами или просто от косого взгляда.
О чувствительности к магнитным полям карт высококоэрцитивного типа поговорим несколько позже.
Все карты с магнитной полосой используют F/2F-кодирование для записи данных. В нём логической единице соответствует частота сигнала, вдвое большая таковой для нуля. В качестве обозначения перехода используется смена полярности при намагничивании карты. Причина для использования такого принципа кодирования весьма простая — можно существенно упростить устройство для считывания, так как результат не будет зависеть от скорости прокатывания через него карты. Другие методы кодирования потребовали бы установку электропривода для автоматического захвата и перемещения карты или механически связанного с энкодером ролика для контроля скорости.
Сама карта имеет три дорожки, первая имеет семибитную кодировку, вторая и третья — пятибитную. Непосредственно для данных используются соответственно шесть и четыре бита, старший же бит в коде каждого символа отведён для чётности. На магнитную полосу вначале записываются младшие биты, затем — старшие.
В начале и в конце дорожки находятся символы, обозначающие начало и конец последовательности, после стоп-символа записывается контрольное значение, представляющее собой последовательный XOR всех символов на дорожке, также дополненный своим битом чётности.
Таким образом, алгоритм для считывания карты получается следующий:
Помимо кодировки существует и стандарт, определяющий, что именно записано на магнитной полосе. Впрочем, в системах, отличных от платёжных (к примеру, электронные пропуска, скидочные, подарочные и клубные карты), может быть записана любая произвольная информация.
Остановимся поподробнее на банковских картах. Вот пример дампа второй дорожки:
;4034351574462072=2402121111946800?
Итак, цифры до разделителя (символа "=") — PAN (Primary Account Number), собственно, сам номер карты. Спешу вас заверить, что данные эти были созданы при помощи сервиса генерации «левых» номеров карт и не имеют никакого отношения к реальной карте.
Следующая группа из четырёх цифр — срок действия в формате YYMM. Далее идёт Service code. Это трёхзначное число, позволяющее задать ряд ограничений, к примеру, запретить использование магнитной полосы (при попытке прокатать такую карту на экране терминала загорится требование использовать чип). Более подробно значения Service code расписаны тут. По традиции, все упомянутые ссылки будут продублированы в конце поста.
Далее идут ещё пять цифр — PVV (PIN Verification Value). Первая цифра указывает на наличие этого кода, оставшиеся четыре представляют собой непосредственно значение. Как нетрудно догадаться, это число используется для верификации PIN карты.
Последняя группа цифр в последовательности — CVV-1/CVC-1. Этот код используется для авторизации с использованием магнитной полосы. Не следует путать его с CVV-2/CVC-2, напечатанным на обратной стороне карты рядом с местом для подписи.
Время перейти к обзору оборудования. Имелись два считывателя магнитных карт Posiflex MR-2000U. Экземпляр рассчитан на чтение первой и второй дорожек и имеет интерфейс подключения USB.
Большинство таких считывателей эмулируют клавиатуру, просто выводя данные дорожек, опционально добавляя перевод строки в конце. Это позволяет записывать данные карт хоть в 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 или смарт-карты использовать сейчас намного проще и дешевле. Впрочем, совершенно уверен, что все эти материалы смогут кому-то пригодиться.