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

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline Андрей_  
#1 Оставлено : 12 апреля 2010 г. 20:07:41(UTC)
Андрей_

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

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

Добрый день!

Прошу Вас уточнить как с помощь Вашего продукта подписать часть XML. Решая аналогичную проблему в Info Path, нашел в структуре выходного файла явное задание XSLT-преобразования.



В Вашей структуре подписи, полученной по результатам примеров SDK, его нет и аналогичный фрагмент выглядит иначе.



Возможно что этот служебный фрагмент c XSLT задается. Но как это сделать программно ?

C уважением, Андрей
Р.S. Почему нельзя ввести теги xml в текст письма?

Отредактировано пользователем 12 апреля 2010 г. 20:10:47(UTC)  | Причина: Не указана

Вложение(я):
подпись фрагмента XML.txt (2kb) загружен 68 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Андрей_  
#2 Оставлено : 12 апреля 2010 г. 20:48:08(UTC)
Андрей_

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

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

Добрый день!

По старой традиции стоит посмотреть на свое сообщение со стороны так и решение находится. Как я понял за основу лучше взять пример SDK SignTransform и вызов

XmlDsigXsltTransform xsltransform = CreateXsltTransform();
reference.AddTransform(xsltransform) ?

C уважением, Андрей.

Offline Челпанов А.  
#3 Оставлено : 13 апреля 2010 г. 15:03:34(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Если интересует совместимость с InfoPath, то лучше брать именно этот пример (SignTransform). Transform можно взять прямо из InfoPath - там 3 прошитых трансформа - одна подпись, несколько независимых подписей и подписи на подписи. Совместимость проверяли.
Если необходимо подписание узла или узлов, то есть примеры SignNode и SignNode2.
Есть и другие варианты, а какой выбрать лучше смотреть из соображений совместимости.
С уважением, Александр.
Offline Андрей_  
#4 Оставлено : 13 апреля 2010 г. 15:59:43(UTC)
Андрей_

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

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

Добрый день!

К сожалению, не разделяю Вашего оптимизма по поводу взаимной проверки. (InfoPath 2007 Eng, Windows 7 Eng)

У меня получился противоположный результат в обе стороны.
1. Файл пoдписанный InfoPath выдает отрицательный результат программой Verify SDK, хотя сертификат подписанта находится
2. Программа подписанная модифицированной программой SignTransform, проверяется успешно Verify SDK, но понимается InfoPath как невалидная и даже сертификат не определяется

Прикладываю: 1. Исходный файл XML 1_ish.xml ; 2.файл подписанный только InfoPath 1.xml ; 3. файл с двумя подписями InfoPath и Крипто-Про 4.XSLT

Фрагмент модификации SignTransform

// Подписывание XML файла и сохранение подписи в новом файле.
static void SignXmlDocument(XmlDocument doc,
AsymmetricAlgorithm Key, X509Certificate Certificate)
{
// Создаем объект SignedXml по XML документу.
SignedXml signedXml = new SignedXml(doc);

// Добавляем ключ в SignedXml документ.
signedXml.SigningKey = Key;

// Создаем ссылку на node для подписи.
// При подписи всего документа проставляем "".
Reference reference = new Reference();
reference.Uri = "";

// Явно проставляем алгоритм хеширования,
// по умолчанию SHA1.
reference.DigestMethod =
CPSignedXml.XmlDsigGost3411Url;

// Добавляем transform на подписываемые данные
// для удаления вложенной подписи.
XmlDsigEnvelopedSignatureTransform env =
new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);





// Добавляем transform на подписываемые данные
// для удаления вложенной подписей, не только
// собственной.
XmlDsigXsltTransform xsltransform = CreateXsltTransform();
reference.AddTransform(xsltransform);

// Добавляем transform для канонизации.
XmlDsigC14NTransform c14 = new XmlDsigC14NTransform();
reference.AddTransform(c14);


// Добавляем ссылку на подписываемые данные
signedXml.AddReference(reference);

// Создаем объект KeyInfo.
KeyInfo keyInfo = new KeyInfo();

// Добавляем сертификат в KeyInfo
keyInfo.AddClause(new KeyInfoX509Data(Certificate));

// Добавляем KeyInfo в SignedXml.
signedXml.KeyInfo = keyInfo;

// Можно явно проставить алгоритм подписи: ГОСТ Р 34.10.
// Если сертификат ключа подписи ГОСТ Р 34.10
// и алгоритм ключа подписи не задан, то будет использован
// XmlDsigGost3410Url
// signedXml.SignedInfo.SignatureMethod =
// CPSignedXml.XmlDsigGost3410Url;

