Статус: Новичок
Группы: Участники
Зарегистрирован: 29.05.2018(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 5 раз
|
Приветствую Вас! Работаю над реализацией задачи Euro-FATCA на C#. 5.3.1. Для шифрования используются алгоритмы ГОСТ 28147-89. Для формирования ЭП используются алгоритмы ГОСТ Р 34.10-2001. 5.3.2. Зашифрованные данные и ЭП передаются при помощи контейнера PKCS #7 (RFC 2315, http://www.ietf.org/rfc/rfc2315.txt). Для сохранения в файл используется DER-кодировка. 5.3.3. Зашифрованные данные передаются в виде структуры ContentInfo со структурой EnvelopedData в качестве содержимого. 5.3.4. ЭП передаются в виде структуры ContentInfo со структурой SignedData в качестве содержимого. ЭП может включать в себя сертификат и не должна включать подписанное содержимое. 5.3.5. Шифрование документов, передаваемых в составе первичного транспортного контейнера, должно производиться в адрес открытых ключей сертификатов получателя, указанных для шифрования, и открытых ключей сертификатов отправителя. Шифрование документов, передаваемых в результате приема или обработки поступившего документа, производится в адрес открытых ключей сертификатов получателя, указанных для шифрования, открытых ключей сертификатов отправителя и открытых ключей сертификатов должностных лиц, подписавших поступивший документ. Не силён в этих делах, наковырял код в самплах, код Gost3410CSPSample.cs . Исходный файл работает корректно, подписывает, валидирует подпись. Изменил немного код, не работает с моим байтовым массивом: Код:
TextReader textReader = new StreamReader(new FileStream("c:/temp/file", FileMode.Open), Encoding.UTF8);
String xmlStrFromFile = textReader.ReadToEnd();
textReader.Close();
*******************
byte[] HashValue = Encoding.UTF8.GetBytes(xmlStrFromFile); // Размерность 3800 байтов
//Подписываем значение хэш.
byte[] SignedHashValue = GostSignHash(HashValue, Gost, "Gost3411"); // Вот тут получаю на выходе null, после чего последующий код падает с Exception...
Господа товарищи, у кого есть для евро-фатки рабочий код подписи и шифрования? Отредактировано пользователем 29 мая 2018 г. 19:14:56(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Здравствуйте. В коде Цитата: GostSignHash(HashValue2, Gost, "Gost3411");
Почему HashValue 2? |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Цитата:byte[] HashValue = Encoding.UTF8.GetBytes Что делает GetBytes и почему переменная так названа? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.05.2018(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 5 раз
|
Поправил пост, это из дебажного кода.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.05.2018(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 5 раз
|
С помощью Encoding.UTF8.GetBytes получаем байтовый массив из строки. Имя переменной осталось неизменным из примера кода.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
|
|
1 пользователь поблагодарил Андрей * за этот пост.
|
Artik2 оставлено 30.05.2018(UTC)
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.05.2018(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 5 раз
|
Не совсем ясно. В "Пример создания PKCS#7/CMS сообщения зашифрованного на нескольких получателей" сказано, что // Не устанавливаем алгоритм зашифрования тела сообщения: // ContentEncryptionAlgorithm устанавливается в // RSA_DES_EDE3_CBC, несмотря на это, при зашифровании // сообщения в адрес получателя с ГОСТ сертификатом, // будет использован алгоритм GOST 28147-89. Хорошо, это соответствует постановке задачи. То есть, Для шифрования используются алгоритмы ГОСТ 28147-89. А как быть с моментом "Для формирования ЭП используются алгоритмы ГОСТ Р 34.10-2001."? В предоставленном вами примере нет никакой информации, какими стандартами ГОСТ будет осуществленно подписывание. Я тут покопался ещё в примерах и увидел, что для получения хеша, в виде массива байтов размерностью 32, может использоваться класс Gost3411CryptoServiceProvider, который может использоваться в примере Sign/cs/Gost3410CSPSample.cs: Код:
byte[] stringToByteArr = Encoding.UTF8.GetBytes(xmlStrFromFile);
// Объект, реализующий алгоритм хэширования ГОСТ 3411.
Gost3411CryptoServiceProvider GostHash = new Gost3411CryptoServiceProvider();
byte[] HashValue2 = GostHash.ComputeHash(stringToByteArr);
//Подписываем значение хэш.
byte[] SignedHashValue = GostSignHash(HashValue2, Gost, "Gost3411");
//Проверяем правильность подписи и выводим результат.
bool b = GostVerifyHash(HashValue2, SignedHashValue, Gost, "Gost3411");
if (b)
{
Console.WriteLine("Подпись вычислена верно.");
}
else
{
Console.WriteLine("Подпись вычислена неверно.");
}
В этом случае сразу становится понятно, что подпись будет осуществляться ГОСТ Р 34.10-2001. С другой стороны, добавляется Gost3411CryptoServiceProvider, ГОСТа которого нет в постановке задачи Евро FATCA. Т.е., спорный момент. А вот в вашем примере "Пример создания и проверки отделенной от сообщения PKCS#7/CMS подписи" не понятно, как будет осуществляться подписывание, по каким ГОСТам. Как понять, будет ли осуществляться подпись по ГОСТ Р 34.10-2001 в этом примере?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Зачем лезть на низкоуровневый интерфейс и вручную указывать?
Используйте примеры, алгоритм будет тот же, что в сертификате.
Сертификат ГОСТ-2001? Значит получите ГОСТ-2001. |
|
1 пользователь поблагодарил Андрей * за этот пост.
|
Artik2 оставлено 01.06.2018(UTC)
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.05.2018(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 5 раз
|
Никогда не любил неопределённость, предпочитаю всё кодить согласно поставленной задачи.
Ключ - алгоритм подписи пишет ГОСТ Р 34.11/34.10-2001.
А откуда тогда "Пример создания PKCS#7/CMS сообщения зашифрованного на нескольких получателей" "узнаёт", что для шифрования необходимо использовать алгоритм GOST 28147-89? Не вижу этого в свойствах ключа.
А Вы не могли бы подсказать код, с помощью которого всё это можно было бы явно прописать, захардкодить алгоритмы шифрования те, которые указаны в ТЗ?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Автор: Artik2 А Вы не могли бы подсказать код, с помощью которого всё это можно было бы явно прописать, захардкодить алгоритмы шифрования те, которые указаны в ТЗ? По тем двум ссылкам на примеры - разве не то? |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close