Статус: Участник
Группы: Участники
Зарегистрирован: 24.06.2021(UTC) Сообщений: 17
Сказал(а) «Спасибо»: 4 раз
|
Всем здравствуйте! В настоящий момент я пытаюсь корректно сформировать подпись вложения для отправки запроса в СМЭВ3. По документации СМЭВ, на формат PKCS#7 накладывается ряд ограничений: - Для корневого элемента ContentInfo единственно допустимый contentType - SignedData - Подпись должна быть detached (т.е. для элемента SignedData/conentInfo/contentType единственное допустимое значение - 1.2.840.113549.1.7.1, а элемент SignedData/conentInfo/content должен отсутствовать) - Для вычисления message digest разрешен алгоритм ГОСТ Р 34.11-2012 (256 бит) - Для генерации ЭП разрешен алгоритм ГОСТ Р 34.10-2012 - В элементе SignerInfo должны присутствовать следующие authenticated attributes: - contentType (1.2.840.113549.1.9.3), всегда имеет значение 1.2.840.113549.1.7.1 - messageDigest (1.2.840.113549.1.9.4) содержит ГОСТ-digest подписываемого файла Код у меня выглядит так: вычисление хэша вложения Код:using (var gost = Gost3411_2012_256.Create())
hash = gost.ComputeHash(content);
вычисление PKCS#7 Код:public byte[] CreateDetachSignatureByGost3410(byte[] HashToSign)
{
var provider = new Gost3410_2012_256CryptoServiceProvider();
Gost2012_256SignatureFormatter formatter = new Gost2012_256SignatureFormatter(provider);
formatter.SetKey(cert.PrivateKey);
return formatter.CreateSignature(HashToSign);
}
При отправке запроса СМЭВ отвечает, что подпись невалидна. Дело в том, что я не знаю, ни как мне применить все условия из документации, ни даже как проверить, какие условия уже выполняются. Подскажите пожалуйста, как правильно сформировать detached PKCS#7 по указанным условиям?
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,193 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 274 раз в 254 постах
|
Добрый день. вы создали сырую подпись. а они хотят cms используйте SignedCMS |
|
1 пользователь поблагодарил Санчир Момолдаев за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.06.2021(UTC) Сообщений: 17
Сказал(а) «Спасибо»: 4 раз
|
Спасибо огромное! Оставлю итоговое решение для потомков вот метод вычисления. Обращаю внимание, что в него передаем не хеш, а сам подписываемый контент Код:public byte[] CreateDetachSignature(byte[] fileContent)
{
ContentInfo contentInfo = new ContentInfo(fileContent);
SignedCms signedCms = new SignedCms(contentInfo, true);
CmsSigner cmsSigner = new CmsSigner(cert);
signedCms.ComputeSignature(cmsSigner);
return signedCms.Encode();
}
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close