22. cXML電子署名

すべての cXML の Request、Response、または Message は、W3C (World Wide Web Consortium) XML Digital Signatures を使用して署名できます。XML Advanced Electronic Signature (XAdES) 標準もサポートしています。このセクションの読者は、非対称鍵のペア、証明書、およびスマートカードなどの、電子署名の用語および概念について知識を有している必要があります。

22.1 電子署名の概要

22.1.1 電子署名の利用方法

22.2 cXML ドキュメントの署名

22.2.1 cXML 電子署名
22.2.1.1 ds:Signature 要素
22.2.1.2 cXMLSignedInfo
22.2.1.3 署名の基本
22.2.1.4 XAdES の使用
22.2.1.5 添付ファイルの署名
22.2.2 電子署名のエラー状況コード
22.2.3 電子署名の例

22.1 電子署名の概要

電子署名は、電子ドキュメント送信者を識別し、署名した本人が作成した後で、そのドキュメントが変更されていないことを保証します。この署名は、暗号化情報を含むバイト列です。この情報には、署名されたドキュメントのコンテンツに関する詳細情報および送信者の公開鍵が含まれています。XML 電子署名は、電子署名の 1 つの形態で、暗号化された署名に加え、署名の対象の一覧、署名者の公開鍵、その他の属性といった、さまざまな情報を含む要素です。この章で後述するように、cXML 署名は XML 電子署名の一形態です。XML Advanced Electronic Signature (XAdES) では、基本認証および完全性の保護が提供されます。W3C XML 署名および XAdES には、柔軟性を考慮して設計された多くの任意設定項目が用意されています。

W3C XML 電子署名については、次のリソースを参照してください。

● www.w3.org
● XML 署名構文と処理バージョン 1.1

XAdES の詳細については、次のリソースを参照してください。

● XML Advanced Electronic Signatures (XAdES)
● uri.etsi.org/01903/v1.3.2

22.1.1 電子署名の利用方法

ドキュメントに署名を行う代行サービスを利用することも、必要なハードウェアシステムやソフトウェアシステムを実装して、自分でドキュメントに署名を行うことも可能です。自身で署名システムを実装する場合は、受信者から信頼される認証局(CA) による署名済み証明書を取得する必要があります。受信者の必要条件を満たすには、スマートカードやハードウェアセキュリティモジュールなどのような、秘密鍵を秘匿しておくためのハードウェアが必要になる場合があります。署名および証明書の必要条件は、地域ごとの法律および規則によって異なることに注意してください。署名システムの実装に先立ち、該当する地域の必要条件について十分に理解しておく必要があります。

22.2 cXML ドキュメントの署名

有効な cXML 電子署名は、単なる XML 署名ではなく、特定の任意設定項目が使用され、特定の要素が存在し、ドキュメントの特定の部分に対して署名された (または、特定の部分にのみ署名されていない) XML 署名です。

22.2.1 cXML 電子署名

ほかの仕様で定義された要素を参照する場合、名前空間のプリフィックス規則が使用されることに注意してください。W3C XML のすべての電子署名の要素では ds プリフィックスが使用されます。また、すべての XAdES 要素では xades プリフィックスが使用されます。

22.2.1.1 ds:Signature 要素

cXML 要素では、Request、Response、または Message 要素の後に ds:Signature 要素を定義します。ds:Signature 要素では、署名の対象、1 つ以上の署名、および署名を作成するために使用した鍵の情報を定義します。XAdES 拡張または添付ファイルの送り状などの追加情報を挿入することもできます。cXML 要素では signatureVersion 属性を指定することもできます。

属性説明
signatureVersionsignatureVersion が存在する場合には、ドキュメントが電子署名付きであることを示します。このドキュメントには、Request、Response、または Message要素の直後に有効な ds:Signature 要素が定義されています。ドキュメントが署名される場合、この属性は必須です。この属性の有効な値は 1.0 のみです。その他の値は将来の使用に備えて予約されています。
Idこの属性は、要素およびそのすべての子要素を署名の対象として指定するために使用します。たとえば、ドキュメントに が含まれる場合、電子署名では によって Request 要素およびそのすべての子要素が参照されます。ドキュメントが署名される場合、この属性は必須です。

Message、Request、および Response 要素には、Id 属性が含まれます。

22.2.1.2 cXMLSignedInfo

cXMLSignedInfo 要素には、署名に関する cXML 固有の詳細情報を含み、次の属性があります。

