Rutoken-S и терминал Байкал

Добрый вечер, коллеги. Прошу вашей помощи...

В настоящий момент, мы используем Rutoken S для доступа к нашим ресурсам.
Через токен идет аутентификация L2TP over IPSEC и доступ на RDP. Все клиенты работают под Windows, ключи шьются через Rutoken Control Panel.

Нам на тестирование и потенциальное внедрение привезли терминал на процессоре Байкал-1, ОС Debian 8. Мы поставили драйвер с вашего сайта и теперь пытаемся придумать - как реализовать весь аналогичный функционал на этом терминале.

Для начала я попробовал установить OpenSC 0.11, т.к. где-то читал, что до 0.11 была корректная поддержка Rutoken S.
pscs карту видит, pcks11-tool -L выдает Unsupported Card Format.

Вопросы в следующем:
1. Насколько важно использовать OpenSC 0.11? Можно ли использовать более свежие?
2. Правильно ли я понимаю, что OpenSC и Rutoken Control Panel используют разные форматы записи на токен и несовместимы между собой?
3. Что вообще возможно реализовать при помощи RuToken S в Linux "малой кровью"?

Спасибо за ответы!

Re: Rutoken-S и терминал Байкал

Небольшое уточнение.

root@tclient:/usr/local/bin# ./pkcs11-tool -L
[opensc-pkcs11] pkcs15.c:799:sc_pkcs15_bind: returning with: Unsupported card

Re: Rutoken-S и терминал Байкал

Здравствуйте.
Для RDP вообще не нужен opensc и pkcs11 - приложениям rdesktop или FreeRDP нужен лишь доступ к смарт-карточному сервису.
Чтобы Рутокен S в нем виделся нужно установить драйвер отсюда: https://download.rutoken.ru/Rutoken/Dri … .0.4/MIPS/
Для проверки в дебиане загрузите пакет pcsc-tools и запустите pcsc_scan - он должен показать модель токена.
(может потребоваться перезапуск сервиса pcscd)

"L2TP через IPSEC" - это что за приложение у вас работает?

(2018-11-13 14:26:57 отредактировано snussi)

Re: Rutoken-S и терминал Байкал

Добрый день, Кирилл.

Спасибо за ответ!

pcscd карту видит, драйвер мы поставили.
freerdp карту перенаправляет, но после ввода пин-кода виснет служба смарт-карт в windows server 2008r2.
rdesktop карту перенаправил и дал по ней зайти, спасибо большое за идею и помощь.

L2TP через IPSEC - это наш VPN. В windows настраивается стандартными средствами, аутентификация через ту же карту и тот же сертификат. Настройка описана здесь - http://jet.b.users.srcc.msu.ru/#part3.

