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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Александр_Pyankov_  
#1 Оставлено : 14 декабря 2021 г. 17:56:41(UTC)
Александр_Pyankov_

Статус: Участник

Группы: Участники
Зарегистрирован: 24.06.2021(UTC)
Сообщений: 13

Сказал(а) «Спасибо»: 1 раз
Всем здравствуйте! В настоящий момент я пытаюсь корректно сформировать подпись вложения для отправки запроса в СМЭВ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 по указанным условиям?
Offline Санчир Момолдаев  
#2 Оставлено : 14 декабря 2021 г. 18:00:38(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
Добрый день.
вы создали сырую подпись. а они хотят cms

используйте SignedCMS
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
Александр_Pyankov_ оставлено 14.12.2021(UTC)
Offline Александр_Pyankov_  
#3 Оставлено : 14 декабря 2021 г. 18:18:53(UTC)
Александр_Pyankov_

Статус: Участник

Группы: Участники
Зарегистрирован: 24.06.2021(UTC)
Сообщений: 13

Сказал(а) «Спасибо»: 1 раз
Спасибо огромное!
Оставлю итоговое решение для потомков

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