Цифровая подпись частей XML-документа - PullRequest
2 голосов
/ 23 июня 2009

У меня есть XML-документ, имеющий структуру, подобную следующей

<envelop>
    <header>blaa</header>
    <message>blaa blaa</message>
    <footer></footer>
</envelop>

Я хочу подписать элементы заголовка и сообщения цифровой подписью и добавить подпись в элемент нижнего колонтитула.

Как я могу подписать элементы, а затем проверить подпись (используя .net c #)?

Ответы [ 6 ]

3 голосов
/ 23 июня 2009

Вы должны иметь возможность добавить XPath-преобразование в подпись. Это должно выглядеть примерно так:

       <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
         <XPath xmlns:dsig="&dsig;">
         ...
         </XPath>
       </Transform>

Я не владею XPath, но должно быть легко сформулировать XPath-выражение, исключающее элемент Footer. (Но обратите внимание, что XPath является необязательной частью XML-DSIG, поэтому не все реализации могут его поддерживать).

В качестве альтернативы, если бы вы могли реструктурировать ваш документ, чтобы он стал

<envelop>
  <header>blaa</header>
  <message>blaa blaa</message>
  <Signature></Signature>
</envelop>

или

<envelop>
  <signedEnvelope>
    <header>blaa</header>
    <message>blaa blaa</message>
  </signedEnvelope>
  <Signature></Signature>
</envelop>

Вы могли бы справиться с этим с помощью Преобразования с подписью в конвертах (первый случай) или подписав элемент подписанного элемента (второй случай).

2 голосов
/ 26 января 2011

Есть партнер Microsoft, который может быть очень хорош для этого. Они позволяют добавлять цифровые подписи для XML (как и для всех других платформ). Я рекомендую проверить их продукт, он называется cosign.

2 голосов
/ 23 июня 2009
1 голос
/ 23 июня 2009
0 голосов
/ 10 декабря 2010

Я вижу, что этот пост старый, но, возможно, кому-то сейчас нужна такая же. То, что вам нужно, это как конвертная подпись в XMLDSIG. Разница в том, что в XMLDSIG вы должны включить данные подписи в узел Signature .

Если вы хотите сделать это, вы должны реализовать это самостоятельно.

Я участвую в проекте по разработке библиотеки для обеспечения поддержки XAdES для .NET Framework.

Мы только что выпустили версию 1.0, которая обеспечивает раннюю поддержку XAdES-BES.

Вы можете найти его в XAdES .NET Project

Надеюсь, исходный код может вам как-то помочь.

Привет.

0 голосов
/ 24 июня 2009

Почему бы не следовать рекомендациям w3 для подписи XML http://www.w3.org/2000/09/xmldsig# оно имеет базовую структуру:

<Signature>
   <SignedInfo>
      <SignatureMethod />
      <CanonicalizationMethod />
      <Reference>
         <Transforms>
         <DigestMethod>
         <DigestValue>
      </Reference>
      <Reference /> etc.
   </SignedInfo>
   <SignatureValue />
   <KeyInfo />
   <Object />
</Signature>

Если вам нужны более продвинутые функции, читайте о XAdES - я думаю, что он доступен в c #.

...