1

LangEdge,Inc.

古今東西
XML署名フォーマット
〜電子申請/署名コンテナの書式を読み解く〜
有限会社ラング・エッジ
宮地 直人（miyachi@langedge.jp）

２０１７年５月２２日

2LangEdge,Inc.

XML署名の参照方式（Reference種別）

基本1︓

外部Detached と 外部部分署名

内部Detached（内部部分署名）

Target Data(File)(File)(File)

Target Data

Target Data

Signagture
Data (File)

Signagture
Data (File)

Signagture Data

Target Data (File)

Signagture Data (File)

Signagture Data

Target Data

Enveloped（外包）Enveloping（内包）※ 署名値計算時に署名部を省く※ 対象をds:Objectとして埋め込む

3

LangEdge,Inc.

複数署名の種類（パターンの一例です）

基本2︓

並列署名
並列署名（Parallel Signatures）
Sign 1*CAdES*XAdES

TargetSign 2Sign 3

部分署名（Partial Signatures）(File)*XAdES

Target 1

Sign 1

Target 2
Target 3

Sign 2Sign 3

直列署名
シリアル署名（Serial Signatures）
TargetSign 1Sign 2Sign 3*PAdES

カウンタ署名（Counter Signatures）
Sign 1

TargetSign 2*CAdES*XAdES

Sign 3

4

LangEdge,Inc.

基本3︓

XML署名の利点（注︓個人的意見です :-）利点その１︓

複数の参照方式を混在指定可能

例えば、Envelopedと、外部Detachedを、一度に指定した利用で両方（本体＋外部）を守れる。

利点その２︓

色々な複数署名方式に対応可能
更に混在も可能、例えば並列署名と部分署名の混在。

利点その３︓

Java/.NETで機能が標準利用可能

5LangEdge,Inc.

e-Tax 送信データ（電子申請）<DATA id=“DATA”><PCR0140 id=“PCR0140”><手続きIDがPCR0140の申請内容/></PCR0140>

内部Detached<dsig:Signature id=“納税者本人”><dsig:SignedInfo><dsig:Reference URI=“#PCR0140”/></dsig:SignedInfo></dsig:Signature>
PCR0140は「納税証明書の交付請求(その1)」の手続きID<dsig:Signature id=“税理士”><dsig:SignedInfo><dsig:Reference URI=“#PCR0140”/></dsig:SingedInfo></dsig:Signature>
納税者本人・税理士・経理担当者等の</DATA>
複数の並列署名が可能

6

LangEdge,Inc.

e-Tax 電子納税証明書
PCR0140は「納税証明書の交付請求(その1)」の手続きID

内部Detached<PCR0140 id=“PCR0140”><手続きIDがPCR0140の納税内容/><dsig:Signature><dsig:SignedInfo><dsig:Reference URI=“#PCR0140”/></dsig:SignedInfo></dsig:Signature></PCR0140>

考察︓
内部Detachedになっているけど、形式としてはEnveloped（外包）の方が良いかも。

LangEdge,Inc.

7

e-Gov API認証用の電子署名（証明書管理）
内部Detached<DataRoot><ApplData Id=“ApplData”><(証明書コマンド他指定)/>
Idに署名日時︓yyyyMMddHHmmss</ApplData><Signature Id=“201705221830”><SignedInfo><Reference URI=“#ApplData“></SignedInfo></Signature></DataRoot>
コマンド例︓利用時UserIDのみ、AddX509Certificate/X509Certificate/DelX509Certificate

補足︓
RESTfulな外部連携API利用時に必要
一括申請はZIP化した独自コンテナ形式（後述）8LangEdge,Inc.

土地所在図等の図面署名（不動産登記規則第73条第1項）
この場合署名ファイル名は “file1.tif.sig.xml” にする必要あり<図面署名 version="1.00">

外部Detachedが1つのみ可<ds:Signature id=“Info”><ds:SignedInfo><ds:Reference Id=“file1” URI=“file1.tif”/></ds:SignedInfo></ds:Signature>

TIFF
file1.tif</図面署名>
ルート名は”図面署名”

複数の並列署名は不可

補足︓
外部Detachedが1つだけ可能、署名対象が複数ある場合には複数の署名ファイルを用意。
SHA-2署名受け付けて貰えるが記載は無い…

9

LangEdge,Inc.

某電子申請（よく見る形式）

Enveloped（外包）は全体が対象なんだけど…