属性説明
signatureVersion
(必須)
ドキュメントが電子署名付きであることを示します。このドキュメントには、Request、Response、または Message 要素の直後に有効なds:Signature 要素が定義されています。この属性の有効な値は 1.0 のみです。その他の値は将来の使用に備えて予約されています。
payloadID
(必須)
ドキュメント間のリンクを確立するために使用されます。cXMLSignedInfo 要素内の payloadID は、ドキュメント本体のcXML 要素内の payloadID と同じである必要があります。
Id
(必須)
この cXMLSignedInfo 要素を署名のために識別します。この属性は常に存在し、値は必ず “cXMLSignedInfo” である必要があります。
22.2.1.3 署名の基本

cXML ヘッダーの一部の情報は重要なため、署名が必要です。これらの属性に対してヘッダーで署名するには、ds:Object 要素の中の cXMLSignedInfo 要素の中で同じ情報を再度記述します。ds:Object は、その署名の中の最初の ds:Object である必要があります。

例:

Id 属性の値は “cXMLSignedInfo” である必要があります。signatureVersion および payloadID 属性の値はcXML 要素で指定された値と一致する必要があり、ドキュメントの受信者はこれらが一致していることを検証する必要があります。この ds:Reference の中では、変換することはできません。この要素は、次のように ds:SignedInfo, の最初の ds:Reference オブジェクトで署名する必要があります。

Request、Response、または Message 要素は、その全体に対して署名される必要があります。そのためには、文字列 “cXMLData” を Request、Response、または Message 要素の Id 属性値に指定し、URI “#cXMLData” が指定された ds:Reference 要素を ds:SignedInfo に含めます。この参照に対して変換は適用できません。このds:Reference は、ds:SignedInfo の中で 2 番目の ds:Reference である必要があります。ds:KeyInfo 要素には、ds:X509Certificate 要素を 1 つ定義します。この要素には、ドキュメントの署名に使用された秘密鍵に対応する公開鍵が含まれる X.509 証明書の DER 表現の Base64 エンコードを定義します。

22.2.1.4 XAdES の使用

電子署名では、XAdES を使用する必要があります。署名では、xades:QualifyingProperties が 2 番目のds:Object である必要があります。xades:SignedProperties 要素およびそのすべての子要素に署名するには、xades:SignedProperties の Id 属性値に “XAdESSignedProps” を指定し、URI に「#XAdESSignedProps」を指定した ds:Reference を ds:SignedInfo に含める必要があります。ds:SignedInfo では変換はできません。XAdES が使用される場合、xades:Cert 要素で参照される証明書は ds:KeyInfo 要素に定義するものと同一である必要があり、ds:Signature 要素の Id 属性は cXMLSignature に、xades:QualifyingProperties の Target 属性は #cXMLSignature に設定する必要があります。

22.2.1.5 添付ファイルの署名

該当するドキュメントに添付ファイルを含める場合、ドキュメントのみの署名にも、またドキュメントおよびその添付ファイルの両方の署名にも、電子署名を使用することができます。署名は、たとえ添付ファイルが破棄された場合でもドキュメント自身の署名は検証可能となるように構成されています。添付ファイルは、その署名の中の ds:Object に含まれる ds:Manifest 要素の ds:Reference 要素を使用して署名する必要があります。ds:Manifest 要素の Id 属性は、常に「AttachmentManifest」です。ds:Object はxades:QualifyingProperties 要素を含む ds:Object が存在する場合、その直後に定義します。それ以外の場合は、cXMLSignedInfo element を含む ds:Object の直後に定義します。送り状の中の各 ds:Reference では、スキーム “cid:” を使用した URI を使用して、MIME の Content-Id を介して添付ファイルを参照します。ds:Manifest 要素自身は、ds:SignedInfo. に含まれるフラグメント URI 参照を使用して署名する必要があります。この必要条件が存在する理由は、規格に準拠した XML 署名の実装においては、ds:SignedInfo 内のすべての ds:Reference 要素が検証される必要があるためです。基本的な検証によって、送り状自体が有効であることが保証されます。ただし、送り状の中で参照されているオブジェクトは検証されません。この方法では、添付ファイルが破棄された場合でも、ドキュメント自身は検証されることになります。

例:

22.2.2 電子署名のエラー状況コード

次の表は、cXML 電子署名の状況コードの一覧です。

ステータステキスト意味
475Signature Requiredドキュメントに電子署名がないため、受信者はドキュメントを受け付けようとしません。
476Signature Verification Failed転送中にドキュメントが変更、または署名で使用されたアルゴリズムの 1 つまたは複数を受信者がサポートしないなどの原因により、受信者は署名を検証することができません。
477Signature Unacceptable署名は技術的に有効ですが、その他の理由により受信者に承認されません。署名規定または証明書規定が承認されないか、使用された証明書の種類が承認されないか、またはその他の問題が存在する可能性があります。

22.2.3 電子署名の例

次に示すのは、署名済みインボイスの例です。この例では、インボイスのいくつかの部分が省略されているため、ダイジェスト値および署名の値は正しくないことに注意してください。