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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline tyger  
#1 Оставлено : 18 мая 2009 г. 19:31:37(UTC)
tyger

Статус: Участник

Группы: Участники
Зарегистрирован: 18.05.2009(UTC)
Сообщений: 10
Откуда: Russia

Ситуация следующая:
Есть стандартный механизм подписи и проверки подписи через CAPICOM (на клиенте и на сервере). Возникла необходимость использовать для подписи на клиенте Sharpei. Были испробованы несколько вариантов, но не один не проходит проверку на сервере через CAPICOM.

При подписи данных через, как в примере SingleSigner.cs, но с отделенной подписью, Sharpei дает очень похожий (визуально) результат на таковой от CAPICOM, но не проходит проверку.

Куда можно посмотреть и где "поковырять"?
Offline Kirill Sobolev  
#2 Оставлено : 18 мая 2009 г. 19:38:59(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
И c присоединенной подписью не проходит проверку?
Техническую поддержку оказываем тут
Наша база знаний
Offline tyger  
#3 Оставлено : 18 мая 2009 г. 19:40:51(UTC)
tyger

Статус: Участник

Группы: Участники
Зарегистрирован: 18.05.2009(UTC)
Сообщений: 10
Откуда: Russia

Kirill Sobolev написал:
И c присоединенной подписью не проходит проверку?

Нет. Никак не проходит, если это важно могу опубликовать JScript выполняющий подпись с помощью CAPICOM
Offline Kirill Sobolev  
#4 Оставлено : 18 мая 2009 г. 19:43:13(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Лучше выложите результат, который Вы хотите проверить с помощью CAPICOM.
Да - то что получается самим шарпеем проверяется?
Техническую поддержку оказываем тут
Наша база знаний
Offline tyger  
#5 Оставлено : 18 мая 2009 г. 20:47:53(UTC)
tyger

Статус: Участник

Группы: Участники
Зарегистрирован: 18.05.2009(UTC)
Сообщений: 10
Откуда: Russia

Kirill Sobolev написал:
Лучше выложите результат, который Вы хотите проверить с помощью CAPICOM.
Да - то что получается самим шарпеем проверяется?


Вот в том и загвоздка, что сам Sharpei прекрасно гоняет подпись туда-сюда.
Ок, завтра с работы попробую выложить вариант подписи.
Offline Челпанов А.  
#6 Оставлено : 18 мая 2009 г. 21:26:24(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Проблема скорее всего в кодировании исходного сообщения. На вход CAPICOM необходимо передавать текст в текущей кодировке, а при подписи в Sharpei (а-ля SingleSigner.cs) - Unicode.
Прикрепил пример detached подписи из Sharpei.
Если запустить пример (C:\Program Files\Microsoft SDKs\Windows\v6.0\Samples\Security\capicom\vbs\CSignData.vbs) из Microsoft Platform SDK:
Код:
cscript CSignData.vbs Verify -detached aaa.sgn aaa.bin
, то подпись проверяется.

Отредактировано пользователем 18 мая 2009 г. 21:34:14(UTC)  | Причина: Не указана

Вложение(я):
SingleSigner.cs (13kb) загружен 93 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
С уважением, Александр.
Offline tyger  
#7 Оставлено : 19 мая 2009 г. 11:51:07(UTC)
tyger

Статус: Участник

Группы: Участники
Зарегистрирован: 18.05.2009(UTC)
Сообщений: 10
Откуда: Russia

Челпанов А. написал:
Проблема скорее всего в кодировании исходного сообщения. На вход CAPICOM необходимо передавать текст в текущей кодировке, а при подписи в Sharpei (а-ля SingleSigner.cs) - Unicode.

Гм, странно, вот тут тоже были сомнения... Я думаю, что, всетаки, в CAPICOM передается COM'овский BSTR, который по-определению внутри является UNICODE'ом. Иначе как объяснить, что в одном случае мы подписываем массив байт полученый с юникода, а проверяем непойми что? Проверка должна идти тоже массива полученного из юникода.

Челпанов А. написал:

Прикрепил пример detached подписи из Sharpei.
Если запустить пример (C:\Program Files\Microsoft SDKs\Windows\v6.0\Samples\Security\capicom\vbs\CSignData.vbs) из Microsoft Platform SDK:
Код:
cscript CSignData.vbs Verify -detached aaa.sgn aaa.bin
, то подпись проверяется.

Да, в таком виде подпись вроде прошла, тестирую дальше.

Непонятно еще зачем такие сложности по преобразованию в Base64 в методе EncodeToFile? По крайней мере, строку можно получить проще через
Код:
Convert.ToBase64String(someData);
Offline Челпанов А.  
#8 Оставлено : 19 мая 2009 г. 13:42:28(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Цитата:
Гм, странно, вот тут тоже были сомнения... Я думаю, что, всетаки, в CAPICOM передается COM'овский BSTR, который по-определению внутри является UNICODE'ом. Иначе как объяснить, что в одном случае мы подписываем массив байт полученый с юникода, а проверяем непойми что? Проверка должна идти тоже массива полученного из юникода.