<DATA><Info><申請内容/></Info><ds:Signature id=“Info”>
XPath指定で<ds:SignedInfo>
Info要素を指定<ds:Reference URI=““><ds:Transforms><ds:Transform><XPath>ancestor-or-self::Info</XPath></ds:Transform></ds:Transforms></ds:Reference><ds:Reference Id=“file1” URI=“file1.docx”/></ds:SignedInfo>
添付ファイルがあれば外部Detached</ds:Signature><dsig:Signature id=“nextSign”/></DATA>

複数の並列署名が可能

docx
file1.docx

LangEdge,Inc.

10

某地方自治体の電子申請<ds:Signature>Enveloping（内包）<ds:SignedInfo><ds:Reference URI=“#signed”/></ds:SignedInfo><ds:Object Id=“signed”><application/><description>
申請内容<fname>file1.docx</fname>（署名対象）</description>
添付ファイルがあればURIで指定</ds:Object></dsig:Signature>

考察︓
添付ファイルが外部Detachedなら守れるけど、添付ファイルは重要では無いとの考え方もあり。

LangEdge,Inc.

11とある文書の大量一括保存<ds:Signature>
Enveloping（内包）<ds:SignedInfo><ds:Reference URI=“#manifest1”/><ds:Reference URI=“#manifest2”/></ds:SignedInfo>
Enveloping（内包）<ds:Object><ds:Manifest Id=“manifest1”><ds:Reference>file11.pdf</ds:Reference><ds:Reference>file12.pdf</ds:Reference><ds:Reference>file13.pdf</ds:Reference></ds:Manifest>
Manifestによる間接指定</ds:Object><ds:Object><ds:Manifest Id=“manifest2”><ds:Reference>file21.pdf</ds:Reference></ds:Manifest></ds:Object>※ Manifestは複数も階層化も可能</dsig:Signature>

PDF
file11.pdf

PDF
file12.pdf

PDF
file13.pdf

PDF
file21.pdf

補足︓Manifest長期署名延長は注意点あり。

12

LangEdge,Inc.

電子処方箋（複数署名︓追記署名型）<EPD><Document Id="Doc0123"><Prescription><PrescriptionDocument Id="PD4567"><!-- HL7 CDA R2 --></PrescriptionDocument> 処方箋<PrescriptionSign><Signature><Reference URI="#PD4567"/></Signature></PrescriptionSign></Prescription><Dispensing><DispensingDocument>
調剤結果<!-- HL7 CDA R2 --></DispensingDocument></Dispensing>
医師の処方箋と</Document>
電子署名を含む<DocmentSign><Signature><Reference URI="#Doc0123"/></Signature></DocmentSign></EPD>

EnvelopedとXPathでも同じ
参照の指定は可能

医師

HPKI Card
Doctor ...

内部Detached

内部Detached

薬剤師

HPKI Card
Pharmacist ...

13

LangEdge,Inc.

ODF（OASIS /OpenDocument Format - ISO/IEC 26300）
ZIP

mimetype (内容 は以下参照︓非署名対象).odt : application/vnd.oasis.opendocument.text.ods : application/vnd.oasis.opendocument.spreadsheet.odp : application/vnd.oasis.opendocument.presentation

