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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline myusername  
#1 Оставлено : 2 декабря 2014 г. 15:05:16(UTC)
myusername

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Здравствуйте.

Пытаюсь расшифровать XML с помощью класса System.Security.Cryptography.Xml.EncryptedXml. При выполнении метода DecryptDocument() возникает исключение "The parameter is incorrect". Ситуация воспроизводится даже в тестовом примере, код которого приведен ниже:

Код:

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

namespace EncryptedXmlTest
{
	class Program
	{
		static void Main()
		{
			var document = new XmlDocument();
			document.LoadXml("<data>Some data.</data>");

			X509Certificate2 certificate; // Получение сертификата, например, из хранилища машины

			Encrypt(document, certificate);
			Console.WriteLine("Encrypted XML:");
			Console.WriteLine(document.OuterXml);

			Decrypt(document);
			Console.WriteLine("Decrypted XML:");
			Console.WriteLine(document.OuterXml);

			Console.ReadLine();
		}

		private static void Encrypt(XmlDocument document, X509Certificate2 certificate)
		{
			var encryptedXml = new EncryptedXml();
			var encryptedElement = encryptedXml.Encrypt(document.DocumentElement, certificate);
			EncryptedXml.ReplaceElement(document.DocumentElement, encryptedElement, false);
		}

		private static void Decrypt(XmlDocument document)
		{
			var encryptedXml = new EncryptedXml(document);
			encryptedXml.DecryptDocument(); // System.Security.Cryptography.CryptographicException, CryptoPro.Sharpei.Base.dll, Additional information: The parameter is incorrect.
		}
	}
}


Пример зашифрованного сообщения:
Код:

<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#"><EncryptionMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147" /><KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"><EncryptionMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2001" /><KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><X509Data><X509Certificate>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</X509Certificate></X509Data></KeyInfo><CipherData><CipherValue>MIGkMCgEIHF9Nam4Mqp0gJpKJZl0W91cAIst8oxEUUYB9l2HIlUQBATmyxYaoHgGByqFAwICHwGgYzAcBgYqhQMCAhMwEgYHKoUDAgIkAAYHKoUDAgIeAQNDAARAm1Z7IU6Iv21qvvsExhkuJ8XqU+iXfckcopdFWWOt6SfepdXhwEMroGNvvgkX6DEn/ulf4rhQTid7EQxNPFNefAQIqCcPiv1eaZQ=</CipherValue></CipherData></EncryptedKey></KeyInfo><CipherData><CipherValue>eXrnQpz06NhNTRNNJ7x3t8OSXdn0xjdH19qzcP6oOQw=</CipherValue></CipherData></EncryptedData>


Стек исключения:
Код:

   at CryptoPro.Sharpei.COMCryptography.SetKeyParamDw(SafeKeyHandleCP hKey, Int32 param, Int32 dwValue)
   at CryptoPro.Sharpei.CPCryptoAPITransform..ctor(Int32 cArgs, Int32[] rgArgIds, Object[] rgArgValues, SafeKeyHandleCP hKey, PaddingMode padding, CipherMode cipherChainingMode, Int32 blockSize, CPCryptoAPITransformMode encDecMode)
   at CryptoPro.Sharpei.Gost28147CryptoServiceProvider._NewEncryptor(SafeKeyHandleCP hKey, CipherMode mode, Byte[] rgbIV, Int32 feedbackSize, CPCryptoAPITransformMode encryptMode)
   at CryptoPro.Sharpei.Gost28147CryptoServiceProvider.CreateDecryptor()
   at System.Security.Cryptography.Xml.EncryptedXml.DecryptData(EncryptedData encryptedData, SymmetricAlgorithm symmetricAlgorithm)
   at System.Security.Cryptography.Xml.EncryptedXml.DecryptDocument()
   at EncryptedXmlTest.Program.Decrypt(XmlDocument document)
   at EncryptedXmlTest.Program.Main()
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()


Самое интересное. Если использовать RSA-сертификат (не ГОСТ 3410), все работает отлично.

Заранее спасибо за ответы!
Offline Максим Коллегин  
#2 Оставлено : 2 декабря 2014 г. 15:53:30(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,374
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
Какие версии ОС, framework, NET, CSP?
Знания в базе знаний, поддержка в техподдержке
Offline myusername  
#3 Оставлено : 2 декабря 2014 г. 19:54:03(UTC)
myusername

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Автор: maxdm Перейти к цитате
Какие версии ОС, framework, NET, CSP?


