« xfyの未来は? | メイン | PDFと署名(34) — PDFへのタイムスタンプ付与 »

2007年05月27日

PDFと署名(33) — PDF署名の検証の互換性にはまる!

今日は、PDFとタイムスタンプの関係を調べようと思って、PFUのWebページを見てました。

PFUタイムスタンプサービス

このページはなかなか分かりやすく、タイムスタンプのことを説明してあります。それで、少し試してみようと思い、サンプルPDFを見つけました。

サンプルPDFは、次のページにあります。
PFUタイムスタンプ for Adobe® Acrobat®(検証用)

さっそくダウンロードして、Adobe Reader8で表示しました。ところがこの署名を検証すると次のようになってしまいます。

20070526-0.PNG

Acrobat Reader8が英語版のため、英語のメニューなんですが、「この文書は無効(INVALID)である。署名してから、文書が変更されたか、それとも壊れている。」となってしまいます。

ちなみに、これは、Acrobat Reader8のデフォルトハンドラで検証している状態です。

次に、PFU のWebページから、検証用のプラグインをダウンロードしてインストールしてみました。
そうして、署名を検証しますと、今度は次のように、「署名が有効である」となります。
20070527-1.PNG

同じ署名が、検証につかうハンドラによって、「有効」と「無効」というまったく異なる結果になってしまうのですが、こういうことがあって良いのでしょうか?

なぜかなあと思って、調べ始めたら、はまってしまいました。

結論から言いますと、このPDFでは署名辞書が次のようになっています。

/SubFilter/adbe.pkcs7.sha1
/Filter/PFUP.TimeStamp
/PFUP.DigestMethod/SHA512
/Prop_Build<</Filter<</Name/PFUP.TimeStamp/

などとなっていますので、PDFのタイムスタンプ用のハンドラ(Acrobatのアドイン)で署名をしているようです。

ハッシュのダイジェスト計算にSHA512という新しいアルゴリスムを使っています。

しかし、adbe.pkcs7.sha1は、SHA1をサポートするハンドラで検証することを意味すると思います。このためにAcrobat Readerのデフォルトハンドラで検証すると、ハッシュ値の計算結果がPFUのハンドラの計算結果(署名辞書に埋め込まれている値)と違ってしまい、署名の検証結果が「無効」になるのでしょう。

原因はともかく、このような場合、Adobe Readerのデフォルトハンドラで、「無効」という相反する結果がでるのはまずいでしょう。デフォルトハンドラでは、最悪でも「不明」あるいは「検証できない」というメッセージを出すようにするべきだと思います。

このPDFは、PFUの署名・タイムスタンプ設定用プラグインで作成されているわけですが、作成時のSubFilterキーの値の設定を変更するほうが良いように思いますが、如何でしょうか?

※追記:このPFUのサンプルのPDF署名辞書の署名データ(PKCS#7形式)を調べてみたのですが、どうも、電子署名部分はSHA1になっているように見えます。つまり、タイムスタンプはSHA512で、電子署名はSHA1。しかし、これ以上はいま調べている能力も時間もありません。また、そのうち。

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

トラックバック

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

コメント

コメントしてください




保存しますか?