XML署名
XML署名は任意の種類のリソース(典型的にはXML文書)に署名を行うために用いる。
XML署名の生成は、通常のデジタル署名の生成よりも少し複雑である。何故なら、与えられたXML文書は、一つ以上の正式なシリアル化された表現が存在するかもしれないからである。例えば、タグの中の空白は文法的に区別されないので、<Elem >は文法的には<Elem>と同じである。
デジタル署名はシリアル化されたXML文書に対し暗号学的ハッシュ関数を実行した結果に対して、暗号化に非対称鍵アルゴリズムを用いることにより生成されるので、1バイトの違いによりデジタル署名は大きく変化する。
このような問題を回避し、論理的に同一であるXML文書が同一の署名値を生成することを保証するために、XML文書を署名する際には、ほぼ常にXML正規化が実行される(SignedInfoにを署名する際には正規化は必須である)。これらのアルゴリズムは、論理的に同一のドキュメントが、全く同一のシリアル化された表現を生成することを保証している。
デフォルトの正規化アルゴリズムが名前空間を扱う方式のために、また別の大きな問題がある。しばしば、署名されるXMLドキュメントは他のドキュメントを組み込む必要がある。この場合、オリジナルの正規化アルゴリズムではドキュメント単体で扱う時と同じ結果にはならない。このような理由により排他的正規化と呼ばれる周囲のXMLに依存せずXML名前空間の定義をシリアル化する方式が開発された。