Вопрос про Crypto.dll для .NET

Автор TROY, 16 Март 2012, 11:24:23

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

Вниз

TROY

Здравствуйте.
мне поставлена задача подписание и проверка подписей с помощью .NET
У нас есть SDK  где есть описания работы с  Cropto.dll  для .NET
Но там все примеры на основе файловых сертификатов с локального диска , т.е. сертификат для подписывания грузиться из потока.
а есть ли пример получения с хранилища? и есть ли пример предоставления пользователю выбора из нескольких сертификатов в хранилище и подписания выбранным?
если примеров нет, то не могли бы подсказать в каком направлении двигаться.


Евгений

Цитата: TROY от 16 Март 2012, 11:24:23
Здравствуйте.
мне поставлена задача подписание и проверка подписей с помощью .NET
У нас есть SDK  где есть описания работы с  Cropto.dll  для .NET
Но там все примеры на основе файловых сертификатов с локального диска , т.е. сертификат для подписывания грузиться из потока.
а есть ли пример получения с хранилища? и есть ли пример предоставления пользователю выбора из нескольких сертификатов в хранилище и подписания выбранным?
если примеров нет, то не могли бы подсказать в каком направлении двигаться.

Добрый день.
Библиотека, реализующая интерфейс криптографических функций в среде .NET именуется как crypto.dll.
На текущий момент в SDK нет упомянутых Вами примеров.
Тем не менее, можно двигаться в сторону связки стандартного класса X509Certificate + P/Invoke, предварительно изучив создание pkcs#7 при помощи cryptoAPI.
В будущем наш SDK будет дополнен данными примерами.

TROY

Прошу прошения, да Вы правы Crypto.dll

На данный момент разработки столкнулся со следующей проблемой.
При проверке подписи выдает следующую ошибку:

"signer sha1withecgost3410 not recognized"
что значит это ошибка?
в том что сертификат правильный и подпись правильна я уверен.


вот код
                 Kz.GammaTech.Cms.GostCMS tumar_cms = new Kz.GammaTech.Cms.GostCMS();
                tumar_cms.input = Convert.FromBase64String(SignedText);
                if (tumar_cms.VerifyCMS())
                {
           }

выдает ошибку на строке  if (tumar_cms.VerifyCMS())

прошу подскажите. Спасибо

Sergey

Цитата: TROY от 20 Март 2012, 16:14:23
При проверке подписи выдает следующую ошибку:
"signer sha1withecgost3410 not recognized"
что значит это ошибка?


Добрый день.
Данная ошибка означает что алгоритм подписи не поддерживается.
Для формирования/проверки подписи ГОСТ 34.310 необходимо использовать ГОСТ 34.311 для формирования хеш функции.
В вашем случае хеш по алгоритму SHA1.
Скорее всего неправильно формируется PKCS#7

Sayat_dt

Цитата: TROY от 16 Март 2012, 11:24:23
Здравствуйте.
мне поставлена задача подписание и проверка подписей с помощью .NET
У нас есть SDK  где есть описания работы с  Cropto.dll  для .NET
Но там все примеры на основе файловых сертификатов с локального диска , т.е. сертификат для подписывания грузиться из потока.
а есть ли пример получения с хранилища? и есть ли пример предоставления пользователю выбора из нескольких сертификатов в хранилище и подписания выбранным?
если примеров нет, то не могли бы подсказать в каком направлении двигаться.

Еще есть вариант использовать java-апплеты для подписания, и com-объекты для проверки подписи, если у вас веб-приложение

Sayat_dt

Добрый день. Хотелось бы узнать возможно ли при помощи Crypto.dll проверить подпись в формате PKCS7. Если да, то не могли бы вы написать какую именно функцию использовать, если нет, то с помощью чего я могу проверить PKCS7 поставленный,через java-апплет?

Sergey

Добрый день.
Проверить подпись PKCS#7 для attached sign (данные вложены в PKCS#7), при этом должен быть вложен сертификат

using Kz.GammaTech.Cms;
try
            {
                GostCMS cms = new GostCMS(); / создаем объект класса, обеспечивающий работу с гостовым pkcs7
                cms.input = signed_bytes;  загружаем сформированный pkcs7

                if (cms.VerifyCMS() == true) / проверяем подпись
                {

                    MessageBox.Show("Успешно");
                }
                else
                {
                    MessageBox.Show("Подпись не проверена");
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
            }
        }

Sayat_dt