Я нашел и скомпилировал модифицированный ppp клиент с поддержкой смарткарт (https://sourceforge.net/projects/l2tp-i … vpn/1.1.0/) - без смарткарты подключается, а смарткарту, похоже, не распознает.

Что выдает opensc - я написал выше.

Re: Rutoken-S и терминал Байкал

Спасибо, про VPN теперь понятно.
Эта штука точно взлетит с Рутокеном ЭЦП, но скорее всего потребуется очень сильное колдунство чтобы завести это на Рутокен S.
Да, потребуется взять очень старый OpenSC, версии 0.11.13 и попробовать увидеть ключи записанные через Windows. И там просто точно не будет.

Но если у вас на Байкалах пока ограниченный набор рабочих мест - может лучше сразу рассмотреть вопрос постепенного апгрейда токенов? Модель Рутокен ЭЦП PKI вам полностью подойдет под ваши задачи, а по цене она не сильно отличается от Рутокен S.

Re: Rutoken-S и терминал Байкал

Кирилл Мещеряков пишет:

Да, потребуется взять очень старый OpenSC, версии 0.11.13 и попробовать увидеть ключи записанные через Windows. И там просто точно не будет.

Ок, понятно, спасибо, попробую прогрызть. OpenSC 0.11.13 уже скомпилирован, карту видит и даже что-то с нее читает... Если что-то получится - отпишусь здесь, вдруг кому-то пригодится...
Если вдруг у Вас есть идеи - в какую сторону копать от OpenSC - буду, разумеется, признателен.

Кирилл Мещеряков пишет:

Но если у вас на Байкалах пока ограниченный набор рабочих мест - может лучше сразу рассмотреть вопрос постепенного апгрейда токенов? Модель Рутокен ЭЦП PKI вам полностью подойдет под ваши задачи, а по цене она не сильно отличается от Рутокен S.

К сожалению, у нас уже много закупленных РутокенS...

Re: Rutoken-S и терминал Байкал

Копайте в сторону pkcs11-tool и попытайтесь с помощью него увидеть открытый, закрытый ключ и выполнить подпись.
Если все это получится - считайте, это победа.
Если что-то пойдет не так - пишите.

Re: Rutoken-S и терминал Байкал

Добрый день, Кирилл.

Прошу прощения за глупые вопросы, но не могли бы вы помочь мне кое-в чем разобраться (сразу оговорюсь, что я начинающий "криптограф"):
1. PKCS-15 - это, грубо говоря, файловая система. И, как я понимаю, на рутокене (здесь и далее речь про S), отформатированном под Windows, находится какая-то другая. Не подскажете - какая?
2. Я отформатировал токен под PKCS-15 (как указано в wiki OpenSC, здесь и далее речь про 0.11), он оказался виден под Windows, я записал туда сертификаты (через Rutoken Control panel, Windows), и теперь pkcs11-tool видит токен без ошибок, но не видит на нем объекты (в Windows токен работает). Это означает, что на токене существует теперь две параллельных файловых системы? Или Windows, грубо говоря, размещает "файлы" в других "директориях"?
3. Можно ли как-то посмотреть на код библиотеки rtPKCS11.dll - возможно, мне удастся пересобрать ее под Windows.
4. Через opensc-explorer я вижу файлы в файловой системе на токене, отформатированном под Windows, могу перемещаться по папкам, проходит verify команда с указанием ПИН и прочее. Существует ли описание файловой структуры на токене? Возможно, я буду просто "выдирать" из него ключ, хоть это и небезопасно...

Спасибо за помощь!

Re: Rutoken-S и терминал Байкал

snussi пишет:

PKCS-15 - это, грубо говоря, файловая система. И, как я понимаю, на рутокене (здесь и далее речь про S), отформатированном под Windows, находится какая-то другая. Не подскажете - какая?

Тоже PKCS#15, но немного отличающаяся от той, которая принята в OpenSC

snussi пишет:

Или Windows, грубо говоря, размещает "файлы" в других "директориях"?

Да.

snussi пишет:

Можно ли как-то посмотреть на код библиотеки rtPKCS11.dll - возможно, мне удастся пересобрать ее под Windows.

К сожалению, нет. Код библиотек мы не раскрываем.

snussi пишет:

Возможно, я буду просто "выдирать" из него ключ, хоть это и небезопасно...

Вы можете не выдирать ключ, а экспортировать его в P12 формат из токена (Рутокен S под Windows это поддерживает, если при генерации не стояла галка - неэкспортируемый). Либо сразу можно выписывать в P12.
Потом P12 контейнер, вы с помощью openssl можете разделить на ключи и сертификат и импортировать их через pkcs11-tool или pkcs15-tool

Re: Rutoken-S и терминал Байкал

Кирилл Мещеряков пишет:
snussi пишет:

PKCS-15 - это, грубо говоря, файловая система. И, как я понимаю, на рутокене (здесь и далее речь про S), отформатированном под Windows, находится какая-то другая. Не подскажете - какая?

Тоже PKCS#15, но немного отличающаяся от той, которая принята в OpenSC

А описание этой файловой структуры где-то существует, или является закрытой информацией?

Re: Rutoken-S и терминал Байкал

snussi пишет:

А описание этой файловой структуры где-то существует, или является закрытой информацией?

это тоже закрытая информация

Re: Rutoken-S и терминал Байкал

А можно ли хотя бы утверждать, что файл FFFE - это аналог 5031 в PKCS-15?

Re: Rutoken-S и терминал Байкал

И "вдогонку". Почему-то OpenSSL упорно отказывается воспринимать скачанные файлы в DER-формате (выкачал все, не читает ни один). Они зашифрованы? Или я не так качал?...

Re: Rutoken-S и терминал Байкал

snussi пишет:

А можно ли хотя бы утверждать, что файл FFFE - это аналог 5031 в PKCS-15?

Если мы все правильно понимаем, то это разное
5031 в pkcs15 - это Object Directory File, то есть - это мапфайл, в котором перечислены пути к мапфайлам конкретных типов объектов. Такой ODF один на весь pkcs15

А в родной ФС Рутокен S много файлов FFFE
Каждый из них - это почти мапфайл для конкретного типа объектов (лежит в соответствующей этому типу объектов папке и перечисляет id этих объектов - относительные пути)

Если проводить аналогии, то FFFE - это приблизительно то же самое, что и файлы, указатели на которые лежат в 5031 в pkcs15 с некоторыми оговорками:
1) насчет пути - в FFFE путь относительный, в тех файлах, на которые указывает 5031 - абсолютные;
2) в файлах, на которые указывает 5031, могут лежать не только пути до всех объектов какого-то типа, но и некоторые атрибуты этих объектов (например, CKA_LABEL для CKO_DATA),
а в FFFE лежат вроде только id EF-файлов соответствующего типа, а уже в этих EF-файлах - атрибуты

