XML署名

XML署名（エックスエムエルしょめい、）は、デジタル署名のためのXML構文を規定するW3C勧告である。XMLDSig、XML-DSig、XML-Sigとも呼ぶ。機能的にはPKCS#7と共通の部分が多くあるが、XML文書に対する署名に適応するための拡張を備える。SOAPやSAMLなど、様々なウェブ技術で使われている。
目的.
XML署名は任意の種類のリソース（典型的にはXML文書）に署名を行うために用いる。
構造.
XML署名は、名前空間codice_1のSignature要素で構成される。その基本構造は次のようになる。
 Signature
 SignedInfo
 SignatureMethod
 CanonicalizationMethod
 Reference
 Transforms
 DigestMethod
 DigestValue
 Reference ...
 SignatureValue
 KeyInfo
 Object
SignedInfo要素は署名の対象および使用するアルゴリズムを指定する。SignatureMethodおよびCanonicalizationMethod要素はSignatureValue要素により使用され、改竄（かいざん）から保護するためにSignedInfoに含まれる。
Reference要素のリストは署名されるリソースをURIによって指定する。Transforms要素においてハッシュを計算する前にリソースに対し適用する全ての変換を、(DigestMethod要素において)ダイジェスト(ハッシュ)アルゴリズムを、リソースに対して適用した結果(これはDigestValue要素においてBase64エンコードされている)を指定する。
SignatureValue要素は署名のBase64エンコードされた値である。この値は、SignedInfo要素をCanonicalizationMethod要素で指定されたアルゴリズムによりシリアル化した後の(SignatureMethodの指定により生成される)署名である。(正規化に関する詳細はXML正規化の節を参照のこと)
KeyInfo要素は、署名の受信者に対し署名を検証するのに必要となる鍵を取得できるようにするオプション要素である。一般的には一連のX.509証明書を入れることができる。存在しない場合、受信者はデータの内容から鍵を特定することが求められる。
Object要素は署名の場合に対象となるデータを保持するのに用いる。
検証とセキュリティ考察.
XML署名を検証する際に、コア検証 ()と呼ばれる手続きは以下のようになる。
この手続き、主張する組織により本当にリソースが署名されたものかどうか立証する。しかしながら、正規化と変換方法の拡張性により、検証側の組織では実際に何に対して署名されたり、ハッシュ計算されたのか、言い換えれば、そこで使われたアルゴリズムが署名されたデータの意味を変更しないことを信頼できるかもまた確認しなければならない。
XML正規化 ().
XML署名の生成は、通常のデジタル署名の生成よりも少し複雑である。何故なら、与えられたXML文書は、一つ以上の正式なシリアル化された表現が存在するかもしれないからである。例えば、タグの中の空白は文法的に区別されないので、codice_2は文法的にはcodice_3と同じである。
デジタル署名はシリアル化されたXML文書に対し暗号学的ハッシュ関数を実行した結果に対して、暗号化に非対称鍵アルゴリズムを用いることにより生成されるので、1バイトの違いによりデジタル署名は大きく変化する。
このような問題を回避し、論理的に同一であるXML文書が同一の署名値を生成することを保証するために、XML文書を署名する際には、ほぼ常にXML正規化が実行される(SignedInfoにを署名する際には正規化は必須である)。これらのアルゴリズムは、論理的に同一のドキュメントが、全く同一のシリアル化された表現を生成することを保証している。
デフォルトの正規化アルゴリズムが名前空間を扱う方式のために、また別の大きな問題がある。しばしば、署名されるXMLドキュメントは他のドキュメントを組み込む必要がある。この場合、オリジナルの正規化アルゴリズムではドキュメント単体で扱う時と同じ結果にはならない。このような理由により排他的正規化と呼ばれる周囲のXMLに依存せずXML名前空間の定義をシリアル化する方式が開発された。
批評.
XMLデータへの署名や暗号化のための前処理としてXML正規化を用いることについて、その複雑さ、固有の処理要件、低いパフォーマンス特性による批判がある。XML正規化を行うと、過度の待ち時間が発生し、単純にトランザクションや、パフォーマンスの影響が大きいSOAアプリケーションでは、解決することが難しいという議論がある。