Можно так. Только читать Вы должны из файла Unicode строку, без лишних преобразований.
Цитата:
Непонятно еще зачем такие сложности по преобразованию в Base64 в методе EncodeToFile? По крайней мере, строку можно получить проще через

В данном случае незачем, люблю поточные преобразования Angel
С уважением, Александр.
Offline tyger  
#9 Оставлено : 21 мая 2009 г. 21:05:18(UTC)
tyger

Статус: Участник

Группы: Участники
Зарегистрирован: 18.05.2009(UTC)
Сообщений: 10
Откуда: Russia

Всем спасибо за помощь.
Все заработало.

Остался один интересный момент: подпись прекрасно выполняется таким способом даже на машине, на которой не установлен Sharpei RTE и нет ни одной библиотеки Sharpei. Вот...
Offline Челпанов А.  
#10 Оставлено : 21 мая 2009 г. 21:35:48(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Для подписи CMS Sharpei и не нужен. Microsoft реализовал эту часть через криптопровайдеры аккуратно. А вот проверка без Sharpei не работает.
Вообще-то и при проверке CMS подписи (и еще в паре мест, например при двухсторонней аудентификации в TLS) почти все работает корректно. Вот это почти Sharpei и исправляет; не реализует, а именно чуть правит.
С уважением, Александр.
Offline tyger  
#11 Оставлено : 22 мая 2009 г. 0:26:19(UTC)
tyger

Статус: Участник

Группы: Участники
Зарегистрирован: 18.05.2009(UTC)
Сообщений: 10
Откуда: Russia

Челпанов А. написал:
Вообще-то и при проверке CMS подписи (и еще в паре мест, например при двухсторонней аудентификации в TLS) почти все работает корректно. Вот это почти Sharpei и исправляет; не реализует, а именно чуть правит.

Гм. Тогда встречный вопрос: Является ли установка Sharpei RTE строгонеобходимым действием или можно обойтись простым перетаскиванием библиотек (сборок) в папке с программой? Там что-то серьезное при инсталяции происходит, кроме регистрации сборок в GAC?
Offline Максим Коллегин  
#12 Оставлено : 22 мая 2009 г. 3:39:45(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,092
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 19 раз
Поблагодарили: 613 раз в 546 постах
Установка необходима.
Знания в базе знаний, поддержка в техподдержке
Offline Arseniy  
#13 Оставлено : 16 июня 2009 г. 12:53:28(UTC)
Arseniy

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

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

Здравствуйте.

У меня возникла похожая проблема.

Мне необходимо подписать XML файл и отправить его на сайт для проверки.

В JavaScript это делается через CAPICOM:

А на C# подготавливаю SignedXML так:

Код:

                                string dsigObjectId = "TS_SO_Zayavka_polzovatelya";
                                SignedXml signedXml = new SignedXml();
                                signedXml.SignedInfo.CanonicalizationMethod = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315";
                                signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
                                signedXml.SigningKey = x509.PrivateKey;

                                Reference reference = new Reference("#TS_SO_Zayavka_polzovatelya");
                                reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
                                reference.Type = "http://www.w3.org/2000/09/xmldsig#;Object";
                                signedXml.AddReference(reference);

                                XmlDocument xdoc = new XmlDocument();
                                xdoc.PreserveWhitespace = false;
                                string normilize_xmlstring = xmlstring.Replace("&lt;", "<").Replace("&quot;", "\"");
                                xdoc.LoadXml(normilize_xmlstring);
                                DataObject dataObject = new DataObject(dsigObjectId, "text/plain", "", xdoc.DocumentElement);
                                signedXml.AddObject(dataObject);
                                signedXml.KeyInfo = new KeyInfo();
                                KeyInfoX509Data keyX509 = new KeyInfoX509Data();
                                keyX509.AddCertificate(x509);
                                signedXml.KeyInfo.AddClause(keyX509);
                                signedXml.ComputeSignature();
                                XmlElement xelement = signedXml.GetXml();
                                XmlDocument xd = new XmlDocument();
                                xd.AppendChild(xd.ImportNode(xelement, true));
                                xmlsingnedstring = xd.InnerXml;


И отправляю на сервер, но на сервере проверка не проходит.

В чем может быть проблема? Может есть примеры, как это делать?
Вложение(я):
JavaScriptCAPICOM.txt (4kb) загружен 81 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Челпанов А.  
#14 Оставлено : 16 июня 2009 г. 16:45:27(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Не понял какими средствами Вы проверяете подпись (У вас в тексте и через CAPICOM и на C# реализована только подпись).
Проходит ли подпись на себя (C# на C# и CAPICOM на CAPICOM)?
Примеры подписи и проверки подписи на C# есть в КриптоПро Sharpei SDK Simple.zip каталог xml
Примеры подписи и проверки подписи через CAPICOM есть в Microsoft Platform SDK C:\Program Files\Microsoft SDKs\Windows\v6.0\Samples\Security\capicom\vbs\CSignData.vbs
С уважением, Александр.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.