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

Уведомление

Icon
Error

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

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

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

Сказал(а) «Спасибо»: 4 раз
Приветствую Вас!

Работаю над реализацией задачи 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)  | Причина: Не указана

Offline Андрей Писарев  
#2 Оставлено : 29 мая 2018 г. 19:14:07(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2049 раз в 1589 постах
Здравствуйте.

В коде
Цитата:

GostSignHash(HashValue2, Gost, "Gost3411");


Почему HashValue2?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#3 Оставлено : 29 мая 2018 г. 19:15:13(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2049 раз в 1589 постах
Цитата:
byte[] HashValue = Encoding.UTF8.GetBytes


Что делает GetBytes и почему переменная так названа?
Техническую поддержку оказываем тут
Наша база знаний
Offline Artik2  
#4 Оставлено : 29 мая 2018 г. 19:15:49(UTC)
Artik2

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

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

Сказал(а) «Спасибо»: 4 раз
Поправил пост, это из дебажного кода.
Offline Artik2  
#5 Оставлено : 29 мая 2018 г. 19:17:17(UTC)
Artik2

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

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

Сказал(а) «Спасибо»: 4 раз
С помощью Encoding.UTF8.GetBytes получаем байтовый массив из строки.
Имя переменной осталось неизменным из примера кода.
Offline Андрей Писарев  
#6 Оставлено : 29 мая 2018 г. 19:40:44(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2049 раз в 1589 постах
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Artik2 оставлено 30.05.2018(UTC)
Offline Artik2  
#7 Оставлено : 30 мая 2018 г. 15:19:25(UTC)
Artik2

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

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

Сказал(а) «Спасибо»: 4 раз
Не совсем ясно.
В "Пример создания 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 в этом примере?
Offline Андрей Писарев  
#8 Оставлено : 30 мая 2018 г. 18:15:59(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2049 раз в 1589 постах
Зачем лезть на низкоуровневый интерфейс и вручную указывать?

Используйте примеры, алгоритм будет тот же, что в сертификате.

Сертификат ГОСТ-2001?
Значит получите ГОСТ-2001.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Artik2 оставлено 01.06.2018(UTC)
Offline Artik2  
#9 Оставлено : 30 мая 2018 г. 18:23:46(UTC)
Artik2

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

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

Сказал(а) «Спасибо»: 4 раз
Никогда не любил неопределённость, предпочитаю всё кодить согласно поставленной задачи.

Ключ - алгоритм подписи пишет ГОСТ Р 34.11/34.10-2001.

А откуда тогда "Пример создания PKCS#7/CMS сообщения зашифрованного на нескольких получателей" "узнаёт", что для шифрования необходимо использовать алгоритм GOST 28147-89? Не вижу этого в свойствах ключа.

А Вы не могли бы подсказать код, с помощью которого всё это можно было бы явно прописать, захардкодить алгоритмы шифрования те, которые указаны в ТЗ?
Offline Андрей Писарев  
#10 Оставлено : 30 мая 2018 г. 18:27:19(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2049 раз в 1589 постах
Автор: Artik2 Перейти к цитате

А Вы не могли бы подсказать код, с помощью которого всё это можно было бы явно прописать, захардкодить алгоритмы шифрования те, которые указаны в ТЗ?


По тем двум ссылкам на примеры - разве не то?
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.