Windows 7 Ultimate x64
.NET Framework 4.5
CryptoPro.Sharpei.Base, Version=1.4.0.10
CryptoPro CSP, Core version: 3.9.8000 KC1
CryptoPro CSP, Product version: 3.9.8171
После установки CryptoPro CSP ничего специально не настраивал (то есть все параметры по умолчанию).
Вложение(я):
osinfo.xml (71kb) загружен 4 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline myusername  
#4 Оставлено : 3 декабря 2014 г. 10:52:10(UTC)
myusername

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Есть ли иные способы расшифровать EncryptedData? Без использования EncryptedXml?

Например, вручную разобрать этот XML и, используя классы CryptoPro, получить данные.

Меня бы вполне устроил и такой вариант, но я не могу найти в Gost3410CryptoServiceProvider методы типа Decrypt(). Я имею ввиду что-то вроде RSACryptoServiceProvider.Decrypt().
Offline Максим Коллегин  
#5 Оставлено : 3 декабря 2014 г. 11:36:37(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,374
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
Сегодня разберемся с ошибкой.
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
myusername оставлено 03.12.2014(UTC)
Offline Максим Коллегин  
#6 Оставлено : 3 декабря 2014 г. 12:27:56(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,374
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
А что это за тестовый пример? Пример из КриптоПро .NET SDK: EncryptCertificate рабочий.
А шифровать российскими открытыми ключами нельзя, нужно создавать промежуточный ключ обмена.
Знания в базе знаний, поддержка в техподдержке
Offline myusername  
#7 Оставлено : 4 декабря 2014 г. 9:07:00(UTC)
myusername

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Автор: maxdm Перейти к цитате
А что это за тестовый пример? Пример из КриптоПро .NET SDK: EncryptCertificate рабочий.
А шифровать российскими открытыми ключами нельзя, нужно создавать промежуточный ключ обмена.


Этот пример с небольшими упрощениями я взял изначально из статьи к EncryptedXml на MSDN.
Про шифрование и ключ обмена - понял, спасибо за наводку, в соответствии с этим подобрал подходящий пример из SDK.

Мой случай отлично описывает пример "EncryptCerts", но он точно с таким же исключением вываливается на строчке расшифровки данных:
Код:

// И на нем расшифровываем данные.
byte[] decryptedData = exml.DecryptData(encryptedData, decryptionKey);


То есть, ключ для расшифровки сообщения найден и благополучно создан (во всяком случае экземпляр класса), но расшифровку произвести не удалось.
Уже не знаю на что думать...

Из дополнительных сведений:

  • Сообщение, которое пытаюсь расшифровать (см. прикрепленный файл).
  • Сертификат был выдан через ViPNet (то есть на моей машине установлен ViPNet CSP 4.1).


Я мог бы подумать на сертификат, но подпись и проверка подписи с использованием этого сертификата проходит успешно...

P.s. Могу предоставить сертификат с закрытым ключем, если это поможет делу.
Вложение(я):
n_encrypted.xml (12kb) загружен 5 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Максим Коллегин  
#8 Оставлено : 4 декабря 2014 г. 9:48:37(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,374
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
С этого нужнл было начинать, контейнеры випнет не поддерживаются, Криптопровайдеры не совместимы по низкоуровневым интерфейсам.
Знания в базе знаний, поддержка в техподдержке
Offline myusername  
#9 Оставлено : 4 декабря 2014 г. 10:23:19(UTC)
myusername

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Автор: maxdm Перейти к цитате
С этого нужнл было начинать, контейнеры випнет не поддерживаются, Криптопровайдеры не совместимы по низкоуровневым интерфейсам.


Ясно, спасибо!

Еще небольшое уточнение (чтобы я окончательно все понял)...

Правильно я понимаю, что в связке "CryptoPro .NET - Сертификат VipNet" я могу осуществлять подпись данных по ГОСТ-3410 (на практике у меня это получилось сделать), но не могу сделать дешифрацию данных по ГОСТ-28147? И в том и вдругом случае я использую приватный ключ, только в первом случае у меня получается это использовать, а во втором нет. И все из-за того, что на низком уровне, при реализации ГОСТ-3410 получение приватного ключа происходит не так, как при реализации ГОСТ-28147. Все верно?

Таким образом, если все верно, единственный выход - это использовать сертификат, выданный через CryptoPro, либо напрямую обращаться к VipNet API?
Offline Максим Коллегин  
#10 Оставлено : 4 декабря 2014 г. 11:49:33(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,374
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
Примерно так, операции подписи реализованы похожим образом, импорта зашифрованного ключа нет.
Так же можно попросить Инфотекс поддержать КриптоПро .NET, но вряд ли им это будет интересно.
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
myusername оставлено 04.12.2014(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.