XML署名 【XML Signature】 XMLデジタル署名 / XML-DSig
概要
XML署名(XML Signature)とは、デジタル署名をXML形式で記述し、対象の文書が改竄されていないか、作成者が署名者本人に間違いないかなどを確認できるようにする技術。最初の規格は2001年にW3Cによって標準化された。公開鍵暗号およびデジタル証明書を利用したデジタル署名をXMLの書式に従って作成する方法を定めている。主な署名の対象はXML文書だが、XML以外の任意の形式のデータに対して署名を作成することもできる。
署名者は自身の暗号鍵ペアと署名対象データを元にハッシュ値(ダイジェスト)を算出し、Signature要素および子要素の組み合わせによって署名データを記述する。受信者は受け取ったデータからハッシュ値を算出して照合することで、対象データの改竄やすり替え、署名者のなりすましが行われていないか検証することができる。
署名の形式は3つ用意されている。「デタッチ署名」(detached signature)は対象データとは別にXML署名を作成する形式で、署名内から対象データをURI(Uniform Resource Identifier)で指定する。「エンベロープ署名」(enveloped signature)は任意のXML文書の一部にXML署名を埋め込む形式、「エンベローピング署名」(enveloping signature)はXML署名の要素の一部として対象データを埋め込む形式である。
XMLは文法上、空白文字や改行文字の有無や数などを区別しない仕様になっているが、ハッシュ値による比較・照合はビット列のレベルでデータが完全に同一であることが必要となる。このギャップを埋めるため、署名を行うXML文書は一定の規則に従って単一の表現形式に揃えるXML正規化(XML Canonicalization)を施す必要がある。
(2021.1.22更新)