---
title: "XML署名とは？XML文書の改ざん検知と署名者確認の仕組み【SG試験】"
description: "XML署名をXML文書の一部または全体に対する改ざん検知・署名者確認の仕組みとして整理し、XML暗号、通常の電子署名、Reference要素を問う選択肢の違いを見分けます。部分署名や参照先を問う問題で、暗号化による秘匿ではなく完全性と本人性を確認する技術だと判断します。"
last_modified_at: "2026-06-29"
canonical_url: "https://stemtazoo.github.io/sg/xml-signature/"
section: "sg"
---

## まず結論

**XML署名**とは、XML文書にデジタル署名を付けるための仕組みです。

XML文書の内容について、次のことを確認するために使われます。

- 途中で改ざんされていないか
- だれが署名したものか
- XML文書全体、または一部が正しいか

SG試験では、細かいXML構文よりも、まず次のように押さえると判断しやすいです。

> **XML署名 = XMLデータの改ざん検知と署名者確認に使う仕組み**

XMLを暗号化して読めなくする技術ではありません。

## 直感的な説明

XML署名は、XML文書に付ける**封印シール**のようなものです。

たとえば、注文書や申請データをXMLでやり取りするとします。そのXMLに署名を付けておくと、受け取った側は次のことを確認できます。

- 送信後に内容が変えられていないか
- 本当に署名者が作成・承認したものか

ここで大事なのは、XML署名は**中身を隠すためのものではない**という点です。中身を隠したい場合は、XML暗号のような暗号化の仕組みを使います。

## 定義・仕組み

XML署名は、XML文書にデジタル署名を埋め込むための技術です。

仕様としては、W3Cの [XML Signature Syntax and Processing Version 1.1](https://www.w3.org/TR/xmldsig-core/) で構文や処理方法が整理されています。

通常のデジタル署名と同じように、次の流れで改ざんの有無や署名者を確認します。

1. 署名対象のデータからハッシュ値を作る
2. 署名者の秘密鍵で署名する
3. 受信者が公開鍵などを使って検証する

XML署名の特徴は、XML文書の**全体だけでなく、一部の要素にも署名できる**ことです。

たとえば、XML文書の中に注文情報、金額情報、承認情報がある場合、文書全体ではなく「金額情報だけ」に署名を付けることもできます。

### XML署名は文書全体だけでなく一部にも使える

XML署名は、XML文書全体に1つの署名を付けるだけの仕組みではありません。

たとえば、申請データの中で次のように署名対象を分けることがあります。

- 文書全体に署名する
- 金額や承認欄など、特定の要素だけに署名する
- 必要に応じて複数の部分に署名する

SG試験では、**「XML文書の一部に署名できる」「部分署名や複数の署名に対応できる」**とあれば、XML署名の特徴として判断します。

逆に、通信経路全体を暗号化する話ならTLS、情報の存在を隠す話ならステガノグラフィです。

### Signature要素

XML署名は、主に `Signature` 要素としてXML文書内に記述されます。

代表的な要素は次のとおりです。

| 要素 | 役割 |
|---|---|
| `SignedInfo` | 署名対象や署名方式などの情報をまとめる |
| `Reference` | 署名する対象をURIで指定する |
| `DigestValue` | 署名対象データのハッシュ値 |
| `SignatureValue` | 実際の署名値 |
| `KeyInfo` | 検証に使う鍵や証明書の情報 |

SG試験では、特に **Reference要素は、署名する対象をURIで指定する** と押さえます。

## どんな場面で使う？

XML署名は、XML形式でデータをやり取りする場面で使われます。

- 電子申請
- 電子契約
- Webサービス間のデータ連携
- 業務システム間のXMLデータ交換
- 取引データや申請データの改ざん検知

特に、システム間でXMLデータを送受信する場合、受信側は「このデータは途中で変更されていないか」を確認したくなります。その確認に使えるのがXML署名です。

SG試験では、問題文に「XML文書」「改ざん検知」「署名者確認」「一部の要素に署名」とあれば、XML署名を候補にします。

## よくある誤解・混同

### XML署名とXML暗号を混同しない

XML署名と混同しやすいのが、**XML暗号**です。

| 用語 | 主な目的 |
|---|---|
| XML署名 | 改ざん検知・署名者確認 |
| XML暗号 | XMLデータの秘匿 |

XML署名は、データの正しさを確認する仕組みです。XML暗号は、データを読めないようにする仕組みです。

選択肢を切るときは、次のように判断します。

- 改ざんされていないことを確認 → XML署名
- 署名者を確認 → XML署名
- XML文書の一部に署名 → XML署名
- 内容を第三者に読まれないようにする → XML暗号
- XMLデータを暗号化する → XML暗号

### XML署名はデジタル署名と別物ではない

XML署名は、デジタル署名の考え方をXML文書に適用したものです。

そのため、デジタル署名とまったく別物として覚えるより、**デジタル署名をXMLで扱えるようにした仕組み**と考えると理解しやすいです。

### Reference要素は署名そのものではない

`Reference` 要素は、署名する対象を指定するための要素です。署名値そのものは `SignatureValue` に入ります。

- `Reference`：どれに署名するか
- `SignatureValue`：署名そのもの

この切り分けができると、要素名を問う選択肢を消しやすくなります。

### 判断軸の再確認（確認問題の前に）
- **目的**を先に見る：この対策・用語は「予防」「検知」「対応」のどこを担うか。
- **対象**を切り分ける：ネットワーク／端末／利用者／運用手順のどこに効くか。
- **選択肢の言い過ぎ**に注意：「必ず」「完全に」「不要になる」といった断定は誤りになりやすい。

## 確認問題（SG試験対策）

XMLでやり取りする申請データの一部が、送信後に変更されていないことを確認したい。使う技術として最も適切なものはどれか。

- ア. XML署名
- イ. XML文書の整形表示
- ウ. XMLデータの圧縮
- エ. XMLからHTMLへの変換

<details markdown="1">
<summary>▶ クリックして答えと解説を見る（ここを開く）</summary>

**正解：ア**

### 解説

- ア：適切です。XML署名は、XML文書全体または一部の改ざん検知や署名者確認に使います。
- イ：不適切です。表示の整形は、改ざん検知や署名者確認の仕組みではありません。
- ウ：不適切です。圧縮はデータ量を減らす処理であり、署名ではありません。
- エ：不適切です。形式変換の説明であり、XML署名ではありません。

👉 判断ポイント
XML文書の正しさや署名者を確認する話ならXML署名、内容を読めなくする話ならXML暗号で切り分けます。

</details>

## まとめ（試験直前用）

- XML署名は、XML文書の改ざん検知と署名者確認に使う
- XML文書全体だけでなく、一部にも署名できる
- `Reference` 要素は署名対象をURIで指定する
- XML暗号は秘匿、XML署名は正しさの確認
- 選択肢では「署名・改ざん検知・署名者確認」ならXML署名、「読めなくする」ならXML暗号で切る
