Статус: Участник
Группы: Участники
Зарегистрирован: 13.04.2015(UTC) Сообщений: 10
|
Согласно http://cpdn.cryptopro.ru..._SignData_2_a50a8ed6.htm реализуется алгоритм подписи Гост 34.10 (в комментариях к примеру на C# указан ГОСТ 34.10-2001), согласно http://cpdn.cryptopro.ru...stSignatureFormatter.htm реализуется подпись по ГОСТ 34.10-2001 согласно http://cpdn.cryptopro.ru..._SignHash_1_a3d79294.htmподписывается по ГОСТ 34.10-2001 Ниже код, который формирует 3 разных подписи!! Все из них из cpdn. byte[] dataToEncrypt = new UnicodeEncoding().GetBytes("qwertyuiopasdfghjklzxcvbnm"); byte[] encryptedData; var gost = new Gost3410CryptoServiceProvider(); var hashAlg = new Gost3411CryptoServiceProvider(); var hashData = hashAlg.ComputeHash(dataToEncrypt); //================================================================================= encryptedData = gost.SignHash(hashData); textBox1.Text = Convert.ToBase64String(encryptedData); //================================================================================= encryptedData = gost.SignData(dataToEncrypt, hashAlg); textBox2.Text = Convert.ToBase64String(encryptedData); //================================================================================= GostSignatureFormatter sign = new GostSignatureFormatter(gost); encryptedData = sign.CreateSignature(hashData); textBox3.Text = Convert.ToBase64String(encryptedData); Таким образом, приведенный код генрирует 3 разные подписи с помощью трех примеров из cpdn Все же какой из методов правильный и формирует верную ЭЦП по ГОСТ?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,113   Сказал «Спасибо»: 615 раз Поблагодарили: 2381 раз в 1873 постах
|
Все. Вы с выходным форматом определились (чисто значение подписи\cms\base64(cms))? |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.04.2015(UTC) Сообщений: 10
|
Ну а Convert.ToBase64String(encryptedData) разве не конвертирует в base64 encryptedData. И каждый раз по-разному. Чем отличаются функции? В cpdn ничего про это не прописано.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,113   Сказал «Спасибо»: 615 раз Поблагодарили: 2381 раз в 1873 постах
|
Автор: geka22  Ну а Convert.ToBase64String(encryptedData) разве не конвертирует в base64 encryptedData. И каждый раз по-разному. Чем отличаются функции? В cpdn ничего про это не прописано. Так нет никакой проблемы, переменная encryptedData (странное название) - каждый раз имеет разный контент. |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,113   Сказал «Спасибо»: 615 раз Поблагодарили: 2381 раз в 1873 постах
|
|
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.04.2015(UTC) Сообщений: 10
|
В этом и заключался вопрос. У нас просто год назад проблема возникла при использовании ЕСИА. Оказалось, что нужно было использовать код, тот же что и у разработчиков.
Тогда вопрос: почему тогда работает сравнение хэшей при использовании на госуслугах, если используется якобы случайное число? Но при этом код проверки и формирования хэша должен быть одинаковый и на стороне проверяющей, и на стороне подписывающей?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,113   Сказал «Спасибо»: 615 раз Поблагодарили: 2381 раз в 1873 постах
|
Автор: geka22  В этом и заключался вопрос. У нас просто год назад проблема возникла при использовании ЕСИА. Оказалось, что нужно было использовать код, тот же что и у разработчиков.
Тогда вопрос: почему тогда работает сравнение хэшей при использовании на госуслугах, если используется якобы случайное число? Но при этом код проверки и формирования хэша должен быть одинаковый и на стороне проверяющей, и на стороне подписывающей? Хеширование и подпись (случайное число) - разные вещи. При хешировании - может быть разный порядок байтов. http://cpdn.cryptopro.ru...984ebeb224da0922318.html |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.04.2015(UTC) Сообщений: 10
|
Я понимаю, что разные. Это общее описание проблемы. Т.е. например, я использую для хэша/подписи код var hashData = hashAlg.ComputeHash(dataToEncrypt); encryptedData = gost.SignHash(hashData);
а на стороне ЕСИА var hashAlg = new Gost3411CryptoServiceProvider(); encryptedData = gost.SignData(dataToEncrypt, hashAlg);
То мы будем получать разный результат и ничего не будет работать. Это и беспокоит. Ибо я, например, не знаю какой метод разработчики ЕСИА реализовали у себя. Это недокументировано никак. Чтоб заработало нужно переибирать доступные методы из cpdn?
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close