Нас попросили помочь с настройкой считывателя смарт-карт на компьютере под управлением Windows 7. Но, это заставило задуматься о том, что произойдет, если мы подключим устройство чтения карт к ноутбуку с Ubuntu и сможем ли мы считать содержание с Thai ID card.
Считыватель смарт-карт EZ100PU
Давайте сначала посмотрим на сам считыватель.

Это устройство для чтения смарт-карт FAST ID EZ100PU, соответствующее стандарту ISO7816. Это страница продукта конкретной модели, но поиск EZ100PU показывает только, что производитель — InfoThink Technology, находящийся в Тайване.
Считыватель смарт-карт USB поставляется с компакт-диском, содержащем драйверы для Windows, Linux, Mac OS и Android, а также SDK с демо-программой и примером кода на C ++, Visual Basic .NET и C #. Как мы увидим далее, драйвер Linux не нужен, поскольку он работает «из коробки».
Конструкция платы (RX-N99B-2) очень проста, имеется только основной чип — USB-контроллер смарт-карт Alcor AU9560. А также можно увидеть область, которая взаимодействует с чипом смарт-карты, в нижней левой части печатной платы.
На другой стороне платы слот для смарт-карт.
Использование считывателя смарт-карт в Ubuntu 18.04
Давайте подключим считыватель к ноутбуку и вставим Thai ID card (контактная смарт-карта).
Смарт-карта автоматически определяется как EMV Smartcard Reader.
[ 3024.839989] usb 3-2: new full-speed USB device number 3 using xhci_hcd
[ 3025.020314] usb 3-2: New USB device found, idVendor=058f, idProduct=9540, bcdDevice= 1.20
[ 3025.020317] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3025.020320] usb 3-2: Product: EMV Smartcard Reader
[ 3025.020322] usb 3-2: Manufacturer: Generic
Пришлось обратиться к Интернету, и мы нашли пост на Linuxmint, объясняющий, как это сделать, основываясь на более раннем посте об испанских идентификационных картах.
Необходимо установить несколько пакетов (примечание: не все могут понадобиться, но важными являются pcscd и pcsc-tools):
sudo apt install libccid pcscd pinentry-gtk2 pcsc-tools libpcsclite-dev libreadline-dev coolkey
Теперь запускаем сканирование на считывателе:
pcsc_scan
PC/SC device scanner
V 1.5.2 (c) 2001-2017, Ludovic Rousseau <ludovic.rousseau@free.fr>
Using reader plug'n play mechanism
Scanning present readers...
0: Alcor Micro AU9560 00 00
Sat Aug 10 10:23:50 2019
Reader 0: Alcor Micro AU9560 00 00
Card state: Card inserted,
ATR: 3B 79 96 00 00 54 48 20 4E 49 44 20 31 32
ATR: 3B 79 96 00 00 54 48 20 4E 49 44 20 31 32
+ TS = 3B --> Direct Convention
+ T0 = 79, Y(1): 0111, K: 9 (historical bytes)
TA(1) = 96 --> Fi=512, Di=32, 16 cycles/ETU
250000 bits/s at 4 MHz, fMax for Fi = 5 MHz => 312500 bits/s
TB(1) = 00 --> VPP is not electrically connected
TC(1) = 00 --> Extra guard time: 0
+ Historical bytes: 54 48 20 4E 49 44 20 31 32
Category indicator byte: 54 (proprietary format)
Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
NONE
Updating /home/jaufranc/.cache/smartcard_list.txt using http://ludovic.rousseau.free.fr/softwares/pcsc-tools/smartcard_list.txt
Possibly identified card (using /home/jaufranc/.cache/smartcard_list.txt):
3B 79 96 00 00 54 48 20 4E 49 44 20 31 32
Thai (passport)
Обнаружен Alcor Micro AU9560, и он обнаруживает тайский паспорт, возможно потому, что программа, использованная для создания карты, была неправильно настроена.
В smartcard_list.txt есть несколько других кодов специально для карт Thai ID. Вы можете проверить этот файл, чтобы увидеть все виды поддержки карт. Вот некоторые, для справки, с пометкой «Thai»:
Thai GSM UICC (Телекоммуникации)
Thai id card (Другое)
Seven-Eleven Value Card / Умный кошелек — Таиланд (другое)
Thailand National ID (eID)
Thai National ID Card (eID)
Thai National ID Card (eID)
Thai (паспорт)
Truemove H Thailand (Телекоммуникации)
True Money Touch Sim (Таиланд)
Seven-Eleven Value Card/ Умный кошелек — Таиланд (бесконтактный)
Тайский паспорт 2010, 2011
Тайский паспорт 2005
Чтение и декодирование данных с ID Card
Получить доступ к оборудованию можно с помощью считывателя и получить тип карты. Это все хорошо, но было бы хорошо иметь возможность доступа и декодирования данных внутри Thai ID card. Пользователь Github Bouroo написал код для этого на Python и NodeJS.
Сделаем это с помощью скрипта Python. Сначала нам нужно установить некоторые зависимости:
sudo apt install swig python3-pip libncurses-dev
pip install readers pyscard
Теперь мы можем запустить скрипт, и он будет извлекать данные соответственно:
python thai-id-card.py
Available readers:
(0, 'Alcor Micro AU9560 00 00')
Select reader[0]: 0
Using: Alcor Micro AU9560 00 00
ATR: 3B 79 96 00 00 54 48 20 4E 49 44 20 31 32
Select Applet: 61 0A
CID:
TH Fullname:
EN Fullname:
Date of birth:
Gender:
Card Issuer:
Issue Date:
Expire Date:
Address:
На консоли все отображалось правильно, включая имя и адрес, на тайском языке. Сценарий также сохранит фотографию, хранящуюся в удостоверении личности, используя имя файла <CID> .jpg, где CID — это идентификационный номер карточки.
Выражаем свою благодарность источнику с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.