0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

電子契約で受け取ったPDFの署名は本当に有効?ByteRangeとハッシュで「署名後に改ざんされていないか」を確かめる

0
Posted at

電子契約サービスで締結した契約書や、電子署名付きの請求書PDF。Adobe Acrobat Readerで開くと「署名は有効です」や「少なくとも1つの署名に問題があります」と表示されますが、その意味をきちんと説明できる人は意外と少ないです。この記事では、PDF署名の仕組みと、手元で検証するときに見るべきポイントを整理します。

PDF署名の仕組み:ByteRange

PDFの電子署名(PAdES / PKCS#7)は、ファイル全体ではなく「署名値を入れる穴を除いたバイト列」に対して計算されます。署名辞書の /ByteRange [0 840 960 24000] は、「0〜840バイト目と、960〜24960バイト目をハッシュした」という意味です。間の部分に署名値(CMS)が入ります。

検証では次を行います。

  1. ByteRangeで示されたバイト列をハッシュする
  2. CMS内に記録されたハッシュと一致するか比較する
  3. 署名者の証明書の公開鍵で、署名値を検証する

1と2が一致すれば「署名時点から、その範囲は変更されていない」と言えます。

「署名後に変更されています」の正体

PDFは「増分更新」で、元のバイト列の後ろに変更を追記できます。署名後にフォーム入力やコメントが追加されると、ByteRangeの外側にデータが増えます。

  • 後ろに追加されたのが別の署名だけなら、複数人の署名として正常
  • ページ内容やフォーム値の変更なら、署名済みの版とは異なる文書

多くのビューアは古い版に対する署名を「有効」と表示し続けるので、「有効」でも最終版が署名されたものとは限りません。

「改ざんなし」と「法的に有効」は別

ハッシュが一致しても、それは「文書が変わっていない」「証明書の鍵で署名された」ことの証明にすぎません。

  • 証明書が信頼された認証局のものか(トラストリスト)
  • 署名時点で失効していなかったか(CRL / OCSP)
  • タイムスタンプ(RFC 3161)があるか

これらはオンラインでの照会が必要で、法的な有効性の判断には電子契約サービスや公的な検証サービスを使います。

ブラウザで手早く確認する

まず「改ざんの有無」だけ確かめたい場合は、Nibbo の PDF署名検証 が手軽です。各署名のByteRangeをハッシュしてCMS内の値と比較し、署名検証はブラウザのWebCrypto(PKI.js)で行います。署名者の証明書、署名時刻、タイムスタンプ、署名後の追記が「署名の追加だけ」か「内容の変更」かも表示されます。契約書がサーバーに送られないので、社外秘の文書でも試せます。

チェックリスト

  • 署名のByteRangeがファイル末尾までカバーしているか
  • 署名後の追記がある場合、その中身は何か
  • 証明書の発行者と有効期間
  • タイムスタンプの有無

「有効」の一言の裏にある内容を知っておくと、契約トラブルのときに慌てずに済みます。

— Vitalii

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?