最終更新日:2026年8月4日
fe fe-security cryptography-authentication
まず結論
XML署名とは、XML文書やその一部分にデジタル署名を付け、改ざんの有無や署名者を確認する仕組みです。
基本情報技術者試験では、次の特徴を押さえると判断しやすくなります。
XML文書全体だけでなく
特定の要素や複数の部分にも署名できる
したがって、問題文に次の表現があれば、XML署名を疑います。
- XML文書の一部へ署名する
- 複数の要素へ別々に署名する
- 部分署名や多重署名に対応する
- 署名対象をURIで指定する
XML署名は、通信経路を暗号化するTLSや、情報の存在を隠すステガノグラフィとは別の技術です。
直感的な説明
XML文書を、複数の欄を持つ電子申請書として考えると分かりやすいです。
<申請書>
<申請者情報>...</申請者情報>
<申請内容>...</申請内容>
<承認情報>...</承認情報>
</申請書>
通常のファイル全体への署名では、申請書全体を一つの対象として扱います。
一方、XML署名では、XMLの要素構造を利用して、署名対象を細かく指定できます。
申請者
→ 申請内容に署名
上司
→ 承認情報に署名
管理部門
→ 文書全体に署名
このように、文書の一部分だけに署名したり、複数の署名を一つのXML文書へ付けたりできます。
これが、XML署名の特徴である部分署名と多重署名です。
定義・仕組み
XML署名は、XMLデータに対するデジタル署名の形式です。
基本的な流れは、一般的なデジタル署名と同じです。
署名対象を選ぶ
↓
ハッシュ値を計算する
↓
秘密鍵を用いて署名値を生成する
↓
署名情報をXML形式で保存する
検証時には、署名対象からハッシュ値を再計算し、署名情報を使って確認します。
ハッシュ値が一致する
→ 署名後に内容が変更されていない
ハッシュ値が一致しない
→ 内容が変更されている可能性がある
XML署名によって、主に次の性質を確認できます。
| 性質 | 意味 |
|---|---|
| 完全性 | 署名後に内容が変更されていないこと |
| 真正性 | 対応する秘密鍵を持つ者が署名したこと |
ただし、XML署名は、XMLの内容を読めなくする仕組みではありません。
内容を読めなくする
→ 暗号化
変更されていないことを確認する
→ デジタル署名
XML署名の特徴は、署名対象を文書全体に限定せず、XML要素や外部データまで柔軟に指定できることです。
部分署名
部分署名は、XML文書の特定部分だけを署名対象にする方法です。
例えば、次のXML文書で、申請内容だけを署名対象にできます。
<申請書>
<申請者情報>...</申請者情報>
<申請内容 Id="request">...</申請内容>
<承認情報>...</承認情報>
</申請書>
署名対象をURIなどで指定することで、必要な要素だけを保護できます。
XML文書の一部を指定
→ その部分だけに署名
多重署名
多重署名は、一つのXML文書に複数の署名を付ける方法です。
例えば、申請者と承認者が、異なる部分にそれぞれ署名できます。
署名1
→ 申請内容を対象
署名2
→ 承認情報を対象
誰がどの部分を承認したのかを、XML構造に沿って表現できます。
XML署名の主な要素
XML署名には、署名対象や署名値などを表す要素があります。
| 要素 | 主な役割 |
|---|---|
Signature |
XML署名全体を表す |
SignedInfo |
署名対象やアルゴリズムの情報を表す |
Reference |
署名対象をURIなどで指定する |
DigestValue |
署名対象のハッシュ値を表す |
SignatureValue |
生成された署名値を表す |
KeyInfo |
検証に使う鍵の情報を格納できる |
FE試験では、要素名を細かく暗記するより、次の関係を理解することが重要です。
Reference
→ どのデータを署名するか指定する
DigestValue
→ 対象データのハッシュ値
SignatureValue
→ 秘密鍵を用いて生成した署名値
このテーマは、基本情報技術者試験の「情報セキュリティ」や「暗号と認証」に関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験から確認できます。
科目Aでどう出る?
科目Aでは、XML署名でできることや、他の技術との違いを選ぶ問題として出題されます。
最も重要な判断基準は次です。
文書全体だけでなく
一部分や複数箇所へ署名できる
→ XML署名
3つの署名形式
XML署名は、署名要素と署名対象の位置関係によって、主に次の3形式に分けられます。
| 形式 | 位置関係 |
|---|---|
| Detached Signature | 署名要素と署名対象が分離している |
| Enveloped Signature | 署名対象の中に署名要素がある |
| Enveloping Signature | 署名要素の中に署名対象がある |
Detached Signature
Detached Signatureは、署名要素と署名対象が分かれている形式です。
XML署名
└─ URIで対象を参照
署名対象
└─ 別の要素や別ファイル
detachedは「切り離された」という意味です。
署名対象が別ファイルの場合だけでなく、同じXML文書内で署名要素と対象要素が親子関係にない場合も含まれます。
Enveloped Signature
Enveloped Signatureは、署名対象の中に署名要素が入る形式です。
<対象文書>
<データ>...</データ>
<Signature>...</Signature>
</対象文書>
対象文書
└─ XML署名
対象文書が外側にあると考えます。
Enveloping Signature
Enveloping Signatureは、署名要素の中に署名対象が入る形式です。
<Signature>
<Object>
<対象文書>...</対象文書>
</Object>
</Signature>
XML署名
└─ 対象文書
署名要素が外側にあると考えます。
3形式の覚え方
Detached
→ 署名と対象が離れている
Enveloped
→ 対象文書が外側
Enveloping
→ 署名が外側
EnvelopedとEnvelopingは名前が似ていますが、親子関係が反対です。
選択肢を切る判断表
| 問題文の表現 | 判断する用語 |
|---|---|
| XML文書の一部へ署名 | XML署名 |
| 部分署名・多重署名 | XML署名 |
| XML要素をURIで参照 | XML署名 |
| 通信経路を暗号化 | TLS |
| 非同期通信でWeb画面を書き換える | Ajax |
| 情報の存在を隠す | ステガノグラフィ |
| 内容を読めなくする | 暗号化 |
どんな場面で使う?
XML署名は、XML形式のデータを複数の組織やシステムの間で受け渡す場面で使われます。
例えば、次のような用途があります。
- 電子申請や電子契約
- システム間で交換する業務メッセージ
- 複数の担当者が承認するワークフロー
- XML形式の設定情報や証明情報
- 文書の一部分だけを保護したい場面
XML署名が向いているのは、単にファイル全体の改ざんを確認するだけでなく、XML構造に応じて署名対象を選びたい場合です。
文書全体を一つの対象として署名
→ 一般的なファイル署名でも可能
XML要素ごとに署名対象を指定
→ XML署名が得意
XML署名とTLSの違い
| 項目 | XML署名 | TLS |
|---|---|---|
| 主な対象 | XMLデータ | 通信経路 |
| 主な目的 | 完全性、署名者の確認 | 通信中の盗聴・改ざん対策 |
| 通信終了後 | 署名情報を残せる | 通信路の保護は終了する |
| 部分指定 | XML要素ごとに可能 | XMLの部分署名ではない |
判断するときは、次のように切り分けます。
通信中を守る
→ TLS
データそのものへ署名を残す
→ XML署名
XML署名とXML暗号の違い
| 技術 | 主な目的 |
|---|---|
| XML署名 | 改ざんの検知、署名者の確認 |
| XML暗号 | 内容を読めないようにする |
完全性・真正性
→ XML署名
機密性
→ XML暗号
XML署名を付けただけでは、内容が秘密になるわけではありません。
XML署名とAjaxの違い
Ajaxは、JavaScriptを使ってサーバと非同期通信し、Webページの一部分を更新する仕組みです。
画面を再読込みせずに内容を更新する
→ Ajax
XMLデータに署名を付ける
→ XML署名
Ajaxの名前にXMLが含まれていても、XML署名とは役割が異なります。
XML署名とステガノグラフィの違い
ステガノグラフィは、画像などの中に情報を埋め込み、情報の存在自体を分かりにくくする技術です。
情報の存在を隠す
→ ステガノグラフィ
改ざんを検知する
→ XML署名
よくある誤解・混同
| 誤解 | 正しい理解 |
|---|---|
| XML署名は通信を暗号化する | 通信経路の暗号化はTLSの役割 |
| XML署名を付けると内容を読めなくなる | 署名と暗号化は別の技術 |
| XML署名は文書全体にしか付けられない | 特定要素や複数対象にも署名できる |
| Detachedは必ず別ファイルを対象にする | 同じXML内で分離した要素を参照する場合もある |
| EnvelopedとEnvelopingは同じ | 署名と対象の親子関係が反対 |
| XMLを使う技術はすべてXML署名に関係する | AjaxやXML暗号とは目的が異なる |
XML署名は盗聴を防ぐ
XML署名の主目的は、改ざんの検知や署名者の確認です。
署名対象の内容自体を暗号化していなければ、第三者が内容を読める可能性があります。
盗聴を防ぐ
→ TLSや暗号化
改ざんを検知する
→ XML署名
署名対象を変更しても署名は有効なまま
署名対象の内容が変わると、再計算したハッシュ値が署名時の値と一致しなくなります。
そのため、署名検証に失敗します。
EnvelopedとEnvelopingを名前だけで覚える
両者は名前が似ているため、どちらが外側かで覚えます。
Enveloped
→ 対象文書が署名を包む
Enveloping
→ 署名が対象文書を包む
XML署名はXMLだけしか参照できない
XML署名では、URIによって外部データを参照する形式もあります。
試験では、XML文書の要素に柔軟に署名できる点を中心に押さえれば十分です。
まとめ(試験直前用)
- XML署名は、XML文書やその一部分へデジタル署名を付ける仕組み
- XML文書全体だけでなく、部分署名や多重署名にも対応できる
- XML署名は完全性と真正性を確認するもので、内容を暗号化するものではない
- Detachedは署名と対象が分離している
- Envelopedは対象文書の中に署名がある
- Envelopingは署名の中に対象文書がある
- 通信経路を守るのはTLS、非同期通信はAjax、情報の存在を隠すのはステガノグラフィ