1 JNSA 電 子 署 名 WG スキルアップTF なんとなく 分 かった 気 になるPDF 電 子 署 名 仕 様 入 門 2 宮 地 直 人 (miyachi@langedge.jp) 2013 年 10 月 30 日
2 PDF 電 子 署 名 仕 様 入 門 PDF 基 本 PDFの 内 部 構 造 と 基 本 要 素 増 分 更 新 PDF 電 子 署 名 基 本 PDFの 署 名 要 素 PAdES(PDF 長 期 署 名 ) 基 本 PAdESの 構 造 LTV 構 造 の 構 成
3 PDF 基 本 1PDFをテキストエディタで 見 てみよう %PDF-1.3 %%%%% 6 0 obj 76 4 0 obj <</Length 6 0 R>> stream 0 0 0 rg BT /F0 11.00 Tf 85.0 730.0 Td [ (ABC) ] TJ ET q Q endstream 3 0 obj <</BleedBox[0 0 595.320010 841.919980] /Contents[4 0 R] /CropBox[0 0 595.320010 841.919980] /MediaBox[0 0 595.320010 841.919980] /Parent 2 0 R /Resources<</Font<</F0 5 0 R>> /ProcSet[/Text/ImageC]>> /Type/Page>> 2 0 obj <</Count 1 /Kids[3 0 R] /Parent 1 0 R /Type/Pages>> 1 0 obj <</BleedBox[0 0 595.320010 841.919980] /Count 1 /CropBox[0 0 595.320010 841.919980] /Kids[2 0 R] /MediaBox[0 0 595.320010 841.919980] /Type/Pages>> 7 0 obj <</Ascent 985 /AvgWidth 464 /CapHeight 985 /Descent -215 /Flags 42 /FontBBox[-165-307 1246 1201] /FontName/Century /ItalicAngle 0 /MaxWidth 1410 /StemV 0 /Type/FontDescriptor>> 5 0 obj <</BaseFont/Century /Encoding/WinAnsiEncoding /FirstChar 32 /FontDescriptor 7 0 R /LastChar 67 /Name/F0 /Subtype/TrueType /Type/Font /Widths[278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 722 722]>> 9 0 obj [3 0 R/XYZ 0 841.919980 null] 8 0 obj <</OpenAction 9 0 R /Pages 1 0 R /Type/Catalog>> 10 0 obj <</CreationDate(D20110610150233+09'00') /ModDate(D20110610150233+09'00') /Producer(Test (1.0 )) /Trapped/False>> xref 0 11 0000000000 65535 f 0000000444 00000 n 0000000380 00000 n 0000000160 00000 n 0000000034 00000 n 0000000785 00000 n 0000000016 00000 n 0000000602 00000 n 0000001061 00000 n 0000001016 00000 n 0000001123 00000 n trailer <</ID[ <BF61BD682C7E7D44F2DF1EAB84335E2B> <BF61BD682C7E7D44F2DF1EAB84335E2B>] /Info 10 0 R /Root 8 0 R /Size 11>> startxref 1283
4 PDF 基 本 2 主 なオブジェクト 例 1. 数 値 オブジェクト 6 0 obj 76 2. 辞 書 オブジェクト(キーと 値 で 情 報 を 記 述 するオブジェクト) 2 0 obj << 辞 書 型 開 始 /Type /Pages /Kids [ 3 0 R] /Count 1 /Parent 1 0 R >> 辞 書 型 終 了 オブジェクト 開 始 (オブジェクト 番 号 が6 生 成 番 号 が0) 整 数 型 で 値 が76 オブジェクト 終 了 キーが /Type の 名 前 型 で 値 が /Pages キーが /Kids の 配 列 型 で 配 列 中 の 値 が 間 接 指 定 型 で 3 0 R キーが /Count の 整 数 型 で 値 が1 キーが Parent の 間 接 指 定 型 で 値 が 1 0 R ポイントオブジェクト 番 号 と 生 成 番 号 オブジェクト 番 号 は 重 複 しないオブジェクト 識 別 用 IDです 生 成 番 号 は 本 来 オブジェクトを 再 利 用 した 時 に 更 新 される 番 号 ですが 現 在 では 事 実 上 利 用 されておらず 常 にゼロ0と 考 えて 貰 って 構 いません
5 PDF 基 本 3 主 なオブジェクト 例 2 3.ストリームオブジェクト( 任 意 データを 埋 め 込 むオブジェクト) 4 0 obj <</Length 6 0 R>> stream 0 0 0 rg BT /F0 11.00 Tf 85.0 730.0 Td [ (ABC) ] TJ ET q Q endstream 長 さはオブジェクト 番 号 6で 定 義 ストリーム 開 始 テキスト 開 始 フォント 名 /F0とサイズ11.00の 指 定 座 標 85.0, 730.0 に 移 動 テキスト ABC の 描 画 テキスト 終 了 ストリーム 終 了 フィルター 指 定 ストリームオブジェクト 4 0 obj <</Length 6 0 R 長 さはオブジェクト 番 号 6で 定 義 /Filter /FlateDecode>> FlateDecodeによりZIP 圧 縮 を 実 行 Stream バイナリ 値 (ZIP 圧 縮 されたデータ) endstream 描 画 用 オペレータ
6 PDF 基 本 4オブジェクトの 種 類 オブジェクト 形 式 オブジェクト 番 号 と 生 成 番 号 とobj/ 1 0 obj value オブジェクト(Objects / Value) ブーリアン(Boolean values) true, false 数 値 (Integer and Real numbers) 10, -3, 3.4, -0.32, +10.0 文 字 列 (Strings) 暗 号 化 対 象 定 数 文 字 列 (Literal Strings) (Ver (1.0 )) エスケープ 文 字 あり 16 進 文 字 列 (Hexadecimal Strings) <4E6A> バイナリにも 使 われる 名 前 (Names) /Name, /Color#20Green, /A#42 配 列 (Arrays) [ value1 value2 value3 ] 辞 書 (Dictionaries) << /Key1 value1 /Key2 value2 /Key3 value3 >> ストリーム(Streams) <<Dictionary>>stream endstream 暗 号 化 対 象 /Filter /FlateDecode (ZIP), /DCTDecode (JPEG), /ASCIIHexDecode, null 間 接 指 定 (Indirect) 23 0 R (23 0 obj を 示 す)
7 PDF 基 本 5PDFファイル 構 造 1(レガシー) 形 式 0 4550 4682 32034 Header Body XRef Trailer %PDF-1.7 %バイナリ 値 1 0 obj 2 0 obj << /Type /Catalog /Pages 8 0 R /Info 9 0 R >> 10 0 obj xref 0 30 0000000000 65535 f 0000004550 00000 n 0000004682 00000 n trailer << /Size 30 /Root 2 0 R /ID <.><.> >> startxref 32034 Header PDFの 開 始 とバージョン バイナリなら 任 意 バイナリ 値 Body PDF 本 体 でありオブジェク トが 並 んでいる オブジェク ト 位 置 はXRef テーブルか ら 取 得 ルートからページ 等 のツリーを 辿 れる Cross-Reference Table 最 初 の10 桁 が 開 始 位 置 を 次 の5 桁 が 生 成 番 号 だ がだいたい0になる バイナリ 形 式 のXRef も あり 混 在 は 不 可 Trailer startxref がXRefの 開 始 位 置 を trailer 辞 書 でルー ト 等 の 指 定
8 PDF 基 本 6PDFファイル 構 造 2(Cross-Reference Streams & object stream) 0 テキストエディタで 解 析 が 困 難 Acrobat Pro 推 奨 20323 Header Body Trailer %PDF-1.7 %バイナリ 値 1 0 obj << /Type /ObjStm /N 3 /First 15 >> stream 2 0 3 50 5 72 [ OID1 offset1 OID2 offset2 ] << >> << /Type /Catalog /Pages 8 0 R /Info 9 0 R >> endstream 10 0 obj ObjStm 複 数 のオブジェクトをストリーム にまとめ 圧 縮 12 0 obj << /Type /Xref /Size 30 /Root 3 0 R >> stream バイナリ 形 式 でXRef 情 報 を 記 述 endstream startxref 20323
9 PDF 基 本 7Acrobat ProでPDF 内 部 構 造 を 見 る Acrobat Pro 版 のみの 機 能 でStd 版 では 使 え ないので 注 意!
PDF 基 本 8 増 分 更 新 (Incremental Update) 10 通 常 更 新 Header Body XRef Trailer %PDF-1.7 1 0 obj 2 0 obj /Price /2000 10 0 obj 元 ファイル 増 分 更 新 増 分 更 新 では 情 報 を 上 書 きする 電 子 署 名 では 増 分 更 新 可 能 な 内 容 が 制 限 されている Body2 XRef2 Trailer2 %PDF-1.7 1 0 obj 2 0 obj /Price /2000 /1200 10 0 obj 2 0 obj /Price /1200 trailer << /Prev 48930 >> 使 われない = 上 書 き %PDF-1.7 1 0 obj 2 0 obj /Price /1200 10 0 obj PAdESでは 増 分 更 新 で 情 報 を 追 加 してゆく
PDF 基 本 9PDFに 関 する 資 料 11 PDF Reference 2 nd edition (PDF1.3)を 和 訳 化 した 書 籍 古 い 版 だが 基 本 的 な 構 造 を 日 本 語 で 読 める PDFファイル 構 造 はレガシー 形 式 のみ とりあえずPDFを 勉 強 するなら 持 っていて 損 は 無 い 定 価 は 税 別 6800 円 だが 中 古 市 場 では7,000~14,000 円 くらい 定 価 で 売 っているお 店 があれば 確 保 推 奨 ISBN-10 4894713381 / ISBN-13 978-4894713383 PDF Reference の 原 本 はアドビが 無 償 配 布 最 終 はPDF1.7だがISOとの 比 較 資 料 等 もあります 他 にもアドビから 署 名 外 観 等 の 有 用 情 報 が 多 数 あり ISO 版 は 有 償 なのでPAdES 以 外 ならアドビ 版 で 十 分 http//www.adobe.com/jp/devnet/pdf/pdf_reference.html 最 後 にISO32000 ISO32000-1はISOから 購 入 が 可 能 ISO32000-2が 待 たれる 238スイスフラン( 約 26,000 円 ) http//www.iso.org/iso/catalogue_detail.htm?csnumber=51502
12 PDF 署 名 基 本 1オブジェクト 要 素 署 名 フィールド/ 署 名 注 釈 (SigField/SigAnnotation) 本 来 署 名 フィールドと 署 名 注 釈 は 別 の 辞 書 構 造 だが1つの 辞 書 として 指 定 可 能 最 近 では 別 々にするような 実 装 は 少 ないが 注 意 ページ 番 号 と 矩 形 を 指 定 矩 形 がサイズゼロなら 不 可 視 署 名 になる Root AcroForm Fields or Root Pages Page Annots で 辿 れる 署 名 辞 書 を /V キーで 指 定 未 指 定 なら 未 署 名 の 署 名 フィールドとなる 署 名 外 観 を /AP キーで 指 定 不 可 視 署 名 ならブランクを 指 定 署 名 辞 書 (SigDict) 電 子 署 名 として 最 も 重 要 な 要 素 /Type は /Sig か /DocTimeStamp を 指 定 署 名 データを /Contents キーで16 進 文 字 列 として 保 持 /ByteRange や /Filter /SubFilter 等 の 情 報 を 保 持 署 名 外 観 (SigAppearance) 暗 号 化 対 象 のはず ( 仕 様 に 記 述 無 し) だが 実 際 には 暗 号 化 しては 駄 目 XObject のリソースとして 外 観 情 報 を 指 定 実 は ISO 等 の 標 準 ではない デファクトは Adobe Acrobat 9 Digital Signature Appearances である http//www.adobe.com/content/dam/adobe/en/devnet/acrobat/pdfs/acrobat_digital_signature_appearances_v9.pdf
PDF 署 名 基 本 2 内 部 構 造 例 13 署 名 辞 書 署 名 フィールド ( 署 名 注 釈 ) 署 名 外 観
14 PDF 署 名 基 本 3オブジェクトの 組 み 合 わせ 未 署 名 署 名 済 み 署 名 フィールド 署 名 フィールド 不 可 視 署 名 /Rect [0 0 0 0] 署 名 外 観 /Rect [0 0 0 0] 署 名 外 観 署 名 辞 書 /ByteRange [a b c d] /Contents <3082 > /Type /Xobject %DSBlank /Type /Xobject %DSBlank 署 名 フィールド 署 名 フィールド /Rect [x1 y1 x2 y2] /Rect [x1 y1 x2 y2] 署 名 辞 書 署 名 外 観 署 名 外 観 /ByteRange [a b c d] /Contents <3082 > 可 視 署 名 /Type /Xobject %DSBlank /Type /Xobject /Resources /n0 /n2 実 際 の 署 名 外 観 実 際 にはもっと 複 雑 な 構 造 となるがここでは 簡 略 化 して 示 している 署 名 外 観 /n0 署 名 外 観 /n2 /Type /Xobject %DSBlank /Type /Xobject q IMG TEXT Q
15 PDF 署 名 基 本 4ByteRangeと 署 名 対 象 署 名 辞 書 /ByteRange [ 開 始 位 置 1 長 さ1 開 始 位 置 2 長 さ2 ] 配 列
PDF 署 名 基 本 5シリアル 署 名 ( 複 数 署 名 ) 16
PAdES 基 本 1PAdESの 構 成 Part Title About Part1 PAdES Overview PAdES 全 体 の 概 要 を 解 説 している 最 初 に 読 むべき 解 説 Part2 PAdES Basic 既 存 のPDF 仕 様 (ISO 32000-1/PDF1.7)に 基 づく 署 名 プロファ イル 署 名 プロファイルとしてPKCS#7(CMS)を 利 用 Part3 PAdES Enhanced 署 名 プロファイルとしてCAdES-BES/CAdES-EPES/CAdES-T を 使 った 署 名 プロファイル Part4 PAdES-LTV(Long Term Validation)Profile PAdES Long Term 長 期 署 名 の 為 に 新 たに 加 えられたDSS/VRI 辞 書 を 使 って 検 証 (LTV) 情 報 とドキュメントタイムスタンプをPDFに 埋 め 込 む Part5 Part6 PAdES for XML Content Visual Representations of Electronic Signatures 署 名 辞 書 の 違 い 形 式 /Type /SubFiler PAdES-Basic /Sig PDF に 添 付 されたXML ドキュメントや XFA ( XML Forms Architecture)として 埋 め 込 まれたXMLフォームに 対 して XAdESを 使 った 長 期 署 名 プロファイル 署 名 外 観 や 検 証 に 関 する 仕 様 ただし 簡 易 説 明 であり 詳 細 は 別 仕 様 を 参 照 /adbe.pkcs7.detached /adbe.pkcs7.sha1 署 名 部 /Contents PKCS7 (+TST) 17 その 他 ISO32000-1の 署 名 ほぼそのまま PAdES-Enhanced /Sig /ETSI.CAdES.detached CAdES CAdES-T/BES/EPES DocTimeStamp (PAdES-LTV) /DocTimeStamp /ETSI.RFC3161 TST Name, M, Location, Reason 等 は 非 推 奨
PAdES 基 本 2PAdESの 構 成 元 PDFフ ァ イ ル 増 分 更 新 増 分 更 新 %PDF-1.7 署 名 データ /Type/Sig /Contents< 3082160006092a8a 0000000000000000 00000 > /ByteRange [ ] DSS 証 明 書 群 CRL 群 VRI /Type/DocTimeStamp /Contents< 30820f7306092a86 0000000000000000 0000000 > /ByteRange [ ] 署 名 付 PDF + 署 名 タイムスタンプ LTV ( 検 証 情 報 ) ドキュメント タイムスタンプ タイムスタンプトークン 署 名 タイムスタンプ 付 可 能 証 明 書 やCRL 等 も 埋 め 込 み 可 能 PKCS#7 か CAdES 形 式 署 名 データに 検 証 情 報 を 含 めるなら DSS/VRIは 無 くても 良 い Long Term Validation 署 名 タイムスタンプは 埋 め 込 み 以 外 に 別 途 DocTimeStampでも 可 18 乱 暴 に 言 えば 署 名 +LTV+タイムスタンプ =PAdES( 長 期 保 管 用 PDF)
PAdES 基 本 3 PAdESのレベル 遷 移 19 ES( 署 名 基 本 ) ES-T( 署 名 タイムスタンプ) 検 証 情 報 の 埋 め 込 み 長 期 保 管 状 態 Baseline Profile B-Level T-Level LT-Level LTA-Level %PDF %PDF %PDF %PDF ES1 ES1 ES1 ES1 DocTS1 DocTS1 DocTS1 %PDF ES1 SigTS LTV (DSS/VRI) Certs,CRLs,OCSPs LTV (DSS/VRI) Certs,CRLs,OCSPs DocTS2 CT (Content-TimeStamp) %PDF DocTS1 %PDF LTV (DSS/VRI) Certs,CRLs,OCSPs DocTS1 %PDF LTV (DSS/VRI) Certs,CRLs,OCSPs DocTS1 DocTS2
PAdES 基 本 4 検 証 情 報 20 検 証 情 報 の 種 類 署 名 書 群 失 効 情 報 群 説 明 署 名 証 明 書 (タイムスタンプ 証 明 書 を 含 む)から 信 頼 されたルート 証 明 書 (トラストアンカー)までの 証 明 書 チェーン( 認 証 パス)を 構 築 する 為 に 必 要 な 全 証 明 書 が 必 要 失 効 情 報 には CRL( 証 明 書 失 効 リスト)とOCSP(オンライン 失 効 情 報 問 合 せ)の2 種 類 がある CRLは 失 効 している 証 明 書 の 情 報 であり OCSPは 指 定 された 証 明 書 の 失 効 を 含 む 各 種 状 態 を 返 す 失 効 情 報 としてCRLとOCSPのどちらを 使 っても 良 い 優 先 順 位 検 証 情 報 の 格 納 場 所 1 DSS の 中 の 署 名 VRI 要 素 から 参 照 されている 検 証 情 報 2 DSS から 参 照 されている 検 証 情 報 3 署 名 データ 自 身 に 埋 め 込 まれている 検 証 情 報 4 ローカルなリポジトリに 保 管 されている 検 証 情 報 ( 外 部 から 提 供 ) 5 オンラインソースから 取 得 された 検 証 情 報 (ネットワークから 取 得 )
PAdES 基 本 5PAdES-LTVの 内 部 構 造 例 21 DSS 辞 書 VRI 辞 書 署 名 辞 書 群
PAdES 基 本 6PAdES-LTVの 内 部 構 造 例 2 22 DSS 辞 書 CRL 群 Acrobat-XIでは DSSの CRLと 証 明 書 は 重 複 して 全 てが 保 管 されるようだ 証 明 書 群 VRI 辞 書 VRIは 署 名 データのハッシュ 値 で 関 連 付 ける これはドキュメントタイムスタンプのハッシュ 値 注 ドキュメントタイムスタンプはタイムスタンプ トークン(0を 含 まない)のハッシュ 値 を 計 算 する VRIは 署 名 データのハッシュ 値 で 関 連 付 ける これは 最 初 に 付 与 した 署 名 データのハッシュ 値 注 署 名 データは/Contentsに 指 定 された バイナリ(0を 含 む)のハッシュ 値 を 計 算 する 謎 TUだけのVRI 情 報 があるのだが 何 だろう?
23 PAdES 基 本 7PAdES(PDF 長 期 署 名 )に 関 する 資 料 1. ETSI 仕 様 書 以 下 ダウンロードサイトから TS 102 778 で 検 索 してダウンロード http//pda.etsi.org/pda/queryform.asp 2. ECOM 電 子 署 名 普 及 に 関 する 活 動 報 告 2009 3.1 PAdESの 概 要 経 緯 動 向 http//www.jipdec.or.jp/archives/ecom/results/h21seika/h21results-09.pdf 3. PDFインフラストラクチャー 解 説 ( 現 在 更 新 中 ) 22.7 PDF 長 期 署 名 (PAdES) 他 にもPDF 署 名 等 の 説 明 もあり http//www.cas-ub.com/project/index.html#free 4. Acrobat-XIでPAdESファイルを 作 成 する http//www.langedge.jp/download/20130424-pades-doc.pdf