« 2007年05月20日 | メイン | 2007年05月22日 »
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のデータ中に埋め込む必要がある。」
と解釈すべきではないか、というコメントがありました。確かにそういう風に解釈できるようにも思います。