Статус: Участник
Группы: Участники
Зарегистрирован: 13.04.2017(UTC) Сообщений: 14 Сказал(а) «Спасибо»: 2 раз
|
Прошу прощения - проскочил пост от two_oceans. Спасибо, коллега :)
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Рад что смог немного помочь. Этой же темой я заинтересовался примерно год назад и существование alg_id и оид, 2 видов uri (или скорее urn) вводило в замешательство. Есть очень вероятная догадка о причине существования разных форм указания одного алгоритма: функции Microsoft Crypto API делятся на высокоуровневые и низкоуровневые, получается что в высокоуровневых параметры задаются "получеловекопонятным" оид, в низкоуровневых "машинопонятным" alg_id. Такая вот "понятность для пользователя".
CryptCreateHash, CryptSetHashParam, CryptGetHashParam и т.д. это низкоуровневые функции, с их помощью можно напрямую получить значение хэша с нужным алгоритмом и параметрами и преобразовать в тот формат, который нужен (тот же xmldsig). Параметр hp_oid в оригинале JwaWinCrypt нет, предположу что параметр добавлен уже в заголовках КриптоПро, поэтому несколько не следует философии низкоуровневых функций и работает с оид. Для xmldsig этих функций достаточно (пока не используется расширение xades-T).
Структура CRYPT_SIGN_MESSAGE_PARA используется в высокоуровневых функциях, которые уже ориентированы на формат cades. Они не делают подписание как-то иначе, хоть и принимают входные данные в другой форме(блок данных для подписания вместо хэша и оид вместо alg_id). Упрощенно: внутри они все также переводят из оид в alg_id, затем вызывают низкоуровневые функции (принятые данные переводятся в хэш, подготавливают ключ, потом хэш шифруется ключом, получается значение подписи), затем кодируют полученный результат в блок подписи нужного формата.
Чтобы использовать и функции высокого уровня и функции низкого уровня, получается нужно внести в программу строгое соответствие между alg_id, типом провайдера и оид. А с параметрами алгоритмов можно проводить некий анализ полученных данных. Многие криптопровайдеры прописывают подобное соответствие в реестре, но все же читать оттуда немного рисковано, бывают конфликты между провайдерами. Ввод нового алгоритма часто сопровождается либо новой версией криптопровайдера и/или новым типом провайдера, по аналогии многие разработчики программного обеспечения просто добавляют новый алгоритм в новой версии, даже если старая версия прекрасно видит новый тип провайдера и получает из него доступные alg_id и оид, но "не знает" соответствий.
С сочетаниями алгоритмов ГОСТ хэширования, подписи и шифрования еще проще - большинство сочетаний просто не разрешено для использования (нельзя смешивать с зарубежными и старые алгоритмы гост тоже запрещены). Выбрали схему подписи - алгоритм шифрования и хэширования нужно выбрать из 1 разрешенного варианта для каждого! В тоже время с зарубежными алгоритмами вариантов намного больше и строгое соответствие не подойдет. Поэтому надо бы все же определиться какие алгоритмы Вы хотите охватить. В качестве стартовой точки можно взять список поддерживаемых КриптоПро (в котором есть и популярные зарубежные алгоритмы).
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close