XML署名(エックスエムエルショメイ)とは | 意味や読み方など丁寧でわかりやすい用語解説

XML署名(エックスエムエルショメイ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

XML署名 (エックスエムエルショメイ)

英語表記

XML Signature (エックスエムエルシグネチャ)

用語解説

XML署名(XML Signature)は、XML文書の完全性(改ざんされていないこと)と認証(誰が作成したか)を保証するための技術だ。電子署名の技術をXML文書に適用したもので、デジタル署名の一種として扱われる。

XML署名の概要は、XML文書の一部または全体に対してハッシュ値を計算し、そのハッシュ値を秘密鍵で暗号化することで署名を作成する。この署名と、署名に使用した公開鍵に関する情報(証明書など)をXML文書内に埋め込むことで、受信者は公開鍵を使って署名を検証し、文書が改ざんされていないか、そして署名者が正当な人物であるかを確認できる。

XML署名の詳細について説明する。XML署名は、W3C(World Wide Web Consortium)によって標準化されており、複数の規格が存在する。主要な要素として、<Signature>要素があり、この中に署名に関する様々な情報が記述される。

<Signature>要素は、以下の要素を含む。

  • <SignedInfo>: 署名対象となるデータ(XML文書の一部または全体)に関する情報が含まれる。ハッシュアルゴリズムや正規化アルゴリズムなどの情報もここに記述される。<Reference>要素を使って、署名対象となるデータとそのハッシュ値を指定する。複数の<Reference>要素を含めることができ、XML文書の異なる部分を個別に署名対象にすることができる。

  • <SignatureValue>: <SignedInfo>要素の内容を秘密鍵で暗号化した署名値が格納される。これが実際の署名データとなる。

  • <KeyInfo>: 署名の検証に必要な公開鍵に関する情報が含まれる。公開鍵自体、または公開鍵証明書への参照などが記述される。<X509Data>要素を使うことで、X.509証明書を格納することができる。

  • <Object>: 署名対象ではない任意のデータを含めることができる。例えば、署名に関する補足情報や、追加のメタデータなどを格納する。

XML署名のプロセスは、大きく分けて署名生成と署名検証の2つの段階に分けられる。

署名生成のステップは以下の通りだ。

  1. 署名対象のデータを特定する。XML文書全体、または特定の部分要素を選択する。
  2. 選択したデータに対して、指定されたハッシュアルゴリズム(SHA-256など)を用いてハッシュ値を計算する。
  3. <SignedInfo>要素を作成し、署名対象のデータとハッシュ値、使用したアルゴリズムなどを記述する。
  4. <SignedInfo>要素の内容を正規化する。XML文書の表現形式の差異を吸収するために、標準化された方法でXMLを変換する。
  5. 正規化された<SignedInfo>要素を秘密鍵で暗号化し、署名値を生成する。
  6. <SignatureValue>要素に署名値を格納する。
  7. 公開鍵に関する情報(証明書など)を<KeyInfo>要素に格納する。
  8. <Signature>要素を作成し、<SignedInfo><SignatureValue><KeyInfo>などの要素を組み込む。
  9. <Signature>要素をXML文書に埋め込む。

署名検証のステップは以下の通りだ。

  1. XML文書から<Signature>要素を取り出す。
  2. <KeyInfo>要素から公開鍵を取得する。
  3. <SignedInfo>要素を取り出し、署名対象のデータとハッシュ値、使用されたアルゴリズムなどの情報を確認する。
  4. <SignedInfo>要素の内容を正規化する。
  5. <SignedInfo>要素の正規化された内容に対して、署名生成時と同じハッシュアルゴリズムを用いてハッシュ値を計算する。
  6. <SignatureValue>要素から署名値を取り出し、公開鍵を用いて復号する。
  7. 復号されたハッシュ値と、ステップ5で計算したハッシュ値を比較する。
  8. ハッシュ値が一致すれば、署名は有効であり、XML文書は改ざんされていないことが確認できる。また、<KeyInfo>要素に含まれる証明書情報を検証することで、署名者が正当な人物であるかを確認できる。

XML署名は、電子商取引、電子政府、コンテンツ配信など、様々な分野で利用されている。例えば、電子商取引では、注文書や請求書の真正性を保証するために使用される。電子政府では、申請書や証明書の改ざんを防止するために利用される。コンテンツ配信では、デジタルコンテンツの著作権保護や、配信経路におけるコンテンツの改ざん防止に役立つ。

XML署名は、XML文書のセキュリティを確保するための重要な技術であり、システムエンジニアとして、その仕組みと利用方法を理解しておくことは非常に重要だ。

関連コンテンツ