snussi пишет:

И "вдогонку". Почему-то OpenSSL упорно отказывается воспринимать скачанные файлы в DER-формате (выкачал все, не читает ни один). Они зашифрованы? Или я не так качал?...

так, увы, не понятно.
покажите что именно вы качаете с карты (Лучше командами)

Re: Rutoken-S и терминал Байкал

Добрый вечер, Кирилл.
Спасибо за вашу помощь!

Кирилл Мещеряков пишет:
snussi пишет:

А можно ли хотя бы утверждать, что файл FFFE - это аналог 5031 в PKCS-15?

Если мы все правильно понимаем, то это разное

Ок, понятно, спасибо!

Кирилл Мещеряков пишет:
snussi пишет:

И "вдогонку". Почему-то OpenSSL упорно отказывается воспринимать скачанные файлы в DER-формате (выкачал все, не читает ни один). Они зашифрованы? Или я не так качал?...

так, увы, не понятно.
покажите что именно вы качаете с карты (Лучше командами)

Попробую объяснить.
С картой я "общаюсь" при помощи opensc-explorer.
В папке 3F00/0000/0000/0001/8001/8001 присутствуют файлы (X - порядковый номер сертификата):
020X - 134 байта
220X - 282 байта
030X - 1432 байта
FFFE - с ним уже все выяснили.
По моим ощущениям, в одном из первых трех должен содержаться сертификат или публичный ключ.
В файлах 030X содержатся куски наших OU.
Я попробовал прогнать все три через OpenSSL:

openssl x509 -text -noout -inform DER -in ./3F00_0000_0000_0001_8001_8001_0200 
unable to load certificate
2001803288:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1199:
2001803288:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:374:Type=X509
openssl x509 -text -noout -inform DER -in ./3F00_0000_0000_0001_8001_8001_2200 
unable to load certificate
2004080664:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1199:
2004080664:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:374:Type=X509
openssl x509 -text -noout -inform DER -in ./3F00_0000_0000_0001_8001_8001_0300 
unable to load certificate
1998739480:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:157:

Есть еще два "подозрительных файла":
3F00/0000/0000/0002/1001/C001 - 282 байта
3F00/0000/0000/0002/1003/4001 - 1308 байт
Тоже не парсятся.
Ну и есть два файла, не читающихся без пин-кода, но туда я пока не лезу.