Статус: Новичок
Группы: Участники
Зарегистрирован: 02.11.2022(UTC) Сообщений: 1  Откуда: Москва
|
UPD: Вопрос решен переустановкой плагина и КриптоПРО. Скорость 1 подписи стала 600мс, что уже допустимо.
Добрый день. У меня вопрос по скорости и логике работы плагина, когда от него требуется лишь сформировать подпись для готового хеша. Для работы используется Рутокен ЭЦП 2.0 (с неизвлекаемым ключом). Время создания подписи согласно документации - 300мс. Я использовал ваш пример " Вычисление подписи по хэш-значению": https://docs.cryptopro.ru/cades/...%d0%b5%d0%bd%d0%b8%d1%8eКод: function CreateSignature(oCertificate, oHashedData) {
// Создаем объект CAdESCOM.RawSignature
var oRawSignature = cadesplugin.CreateObject("CAdESCOM.RawSignature");
// Вычисляем значение подписи
try {
const startTime = performance.now();
var sRawSignature = oRawSignature.SignHash(oHashedData, oCertificate);
const finishTime = performance.now();
console.log(`SignHash time: ${finishTime - startTime}ms`);
} catch (err) {
alert("Failed to create signature. Error: " + cadesplugin.getLastError(err));
return;
}
return sRawSignature;
}
Замерил время выполнения функции SignHash. Результат очень разочаровал - 6000мс. Я продолжил исследования дальше, подменив librtpkcs11ecp.so на библиотеку-шпион из компалекта SDK. По итогу выяснилось, что 1 вызов SignHash тянет за собой вот такую портянку вызовов на Рутокене: Цитата:{0xC3D0,0xC3D0}: 0: C_GetFunctionList {0xC3D0,0xC3D0}: 1: C_Initialize {0xC3D0,0xC3D0}: 2: C_EX_GetFunctionListExtended {0xC3D0,0xC3D0}: 3: C_GetSlotList {0xC3D0,0xC3D0}: 4: C_GetSlotList {0xC3D0,0xC3D0}: 5: C_GetSlotInfo {0xC3D0,0xC3D0}: 6: C_GetSlotList {0xC3D0,0xC3D0}: 7: C_GetSlotList {0xC3D0,0xC3D0}: 8: C_GetSlotInfo {0xC3D0,0xC3D0}: 9: C_EX_SlotManage {0xC3D0,0xC3D0}: 10: C_OpenSession {0xC3D0,0xC3D0}: 11: C_GetTokenInfo {0xC3D0,0xC3D0}: 12: C_EX_GetTokenInfoExtended {0xC3D0,0xC3D0}: 13: C_GetMechanismList {0xC3D0,0xC3D0}: 14: C_GetMechanismList {0xC3D0,0xC3D0}: 15: C_GetTokenInfo {0xC3D0,0xC3D0}: 16: C_EX_GetTokenInfoExtended {0xC3D0,0xC3D0}: 17: C_FindObjectsInit {0xC3D0,0xC3D0}: 18: C_FindObjects {0xC3D0,0xC3D0}: 19: C_FindObjectsFinal {0xC3D0,0xC3D0}: 20: C_GetAttributeValue {0xC3D0,0xC3D0}: 21: C_GetAttributeValue {0xC3D0,0xC3D0}: 22: C_FindObjectsInit {0xC3D0,0xC3D0}: 23: C_FindObjects {0xC3D0,0xC3D0}: 24: C_FindObjectsFinal {0xC3D0,0xC3D0}: 25: C_GetAttributeValue {0xC3D0,0xC3D0}: 26: C_GetAttributeValue {0xC3D0,0xC3D0}: 27: C_GetAttributeValue {0xC3D0,0xC3D0}: 28: C_GetAttributeValue {0xC3D0,0xC3D0}: 29: C_GetSessionInfo {0xC3D0,0xC3D0}: 30: C_GetTokenInfo {0xC3D0,0xC3D0}: 31: C_EX_GetTokenInfoExtended {0xC3D0,0xC3D0}: 32: C_GetSessionInfo {0xC3D0,0xC3D0}: 33: C_GetTokenInfo {0xC3D0,0xC3D0}: 34: C_EX_GetTokenInfoExtended {0xC3D0,0xC3D0}: 35: C_GetSessionInfo {0xC3D0,0xC3D0}: 36: C_GetTokenInfo {0xC3D0,0xC3D0}: 37: C_EX_GetTokenInfoExtended {0xC3D0,0xC3D0}: 38: C_FindObjectsInit {0xC3D0,0xC3D0}: 39: C_FindObjects {0xC3D0,0xC3D0}: 40: C_FindObjectsFinal {0xC3D0,0xC3D0}: 41: C_GetAttributeValue {0xC3D0,0xC3D0}: 42: C_GetAttributeValue {0xC3D0,0xC3D0}: 43: C_FindObjectsInit {0xC3D0,0xC3D0}: 44: C_FindObjects {0xC3D0,0xC3D0}: 45: C_FindObjectsFinal {0xC3D0,0xC3D0}: 46: C_GetAttributeValue {0xC3D0,0xC3D0}: 47: C_GetAttributeValue {0xC3D0,0xC3D0}: 48: C_GetAttributeValue {0xC3D0,0xC3D0}: 49: C_GetAttributeValue {0xC3D0,0xC3D0}: 50: C_FindObjectsInit {0xC3D0,0xC3D0}: 51: C_FindObjects {0xC3D0,0xC3D0}: 52: C_FindObjectsFinal {0xC3D0,0xC3D0}: 53: C_FindObjectsInit {0xC3D0,0xC3D0}: 54: C_FindObjects {0xC3D0,0xC3D0}: 55: C_FindObjectsFinal {0xC3D0,0xC3D0}: 56: C_GetAttributeValue {0xC3D0,0xC3D0}: 57: C_GetAttributeValue {0xC3D0,0xC3D0}: 58: C_GetSessionInfo {0xC3D0,0xC3D0}: 59: C_GetTokenInfo {0xC3D0,0xC3D0}: 60: C_EX_GetTokenInfoExtended {0xC3D0,0xC3D0}: 61: C_Logout {0xC3D0,0xC3D0}: 62: C_Login {0xC3D0,0xC3D0}: 63: C_FindObjectsInit {0xC3D0,0xC3D0}: 64: C_FindObjects {0xC3D0,0xC3D0}: 65: C_FindObjectsFinal {0xC3D0,0xC3D0}: 66: C_SignInit {0xC3D0,0xC3D0}: 67: C_Sign {0xC3D0,0xC3D0}: 68: C_Sign {0xC3D0,0xC3D0}: 69: C_CloseSession
Хотел бы теперь задать следующие вопросы: 1. У меня всего 1 сертификат и 1 Рутокен, почему так медленно работает плагин? 2. Зачем так много вызовов? Можно ли как-то заставить плагин не инициализировать Рутокен каждый раз, когда вызывается SignHash? Допустим, я хочу подписать 100 хешей. Как я это вижу: Цитата:Иниализировать токен Открыть сессию Найти приватный ключ по сертификату Подписать первый хеш Подписать второй хеш ... Подписать сотый хеш Завершить сессию Как происходит сейчас при использовании плагина: Цитата:Иниализация токена Открытие сессии Получение информации о характеристиках и доступных механизмах токена Прочие необъяснимые операции по поиску объектов на токене Поиск приватного ключа по сертификату Подпись первого хеша Завершение сессии
СНОВА Иниализация токена СНОВА Открытие сессии .... .... СНОВА Завершение сессии
Можно ли каким-либо способом ускорить процесс подписания хешей?
Linux Mint 5.15.0-52-generic #58~20.04.1-Ubuntu КриптоПРО CSP 5.0.12500 Версия плагина: 2.0.14589 Версия криптопровайдера: 5.0.12500 Криптопровайдер: Crypto-Pro GOST R 34.10-2012 KC1 CSP Платформа: Linux UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 (Chromium GOST) /opt/cprocsp/bin/amd64/certmgr -listКод:Certmgr 1.1 (c) "Crypto-Pro", 2007-2022.
Program for managing certificates, CRLs and stores.
=============================================================================
1-------
Issuer : ИНН ЮЛ=7717107991, E=info@cryptopro.ru, ОГРН=1037700085444, C=RU, S=77 Москва, L=Москва, STREET=ул. Сущёвский вал д. 18, O="ООО ""КРИПТО-ПРО""", CN="Тестовый подчиненный УЦ ООО ""КРИПТО-ПРО"" ГОСТ 2012 (УЦ 2.0)"
Subject : C=RU, SN=###, CN=###
Serial : 0x048533D7003DAF4DBE498E518636FDCD6D
SHA1 Thumbprint : 2c1fb96dd6ba0a7516053488980a6e17b699c788
SubjKeyID : e5f0f897da7a8b7f0fe676910dbe522c1d1ccef8
Signature Algorithm : ГОСТ Р 34.11-2012/34.10-2012 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits)
Not valid before : 25/10/2022 11:55:16 UTC
Not valid after : 25/01/2023 12:05:16 UTC
PrivateKey Link : Yes
Container : SCARD\pkcs11_rutoken_ecp_404f5c02\9f3c84ce0-8798-1bbd-1e53-d624f495431
Provider Name : Crypto-Pro GOST R 34.10-2012 KC1 CSP
Provider Info : Provider Type: 80, Key Spec: 1, Flags: 0x0
Identification Kind : Without personal presence by international passport
OCSP URL : http://testca2012.cryptopro.ru/ocsp2/ocsp.srf
CA cert URL : http://testca2012.cryptopro.ru/aia/83c2bcc9f60421fa3fcee75ae414f1fb9d73396f.crt
CDP : http://testca2012.cryptopro.ru/cdp/83c2bcc9f60421fa3fcee75ae414f1fb9d73396f.crl
Extended Key Usage : 1.3.6.1.5.5.7.3.4 Защищенная электронная почта
1.3.6.1.5.5.7.3.2 Проверка подлинности клиента
1.2.643.2.2.34.6 Пользователь Центра Регистрации, HTTP, TLS клиент
=============================================================================
Отредактировано пользователем 4 ноября 2022 г. 11:04:48(UTC)
| Причина: Не указана
|