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は検証アプリケーションを使い図2のmRS署名付きXMLファイルを検証した結果です。この場合、図2の<?xml version="1.0"?>タグから</PurchaseOrder>タグ までのすべての文字列が保護の対象になっています。
mRS署名は、上記のようなXMLファイルのみならず、書き込み可能なファイルであれば、どのような形式のファイルにも署名が可能です。例えば、画像やMS Word、MS Excel、PDF、HTMLなどのファイルに署名することも可能です。(特許出願済)