Как правильно подписать xml запрос при помощи ЭЦП в C#? Добрый день.
В ходе разработки системы интеграции со сторонним ресурсом встала задача отправки запросов подписанных ЭЦП. В криптографии имею начальные знания, но очень хочу разобраться - задача очень интересная.
Имеется:
1. Visual Studio 2013
2. C#
3. WSDL документ описывающий взаимодействие с внешней системой, форматы данных.
Добавляя service reference в студии, получаем все классы и типы данных для работы.
Необходимо:
1. Понять какие виды ЭЦП бывают
2. Разобраться из каких частей состоит ЭЦП
3. Как правильно подписывать бизнес данные при помощи ЭЦП (лучше практическое руководство)
Очень надеюсь на какую-нибудь литературу, или практические рекомендации или руководства. Или хотя бы куда копать.
Заранее спасибо!

21 Авг 2019 в 07:13
221 +1
1
Ответы
1

Для подписания XML запроса при помощи ЭЦП в C# вы можете использовать класс SignedXml из пространства имен System.Security.Cryptography.Xml.

Виды ЭЦП:

ЭЦП на основе RSA: используется ключевая пара RSA для создания и проверки подписи.ЭЦП на основе ГОСТ: используется алгоритмы ГОСТ для создания и проверки подписи.

Части ЭЦП:

Цифровая подпись: это данные, полученные путем применения алгоритма подписи к хэшу исходного сообщения.Открытый ключ: используется для проверки подписи.Закрытый ключ: используется для создания подписи.

Пример кода для подписания XML запроса:

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Xml;

public class XmlSigner
{
public void SignXml(XmlDocument xmlDoc, RSA key)
{
SignedXml signedXml = new SignedXml(xmlDoc);
signedXml.SigningKey = key;

Reference reference = new Reference();
reference.Uri = "";
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);
signedXml.AddReference(reference);
signedXml.ComputeSignature();
XmlElement xmlDigitalSignature = signedXml.GetXml();
xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
}

}

Это простой пример подписания XML документа при помощи ЭЦП с использованием открытого ключа RSA.
Для более детального понимания и практических примеров рекомендую обратиться к следующим ресурсам:
- MSDN документация по классу SignedXml: https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.xml.signedxml?view=net-6.0
- Книга "Криптография для начинающих" Джейсона Анджела
- Курс "Основы криптографии" на платформе Coursera
Надеюсь, эта информация поможет вам разобраться с задачей подписи XML запросов при помощи ЭЦП в C#! Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться. Удачи в работе!
20 Апр в 13:05
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 706 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир