12.04.2007 14:43:51Производительность проверки эцп Ответов: 1
Алексей П.
Сервер приложений должен проверяет подпись над большим количеством доккументов.
Для теста вызываю проверку подписи 1000 раз при уже подсчитанном хэше. По времени это занимает ~12-15 сек на pentium4 2,4 МГц.
Хотелось бы ускорить проверку в несколько раз. Возможно ли это, я что-то не так делаю или это ограничение по скорости вызванно сложностью алгоритма?

я делаю так:
...
// уже подсчитан хэш, вызываем проверку подписи хэша
for (int i = 0; i < 1000; i++)
if (hash.VerifyHashSign(cer, sign))
return;
...

DWORD CryptoHash::VerifyHashSign(Certificate& VerifyCert, byte_buffer /*in*/ &sign)
{
CryptoKey pubKey;
if (!CryptImportPublicKeyInfo(provider.Handle(),
X509_ASN_ENCODING || PKCS_7_ASN_ENCODING,
&VerifyCert.GetContext()->pCertInfo->SubjectPublicKeyInfo,
&pubKey.Handle()))
return HandleError(GetLastError(), ERR_PUBLIC_KEY);
if (!CryptVerifySignature(hHash, sign.c_ptr(), sign.size(),
pubKey.Handle(), 0, 0))
{
DWORD dwErr = GetLastError();
if (NTE_BAD_SIGNATURE == dwErr)
return HandleError(dwErr, ERR_BAD_SIGNATURE);
return HandleError(dwErr, ERR_VERIFY_SIGN);
}
return 0;
}
 
Ответы:
12.04.2007 18:30:05Андрей
Сходу проверил на 2.4 ГГц Xeon на 3.0.3294 KC2 Debug
650 подписей/сек
250 проверок/сек
это без учёта времени импорта, импорт ГОСТ 34.10-2001 ключей быстрый, ГОСТ 34.10-94 - долгий.