W3C規格解説
Canonical XML Version1.0
(株)日本ユニテック
青木 秀起
「Canonical XML Version 1.0」とは、"XMLデータが論理的に同一であるとはどういうことか"を定義する仕様で、2001年3月15日に勧告となりました。
(http://www.w3.org/TR/xml-c14n)
「Canonical XML」はなぜ必要か?
XMLデータをやり取りする場合、論理的に同一のデータでも物理的に一致しない場合が考えられます。たとえば、文字コードが異なっていたり、要素内の属性の出現順序が異なっていたり、タグ内に空白が入っていることが考えられます。
例1) <?xml version="1.0" encoding=
"UTF-8" ?> <?xml version="1.0"
encoding= "Shift_JIS" ?>
例2) <product id="KF0900231" name="キングファイルA4型"> <product
name="キングファイルA4型" id="KF0900231" >
例3) <product>FD</product> <product>FD</product>
上の例はいずれも論理的に同一ですが、このままですと"別のデータである"と見なされる可能性があります。特に電子署名をする場合には"改ざんされた"と見なされてしまいます。そこで、電子署名の同一性を確認する際に「正規化する」ことによって物理的な違いを解消することができます。この「正規化処理」のルールを定めたものがCanonical
XMLです。
正規化処理
以下のように正規化した後のデータが元のデータと同じであれば、論理的に同一であると判断されます。
●文字コードはUTF-8を使用する
●改行文字は「#xA」に統一する
●文字参照および実体参照を読み込む
●CDATAセクションを文字内容に置き換える
●XML宣言とDTD情報を削除する
●空要素は開始タグを終了タグの対に置換する
●開始タグおよび終了タグ内の空白を正規化する
●文字内容内の空白は保持される
●属性値は二重引用符で囲む
●属性はUnicodeのビット順に配列する
●デフォルト属性を各要素に追加する
●その他
たとえば、図1のデータを正規化すると図2になります。
<!DOCTYPE doc
[<!ATTLIST e9 attr CDATA "default">]>
<doc>
<e1 />
<e2 ></e2>
<e3 name = "elem3" id="elem3" />
<e4 name="elem4" id="elem4" ></e4>
<e5 a:attr="out" b:attr="sorted"
attr2="all" attr="I'm"
xmlns:b="http://www.ietf.org"
xmlns:a="http://www.w3.org"
xmlns="http://example.org"/>
<e6 xmlns="" xmlns:a="http://www.w3.org">
<e7 xmlns="http://www.ietf.org">
<e8 xmlns="" xmlns:a="http://www.w3.org">
<e9 xmlns="" xmlns:a="http://www.ietf.org"/>
</e8>
</e7>
</e6>
</doc> |
図1 正規化処理前
<doc>
<e1></e1>
<e2></e2>
<e3 id="elem3" name="elem3"></e3>
<e4 id="elem4" name="elem4"></e4>
<e5 xmlns=http://example.org
xmlns:a=http://www.w3.org xmlns:b=http://www.ietf.org
attr="I'm" attr2="all"
b:attr="sorted" a:attr="out"></e5>
<e6 xmlns:a="http://www.w3.org">
<e7 xmlns="http://www.ietf.org">
<e8 xmlns="">
<e9 xmlns:a="http://www.ietf.org"
attr="default"></e9>
</e8>
</e7>
</e6>
</doc> |
図2 正規化処理後
まとめ
2002年7月18には、名前空間などのコンテキストを排除して正規化する手法を追加した「Exclusive XML Canonicalization
Version 1.0」(http://www.w3.org/TR/xml-exc-c14n/)
が勧告となりました。たとえば、SOAPでは外側のSOAPエンベロープ部分(env:Envelope)にメッセージ内容と関係がない名前空間が宣言されていますが、このような外側のコンテキストとは関係なく中身を処理したい場合などに使用されます。
このように、「Canonical XML Version 1.0」も「Exclusive XML Canonicalization
Version 1.0」もWebサービスのセキュリティを担う重要な技術であり、Webサービス推進のために欠かせません。
関連サービス
標準化仕様の動向調査
最新動向を伝えるDXメールニュース
(無料)
|