XMLデジタル署名
XMLデータの完全性と認証を保証するための技術
データの改ざんの防止や、送信者の認証に使う
① デタッチ署名(Detached Signature)
💡 「契約書と印鑑が別々に保管されている状態」
署名対象がXML以外のデータ(PDF、画像、バイナリデータなど)の場合に使用。
1つのデータに対して複数の署名を付与したい場合に便利(例:異なる関係者が同じデータに署名)。
署名データだけを別に管理したい場合に有効(例:署名を検証するシステムと、データを扱うシステムが異なる場合)。
② エンベロープト署名(Enveloped Signature)
💡 「契約書の末尾に印鑑が押されている状態」
XML文書内に <Signature> 要素が含まれ、そのXML自体が署名対象となる。
③ エンベローピング署名(Enveloping Signature
💡 「契約書が印鑑の中に封じ込められている状態」
署名がXML文書を包み込む形式(署名の中にXMLデータが含まれる)。
<Signature> 要素の中に、署名対象のXMLデータ全体が含まれる。
エンベロープト署名の例
code: xml
<Root>
<Data>
これは署名対象のデータです。
</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="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>mKxnW1mD8FHVW+V1i3AY9B5nJ5E=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>
Abcd1234Efgh5678Ijkl90Mnop...
</SignatureValue>
<KeyInfo>
<KeyValue>
<RSAKeyValue>
<Modulus>5vJ0h2z9...</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
</KeyValue>
</KeyInfo>
</Signature>
</Root>
<Data>
署名対象のデータがXML内に含まれている。
<Signature>
署名情報が含まれており、このXML文書の一部になっている。
<Reference URI="">
URI="" はこのXML文書自体を指しており、署名がこの文書全体をカバーしていることを示す。
<SignatureValue>
実際の署名データ(RSAなどで暗号化されたハッシュ値)。
<KeyInfo>
署名を検証するための公開鍵情報(RSAの公開鍵を含む)。