Подключение USB считывателей СмартToken к операцинной системе Linux.

 Темой блога является материал рабочих заметок, полученный при подключение USB считывателя и смарткарты в окружающей среде операционной системы Linux. В качестве стенда, для демонстрации использовалась рабочая станция ALT Linux KWorkstation xxx с последними обновлениями.

Введение.

 Предположим, есть организация, в которой уществует смешанная среда рабочих станций под управлением операционной системы Windows и linux. В организации развёрнут удостоверяющий центр сертификации, который, из последних сил, выдаёт сертификат открытого и закрытого ключ для записи на токен носитель, токен выполнен в виде смарт карт, Rutoken или Esmart. Наша задача подключить считыватель, подключить смарт карту(ы), проверить чтение информации хранившийся на ней, иметь возможность менять информацию доступную для корректировки. В дальнейшем предполагается добавить интеграцию с КриптоПро и возможность входа/логина с помощью смарт карты или как принято называть, двух факторной авторизации.

 Содержание.

Подготовка.

 устанавливаем пакеты и библиотеки

# apt-get update
# apt-get install pcsc-lite pcsc-lite-ccid pcsc-tools opensc

 установливаем драйвер для считывателя Athena

# apt-get install pcsc-lite-asedriveiiie-usb

 устанавливаем библиотеку rtPKCS11ECP, для RSA и ГОСТ-алгоритмов модели Рутокен

# apt-get install librtpkcs11ecp

 проверяем наличие требуемых пакетов

# rpm -q pcsc-lite-ccid libpcsclite pcsc-tools opensc
pcsc-lite-ccid-1.4.28-alt0.M80P.1
libpcsclite-1.8.22-alt0.M80P.1
pcsc-tools-1.4.27-alt0.M80P.1
opensc-0.19.0-alt2.M80P.

 проверяем наличие библиотек для rutoken

# ldconfig -p|grep librtpkcs11ecp.so
librtpkcs11ecp.so (libc6,x86-64) => /usr/lib64/librtpkcs11ecp.so

 устанавливаем драйвер Рутокен

# apt-get install pcsc-lite-rutokens

 или скачиваем актуальную версию для "ручной" установки...

Загрузки]# apt-get install ifd-rutokens*.x86_64

 устанавливаем драйвер для ESMART карты, проверяем наличие требуемых библиотек

# apt-get install isbc-pkcs11
...
# ldconfig -p|grep libisbc*
libisbc_pkcs11_main.so (libc6,x86-64) => /usr/lib64/libisbc_pkcs11_main.so
libisbc_esmart_token_mod.so (libc6,x86-64) => /usr/lib64/libisbc_esmart_token_mod.so
# ldconfig -p|grep libesmart*
libesmart_token_mskey_mod.so (libc6,x86-64) => /usr/lib64/libesmart_token_mskey_mod.so
libesmart_token_gost_mod.so (libc6,x86-64) => /usr/lib64/libesmart_token_gost_mod.so
# ldconfig -p|grep libEsmart*
libEsmartToken_Javalib.so (libc6,x86-64) => /usr/lib64/libEsmartToken_Javalib.s

 запускаем demon pcscd

# systemctl start pcscd
# systemctl enable pcscd

 Проверка и управление токенами

 проверяем "видимость" считывателя при подключение к ПК

# lsusb
...
Bus 002 Device 003: ID 0dc3:0802 Athena Smartcard Solutions, Inc. ASEDrive IIIe
...

 проверяем установку драйвера считывателя Athena

# usb-devices 
Bus=02 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 4 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0dc3 ProdID=0802 Rev=03.27
S: Manufacturer=Athena Smartcard Solutions
S: Product=ASEDrive IIIe
C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=60mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=usbfs*

 проверяем работу смарткарты Rutoken