他にも各種ありlayout-cache (署名対象1)
content.xml (署名対象2)
META-INF/documentsignatures.xml (署名ファイル）<document-signatures><Signature Id=“sig”><SignedInfo><Referece URI=“content.xml" .../><Referece URI=“layout-cache" .../></SignedInfo></Signature><Signature Id=“sig2”/></document-signatures >外部Detached

同一ファイル内の複数の並列署名が可能

META-INF/manifest.xml (目録情報データ︓非署名対象)

14

LangEdge,Inc.

OCF（IDPF - EPUB Open Container Format）
ZIP

mimetype (内容 application/epub+zip︓非署名対象)
item/images/cover.jpg (署名対象2)
item/book.xml (署名対象1)
META-INF/signatures.xml (署名ファイル）<signatures>

Enveloping<Signature Id=“sig”>（内包）<SignedInfo><Referece URI=“#Manifest1" .../></SignedInfo><Object><Manifest Id=“Manifest1"><Reference URI=“item/book.xml“/><Reference URI=“item/images/cover.jpg”></Manifest></Object>
外部Detached
Manifest利用</Signature><Signature Id=“sig2”/></signatures >同一ファイル内の複数の並列署名が可能

META-INF/manifest.xml (目録情報データ︓非署名対象)

15

LangEdge,Inc.

ETSI ASiC-E / Estonia他 BDOC
ZIP

mimetype (内容 application/vnd.etsi.asic-e+zip︓非署名対象)
file2.jpg (署名対象2)
file1.xml (署名対象1)
META-INF/signatures0.xml (署名ファイル1）<Signature><SignedInfo><Referece URI="file1.xml" .../><Referece URI="file2.jpg" .../></SignedInfo></Signature>
META-INF/signatures1.xml (署名ファイル2）

外部Detached
別ファイルで複数の並列署名が可能

META-INF/manifest.xml (内容 OASIS-Manifest︓非署名対象)※ XML署名では無くXAdESが必要だが、欧州のEN仕様に従う必要あり。
※ XAdES以外に、CAdESやタイムスタンプも利用可能。

16

LangEdge,Inc.

OPC（OOXML/Open Packaging Conventions - ISO/IEC 29500-2）ZIP̲rels/.rels (署名対象) ︓ 署名に必須なのかどうか確認が必要
word/document.xml (署名対象)
̲xmlsignatures/sig1.xml (署名ファイル1）

Enveloping<Signature>（内包）<SignedInfo><Referece URI=“#idPackageObject" .../></SignedInfo><Object Id="idPackageObject"><Manifest><Reference URI="/word/document.xml“/><Reference URI="/̲rels/.rels“/></Manifest></Object>
外部Detached
Manifest利用、ただしObejct指定</Signature>̲xmlsignatures/sig2.xml (署名ファイル2）

別ファイルで複数の並列署名が可能

̲xmlsignatures/origin.sigs (内容 署名管理︖︓非署名対象)※ OPCはJTC1 SC34にてより汎用化（例︓Manifestオプション化）予定。

17

LangEdge,Inc.

e-Gov 一括申請（電子申請︓署名が必要な場合）
ZIP

999…99(1)/999…99̲01.xml (申請書XML:手続きIDは16桁数字)
999…99(1)/kousei.xml (構成管理XML:署名を含む)<DataRoot><…><構成情報 Id=“構成情報”/><署名情報>

内部Detached
署名日時︓yyyyMMddHHmmss<Signature Id=“201705221831”><SignedInfo>“#構成情報”のURIエンコード<ReferenceURI=“#%E6%A7%8B%E6%88%90%E6%83%85%E5%A0%B1“><Reference URI=“999…99̲01.xml“><Reference URI=“file1.docx”/></SignedInfo>
外部Detached</Signature></署名情報></DataRoot>

999…99(1)/file1.docx (添付ファイル)
999…98(2)/… （2つ目の申請フォルダ︓オプション）

LangEdge,Inc.

18

XML署名参照方式の（個人的）感想
Detached︓最も良く使われる基本参照
内部・外部共に良く使われている。
署名対象が明確で分かりやすい。

Enveloped︓対象＞署名 の場合単独XML情報に署名をする場合に多い。

Enveloping︓署名＞対象 の場合（少ない）Manifestを埋め込み時には利用。

Manifest︓間接指定で時々使われる

署名検証は早いが、長期署名時に面倒あり…
うまく使えれば便利。

19

LangEdge,Inc.

米国の署名戦線異常あり︖

おまけ︓“Electronic Signatures in Global and National Commerce (ESIGN) Act”
2000年に連邦レベルに合格した法律。

“Uniform Electronic Transactions Act (UETA)” ESIGNのベースになった法律
UETAは米47州/コロンビア特別区/プエルトリコ/米領バージン諸島が採択した法律。

ESIGN/UETAの基本要求:
1. 署名する意図が明白でなければならない。
2. 署名は記録と関連/連携していなければならない。
3. 電子取引するためには、はっきりした同意が必要である。
4. 記録へのアクセスが可能でなければならない。
5. 文書をむやみに変更をしないこと。

デジタル署名は要件に入っていない※ ETSI ESI と 米国政府が共同で電子署名のワークショップを開催"US Government and European Union Workshop on Digital Signatures!"2017年3月8日にワシントンDCで開催、内容は Federal Public Key Infrastructure (FPKI) 等
https://www.eventbrite.com/e/digital-signatures-us-government-and-european-union-workshop-tickets-31538125382※ DocuSignが本人確認問題で裁判に負けたとのブログ情報あり“US Court Rejects DocuSign E-Signatures as method to provide Digital Authorization”
一部抜粋︓「DocuSignは法的環境におけるe-verificationの信頼できる出典であるかと疑われているからです。」
つまり技術の問題では無く署名者の本人性の推定の問題か︖PKIのようなインフラを使う必要があると言うことか︖
なおブログを書いているのはPKIベンダーなので本当に正しいことを言っているのか確認は必要と考えている。

https://www.cryptomathic.com/news-events/blog/us-court-rejects-docusign-e-signatures-as-method-to-provide-digital-authorization