« FrameMaker の復活まぢか! PDF保存、3次元PDFサポート | メイン | Antenna House PDF Convert! 3 (英語版)を発売 »

2007年05月21日

PDFと署名(31) — PDFの署名値について

先日、PDFに署名するときルート証明書の情報は不要ではないかと言いましたが、もしかすると誤りかもしれません。これについて、PDF Reference 1.7の関連する箇所を調べてみました。

2007年05月19日 PDFと署名(30) — PDFの署名の検証

PDFの署名辞書について、まず、表8.98を見ますと、次のようになっています。
Contentsキー
(必須)署名値。ByteRangeキーが存在するとき、バイトレンジ・ダイジェストの値を表す16進の文字列。ByteRangeキーが存在しないとき、Contentsエントリを除く、署名辞書のオブジェクト・ダイジェストの値。公開鍵署名では、Contentsは一般的にDER符号化のPKCS#1バイナリ・データオブジェクト、または、DER符号化のPKCS#7バイナリ・データ・オブジェクトである。
Certキー
(SubFilterキーがadobe.x509.rsa_sha1のとき必須。それ以外では使わない)(中略)
SubFilterがadbe.pkcs7.detachedまたはadbe.pkcs7.sha1の時、このエントリは使わない。そして証明書のチェーンをContentsキーのPKCS#7封筒に入れなければならない。(2007/5/22 注)

ということは、証明書のチェーンを作成して、署名値の中に入れなければならないようです。

さらに、8.7.2署名の互換性という項を見ますと、PKCS#7署名については、最低限、署名者のX.509署名用証明書を含まねばならない、となっています。ここと、下の部分の記述からしますと、ルート証明書は必須ではないようにも見えます。果たしてルート証明書をPDFの署名辞書に埋め込まねばならないのかどうか、説明があまり明確ではないように思います。どうなんでしょうね?

ところで、PKCS#7オブジェクトは、オプションとして次の属性をもつことができます。

・RFC3161に準拠するタイムスタンプ (PDF1.6~)
・署名された属性として、証明書検証情報 (PDF1.6~)
・署名者の信頼チェインから、一つ以上の発行者証明書 (PDF1.6~)
・署名者の証明書に関連するRFC3281属性証明書、一つ以上 (PDF1.7~)

このあたりの説明は、PDF Reference1.5とPDF Reference1.6の間でかなり変更になりました。また、PDF Reference 1.7でも少し変更になっており、PDFの電子署名機能は、最近になって変更され固まってきたと言えそうです。

注)2007年5月22日追記
この部分ですが、「もしSubFilterがadbe.pkcs7.detachedかadbe.pkcs7.sha1の場合に証明書チェーンを埋め込む場合は、PKCS#7のデータ中に埋め込む必要がある。」
と解釈すべきではないか、というコメントがありました。確かにそういう風に解釈できるようにも思います。

投稿者 koba : 2007年05月21日 08:00

トラックバック

このエントリーのトラックバックURL:
http://blog.antenna.co.jp/PDFTool/mt-tbng2.cgi/694

コメント

コメントしてください




保存しますか?