情報処理安全確保支援士 2025年 秋期 午前2 問06
問題文
XMLデジタル署名の特徴はどれか。
選択肢
ア:XMLデジタル署名の構文には、CMS(Cryptographic Message Syntax)が用いられる。
イ:XML文書中のエレメントに対するデタッチ署名(Detached Signature)を作成し、同じXML文書に含めることができる。(正解)
ウ:エンベローピング署名(Enveloping Signature)では、一つの署名対象に複数の署名を付与する。
エ:署名対象と署名アルゴリズムはASN.1によって記述する。
🔒 解説は解答すると表示されます
XMLデジタル署名の配置形式【午前2解説】
正解の理由
XMLデジタル署名には「エンベローピング」「エンベロープド」「デタッチ」の三形態があり、イ の記述はデタッチ署名(Detached Signature)の特徴を正しく表しています。デタッチ署名は署名対象のデータが署名要素(Signature要素)とは別に存在する方式であり、参照(Reference)にURIやIDを使って外部・同一文書内の要素を指し示します。したがって「XML文書中のエレメントに対するデタッチ署名を作成し、同じXML文書に含めることができる」は妥当であり正解です。
解法ステップ
- 各選択肢が言及する技術の対象範囲を把握する(XML署名仕様とCMS/ASN.1の役割の違いを確認)。
- XML署名の三種類(Enveloped, Enveloping, Detached)の定義を思い出す。
- 選択肢を一つずつ当てはめて矛盾を探す:
- CMSはXML署名の構文ではない(XML Signature仕様固有のXML構文)。
- Detachedは署名データと署名要素が分離しているが、同一文書内にSignature要素を置いて参照することは可能。
- Envelopingは署名要素がデータを内包する方式であり「複数署名が付与される」ことが本質ではない。
- 署名アルゴリズムの記述にASN.1を直接使うのはXML署名の方式ではない。
以上からイを正解として導けます。
選択肢別の誤答解説
- ア: CMS(Cryptographic Message Syntax)は電子メールやS/MIME等で使われるバイナリ/ASN.1ベースのメッセージ構文であり、XMLデジタル署名(XML Signature)はXMLベースの仕様で独自のXML構文を使います。従って誤りです。
- イ: 正しい。Detached署名は署名対象と署名要素が論理的に分離している方式で、同一XML文書内にSignature要素を置きつつReferenceで対象要素を指すことが可能です(署名対象に署名要素が含まれる場合とは異なる点に注意)。
- ウ: Enveloping SignatureはSignature要素がObjectや付加要素としてデータを内包する方式です。「一つの署名対象に複数の署名を付与する」は可能ではありますが、これがenvelopingの定義的特徴ではありません。したがって選択肢の主張は誤導的で不正解です。
- エ: ASN.1は証明書やCMSなどで使われますが、XML署名では署名情報やアルゴリズムの指定にURIやXML要素を用いるため「署名対象と署名アルゴリズムはASN.1によって記述する」は誤りです。
よくある誤解
- デタッチ署名は必ず別ファイルでなければならない:誤り。デタッチは「署名対象と署名要素が別」であることが本質であり、同一文書内にSignature要素を置き参照する運用も一般的です。
- enveloped-signature Transformは常に必要:誤り。enveloped(エンベロープド)署名の場合、署名対象にSignature要素が含まれるためenveloped-signature Transformを使って自身のSignature要素を除外することがあります。逆にデタッチ署名では署名対象にSignature要素が含まれないため、そのTransformは無意味で通常使用しません。
- XML署名=CMS/XMLは混同しやすい:CMSとXML Signatureは別仕様なので取り違えないこと。用途やフォーマットが異なります。
補足コラム
実務での使い分け例:
- Enveloped(エンベロープド)署名:XML文書に直接署名要素を埋め込みたい場合(例:SOAPメッセージ内でメッセージ自体に署名)。
- Enveloping(エンベローピング)署名:署名内にデータを含めて配布したい場合(署名がデータを内包する)。
- Detached(デタッチ)署名:署名対象が大きい、または別場所で管理される場合に便利。参照はURIで行うため外部リソースや同一文書内の別要素を指せる。
簡単なDetached署名の例(参考、enveloped Transformは含めない):
<Root xmlns="http://example.org">
<Data Id="data1">重要なデータ</Data>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#data1">
<Transforms>
<!-- 必要に応じてCanonicalizationなどは使える -->
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>...</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>...</SignatureValue>
<KeyInfo>...</KeyInfo>
</Signature>
</Root>
上の例では署名対象(Data)はSignature要素とは別に存在しており、ReferenceでIDを参照しています。enveloped-signature Transformは含めていません(Signature要素が署名対象に含まれていないため不要)。
FAQ
Q. デタッチ署名で参照に外部URLを使ってもよいか?
A. はい。ReferenceのURIに外部リソースを指定できますが、取得や整合性、信頼性(タイムスタンプや証明書の有効性)に注意が必要です。
A. はい。ReferenceのURIに外部リソースを指定できますが、取得や整合性、信頼性(タイムスタンプや証明書の有効性)に注意が必要です。
Q. 複数の署名を同じデータに付与することはできるか?
A. できます。複数のSignature要素を配置し、それぞれが同じReferenceを指すことで複数署名が成立します。これはenvelopingに限らず、用途に応じて行えます。
A. できます。複数のSignature要素を配置し、それぞれが同じReferenceを指すことで複数署名が成立します。これはenvelopingに限らず、用途に応じて行えます。
Q. XML署名でアルゴリズムの指定はどう表現するか?
A. XML内でAlgorithm属性にURIを指定し、署名アルゴリズムやダイジェストアルゴリズムを示します。ASN.1の記述は用いません。
A. XML内でAlgorithm属性にURIを指定し、署名アルゴリズムやダイジェストアルゴリズムを示します。ASN.1の記述は用いません。
関連キーワード: XML署名、XMLDSig、Detached Signature、Enveloped Signature、Enveloping Signature、Transform、Canonicalization、CMS、ASN.1、Reference、Signature要素、DigestValue

\ せっかくなら /
情報処理安全確保支援士を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

