Procházet zdrojové kódy

Merge branch 'master' of u19-23yurkin/up into master

ypv před 3 roky
rodič
revize
b0c864df13
22 změnil soubory, kde provedl 227 přidání a 0 odebrání
  1. 227 0
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/README.md
  2. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image1.png
  3. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image10.png
  4. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image11.png
  5. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image12.jpg
  6. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image13.png
  7. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image14.png
  8. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image15.png
  9. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image16.png
  10. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image17.png
  11. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image18.jpg
  12. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image19.jpg
  13. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image2.png
  14. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image20.jpg
  15. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image21.png
  16. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image3.png
  17. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image4.png
  18. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image5.png
  19. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image6.png
  20. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image7.png
  21. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image8.jpg
  22. binární
      ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image9.png

+ 227 - 0
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/README.md

@@ -0,0 +1,227 @@
+# Считываем и эмулируем карты с магнитной полосой
+
+
+**О том, что магнитные карты совсем скоро навсегда уйдут в историю,** говорят уже не первый год. Тем не менее, хоть они и постепенно вытесняются другими технологиями (например, RFID, ISO7816), окончательно исчезать они пока даже не собираются.
+
+![](image1.png)
+
+Итак, в данной статье поговорим о том, как работает запись данных на карты с магнитной полосой, разберёмся, в каком формате хранится там информация, узнаем, как устроены считыватель и энкодер
+
+### Суть 
+
+На просторах можно найти огромное количество материалов об устройстве и принципе работы RFID-карт. О магнитных же картах информации куда меньше. Для этого есть свои причины: считыватели магнитной полосы сравнительно дороги, на карту вмещается весьма малое количество данных, сама технология безнадёжно устарела.
+
+
+
+### Устройство карты
+
+Традиционно такая карта представляет собой обычную пластиковую карту стандарта ISO7810, на обратной стороне которой мельчайшими частицами ферромагнетика нанесена магнитная полоса. В опытных образцах использовались отрезки магнитной ленты.
+
+По напряжённости поля, необходимого для перезаписи, карты делятся на высококоэрцитивные и низкокоэрцитивные. В настоящее время применяется преимущественно первый вариант, обладающий куда большей устойчивостью к износу и внешним магнитным полям, тогда как низкокоэрцитивные полосы размагничиваются от контакта даже с маломощными магнитами или просто от косого взгляда.
+
+О чувствительности к магнитным полям карт высококоэрцитивного типа поговорим несколько позже.
+
+### Немного о кодировании
+
+**Все карты с магнитной полосой используют F/2F-кодирование для записи данных.** В нём логической единице соответствует частота сигнала, вдвое большая таковой для нуля. В качестве обозначения перехода используется смена полярности при намагничивании карты. Причина для использования такого принципа кодирования весьма простая — можно существенно упростить устройство для считывания, так как результат не будет зависеть от скорости прокатывания через него карты. Другие методы кодирования потребовали бы установку электропривода для автоматического захвата и перемещения карты или механически связанного с энкодером ролика для контроля скорости.
+
+Сама карта **имеет три дорожки, первая имеет семибитную кодировку, вторая и третья — пятибитную.** Непосредственно для данных используются соответственно шесть и четыре бита, старший же бит в коде каждого символа отведён для чётности. На магнитную полосу вначале записываются младшие биты, затем — старшие.
+
+В начале и в конце дорожки находятся символы, обозначающие начало и конец последовательности, после стоп-символа записывается контрольное значение, представляющее собой последовательный XOR всех символов на дорожке, также дополненный своим битом чётности.
+
+Таким образом, алгоритм для считывания карты получается следующий:
+1. Получаем строку бит с декодера. Практически нигде не подключают магнитную головку непосредственно к контроллеру, чаще всего используют специальные микросхемы F/2F-декодеров, отправляющие уже почти готовые данные;
+2. Определяем начало и конец у полученных данных (поиском старт и стоп-символов);
+3. Считываем символы согласно кодировке, у каждого считанного символа проверяем чётность;
+4. Вычисляем и сверяем контрольное число;
+5. Если ошибок обнаружено не было, выводим готовую строку.
+
+### Банковские карты
+
+Помимо кодировки существует и стандарт, **определяющий, что именно записано на магнитной полосе.** Впрочем, в системах, отличных от платёжных (к примеру, электронные пропуска, скидочные, подарочные и клубные карты), может быть записана любая произвольная информация.
+
+Остановимся поподробнее на банковских картах. Вот пример дампа второй дорожки:
+
+**;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.
+![](image2.png)
+
+
+Большинство таких считывателей эмулируют клавиатуру, просто выводя данные дорожек, опционально добавляя перевод строки в конце. Это позволяет записывать данные карт хоть в Excel.
+
+
+![](image3.png)
+
+Разберём экземпляр. **На плате отчётливо видны две микросхемы — одна отвечает за F/2F-декодирование, другая — за обработку данных и их отправку по USB. Перемычками настраивается режим работы, например, можно включить или отключить считывание одной или нескольких дорожек, либо отображение символов начала и конца каждой дорожки.**
+
+![](image4.png)
+
+![](image5.png)
+
+А вот и непосредственно считывающий узел. Головка закреплена в пластиковом шасси, на нём же находится платка с операционными усилителями. Точно такие же модули используются и в других изделиях компании Posiflex, например, в программируемых кассовых клавиатурах.
+
+![](image6.png)
+
+Магнитная головка отдельно. Она от POS-terminal'а Ingenico 5100. Отчётливо видны три её дорожки.
+
+![](image7.png)
+
+А вот другая головка. Такие применялись в терминалах VeriFone VX510.
+
+### Собираем считыватель
+
+
+
+Так у нас остались магнитная головка и микросхема декодера MRD531B-LQ от помершего VX510 . Без проблем найдя даташит на эту микросхему (просто загуглив «MRD531 PDF»), собрал на макетке типовую схему включения.
+
+
+![](image8jpg)
+Недолгие поиски какого-то примера работы с магнитным считывателем на МК вывели меня на библиотеку для подключения такого считывателя к Arduino.
+
+Интерфейс подключения предельно прост: вывод CLS для контроля наличия карты и традиционные DATA/CLK для каждой из дорожек.
+
+Как позже выяснилось, схема весьма дубовая и работает даже при существенно далёких от рекомендуемого номинала компонентах.
+
+К головке тоже нет никаких существенных требований, при отсутствии таковой от считывателя, подойдёт даже экземпляр от кассетного магнитофона.
+
+Если у вас нет и F/2F-декодера, а воспользоваться считывателем хочется, то можно собрать данную схему самому.
+
+### Энкодер
+
+Ну что же, перейдём к самому интересному — к тому, как производится запись на магнитные карты.
+
+Такое устройство, как нетрудно догадаться, намного сложнее и дороже считывателя. На нашей вторичке типичный энкодер стоит около восьми тысяч рублей (интересно, откуда такая цена?) при стоимости считывателя раз в десять меньше, что для меня чрезмерно дорого.
+
+Тем не менее, повезло раздобыть экземпляр. Называется он MSR206U. Самая продвинутая модель — пишет и читает все три дорожки, поддерживает высокоэрцитивные карты. Устройство в хорошем состоянии, с блоком питания (на двадцать четыре вольта), но без USB-кабеля. Ну что же, отличный повод разобрать девайс, поскольку распиновку разъёма 8P8C  не найдено.
+
+![](image9.png)
+
+Итак, аппарат чем-то напоминает считыватель, правда, примерно в полтора раза больше обычного. Спереди щель для магнитной карты, три индикаторных светодиода, обозначение модели.
+
+![](image10.png)
+
+Снизу резиновые ножки, наклейка с указанием модели, четыре винта, один из которых заклеен гарантийной пломбой.
+![](image11.png)
+
+
+![](image12.jpg)
+
+А вот и плата. Отчётливо видны мощные резисторы, два реле, микроконтроллер, ПЗУшка. Отдельного упоминания заслуживает драйвер записывающей головки: он выполнен на трёх H-мостах L293D (надо полагать, по одному на каждую дорожку). USB-интерфейс реализован на базе микросхемы конвертера USB-TTL Prolific PL-2303HX.
+
+Распиновка, кстати, оказалась вот такая:
+1. Земля
+2. Не подключён
+3. Не подключён
+4. Не подключён
+5. Не подключён
+6. 5 В
+7. D-
+8. D+
+
+![](image13.png)
+
+Основная часть. Маленький шлейфик (едва видимый рядом с наклеенным жёлтым скотчем) от считывающей головки. К записывающей ведёт жгут из голубых проводов. Оставшиеся провода ведут к оптопаре, детектирующей момент вставки карты, и индикаторным светодиодам. Чёрная пластиковая деталь, к которой ведут цветные провода — энкодер.
+
+![](image14.png)
+
+С другого ракурса. Отчётливо видны считывающая и записывающая головки. Над записывающей по-китайски аккуратно закреплена оптопара.
+
+![](image15.png)
+
+А вот и энкодер. На валу у него резиновый ролик, вращающийся при прокатывании карты и служащий для отслеживания её положения.
+
+### Белый пластик
+
+Помимо энкодера мне достались и карты. А раз так, попробуем записать что-нибудь.
+![](image16.png)
+
+
+Ставим поставляющийся с энкодером софт, 206DDX51. Запускаем.
+
+![](image17.png)
+
+В настройках **указываем COM-порт,** выбираем высококоэрцитивный тип карты, вводим какие-нибудь данные и жмём кнопку записи. На энкодере загорается жёлтый светодиод. Теперь прокатываем карту, и, если запись и верификация пройдены успешно, жёлтый светодиод погаснет, а зелёный — загорится. Всё, карта успешно записана. Прокатываем её в считывателе и убеждаемся, что всё успешно читается.
+
+### Эмулятор
+
+Разумеется, магнитные карты можно эмулировать. Многие из нас даже помнят функцию MST в некоторых телефонах Samsung. И сейчас мы попробуем разобраться с эмуляцией карт и собрать устройство для этого всего из трёх деталей (аж вспомнился пост товарища dlinyj про эмулятор RFID из трёх деталей). В этот раз, правда, всё будет намного проще.
+
+Есть такой проект как MagSpoof. В своё время его даже упоминали здесь, но особого интереса тогда всё это не вызвало.
+
+MagSpoof представляет собой эмулятор магнитных карт, состоящий из катушки, поле которой и будет регистрировать головка считывателя, микроконтроллера ATTiny85, а также уже оказавшегося упомянутым здесь H-моста L293D.
+
+**Код проекта был написан для платформы Arduino** и может быть запущен с минимальными изменениями (лишь поменять номера ножек) практически на любой плате. Под рукой у меня как раз оказалась Mega. На ней мы и будем всё это собирать. Монтажную плату использовать на этот раз не стал, разместил всё на беспаечной макетке.
+
+У меня не было цели изготовить полностью автономное устройство, так что отталкивался от того, что имелось у меня. Мотать катушку ради устройства, с которым я поиграюсь десять минут, а потом разберу, решительно не хотелось, так что пришлось поискать что-то подходящее в закромах. Очень кстати на глаза попалась коробка с деталями от отслуживших своё принтеров. Шаговики, направляющие, оптопары и платы HVPS оставим для каких-нибудь других опытов, а вот соленоид, из числа тех, что стоят в захватывающем механизме лазерных принтеров, будет в самый раз.
+
+![](image18.jpg)
+
+Отсоединяем от него подвижную часть (аккуратно, чтобы не потерять пружинку, нам ведь, как-никак, потом это ещё и назад ставить), и, в общем-то, всё.
+
+Собираем схему. Выводы ENABLE, A и B L293D подключаем к цифровым пинам МК, питание логики — к пяти вольтам, питание нагрузки — к двенадцати (вообще, соленоид рассчитан на двадцать четыре вольта, но в данном опыте я бы столько не подавал, так как можно и саму головку намагнитить). Теперь забиваем свой дамп карты и заливаем скетч. Всё, можно пробовать.
+![](image19.jpg)
+
+![](image20.jpg)
+Прижимаем катушку к считывателю, жмём кнопку… и всё успешно срабатывает с первого раза, в открытом «Блокноте» появляется наш номер карты.
+
+
+
+Ну, где считыватель, там и POS-terminal. И на нём это тоже прекрасно срабатывает. Всё так, как нам хотелось.
+Принцип работы этого эмулятора крайне прост — программа рассчитывает чётность и контрольное значение для заданной дорожки, после чего воспроизводит её на катушке при помощи H-моста, позволяющего менять полярность. По идее, если подключить записывающую головку и энкодер, а подачу тока завязать не на фиксированные тайминги, а на сигналы с энкодера, то можно даже создать устройство для записи карт.
+
+### Размагничивание
+
+Как показала парочка опытов, высококоэрцитивные карты весьма стойко переносят нахождение рядом с металлическими предметами и даже кратковременное присутствие магнита.
+
+Пластиковый и ферритовый магниты вообще не смогли оказать влияния на магнитную полосу. Стереть данные удалось только неодимовым магнитом, проведя им по полосе.
+
+Так что носить магнитные карты в кошельках с магнитными застёжками или с некоторыми ключами (например, Mottura выпускала замки, ключи от которых содержали неодимовые магниты) всё-таки не стоит.
+
+![](image21.png)
+
+Также не стоит забывать и про банальный износ карты. В своё время выпускавшиеся магнитные карты Maestro буквально расслаивались от частого использования, разумеется, переставая при этом читаться.
+
+### Итог
+
+В банковской сфере магнитные карты уже уходят в историю. Крупнейшие платёжные системы уже заявили о прекращении выпуска карт с магнитной полосой буквально через пять лет.
+
+И даже в других областях, где такие карты применялись, RFID постепенно берёт своё.
+
+Безусловно, RFID или смарт-карты использовать сейчас намного проще и дешевле. Впрочем, совершенно уверен, что все эти материалы смогут кому-то пригодиться.
+
+---
+# Вопросы:
+1. Какой алгоритм для считывания карты?
+    - **Получаем строку бит с декодера. Практически нигде не подключают магнитную головку непосредственно к контроллеру, чаще всего используют специальные микросхемы F/2F-декодеров, отправляющие уже почти готовые данные; Определяем начало и конец у полученных данных (поиском старт и стоп-символов); Считываем символы согласно кодировке, у каждого считанного символа проверяем чётность; Вычисляем и сверяем контрольное число; Если ошибок обнаружено не было, выводим готовую строку.**
+    - Магнитная головка отдельно. Она от POS-terminal'а Ingenico 5100. Отчётливо видны три её дорожки;
+    - Снизу резиновые ножки, наклейка с указанием модели, четыре винта, один из которых заклеен гарантийной пломбой;
+    - Схема весьма дубовая и работает даже при существенно далёких от рекомендуемого номинала компонентах;
+2. Какое кодирование используют карты с магнитной полосой?
+    - **F/2F-кодирование для записи данных;**
+    - VX510;
+    - LDATA/C;
+    - MRD531B-L;
+3. За что отвечают две микросхемы на плате
+    - **Одна отвечает за F/2F-декодирование, другая — за обработку данных и их отправку по USB. Перемычками настраивается режим работы;**
+    - MRD531B-L и F/2F-кодирование;
+    - LDATA/C и VX510;
+    - За обработку данных и их отправку по USB;
+4. Сама карта имеет три дорожки, какую кадировку они имеют?
+    - **первая имеет 7 бит кодировку, вторая и третья — 5 бит;**
+    - первая имеет  8 бит кодировку, вторая и третья — 4 бит; ;
+    - первая имеет 9 биткодировку, вторая и третья — 3 бит;
+    - первая имеет 7 биткодировку, вторая и третья — 2 бит;
+
+# Список литературы:
+https://habr.com/ru/company/timeweb/blog/701206/

binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image1.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image10.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image11.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image12.jpg


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image13.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image14.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image15.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image16.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image17.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image18.jpg


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image19.jpg


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image2.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image20.jpg


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image21.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image3.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image4.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image5.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image6.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image7.png


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image8.jpg


binární
ТЗИ/Лекции/ПМ3.2/2.2.750_Карты_доступа/image9.png