Статус: Новичок
Группы: Участники
Зарегистрирован: 23.10.2019(UTC) Сообщений: 5 Откуда: Москва
|
Доброго дня! Вычисляю подпись wincrypt функцией CryptSignMessage ГОСТом 2012 256 с параметром CRYPT_SIGN_MESSAGE_PARA::cMsgCert == 0. Получаю подпись, размер которой примерно 1104 байт, в саму подпись включается какая-то информация о сертификате. Подскажите, пожалуйста, можно ли как-то получить подпись, которая, если я правильно понимаю, называется сырая подпись, размер которой 256 бит? Отредактировано пользователем 19 августа 2020 г. 19:32:42(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2035 раз в 1579 постах
|
Здравствуйте.
CryptSignHash |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 23.10.2019(UTC) Сообщений: 5 Откуда: Москва
|
Автор: Андрей * Здравствуйте.
CryptSignHash Спасибо за ответ! У меня задача именно подписать, не валидировать. Я не уверен, что CryptSignHash, то что надо, либо я неправильно понял как это использовать. У функции CryptSignMessage первым параметром задается структура CRYPT_SIGN_MESSAGE_PARA, в которой указывается сертификат, которым происходит подписывание. У CryptSignHash такого параметра я не заметил. Хотя в документации к CryptSignHash говорится, что перед вызовом необходимо вызвать CryptAcquireContext и CryptCreateHash. Правильно ли я понимаю, что мне нужно этими функциями сконфигурировать HCRYPTPROV указав параметры приватной части?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2035 раз в 1579 постах
|
Автор: -=mix911=- Автор: Андрей * Здравствуйте.
CryptSignHash Спасибо за ответ! У меня задача именно подписать, не валидировать. Я не уверен, что CryptSignHash, то что надо, либо я неправильно понял как это использовать. У функции CryptSignMessage первым параметром задается структура CRYPT_SIGN_MESSAGE_PARA, в которой указывается сертификат, которым происходит подписывание. У CryptSignHash такого параметра я не заметил. Хотя в документации к CryptSignHash говорится, что перед вызовом необходимо вызвать CryptAcquireContext и CryptCreateHash. Правильно ли я понимаю, что мне нужно этими функциями сконфигурировать HCRYPTPROV указав параметры приватной части? Да. Это именно то, что нужно, будет RAW-подпись. Про валидацию - не понятно, причём тут она. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2035 раз в 1579 постах
|
у контекста сертификата можно запросить информацию - какой CSP и контейнер - далее использовать низкоуровневые функции: подключение к контейнеру, доступ к ключу, хеширование, подписание хеша. |
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 393 раз в 366 постах
|
Цитата:запросить информацию - какой CSP и контейнер Цитата:подключение к контейнеру Добавлю, что на новых версиях CSP (4.0 R3 и новее) сертифицирована также работа через Код:CryptAcquireCertificatePrivateKey(CertCont, CRYPT_ACQUIRE_COMPARE_KEY_FLAG, nil {parameters},cs.hProv, @cs.dwKeySpec, @cs.aFreeProv)
эта функция по контексту сертификата извлекает информацию из хранилища о контейнере и возвращает уже готовый HCRYPTPROV hProv плюс два параметра - dwKeySpec (с каким именно ключом в контейнере связан сертификат, нужен потом для CryptSignHash) и FreeProv (нужно ли закрывать HCRYPTPROV, это нужно в редких случаях когда возвращен ключ "по умолчанию", который не закрывается, больше для корректной работы зарубежных алгоритмов). Для удобства в своей программе объединил CertCont, hProv, dwKeySpec, aFreeProv в одну структуру. В итоге, CryptAcquireCertificatePrivateKey делает сразу и получение информации о контейнере и CryptAcquireContext. Для быстрого старта - то что нужно. Минус у обоих методов в том, что если сертификата нет в хранилище или не проставлена ссылка на контейнер, то не получится "запросить информацию - какой CSP и контейнер". HCRYPTPROV идет в CryptCreateHash, получаем hcrypthash. hcrypthash внутри криптопровайдера связан с конкретным HCRYPTPROV и потому далее HCRYPTPROV не указывается при подписании, но освобождать HCRYPTPROV нельзя пока идет работа с хэшем. hcrypthash идет в CryptHashData, CryptGetHashParam (здесь можно получить значение хэша если нужно), CryptSignHash (значение подписи возвращается сразу), CryptDestroyHash (освобождение ненужного hcrypthash). После всех операций с контейнером, если FreeProv истинно вызываем CryptReleaseContext для освобождения HCRYPTPROV (если явно вызывали CryptAcquireContext, то считаем, что FreeProv истинно). Отредактировано пользователем 20 августа 2020 г. 5:47:58(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 23.10.2019(UTC) Сообщений: 5 Откуда: Москва
|
Скажите, пожалуйста, а есть ли возможность получить "сырую подпись" при помощи утилиты csptest.exe? Или же, быть может, имеется возможность выдернуть подпись из ASN дерева "полной" подписи?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2035 раз в 1579 постах
|
Автор: -=mix911=- Скажите, пожалуйста, а есть ли возможность получить "сырую подпись" при помощи утилиты csptest.exe? Или же, быть может, имеется возможность выдернуть подпись из ASN дерева "полной" подписи?
csptest -keys -sign GOST12_256 -cont "REGISTRY\\имя контейнера" -keytype exchange -in y:\file -out y:\file.sig |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close