« 2007年05月17日 | メイン | 2007年05月19日 »

2007年05月18日

PDFと署名(29) — MDP署名のダイジェストの計算

先日、PDFの署名には、(1)普通の署名と(2)MDP署名(有効な証明用署名)の2種類があることを説明しました。
2007年05月16日 PDFと署名(28) — PDFの2種類の署名

普通の電子署名では、署名を付けたい文書のハッシュ値を計算します。そして、そのハッシュ値を秘密鍵で暗号化することになります。PDFの場合、(1)普通の署名では、PDF文書の中の指定した範囲(バイトレンジで指定。通常は、署名辞書の署名の値以外の部分)のハッシュ値を計算します。

MDP署名では、ハッシュ値の計算の過程で、「オブジェクト・ダイジェスト」という特別な方法が使われることがあります。

簡単に言いますと、コンピュータのメモリ中のPDFオブジェクトのツリーの中で指定したオブジェクトを辿ってダイジェストを計算する対象となるデータストリームを生成する方式です。オブジェクト・ダイジェストの方法については、PDF Reference1.7では付録I Computation of Object Digestsに説明されています。

この計算方法は、単純な文書のダイジェスト計算と比べてかなり面倒なようです。電子署名では、ソフトウエアAで作成したPDFの電子署名をソフトウエアBで検証する場合もありますので、互換性が重要なのですが、あまり複雑だと完全な互換性が実現できるのだろうかと、少し心配になったりします。

そのためかどうか分かりませんが、MDP署名の検証方法は、PDF 1.5とPDF 1.6以降でかなり変わっています。

MDP署名の検証(PDF Reference 1.7 pp.732-733)
「PDF 1.5は、署名の時点でのオブジェクト・ダイジェストの計算値が、署名参照辞書(表8-103)のDigestValueエントリに保存されることを要求する。従って、アプリケーションはこのエントリを、検証の時点で計算されたオブジェクト・ダイジェストと比較することができる。もし、値が違っているならば、署名は妥当でないものである。
PDF 1.6では、DigestValueエントリは要求されない。バイトレンジ・ダイジェストを検証したならば、署名辞書(表8-102)のバイトレンジ・エントリで指定される文書の部分が署名の時点での文書の状態に対応するものと知られる。従って、アプリケーションは署名されたものと現行の文書バージョンを比較することができ、それによって変換パラメータで許可されない任意のオブジェクトに対して修正があったかどうかを知ることができる。付録Hの実装メモを参照。」

これを読む限り、PDF 1.6~では、MDP署名において、著者が変更を許可していない部分についてはオブジェクト・ダイジェストを計算するのは止めてしまったように見えます。ともかく、PDF 1.5と1.6~では、MDP署名の検証方法が根本的に変わっていることになります。恐らくは実装上の都合と思いますが、PDFの仕様がこのように変わっているのは注意が必要です。

※米国の専門家のPDFの仕様についての意見を読んでいても、PDFの仕様はPDF Referenceではなく、Adobe製品(つまり実装が仕様)であるということが問題である、と書かれていました。ISO標準になれば、Adobe 製品の実装が標準である、という態度は許されなくなります。早くISO標準になって変わって欲しいところです。

なお、MDP署名で著者が、フォーム・フィールドや注釈などに変更を許す時は、その部分は、フィールドMDP変換という方法で署名参照辞書が作られて、検証されます。フィールドMDPは、フォーム・フィールドのリストに対してオブジェクト・ダイジェストを計算する方法です。

投票をお願いいたします

投稿者 koba : 08:00 | コメント (0) | トラックバック