# pcsc_scan
PC/SC device scanner
V 1.4.27 (c) 2001-2011, Ludovic Rousseau <Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.>
Compiled with PC/SC lite version: 1.8.18
Using reader plug'n play mechanism
Scanning present readers...
0: AseIIIeUSB 00 00
...
ATR: 3B 9C 96 00 52 75 74 6F 6B 65 6E 45 43 50 73 63
+ TS = 3B --> Direct Convention
+ T0 = 9C, Y(1): 1001, K: 12 (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
TD(1) = 00 --> Y(i+1) = 0000, Protocol T = 0
-----
+ Historical bytes: 52 75 74 6F 6B 65 6E 45 43 50 73 63
Category indicator byte: 52 (proprietary format) Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 9C 96 00 52 75 74 6F 6B 65 6E 45 43 50 73 63
RuToken Light SC

# ctr^C

 комплексная проверка работы считывателя и смарткарты Rutoken

# pkcs11-tool -L --module /usr/lib64/pkcs11/librtpkcs11ecp.so
Available slots:
Slot 0 (0x0): AseIIIeUSB 00 00
token label : test
token manufacturer : Aktiv Co.
token model : Rutoken ECP SC
token flags : login required, rng, SO PIN to be changed, token initialized, PIN initialized, user PIN to be changed
hardware version : 54.2
firmware version : 18.0
serial num : 37866b44
pin min/max : 6/32
Slot 1 (0x1):
(empty)
Slot 2 (0x2):
(empty)
...

 смотрим информацию на токене Rutoken

# pkcs11-tool -Ol --module /usr/lib64/pkcs11/librtpkcs11ecp.so
Using slot 0 with a present token (0x0)
Logging in to "test".
WARNING: user PIN to be changed
Please enter User PIN:
Private Key Object; RSA
label: le-!0412!0445!043e!0434!0441!043e-52423_E
ID: 6c652d2130343132213034343521303433652130343334213034343121303433652d35323432335f45
Usage: decrypt, sign, derive
Public Key Object; RSA 2048 bits
label: le-!0412!0445!043e!0434!0441!043e-52423_E
ID: 6c652d2130343132213034343521303433652130343334213034343121303433652d35323432335f45
Usage: encrypt, verify, derive
Certificate Object; type = X.509 cert
label: le-!0412!0445!043e!0434!0441!043e-52423_E
subject: DN: DC=ru, DC=trest, DC=bany, DC=taziki, OU=\xD0\xA6\xD0\xB5\xD0\xBD\xD1\x82\xD1\x80\xD0\xB0\xD0\xBB\xD1\x8C\xD0\xBD\xD0\xBE\xD0\xB5 \xD1\x82\xD0\xB0\xD0\xBC\xD0\xBE\xD0\xB6\xD0\xB5\xD0\xBD\xD0\xBD\xD0\xBE\xD0\xB5 \xD1\x83\xD0\xBF\xD1\x80\xD0\xB0\xD0\xB2\xD0\xBB\xD0\xB5\xD0\xBD\xD0\xB8\xD0\xB5, OU=\xD0\xA6\xD0\xA2\xD0\xA3, OU=user, OU=baza, CN=bany
ID: 6c652d2130343132213034343521303433652130343334213034343121303433652d35323432335f45
...

 пробуем сменить PIN код на токене Rutoken

# pkcs11-tool --change-pin --module /usr/lib64/pkcs11/librtpkcs11ecp.so 
Using slot 0 with a present token (0x0)
Please enter the current PIN:
...

 инициализация токена Rutoken. Внимание:вся предыдущая информация стирается

# pkcs11-tool --init-token --label EsmartToken --module /usr/lib64/pkcs11/librtpkcs11ecp.so 

 проверяем работу считывателя и смарткарты Esmart

# pkcs11-tool -L --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Available slots:
Slot 0 (0x1): AseIIIeUSB 00 00
token label : ESMART Token
token manufacturer : ISBC
token model : ESMART Token
token flags : login required, rng, SO PIN locked, token initialized, PIN initialized
hardware version : 0.0
firmware version : 2.4
serial num : C07DC072A10B
pin min/max : 4/8

смотрим информацию на токене Esmart

# pkcs11-tool -OL --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Available slots:
Slot 0 (0x1): AseIIIeUSB 00 00
token label : ESMART Token
token manufacturer : ISBC
token model : ESMART Token
token flags : login required, rng, SO PIN locked, token initialized, PIN initialized
hardware version : 0.0
firmware version : 2.4
serial num : C07DC072A10B
pin min/max : 4/8
Using slot 0 with a present token (0x1)
Public Key Object; RSA 2048 bits
label: le-!0412!0445!043e!0434!0441!043e-21067
ID: 6c652d2130343132213034343521303433652130343334213034343121303433652d3231303637
Usage: encrypt, verify
...
Certificate Object; type = X.509 cert
label: le-!0412!0445!043e!0434!0441!043e-21067
subject: DN: DC=ru, DC=trest, DC=bany, DC=taziki, OU=\xD0\xA6\xD0\xB5\xD0\xBD\xD1\x82\xD1\x80\xD0\xB0\xD0\xBB\xD1\x8C\xD0\xBD\xD0\xBE\xD0\xB5 \xD1\x82\xD0\xB0\xD0\xBC\xD0\xBE\xD0\xB6\xD0\xB5\xD0\xBD\xD0\xBD\xD0\xBE\xD0\xB5 \xD1\x83\xD0\xBF\xD1\x80\xD0\xB0\xD0\xB2\xD0\xBB\xD0\xB5\xD0\xBD\xD0\xB8\xD0\xB5, OU=\xD0\xA6\xD0\xA2\xD0\xA3, OU=vasy, OU=bany, CN=vasytaziki
ID: 6c652d2130343132213034343521303433652130343334213034343121303433652d3231303637

 пробуем сменить PIN код на токене Esmart

# pkcs11-tool -Ol --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Logging in to "ESMART Token".
Please enter User PIN:
....
Сменить PIN код на токене (смарткарте) Esmart
# pkcs11-tool --change-pin --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Please enter the current PIN:
...

 инициализация токена Esmart. Внимание:вся предыдущая информация стирается

# pkcs11-tool --init-token --label EsmartToken --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so

 Заключение.

  Во многих ИТ структурах, особенно в государственных учреждениях, широко применяются меры безопасности при работе с информацией личного характера или носящие в себе сведения персональных данных включающие разные уровни защиты от использования сведений не предназначенных для просмотра посторонними лицами в том числе относящиеся к коммерческой и государственной тайне. Для идентификации пользователя на рабочей станции применяется контролер, считыватель и смарт-карта с чипом или заменяющий считыватель и карту USB носитель. В любом случае на карте или USB носителе записывается информация, которая идентифицирует пользователя на ПК сверяя электронный отпечаток владельца с тем который хранится в центре сертификации предприятия. Такая схема применяется повсеместно, не смотря на то какие сведения обрабатываются на этом ПК, конечно дополнительный контролер и алгоритм проверки уменьшает скорость работы рабочей станции, учитывая, что различные структуры  борясь за неприкасаемость электронной информации, включают в ПК дополнительные контролеры безопасности, например для подсчёта контрольных сумм установленных программ, в результате характеристики ПК падают, пользователи жалуются на медленную работу компьютера. Администратору приходится маневрировать, искать оптимальные решения и подходы, выбирать тех производителей "железа" и софта, которые выдерживают совместимость с другими устройствами по безопасности, рекомендуемые политикой безопасности организации. Выстраивая систему безопасности на основе контроля авторизации с помощью карт или USB, администратору следует не забывать, что одного центра CA не достаточно, следует иметь дублирующий СА, где будут храниться копии электронных отпечатков, это защитит организацию от краха, когда основной CA по какой то причине будет не доступен.