Цитата: Sergey от 29 Март 2012, 09:48:53
Добрый день.
Проверить подпись PKCS#7 для attached sign (данные вложены в PKCS#7), при этом должен быть вложен сертификат

using Kz.GammaTech.Cms;
try
            {
                GostCMS cms = new GostCMS(); / создаем объект класса, обеспечивающий работу с гостовым pkcs7
                cms.input = signed_bytes;  загружаем сформированный pkcs7

                if (cms.VerifyCMS() == true) / проверяем подпись
                {

                    MessageBox.Show("Успешно");
                }
                else
                {
                    MessageBox.Show("Подпись не проверена");
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
            }
        }



Спасибо, эта функция работает. Но у меня стоит задача: необходимо проверить были ли изменены данные, которые я подписал. То есть мне необходимо сравнить данные, которые я подписал и данные которые имеются сейчас, возможно ли это сделать используя VerifyCMS()? На апплете я использую функцию SignString()-создание PKCS7

Sergey

Цитата: Sayat_dt от 29 Март 2012, 11:16:57
Но у меня стоит задача: необходимо проверить были ли изменены данные, которые я подписал.

У класса GostCMS есть свойство content в котором можно посмотреть подписанные данные.

Sayat_dt

29 Март 2012, 16:56:59 #9 Последнее редактирование: 29 Март 2012, 17:15:21 от Sayat_dt
Цитата: Sergey от 29 Март 2012, 13:53:43
Цитата: Sayat_dt от 29 Март 2012, 11:16:57
Но у меня стоит задача: необходимо проверить были ли изменены данные, которые я подписал.

У класса GostCMS есть свойство content в котором можно посмотреть подписанные данные.

У меня возникает проблема: при сравнение gostCms.Content и данных,которые я подписывал, они не совпадают, сначала думал, что это из-за хэширования(SHA1), но потом отключил хэширование и попробовал подписать, все равно данные различаются, в чем может быть проблема?Может ли это зависит от AlgOID? у меня 1.3.6.1.4.1.6801.1.5.8

Sergey

Цитата: Sayat_dt от 29 Март 2012, 16:56:59
У меня возникает проблема: при сравнение gostCms.Content и данных,которые я подписывал, они не совпадают, сначала думал, что это из-за хэширования(SHA1), но потом отключил хэширование и попробовал подписать, все равно данные различаются, в чем может быть проблема?Может ли это зависит от AlgOID? у меня 1.3.6.1.4.1.6801.1.5.8

Контент который подписывается вкладывается в PKCS#7 и извлекается из него в том же виде, если текст не совпадает то значит он был изменен.
При этом алгоритмы хеширования и подписи не участвуют в данном процессе.

Sayat_dt

Благодарю за быстрые ответы, но проблема все равно осталась,не могли бы подсказать в чем еще может быть проблема?Я проверял данные, которые подписываются не меняются. Проблема , что я прежде чем подписать данные хэширую данные,отпадает,так как пробовал отключать хэширование и все равно gostCms.Content и подписываемые данные не совпадают. И еще вопрос: где можно взять SDK по crypto.dll?
При подписание например строки вида:
zeX6hJq9eAQs/G6hlAnr3wkTKfg=
выдает gostCms.Content строку вида:
mVYNmhKcTllQVFzL0c2aGxBbnIzd2tUS2ZnPQ==

Заранее благодарен

P.S. Попробовал подписать обычную строку "test",в gostCms.Content результатом был "dGVzdA==" это свидетельствует,что все таки прикрепленные данные шифруются

Sayat_dt

Доброе утро. Я нашел в gostCms gostCms.Hash. Насколько я понял данная функция возвращает хэш подписанных данных, правильно ли я понял данную функцию?

Sergey

Доброе утро.
gostCms.Content возвращает контент который был подписан, исходя из примеров которые были предоставлены, в вашем коде идет преобразование в base64 перед подписыванием. Если раскодировать "dGVzdA==" то получаем подписанную строку "test". В классе gostCms нет преобразований в base64 и обратно.
gostCms.Hash возвращает хэш подписанных данных.

Sayat_dt

Цитата: Sergey от 02 Апрель 2012, 09:52:52
Доброе утро.
gostCms.Content возвращает контент который был подписан, исходя из примеров которые были предоставлены, в вашем коде идет преобразование в base64 перед подписыванием. Если раскодировать "dGVzdA==" то получаем подписанную строку "test". В классе gostCms нет преобразований в base64 и обратно.
gostCms.Hash возвращает хэш подписанных данных.

Благодарю Вас за быстрые и подробные ответы. Все заработало!

Вверх