Используем Apple Pay и карту Тройка в качестве пропуска на работу
- Черновик
TL;DR Как мы делали пропускную систему на основе карты Тройка, Apple Pay и любых платежных карт. В статье описывается процесс создания системы контроля доступа (СКУД), в которой в качестве идентификатора может использоваться карта Тройка, любые бесконтактные платежные карты EMV а так же телефоны с Apple Pay и Android Pay. Управление системой происходит через Telegram бота.
Основные задачи системы
- Избавиться от лишних карт — в качестве идентификатора используется то, что уже есть у пользователя: транспортная карта, телефон или платежная карта. Какой идентификатор использовать каждый выбирает сам. Система работает со всеми типами идентификаторов одновременно.
- Избавиться от бюро пропусков и сложных программ управления — нам надоело выдавать/забирать карты у пользователей. Держать отдельные компьютеры для управления пропусками, изучать переусложненные программы
- Управление через Telegram — заведение/удаления пользователей происходит удаленно и не требует компьютера
Пожалуйста, не нужно больше карт
TODO: Заменить картинку. Нарисовать распухший от карт бумажник.
Сейчас каждый хочет всучить вам свою карту: магазины, фитнес-клуб, парковка, работа, скидки-баллы-накопления. Предлагать человеку носить с собой еще одну карту просто невежливо. А учитывая, что карты стандарта 125khz em-marine имеют толщину в три раза больше обычных ISO 7810, это втройне унизительнее.
TODO: Нарисовать сравнение толщины карт 125khz
Почему все СКУД-ы неудобные
Описанное ниже справедливо не для всех случаев. В крупных зданиях с множеством зон доступа, турникетами, охраной, временными пропусками сложные системы СКУД необходимы.
TODO: Здесь подробно о недостатках популярных систем.
Наши условия выглядят так: у нас одна дверь, охраны нет, временных пропусков нет. Единственная задача СКУД-а — ограничить доступ посторонних людей в помещение. В качестве бюро пропусков выступают администраторы которые могут часто меняться и не находиться на месте, поэтому должна быть возможность управлять системой удаленно.
Карта «Тройка» как идентификатор
Карта «Тройка» – пополняемая карта для оплаты проезда на всех видах общественного транспорта Москвы. На задней стороне имеет десятизначный номер. Этот номер используется для удаленного пополнения карты. Номер хранится в секторе памяти карты.
Номе карты Тройка
Сектор памяти хранящий номер карты защищен 6-и байтовым ключом. Однако ключ давно не является секретом и легко находится в интернете по запросу «исследование защищенности карты тройка» вместе с описанием формата хранения данных. Так как мы не собираемся записывать никакие данные на карту, нам достаточно ключа А для чтения нужного сектора.
TODO: показать формат хранения данных?
Apple/Android Pay и банковские карты
TODO: Иллюстрация объединяющая все системы как EMV Contactless Specifications
Все ваши apple pay, android pay, samsung pay, visa pawave, mastercard paypass — суть EMV карты работающие по одному стандарту.
Примеры чтения бесконтактных платежных карт
Cardholder Name: IVAN IVANOV
Track 1 Discretionary data: ........
Track 2 equivalent data: 0A74249172302ED6...
PAN: 5522 9644 0393 6458
Expiry date: 12/2019
Log count: 0
Под спойлером подробное описание как читать EMV карты с листингами кода.
Первый прототип
Было решено использовать в качестве идентификатора пользователя 10-и значный номер. Который будет формироваться из десяти последних цифр PAN номера платежной карты, либо из номера карты Тройка. Идентификатор должен передаваться контроллеру, который будет сверять его с хранящимися в базе номерами и решать открывать дверь или нет.
Всю работу по распознаванию карты должен выполнять считыватель и на выходе отдавать 10-и значный номер. В базе данных достаточно хранить только сами номера без необходимости знать какой тип карты используется.
Так родился первый прототип считывателя на Arduino + PN532 breakout board.
Видео с демонстрацией работы прототипа www.youtube.com/watch?v=aXNvjuRrCQk
Скетч для Arduino показанный в видео выложен здесь github.com/zhovner/Adafruit-PN532 в папке examples/ApplePay_Troyka_ACS
Данный код довольно плохой, потому как чтение PAN номера происходит с большой задержкой, а так же не все EMV карты будут успешно прочитаны из-за некорректного разбора PSE. Однако он позволяет понять общую логику работы.
Считыватель Parsec
Так как на рынке готовых решений не существует устройств даже примерно похожих на то что нам было нужно, мы стали спрашивать у всех производителей СКУД-ов, кто сможет реализовать наши извращенные фантазии в своем оборудовании.
Единственной компанией, которая стала с нами разговаривать были Parsec.ru
В итоге они согласились реализовать наши идеи в прошивке своего считывателя PNR-P03E.
TODO: Безкорпусное исполнение считывателя PNR-P03E. Фото устаревшее?
Считыватель позволяет реализовать любую логику работы с картами стандарта ISO 14443A/B и поддерживает протоколы Wiegand 26, RS-485 и RS-232 для передачи идентификатора карты на контроллер.
Блок-схема иллюстрирующая работу считывателя. При успешном считывании идентификатора, он передается на контроллер по протоколу Wiegand 26.
TODO: Изобразить блок-схему распознавания карты и считывания
Больше информации по считывателю?
Контроллер БОРЕЙ
Контроллер — это устройство, которое хранит базу данных идентификаторов карт и решает кого пропускать а кого нет управляя замком двери. Часто СКУД контроллеры состоят из нескольких блоков управления и компьютера с базой данных. Мы принципиально не хотели держать отдельный компьютер и искали компактное решение в виде одного устройство, которым можно управлять по сети и имеющее API для интеграции с Telegram ботом.
Поиск такого устройства занял больше месяца, пока я не наткнулся на старую статью на хабре Обзор СКУД с бесплатным программным обеспечением. В комментариях пользователь rgmih упомянул, что их компания производит именно такой контроллер. Или убрать это?
Так мы нашли контроллер БОРЕЙ (только большими буквами?) от компании Итриум.
TODO: Картинка лоурезная, переделать
- Полностью автономный — все функции выполняет одно устройство. Для управления не нужно дополнительных программ или отдельного компьютера
- Web интерфейс и JSON API — возможность управлять контроллером из браузера и интегрировать с Telegram ботом
- Подключение по Ethernet
- Идентификаторы произвольной длины до 64 бит — возможность интегрировать контроллер с нестандартными картами вроде наших
TODO: схема подключения контроллера к ридеру, замку
TODO: скриншоты веб-интерфейса?
Бюро пропусков в Telegram
Чтобы каждый раз не обучать нового администратора как пользоваться веб-интерфейсом контроллера, мы решили создать Telegram бота, через которого будет происходить добавление/удаление пропусков.
Вот как выглядит интерфейс бота (на самом деле не так)
TODO: Скриншоты переписки с ботом
Изготовление корпуса считывателя
Корпус еще не готов и пока постить нечего, но вот скетчи предполагаемого варианта.
Во время простоя желтые глаза смотря влево-вправо.