Хранение ключей на токенах и смарт-картах обеспечивает дополнительную защиту от внешних и внутренних нарушителей, в том числе имеющих определенный уровень доступа к информационной системе и оборудованию.
Сегодня я расскажу, как мы защищаем ключи шифрования и электронной подписи в наших информационных системах, и сделаю это в подробном, хорошо проиллюстрированном руководстве по настройке SUSE Linux Enterprise Server 12 SP3 для работы с токеном Aladdin JaCarta PKI и КриптоПро CSP KC2 4.0.9944.
Опубликовать данное руководство побудило несколько причин:
Причина 1
Официальная документация на Aladdin-RD JaCarta больше адаптирована под операционные системы Astra Linux и ALT Linux, сертифицированные в Минобороны, ФСТЭК и ФСБ как средства защиты информации.
Причина 2
Лучшая инструкция по настройке взаимодействия с аппаратными носителями в Linux, которую удалось найти, была также от wiki.astralinux.ru — Работа с КриптоПро CSP
Причина 3
В процессе настройки среды и оборудования выяснилось, что носитель, первым оказавшийся в распоряжении, был вовсе не JaCarta PKI Nano, как ожидалось, а SafeNet Authentication Client eToken PRO с микроконтроллером Gemalto на борту в корпусе JaCarta PKI Nano.
Этот eToken PRO относился к партии, выпущенной до 1 декабря 2017 года.
После этой даты компания «Аладдин Р.Д.» прекратила продажу устройств eToken PRO (Java) в связи с завершением поддержки и поставок производителем — компанией Gemalto, к слову, чуть раньше поглотившей SafeNet, Inc.
Забегая немного вперед, нужно сказать, что работа с ним настраивалась через соответствующие драйверы — SafenetAuthenticationClient-10.0.32-0.x86_64, которые можно получить только в поддержке Аладдин Р.Д. по отдельной online заявке.
В КриптоПро CSP для работы с этим токеном требовалось установить пакет cprocsp-rdr-emv-64 | EMV/Gemalto support module.
Данный токен определялся и откликался. При помощи утилиты SACTools из пакета SafenetAuthenticationClient можно было выполнить его инициализацию. Но при работе с СКЗИ он вел себя крайне странно и непредсказуемо.
Проявлялось это следующим образом, на команду:
csptest -keyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] (205D325E5842) 00 00\alfa_shark' -check
Выдавался ответ, что все хорошо:
[ErrorCode: 0x00000000]
Но сразу после попытки зачитать ключи программно эта же проверка начинала выдавать ошибку:
[ErrorCode: 0x8009001a]
Согласно перечню кодов ошибок объектной модели компонентов Microsoft COM Error Codes (Security and Setup)
NTE_KEYSET_ENTRY_BAD
0x8009001A
Keyset as registered is invalid.
«Невалидный набор ключей» — причина такого сообщения, возможно, кроется либо в старом чипе, прошивке и апплете Gemalto, либо в их драйверах для ОС, которые не поддерживают новые стандарты формирования ЭП и функции хэширования ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012.
В таком состоянии токен блокировался. СКЗИ начинало показывать неактуальное состояние считывателя и ключевого контейнера. Перезапуск службы криптографического провайдера cprocsp, службы работы с токенами и смарт-картами pcscd и всей операционной системы не помогали, только повторная инициализация.
Справедливости ради требуется отметить, что SafeNet eToken PRO корректно работал с ключами ГОСТ Р 34.10-2001 в ОС Windows 7 и 10.
Можно было бы попробовать установить СКЗИ КриптоПро CSP 4.0 ФКН (Gemalto), но целевая задача — защитить наши ключи ЭП и шифрования с помощью сертифицированных ФСБ и ФСТЭК изделий семейства JaCarta, в которых поддерживаются новые стандарты.
Проблему удалось решить, взяв настоящий токен JaCarta PKI в (XL) обычном корпусе.
Но на попытки заставить работать Safenet eToken PRO времени было потрачено немало. Хотелось обратить на это внимание и, возможно, кого-то оградить от подобного.
Причина 4
Иногда самому требуется вернуться к старым статьям и инструкциям. Это удобно, когда информация размещена во внешнем источнике. Так что спасибо Хабру за предоставленную возможность.
Руководство по настройке
После установки токена JaCarta PKI в USB порт сервера и запуска системы проверяем, что новое устройство обнаружено и появилось в списке:
lsusb
В нашем случае это Bus 004 Device 003: ID 24dc:0101
Для диагностики считывателей можно воспользоваться утилитой pcsc-tools из проекта security:chipcard (software.opensuse.org).
Запускается командой:
pcsc_scan
Пока не установлены все необходимые пакеты, информация о токене не отобразится.
Установка драйверов и ПО для работы с JaCarta PKI
На странице Поддержки сайта «Аладдин Р.Д.» загружаем Документацию и программное обеспечение для работы только с JaCarta PKI
Согласно Руководству по внедрению «JaCarta для Linux» пункт 4.2., первым делом требуется установить пакеты pcsc-lite, ccid и libusb.
Для работы утилиты управления JaCarta необходимо установить следующие компоненты:Выполняем проверку наличия этих пакетов и установку:
- PC/SC Lite — промежуточный слой для обеспечения доступа к смарт-картам по стандарту PC/SC, пакет pcsc-lite.
- Библиотеки ccid и libusb для работы с USB-ключами, смарт-картами и считывателями смарт-карт.
zypper search pcsc-lite
zypper search libusb
zypper install pcsc-lite
zypper search CCID
zypper install pcsc-ccid
zypper search CCID
zypper install libusb
В итоге пакет pcsc-lite был обновлен, CCID установлен, libusb никаких действия не требовалось.
Следующими двумя командами выполняем установку пакета с драйверами и программным обеспечением непосредственно для работы с JaCarta PKI:
zypper install idprotectclientlib-637.03-0.x86_64.rpm
zypper install idprotectclient-637.03-0.x86_64.rpm
Проверяем, что драйверы и ПО для JaCarta PKI установились:
zypper search idprotectclient
При попытках заставить работать SafeNet eToken PRO я нашел информацию, что предустановленный в SLES пакет openct — Library for Smart Card Readers может конфликтовать с pcsc-lite — PCSC Smart Cards Library, установку которого требует руководство Аладдин Р.Д.
zypper search openct
Поэтому пакет openct удаляем:
rpm -e openct
Теперь все необходимые драйверы и ПО для работы с токеном установлены.
Выполняем диагностику с помощью утилиты pcsc-tools и убеждаемся, что JaCarta определяется в операционной системе:
pcsc_scan
Установка пакетов КриптоПро CSP
При установке КриптоПро CSP по умолчанию нужные пакеты для работы с токенами и смарт-картами отсутствуют.
zypper search cprocsp
Выполняем установку в CSP компонента поддержки JaCarta components for CryptoPro CSP
zypper install cprocsp-rdr-jacarta-64-3.6.408.683-4.x86_64.rpm
Некоторые компоненты имеют зависимости. Так, например, если попытаться выполнить установку пакета поддержки SafeNet eToken PRO cprocsp-rdr-emv-64-4.0.9944-5.x86_64.rpm — EMV/Gemalto support module, то получим сообщение о необходимости сначала установить базовый компонент CSP поддержки считывателей cprocsp-rdr-pcsc-64-4.0.9944-5.x86_64.rpm — PC/SC components for CryptoPro CSP readers:
zypper install cprocsp-rdr-emv-64-4.0.9944-5.x86_64.rpm
Loading repository data...
Reading installed packages...
Resolving package dependencies...
Problem: nothing provides cprocsp-rdr-pcsc-64 >= 4.0 needed by cprocsp-rdr-emv-64-4.0.9944-5.x86_64
Solution 1: do not install cprocsp-rdr-emv-64-4.0.9944-5.x86_64
Solution 2: break cprocsp-rdr-emv-64-4.0.9944-5.x86_64 by ignoring some of its dependencies
Choose from above solutions by number or cancel [1/2/c] (c): c
Устанавливаем базовые пакеты поддержки считывателей и ключевых носителей:
zypper install cprocsp-rdr-pcsc-64-4.0.9944-5.x86_64.rpm
zypper install lsb-cprocsp-pkcs11-64-4.0.9944-5.x86_64.rpm
Теперь можно установить модули для работы с остальными видами носителей и компонент GUI:
zypper install cprocsp-rdr-emv-64-4.0.9944-5.x86_64.rpm
zypper install cprocsp-rdr-novacard-64-4.0.9944-5.x86_64.rpm
zypper install cprocsp-rdr-mskey-64-4.0.9944-5.x86_64.rpm
zypper install cprocsp-rdr-gui-gtk-64-4.0.9944-5.x86_64.rpm
Проверяем итоговую конфигурацию КриптоПро CSP:
zypper search cprocsp
Loading repository data...
Reading installed packages...
S | Name | Summary | Type
---+-----------------------------+----------------------------------------------------+--------
i+ | cprocsp-curl-64 | CryptoPro Curl shared library and binaris. Build 9944. | package
i+ | cprocsp-rdr-emv-64 | EMV/Gemalto support module | package
i+ | cprocsp-rdr-gui-gtk-64 | GUI components for CryptoPro CSP readers. Build 9944. | package
i+ | cprocsp-rdr-jacarta-64 | JaCarta components for CryptoPro CSP. Build 683. | package
i+ | cprocsp-rdr-mskey-64 | Mskey support module | package
i+ | cprocsp-rdr-novacard-64 | Novacard support module | package
i+ | cprocsp-rdr-pcsc-64 | PC/SC components for CryptoPro CSP readers. Build 9944.| package
i+ | lsb-cprocsp-base | CryptoPro CSP directories and scripts. Build 9944. | package
i+ | lsb-cprocsp-ca-certs | CA certificates. Build 9944. | package
i+ | lsb-cprocsp-capilite-64 | CryptoAPI lite. Build 9944. | package
i+ | lsb-cprocsp-kc2-64 | CryptoPro CSP KC2. Build 9944. | package
i+ | lsb-cprocsp-pkcs11-64 | CryptoPro PKCS11. Build 9944. | package
i+ | lsb-cprocsp-rdr-64 | CryptoPro CSP readers. Build 9944. | package
Чтобы применить изменения, выполняем перезапуск службы криптографического провайдера и проверяем ее статус:
/etc/init.d/cprocsp restart
/etc/init.d/cprocsp status
Настройка и диагностика КриптоПро CSP
Проверим, видит ли криптографический провайдер наш токен и другие доступные типы носителей следующими командами:
/opt/cprocsp/bin/amd64/csptest -card -enum -v –v
/opt/cprocsp/bin/amd64/csptest -enum -info -type PP_ENUMREADERS | iconv -f cp1251
/opt/cprocsp/sbin/amd64/cpconfig -hardware reader -view -f cp1251
Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00 — это наш носитель.
Следуя инструкции КриптоПро CSP для Linux. Настройка, выполняем его регистрацию в криптографическом провайдере:
/opt/cprocsp/sbin/amd64/cpconfig -hardware reader -add "Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00"
В результате выполнения в конфигурационный файл /etc/opt/cprocsp/config64.ini
в раздел [KeyDevices\PCSC] будет добавлена запись:
[KeyDevices\PCSC\"Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00"\Default]
Чтобы выполнить требования Формуляра, Правил пользования и Руководства администратора безопасности КриптоПро CSP:
Использование СКЗИ «КриптоПро CSP» версии 4.0 с выключенным режимом усиленного контроля использования ключей не допускается. Включение данного режима описано в документах ЖТЯИ.00087-01 91 02. Руководство администратора безопасности.Необходимо включить режим усиленного контроля использования ключей:
/opt/cprocsp/sbin/amd64/cpconfig -ini '\config\parameters' -add long StrengthenedKeyUsageControl 1
Проверяем, что режим включен:
cat /etc/opt/cprocsp/config64.ini | grep StrengthenedKeyUsageControl
Выполняем перезапуск службы криптографического провайдера:
/etc/init.d/cprocsp restart
/etc/init.d/cprocsp status
После перезапуска проверяем, что ошибок в работе провайдера с ключевыми носителями нет:
/opt/cprocsp/bin/amd64/csptest -keyset –verifycontext
/opt/cprocsp/bin/amd64/csptest -keyset -verifycontext -enum –unique
CSP (Type:80) v4.0.9017 KC2 Release Ver:4.0.9944 OS:Linux CPU:AMD64 FastCode:REA
AcquireContext: OK. HCRYPTPROV: 16052291
alfa_shark1 |SCARD\JACARTA_4E3900154029304C\CC00\E9F6
OK.
Total: SYS: 0.000 sec USR: 0.000 sec UTC: 4.560 sec
[ErrorCode: 0x00000000]
Работа с токеном JaCarta PKI
Запустим программу Xming (X11 forwarding) на своей станции, чтобы по SSH иметь возможность открывать и работать с графическими интерфейсами нужных утилит.
После установки IDProtectClient — программного обеспечения для работы с JaCarta PKI, на сервере в папке /usr/share/applications появились два файла:
Athena-IDProtectClient.desktop
Athena-IDProtectManager.desktop
Это ярлыки, в которых можно посмотреть параметры запуска утилит Exec=/usr/bin/SACTools
Запустим утилиту IDProtectPINTool.
С помощью нее задаются и меняются PIN-коды доступа к токену.
/usr/bin/IDProtectPINTool
При первой инициализации токена будет полезна ссылка, содержащая PIN-коды (пароли) ключевых носителей по умолчанию
Программа IDProtect_Manager позволяет просматривать информацию о токене и контейнере с ключами и сертификатом:
/usr/bin/IDProtect_Manager
Для доступа к контейнеру с ключами нужно ввести пароль:
Для работы с SafeNet Authentication Client eToken PRO существуют аналогичные программы — SafeNet Authentication Client Monitor и SafeNet Authentication Client Tools, которые запускаются так:
/usr/bin/SACMonitor
/usr/bin/SACTools
Выполнять операции непосредственно с ключевыми контейнерами удобнее в интерфейсе криптографического провайдера КриптоПро JavaCSP:
/jdk1.8.0_181/jre/bin/java ru.CryptoPro.JCP.ControlPane.MainControlPane
Для отображения информации о содержимом контейнера с ключами можно выполнить команду:
/opt/cprocsp/bin/amd64/csptest -keyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\alfa_shark1' -info
Для диагностики контейнера используется эта же команда с ключом –check
/opt/cprocsp/bin/amd64/csptest -keyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\alfa_shark' –check
Потребуется ввести пароль от контейнера:
Программное извлечение ключей
В общем виде пример извлечения закрытого ключа и сертификата открытого ключа из контейнера на токене с помощью КриптоПро Java CSP следующий:
import ru.CryptoPro.JCP.KeyStore.JCPPrivateKeyEntry;
import ru.CryptoPro.JCP.params.JCPProtectionParameter;
KeyStore keyStore = KeyStore.getInstance("Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00", "JCSP");
keyStore.load(null, null);
JCPPrivateKeyEntry entry = null;
X509Certificate certificate = null;
PrivateKey privateKey = null;
try {
entry = (JCPPrivateKeyEntry) keyStore.getEntry(keyAlias,
new JCPProtectionParameter(pwd));
certificate = (X509Certificate) entry.getCertificate();
privateKey = entry.getPrivateKey();
} catch (UnrecoverableEntryException | NullPointerException e) {
LOGGER.log(Level.WARNING, PRIVATE_KEY_NOT_FOUND + keyAlias + ExceptionUtils.getFullStackTrace(e));
}
Если действовать так:
Key key = keyStore.getKey(keyAlias, pwd);
то криптографический провайдер будет пытаться в системе отобразить через консоль или GUI окно запрос на ввод пароля к контейнеру.
Результаты
Отторгаемый ключевой носитель-токен установлен во внутренний USB-порт сервера.
Само серверное оборудование опломбировано и размещается в помещении с ограниченным доступом.
Такие меры позволяют повысить уровень защиты наших информационных систем от кражи и компрометации ключей электронной подписи или шифрования, как удаленно по сети, так и физически.
Полезные ссылки
- Документация Aladdin-RD JaCarta
- wiki.astralinux.ru — Работа с КриптоПро CSP
- Перечень кодов ошибок объектной модели компонентов Microsoft COM Error Codes (Security and Setup)
- СКЗИ КриптоПро CSP 4.0 ФКН (Gemalto)
- Утилита диагностики считывателей pcsc-tools из проекта security:chipcard (software.opensuse.org)
- КриптоПро CSP для Linux. Настройка.
- Aladdin-RD PIN-коды (пароли) ключевых носителей по умолчанию
Комментарии (20)
kovserg
13.03.2019 19:52Не могли бы вы дополнить «Программное извлечение ключей» сохранение приватного ключа в pem-файл.
vburmistrov Автор
14.03.2019 09:53Так тут все просто. В общем виде сохранить Java сериализованный ключ можно так:
FileOutputStream fos = new FileOutputStream(new File("key.pem")); fos.write(Base64.encodeToByte(privateKey.getEncoded(), false)); fos.close();
Только не советую это делать. Да и не вижу реальных пользовательских кейсов для такого в программном обеспечении.
Если надо куда-то скопировать, экспортировать ключи, то лучше это сделать руками в СКЗИ.
В ПО наоборот надо позаботиться о безопасности ключа и пароля от контейнера. Пароль разделяем, шифруем и прячем. Склеиваем, расшифровываем пароль в потоке для одноразового чтения, извлекаем ключ и храним в памяти доли секунды для непосредственного использования.
rlepricon
15.03.2019 00:11Этот eToken PRO относился к партии, выпущенной до 1 декабря 2017 года.
После этой даты компания «Аладдин Р.Д.» прекратила продажу устройств eToken PRO (Java) в связи с завершением поддержки и поставок производителем — компанией Gemalto, к слову, чуть раньше поглотившей SafeNet, Inc.
Это не совсем корректная информация. Ключи eToken Pro Java продаются и поддерживаются компанией Gemalto. Более того, линейка развивается и выходят новые версии ключей: habr.com/ru/post/281256
Забегая немного вперед, нужно сказать, что работа с ним настраивалась через соответствующие драйверы — SafenetAuthenticationClient-10.0.32-0.x86_64, которые можно получить только в поддержке Аладдин Р.Д. по отдельной online заявке.
Middleware, наверное, всё же лучше запрашивать у производителя или официального дистрибутора продуктов Gemalto.vburmistrov Автор
15.03.2019 09:20Это не совсем корректная информация. Ключи eToken Pro Java продаются и поддерживаются компанией Gemalto. Более того, линейка развивается и выходят новые версии ключей: habr.com/ru/post/281256
Токен, который у нас оказался SafeNet, был куплен в Аладдин Р.Д. Есть номер договора, дата и партия, в которой он состоял.
Первоначально возникло недоразумение, все считали, в том числе поддержка Аладдин Р.Д., что он JaCarta PKI, а факты работы с ним через SAC Tools, а не IDProtect, доказали обратное. И на тот момент он был уже в опломбированном сервере в удаленном ВЦ.
Middleware, наверное, всё же лучше запрашивать у производителя или официального дистрибутора продуктов Gemalto.
Разумное утверждение.
Мы и запросили там, где покупали — у официального дистрибьютора продуктов Gemalto, которым был Аладдин Р.Д вплоть до 1 декабря 2017 года, согласно информации на сайте Аладдин Р.Д
grey42
15.03.2019 09:49+1Добрый день.
Хотелось бы некоторые вещи уточнить.
1) Для работы с таким токеном не нужен ни пакет pkcs11, ни emv. Пакет emv предназначен для банковских карт Gemalto (в основном это семейство Optelio), а не токенов.
2) Для работы с JaCarta достаточно поставить пакет cprocsp-rdr-jacarta из состава провайдера.
3) Действительно, существуют некоторые токены компании Аладдин, которые бинарно повторяют токены компании SafeNet и отличить их невозможно. Иногда они работают через софт SafeNet, иногда нет.
4) Официальной поддержки токенов SafeNet на Linux в КриптоПро CSP нет и пока не планируется.vburmistrov Автор
15.03.2019 10:01Здравствуйте!
По пункту 2, да, для JaCarta достаточно — cprocsp-rdr-jacarta.
Другие пакеты оставил исключительно для иллюстрации:
cprocsp-rdr-novacard-64-4.0.9944-5.x86_64.rpm
cprocsp-rdr-mskey-64-4.0.9944-5.x86_64.rpm
Спасибо за уточнения!
saipr
Т.е. речь не идет о токенах с поддержкой интерфейса PKCS#11 и российской криптографии на них? Словосочетание "ключевые носителм" фактически подразумевают хранение ключа на влешке, пусть даже с PIN-кодом?!
vburmistrov Автор
Заголовок обобщенный. Речь идет о токенах с поддержкой интерфейса PKCS#11 и российской криптографии на них. Руководство так же косвенно может помочь настроить работу с флэшкой и поместить на нее HDIMAGE программный контейнер с ключами.
saipr
Странно, не увидел ни одного примера про интерфейс PKCS#11. Какие ГОСТ-ы поддерживает? Можно увидеть какие механизмы поддерживает JaCarta по аналогии:
Утилиту можно найти здесь.
vburmistrov Автор
Не совсем понимаю, что именно ищете в данном руководстве про PKCS#11
Чтобы работать с токенами в КриптоПро CSP устанавливается модуль поддержки cryptographic token interface:
lsb-cprocsp-pkcs11-64 | CryptoPro PKCS11
Токены JaCarta аппаратно поддерживают новые российские криптографические алгоритмы ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012
saipr
Мне не нужно, как и многим, КриптоПро CSP. Если Токены JaCarta аппаратно поддерживают новые российские криптографические алгоритмы ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012 и имеют интерфейс PKCS#11 по TK-26 я их смогу спокойно использовать для доступа на ГОСУСЛУГИ и никакой CSP не нужен. Итак, вопрос могу я напрямую по интерфейсу PKCS#11 работать с JavaCasrte, включая генерацию ключа, формирование подписи, ее проверку. Т.е. какие механизмы JavaCarta поддерживает?
vburmistrov Автор
Уважаемый, Владимир Николаевич!
Во первых не JavaCarta, а JaCarta.
Вы с представленным руководством ознакомились? Цель и тема его несколько иная.
Во вторых я бы не хотел дополнительно рекламировать продукцию организации, выпускающей эти токены. А ответы на интересующие Вас вопросы Вы можете найти у них на сайте и в отделе продаж.
grey42
JaCarta PKI равно как и eToken Pro никакой встроенной криптографией не обладают, а являются простыми пассивными ключевыми носителями (обычные ISO7816-совместимые). Если хочется использовать их через PKCS#11, есть пакет cprocsp-rdr-pkcs11, который реализует указанный интерфейс.
vburmistrov Автор
Только все-таки:
Криптография есть, но зарубежная. Что позволяет:
grey42
Профессиональная деформация, извините. «Нет ГОСТ-ов» уже всегда крепко идентично «нет криптографии» :)
saipr
Интересная дискуссия сейчас идет здесь примерно по этому же поводу.
saipr
Вопрос в том, что вы предлагаете обманку. А за такое конкретное расъяснение спасибо. Т.е. ни одного из ГОСТ-ых механизмов на JaCarta PKI равно как и eToken Pro и в помине нет.
Как он его частично реализует я видел. Это тоже имеет слабое отношение к PKCS11 v.2.40 в редакции того же TK-26.
Еще раз спасибо.
grey42
Я? Я не работаю ни в Аладдине, ни в Gemalto. КриптоПро же никогда никого и не думали вводить в заблуждение. Уже пять лет как при любом удобном случае, стараемся объяснять людям, что такое пассивные и активные токены, и какие у них есть плюсы/минусы:
cryptopro.ru/products/fkc/info
cryptopro.ru/blog/2014/12/04/semnye-nositeli-i-bezopasnoe-khranenie-klyuchei
www.youtube.com/watch?v=Kj8krL2NICc
saipr
Очень простой вопрос, какие механизмы поддерживают ваши пассивные и активные токены с их перечислением (и токенов и механизмов).
Ну и самое главное ваши пассивные и активные токены можно заменить любым другим токеном PKCS#11 с поддержкой российской криптографии.
Ну уж и просветите чем отличаются активные от пассивных.
Если у меня есть болт диаметром d и с шагом резьбы z, то к нему подойдет любая гайка с такими же параметрами, не важно КриптоПро или заводик в Урюпинске. А у вас Как?
grey42
Еще раз. Мы не производим никаких токенов, только используем. Еще раз адресую к указанным ссылкам. Также вспомнил о прошлогоднем докладе на Рускрипто:
www.ruscrypto.ru/resource/archive/rc2018/files/07_Agafyin_Borodin.pdf