Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline -=mix911=-  
#1 Оставлено : 19 августа 2020 г. 19:32:10(UTC)
-=mix911=-

Статус: Новичок

Группы: Участники
Зарегистрирован: 23.10.2019(UTC)
Сообщений: 5
Российская Федерация
Откуда: Москва

Доброго дня!

Вычисляю подпись wincrypt функцией CryptSignMessage ГОСТом 2012 256 с параметром CRYPT_SIGN_MESSAGE_PARA::cMsgCert == 0. Получаю подпись, размер которой примерно 1104 байт, в саму подпись включается какая-то информация о сертификате.

Подскажите, пожалуйста, можно ли как-то получить подпись, которая, если я правильно понимаю, называется сырая подпись, размер которой 256 бит?

Отредактировано пользователем 19 августа 2020 г. 19:32:42(UTC)  | Причина: Не указана

Offline Андрей *  
#2 Оставлено : 19 августа 2020 г. 20:17:39(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Здравствуйте.

CryptSignHash
Техническую поддержку оказываем тут
Наша база знаний
Offline -=mix911=-  
#3 Оставлено : 19 августа 2020 г. 23:02:09(UTC)
-=mix911=-

Статус: Новичок

Группы: Участники
Зарегистрирован: 23.10.2019(UTC)
Сообщений: 5
Российская Федерация
Откуда: Москва

Автор: Андрей * Перейти к цитате
Здравствуйте.

CryptSignHash


Спасибо за ответ! У меня задача именно подписать, не валидировать. Я не уверен, что CryptSignHash, то что надо, либо я неправильно понял как это использовать. У функции CryptSignMessage первым параметром задается структура CRYPT_SIGN_MESSAGE_PARA, в которой указывается сертификат, которым происходит подписывание. У CryptSignHash такого параметра я не заметил.

Хотя в документации к CryptSignHash говорится, что перед вызовом необходимо вызвать CryptAcquireContext и CryptCreateHash. Правильно ли я понимаю, что мне нужно этими функциями сконфигурировать HCRYPTPROV указав параметры приватной части?
Offline Андрей *  
#4 Оставлено : 19 августа 2020 г. 23:05:50(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Автор: -=mix911=- Перейти к цитате
Автор: Андрей * Перейти к цитате
Здравствуйте.

CryptSignHash


Спасибо за ответ! У меня задача именно подписать, не валидировать. Я не уверен, что CryptSignHash, то что надо, либо я неправильно понял как это использовать. У функции CryptSignMessage первым параметром задается структура CRYPT_SIGN_MESSAGE_PARA, в которой указывается сертификат, которым происходит подписывание. У CryptSignHash такого параметра я не заметил.

Хотя в документации к CryptSignHash говорится, что перед вызовом необходимо вызвать CryptAcquireContext и CryptCreateHash. Правильно ли я понимаю, что мне нужно этими функциями сконфигурировать HCRYPTPROV указав параметры приватной части?


Да.
Это именно то, что нужно, будет RAW-подпись. Про валидацию - не понятно, причём тут она.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#5 Оставлено : 19 августа 2020 г. 23:07:13(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
у контекста сертификата можно запросить информацию - какой CSP и контейнер - далее использовать низкоуровневые функции:
подключение к контейнеру, доступ к ключу, хеширование, подписание хеша.
Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#6 Оставлено : 20 августа 2020 г. 5:38:04(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline -=mix911=-  
#7 Оставлено : 21 августа 2020 г. 15:02:12(UTC)
-=mix911=-

Статус: Новичок

Группы: Участники
Зарегистрирован: 23.10.2019(UTC)
Сообщений: 5
Российская Федерация
Откуда: Москва

Скажите, пожалуйста, а есть ли возможность получить "сырую подпись" при помощи утилиты csptest.exe? Или же, быть может, имеется возможность выдернуть подпись из ASN дерева "полной" подписи?
Offline Андрей *  
#8 Оставлено : 21 августа 2020 г. 16:35:10(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 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
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.