"

XML署名について

XML署名は、XML文書にデジタル署名を付与し、改ざんを検知するための技術です。XML署名には構造の違いから、Enveloped署名、Enveloping署名、Detached署名の3種類があります。ネットワーク上のデータ交換ツールとして利用されているSOAPやSAMLなどは、XML署名によってセキュリティが担保されています。しかしながら、XML署名はXML文書の全体を署名対象にできないという原理的な弱点があります。この部分署名を利用した改ざんが数多く発生していますが、残念ながら、現在に至っても根本的な解決手法は提案されていません。なお、代表的な攻撃にXMLラッピング(XSW)攻撃やXML Rewriting攻撃があります。

参考文献

[1]NECセキュリティブログ "本当は怖いXML ~XML外部実体参照(XXE)に関する脆弱性について~" [2]Juraj Somorovsky,et.al.,"On Breaking SAML: Be Whoever You Want to Be" (PDFダウンロード)
[3]Sebastian Gajek,et.al.,"Analysis of Signature Wrapping Attacks and Countermeasures"

XMLファイルへのmRS署名

XMLファイルにデジタル署名を追加する場合、従来手法ではSOAPのように部分署名の構造にならざるを得ません。それは、XMLファイルに署名を挿入すると、XMLファイルのハッシュ値が署名挿入前後で変化するため、XMLファイルの原本性が失われるためです。
弊社は、符号理論を使うことでこの問題を解決しました。
開発したmRS署名は、部分署名ではなく、XMLファイル全体を署名対象にしています。
従って、XMLファイルの改ざん・偽造は原理的に不可能になります。

図1のXMLファイルは、一般的な購買発注書のサンプルとしてMicrosoft Learnが提供しているものです。 図2は、図1のXMLファイルにmRS署名を付与したもので、signature要素がmRS署名になっています。 図2をmRS署名付きXMLファイルと定義します。 mRS署名付きXMLファイルには公開鍵は含まれていません。公開鍵は、mRS署名を検証するアプリケーションに格納されています。勿論、mRS署名付きXMLファイルに公開鍵を含めることも可能です。

参考サイト

サンプル XML ファイル: 一般的な購買発注書 (LINQ to XML)

XMLファイル

 <?xml version="1.0"?>
 <PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
 <Address Type="Shipping">
   <Name>Ellen Adams</Name>
   <Street>123 Maple Street</Street>
   <City>Mill Valley</City>
   <State>CA</State>
    <Zip>10999</Zip>
    <Country>USA</Country>
  </Address>
  <Address Type="Billing">
    <Name>Tai Yee</Name>
    <Street> Oak Avenue</Street>
    <City>Old Town</City>
    <State>PA</State>
    <Zip>95819</Zip>
    <Country>USA</Country>
 </Address>
 <Notes>Please leave packages in shed by driveway.</Notes>
 <Items>
   <Item PartNumber="872-AA">
     <ProductName>Lawnmower</ProductName>
      <Quantity>1</Quantity>
      <USPrice>148.95</USPrice>
      <Comment>Confirm this is electric</Comment>
    </Item>
    <Item PartNumber="926-AA">
     <ProductName>Baby Monitor</ProductName>
      <Quantity>2</Quantity>
      <USPrice>39.98</USPrice>
      <ShipDate>1999-05-21</ShipDate>
    </Item>
  </Items>
</PurchaseOrder>
図1  署名対象のXMLファイル

mRS署名付きXMLファイル

 <?xml version="1.0"?>
 <PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
 <Address Type="Shipping">
   <Name>Ellen Adams</Name>
   <Street>123 Maple Street</Street>
   <City>Mill Valley</City>
   <State>CA</State>
    <Zip>10999</Zip>
    <Country>USA</Country>
  </Address>
  <Address Type="Billing">
    <Name>Tai Yee</Name>
    <Street> Oak Avenue</Street>
    <City>Old Town</City>
    <State>PA</State>
    <Zip>95819</Zip>
    <Country>USA</Country>
 </Address>
 <Notes>Please leave packages in shed by driveway.</Notes>
 <Items>
   <Item PartNumber="872-AA">
     <ProductName>Lawnmower</ProductName>
      <Quantity>1</Quantity>
      <USPrice>148.95</USPrice>
      <Comment>Confirm this is electric</Comment>
    </Item>
    <Item PartNumber="926-AA">
     <ProductName>Baby Monitor</ProductName>
      <Quantity>2</Quantity>
      <USPrice>39.98</USPrice>
      <ShipDate>1999-05-21</ShipDate>
    </Item>
  </Items>
 <signature>
   e58588e5908de581a5e4b88000000000fbcff8af23c565f8e2cd7
   ce3cc98c23e08a6b151395b60d027b632c0df34cbf8303043da2f
   d2e32f3137c4e65d111db38d84e9416832feee2178d536b330f14
   d941d93b5807e008273c772f49731acf439cd2c53729c8525ce8d
   4bf2ba54561a07684fcdb8b74851486c7f9007750094d500762df
   a00286500eb00000c000000000000000000000000000000000000
   0000000000000000006f6dcc2f00902d0059977300ab7b0000000
   0000000000000000000000000000000000000000000000000
 </signature>
</PurchaseOrder>
図2 mRS署名付きXMLファイル


図3 mRS署名付きXMLファイルの真正性判定
 

図3は検証アプリケーションを使い図2のmRS署名付きXMLファイルを検証した結果です。この場合、図2の<?xml version="1.0"?>タグから</PurchaseOrder>タグ までのすべての文字列が保護の対象になっています。

                     

mRS署名は、上記のようなXMLファイルのみならず、書き込み可能なファイルであれば、どのような形式のファイルにも署名が可能です。例えば、画像やMS Word、MS Excel、PDF、HTMLなどのファイルに署名することも可能です。(特許出願済)