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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Please  
#1 Оставлено : 28 ноября 2017 г. 9:25:04(UTC)
Please

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

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

Пытаюсь с помощью КриптоПро Browser plug-in расшифровать xml, зашифрованную gost28147. Вытаскиваю из тега xenc:CipherValue закодированное сообщение, передаю в функцию decrypt, и пытаюсь расшифровать ключом сертификата, которым производилось шифрование:

Код:
decrypt(encryptedContent: string, certHash: string) {
	return new Promise(function (resolve, reject) {
		cadesplugin.async_spawn(function* (args) {
			try {
				let store = yield cadesplugin.CreateObjectAsync("CAPICOM.Store");
				yield store.Open(cadesplugin.CAPICOM_CURRENT_USER_STORE,
					cadesplugin.CAPICOM_MY_STORE,
					cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
				let certificatesObj = yield store.Certificates;
				let certificates = yield certificatesObj.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, args[1]);
				let certificate = yield certificates.Item(1);						

				let oEnvelop = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPEnvelopedData");
				yield oEnvelop.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);
				yield oEnvelop.propset_Content(args[0]);

				let rp = yield oEnvelop.Recipients;
				yield rp.Clear();
				yield rp.Add(certificate);
				let decryptedContent = yield oEnvelop.Decrypt(args[0]);

				yield store.Close();
				args[2](decryptedContent);						
			}
			catch (e) {
				args[3](`Ошибка при дешифровании сообщения: ${cadesplugin.getLastError(e)}`);
			}
		}, encryptedContent, certHash, resolve, reject);
	});
},


Метод oEnvelop.Decrypt пытался вызывать тремя способами:
1. без параметров: КриптоПро Browser plug-in завершает работу;
2. передать в качестве аргумента сертификат: возвращалась ошибка "Parameter is incorrect";
3. передать в качестве аргумента закодированное сообщение: возвращалась ошибка "asn1 bad tag value met".

Подскажите, как правильно использовать плагин для расшифровки.
Offline cross  
#2 Оставлено : 30 ноября 2017 г. 12:39:53(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Derypt ожидает на вход CMS EnvelopedData message. Скорее всего что в теге некоего xml в поле xenc:CipherValue лежит не это.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline Please  
#3 Оставлено : 30 ноября 2017 г. 18:11:05(UTC)
Please

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

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

На вход передаются правильные данные. Их удавалось расшифровать средствами .net, а через апи плагина ошибка "asn1 bad tag value met". Может я неправильно передаю контент методом propset_Content? В моём варианте получается, что в Decrypt передаётся тот же параметр, что устанавливается в propset_Content, это точно правильно?
Offline cross  
#4 Оставлено : 1 декабря 2017 г. 14:14:03(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
То что вы расшифровали с помощью некоего кода в .NET это не говорит о формате данных ни чего. Decrypt ожидает что данные будут правильно ASN1 закодированное сообщение CMS Enveloped Data. У меня есть большие сомнения что в этом теге именно эти данные находятся.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline Please  
#5 Оставлено : 1 декабря 2017 г. 17:37:28(UTC)
Please

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

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

Хорошо, один момент, кажется, выяснили, параметром метода decrypt должен быть секретный ключ в BASE64 кодировке, находящийся в xml.
Итого получается, что в объект CAdESCOM.CPEnvelopedData я передаю следующие параметры:
- recipients: сертификат, которым должно выполниться дешифрование
- content: сообщение, которое должно быть расшифровано
- аргумент метода decrypt: секретный ключ
Всё верно?

Я проверил секретный ключ в онлайн сервисе https://lapo.it/asn1js/, получился такой результат:

Код:
SEQUENCE(2 elem)
SEQUENCE(2 elem)
OCTET STRING(32 byte) 32FE964805D3EF28DEE63506272169FC2FEF3AE4B657960AECE9871470D5CFF8
OCTET STRING(4 byte) 19F615DA
[0](3 elem)
OBJECT IDENTIFIER1.2.643.2.2.31.1cryptoProCipherA(CryptoPro params A for GOST 28147-89)
[0](2 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.643.2.2.19gostPublicKey(GOST R 34.10-2001 (ECC) public key)
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.643.2.2.36.0cryptoProSignXA(CryptoPro ell.curve XA for GOST R 34.11-2001)
Offset: 70
Length: 2+7
Value:
1.2.643.2.2.36.0
cryptoProSignXA
CryptoPro ell.curve XA for GOST R 34.11-2001
OBJECT IDENTIFIER1.2.643.2.2.30.1cryptoProDigestA(CryptoPro digest params for GOST R 34.11-94)
BIT STRING(1 elem)
OCTET STRING(64 byte) ...
OCTET STRING(8 byte) ...


Это вроде похоже на ASN.1 закодированное сообщение, но метод Decrypt по-прежнему возвращает "asn1 bad tag value met". Подскажите, может с этим секретным ключом нужно ещё что-то сделать?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.