// Вычисляем подпись.
signedXml.ComputeSignature();

// Получаем XML представление подписи и сохраняем его
// в отдельном node.
XmlElement xmlDigitalSignature = signedXml.GetXml();

// Добавляем node подписи в XML документ.
doc.DocumentElement.AppendChild(doc.ImportNode(
xmlDigitalSignature, true));
}

Преобразование. Здесь сразу есть отличие в служебном слове xsl по сравнению с оригиналом InfoPath. Но без него выдавались ошибки при подписи. (См приложенный файл. txt)


Прошу высказать Ваше авторитетное мнение и совет!

C уважением, Андрей

Отредактировано пользователем 13 апреля 2010 г. 16:10:40(UTC)  | Причина: Не указана

Вложение(я):
Trans.rar (15kb) загружен 30 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Челпанов А.  
#5 Оставлено : 13 апреля 2010 г. 16:35:42(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
1. Файл 1.xml содержит корректную подпись. InfoPath проверять не стал, так как Вы говорите, что она проверяется. А вот при помощи примера Xml.Verify проверил - подпись верна.
2. В файле doc_signed_trans.xml одна из подписей корректна, во второй ошибочный transofrm. Ваш transform подписывает все узлы и атрибуты документа; при проверке подписи в число подписанных войдет и уже проставленная подпись (как та что была в документе до подписания, так и та что добавляется при подписании).
С уважением, Александр.
Offline Андрей_  
#6 Оставлено : 13 апреля 2010 г. 17:32:08(UTC)
Андрей_

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

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

Соглашусь с моей стороны - некорректная постановка вопроса, т.е. чистый подписанный InfoPath файл даже множественной подписью совершенно правильно определяется и верифицируется.

Т.е. в одну сторону Info Path->Шарпей совместимость однозначно существует

Но если взять подписанный InfoPath файл и начать его подписывать, например третей
подписью Шарпея поверх двух поставленных ранее, то при проверке тем же Verify первые две подписи становятся невалидными!!!! А третья родная конечно валидна!!!

А в InfoPath вообще третья подпись не видна , а первые две становятся невалидными!!!

Почему??? С какой стати третья подпись, затирает предшествующие????

Далее я исключил xslt преобразование поставил предлагаемый Вами тег. Результат тот же. Этот файл и прилагаю

C уважением, Андрей

Отредактировано пользователем 13 апреля 2010 г. 17:36:39(UTC)  | Причина: Не указана

Вложение(я):
doc_signed_trans.xml (79kb) загружен 22 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Андрей_  
#7 Оставлено : 13 апреля 2010 г. 17:40:45(UTC)
Андрей_

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

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

Или чтобы не марать интернет-бумагу, не могу ли я надеяться на пример смешанной подписи на Шарпее, результат которого нормально читается в InfoPath.

С уважением, Андрей

Отредактировано пользователем 13 апреля 2010 г. 17:48:47(UTC)  | Причина: Не указана

Offline Челпанов А.  
#8 Оставлено : 13 апреля 2010 г. 18:42:02(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Цитата:
Или чтобы не марать интернет-бумагу, не могу ли я надеяться на пример смешенной подписи на Шарпее, результат которого нормально читается в InfoPath.

Подпись документа или узла, одна подпись, подпись на подпись, несколько независимых подписей... различные InfoPath... слишком много вариантов...
Цитата:
Почему??? С какой стати третья подпись, затирает предшествующие????

Для того чтобы проверялись корректно несколько подписей необходимо, чтобы при простановке каждой последующей подписи, подписанное содержимое предыдущих не изменялось. Для этого существует три основных варианта.
1. Указывать явно узлы, которые подписываются. Подпись в этом случае добавляется не в те узлы, которые подписываются.
2. Указывать преобразование исключающее из документа ВСЕ подписи.
3. В некотором роде вариация предыдущих двух пунктов. Первая подпись делается по 1-ому или 2-ому пункту. А последующие подписывают узел с первой подписью.

В Вашем примере первой подписью подписан весь документ за исключением XPATH="/dfs:myFields/my:подписи1/node()". При этом подпись находится в узле /dfs:myFields/my:подписи1/ds:Signature
Второй только первая подпись (/dfs:myFields/my:подписи1/node()[@Id='MySignature_000']). Сама подпись находится в узле /dfs:myFields/my:подписи1/ds:Signature
Третьей подписью подписан весь документ за исключением всех узлов ds:Signature и сама подпись находится в узле /dfs:myFields/ds:Signature.

То есть проставив третью подпись вы изменили данные подписанные первой подписью, а именно добавили третью подпись. Поэтому первая подпись не сходится при проверке через Verify C#. С другой стороны третью подпись Вы поместили в ту часть документа, которая не предназначена для подписей.

Сделайте InfoPath документ с несколькими подписями (несколькими, а не подпись на подпись) и проставьте следующую по образу и подобию, в то же место, с тем же transform, теми же namespace.

Отредактировано пользователем 13 апреля 2010 г. 18:44:29(UTC)  | Причина: Не указана

С уважением, Александр.
Offline Андрей_  
#9 Оставлено : 13 апреля 2010 г. 22:18:47(UTC)
Андрей_

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

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

Уважаемый, Александр!

Простите но в Ваших словах тоже есть нестыковки.

Цитата:
В Вашем примере первой подписью подписан весь документ за исключением XPATH="/dfs:myFields/my:подписи1/node()". При этом подпись находится в узле /dfs:myFields/my:подписи1/ds:Signature
Второй только первая подпись (/dfs:myFields/my:подписи1/node()[@Id='MySignature_000']). Сама подпись находится в узле /dfs:myFields/my:подписи1/ds:Signature
Третьей подписью подписан весь документ за исключением всех узлов ds:Signature и сама подпись находится в узле /dfs:myFields/ds:Signature.




Даже если вторая подпись подписывает первую подпись, то по Вашей логике после второй подписи первая подпись должна стать невалидной, так как она тоже что-то добавляет в документ!!Почему третья изменяет документ, а вторая нет?

Ладно тем не менее, я сделал как Вы рекомендовали.
Цитата:
1. Указывать явно узлы, которые подписываются. Подпись в этом случае добавляется не в те узлы, которые подписываются.

Итак в документе два поля. Только они подписываются независимыми и разными подписями (co-sign).
Потом я опять пытаюсь подписать через Шарпей. Та же песня независимые подписи становятся невалидными.
В сами поля Шарпей ничего не добаваляет. Но почему-то третья подпись не пристраивается в первым двум, а идет совершенно независимо.

Как сделать так, чтобы эта подпись попала внутрь тег my:signatures1 ?

Я был бы крайне признателен за простой пример ОДНОКРАТНОЙ ПОДПИСИ всего XML файла , нормально отображаемой в InfoPath. И думаю, что Ваш SDK только выиграл при его наличии.

С уважением, Андрей
Вложение(я):
doc_signed_trans.xml (202kb) загружен 21 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Челпанов А.  
#10 Оставлено : 14 апреля 2010 г. 17:00:36(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Цитата:
Даже если вторая подпись подписывает первую подпись, то по Вашей логике после второй подписи первая подпись должна стать невалидной, так как она тоже что-то добавляет в документ!!Почему третья изменяет документ, а вторая нет?

Для первой подписи transform такой, что он не включает часть документа, в число исключений входит вторая подпись. А вот третья подпись попадает в подписываемый текст
Цитата:
Как сделать так, чтобы эта подпись попала внутрь тег my:signatures1 ?

Просто добавлять не в другой узел: (с точностью до namespace)
Код:
const string signatureNode = "/my:моиПоля/my:подписи1/my:подписи2";
XmlElement sigs = (XmlElement)root.SelectSingleNode(signatureNode, manager);
sigs.AppendChild(obj);

Цитата:
Я был бы крайне признателен за простой пример ОДНОКРАТНОЙ ПОДПИСИ всего XML файла

Я не уверен, что такой пример можно создать. Я не знаю штатных стредств подписать весь документ при помощи InfoPath, поэтому скорее всего проверка такого документа не пройдет.
Цитата:
И думаю, что Ваш SDK только выиграл при его наличии.
Если делать "по-уму" то получается очень громоздко. А, если идею то приложил.
Form1.xml - подписываемый документ с заготовкой под подписи.
SignInfopath.cs - подпись несколькими подписями одной и той же части формы (/my:моиПоля/my:группа1)
Подписи независимы.
Подпись проверяется в InfoPath, но чтобы задействовать всю функциональность, необходимо добавить картинку самой формы и ее параметры. InfoPath добавляет еще параметры системы, комментарии, времена...
Вложение(я):
SignInfopath.cs (13kb) загружен 28 раз(а).
Form1.xml (1kb) загружен 33 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
С уважением, Александр.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (7)
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.