PDFの標準セキュリティ機能

最終更新日: 2006/11/23

目次

はじめに

PDFの仕様書(PDF Reference)では、さまざまなセキュリティ機能が規定されています。PDFの製品を作る立場からは、PDFのセキュリティ機能に関する仕様についての正確な知識が必要です。一方、また、そのPDFを使用する立場からは、PDFでどのようなセキュリティ機能を使うことができるかということ、また、実際のところ、PDF仕様で規定されているセキュリティ機能が、すべてのPDF作成、PDF消費ソフトに、全部実装されている訳ではありませんので、ある製品が、仕様に定めている機能を、どこまで実装しているかについて知っている必要があります。

ここでは、PDFの標準セキュリティのうち、暗号化に関連する機能とその実際の製品での実装という観点でまとめてみました。この文書は、「PDF千夜一夜」のお話を整理したものです。特に、問題がない限り、今日、あるいはx日という記述はそのまま残していますのでご了承ください。但し、内容的な不足・誤りについてはできるだけ加筆・訂正に努めました。

PDFの暗号化方式の概要

PDFではコンテンツのみを暗号化

PDFのセキュリティ機能について整理してみたいと思います。PDF Referenceを読みますと、PDFのバージョンが上がるにつれて、セキュリティ機能が追加されたり、既に廃止されたという記述があったり、さらに、カスタムのセキュリティ方式を組み込む機能が説明されているなど、PDF標準のセキュリティの詳細はかなり複雑に入り組んでいます。

PDFのセキィリティに関する仕様はPDF Reference 1.6 の3.5項暗号化と、8.7項の電子署名(デジタル署名)に記載されています。このほか、PDFに標準で用意されている方式ではないと思いますが、サーバを使って、個々のPDFへのアクセスをきめ細かく制御する、いわるゆDRM (Digital Right Management)も様々に提供されています。

本稿では、この中で3.5項のPDFの暗号化について説明します。

まず、最初にPDFでは、セキュリティを(1)どうやって実現しているかということと、(2)何ができるのか、ということについて整理してみましょう。

PDFのファイルには、さまざまなテキスト文字列、イメージ、線画などのコンテンツ情報が入っています。そのコンテンツを整理して、ランダムにアクセスするための構造情報があります。

PDFにセキュリティをかける場合は、一定の暗号化アルゴリズムを使ってPDFを暗号化することになりますが、PDFのファイル全体に暗号をかける訳ではありません。通常は、コンテンツになるデータのみに暗号をかけ、構造情報は暗号化しません。こうすることで、暗号が掛かっているPDFファイルを認識して、暗号を解くことができるようになっています。

PDFファイルは、アプリケーションとは独立に流通していますし、PDFを作成する側がいろいろな暗号化方式を使うことができます。PDFファイル全体に暗号をかけてしまうと、PDFビューアが表示したくても、どんな暗号化方式が使われているかということさえも認識できなくなってしまいますので、これは当然なことです。

暗号辞書とセキュリティ・ハンドラ

1.暗号辞書
PDFに暗号が掛かっているときは、PDFファイルのトレイラに暗号辞書が登録されます。PDFでは、多くの場合、作成ソフトと消費ソフトが別のアプリケーションとなりますので、お互いに暗号の方式についての情報を交換する必要があります。この交換すべき情報を暗号辞書の内容に設定するようになっています。PDFにこの暗号辞書がないならば、暗号化されていないということを意味します。

2.セキュリティ・ハンドラ
PDFの暗号化処理は、セキィリティ・ハンドラというプログラムで処理します。PDFを作成・利用する人が独自のセキィリティ・ハンドラを規定してつかうことも可能なようですが、標準では2種類のセキィリティ・ハンドラが定義されています。 暗号辞書には、セキュリティを処理する方法(セキュリティ・ハンドラ)についての情報を登録できるようになっています。セキュリティ・ハンドラとは、文字通りPDFに対するセキュリティを取り扱うプログラム・モジュールです。

PDF仕様には、標準セキュリティ・ハンドラ(3.5.2)—パスワード方式(共通鍵暗号方式)と言い、PDFを作成する人と、PDFを利用する人の間で取り決めた共通のパスワードを使って、PDFの内容へのアクセスを制御する方式、と公開鍵セキュリティ・ハンドラ(3.5.3)—公開鍵暗号方式を使用する方式が規定されています。

標準セキュリティ・ハンドラ

パスワード方式で、PDFへのアクセス許可を設定可能とし、それを処理するものです。

ユーザーパスワードとオーナーパスワード

PDFの仕様では次の2種類のパスワードを設定することができるようになっています。

(1)オーナーパスワード—編集パスワードとも言い、PDFの内容を修正したり、データを取り出したりなどの制限事項を設定します。
(2)ユーザーパスワード—閲覧パスワードとも言い、PDFを表示して読むことができるための閲覧許可を与えます。

PDFを作成する人が、PDF作成時にパスワードを設定します。

もし、ユーザーパスワードが設定されていると、PDFを利用する人が正しいパスワードを入れないと、PDFを表示することができなくなります。このパスワードの使い方は、一般的に、セキュリティの掛かったサービスにログインするときの方式に似ていますので、経験されている方も多く、分かりやすいと思います。

これに対して、オーナーパスワードが設定されている場合は、パスワードを入力しなくても、制限事項に設定されている範囲でPDFを利用することができますが、それ以外の目的に利用するためには、正しいオーナーパスワードを入力することが求められます。

オーナーパスワードによるPDFの利用許可制御

オーナーパスワードによるPDFの利用許可制御は、PDF独自の方式ですので、なかなか理解し難いかもしれません。さらに、具体的に制限できる事項が、標準セキュリティ・ハンドラのリビジョンによって微妙に違っていますのでややこしいです。

作成するPDFのバージョンによって、設定できる標準セキュリティ・ハンドラのリビジョンが決まってきます。そして、そのPDFを正しく閲覧・処理できるかは、Adobe ReaderなりPDFビューアが内蔵している標準セキュリティ・ハンドラのリビジョンで決まってくるわけです。

標準セキュリティ・ハンドラがなにをなすべきかはPDF Referenceに書いてありますが、あるソフトウエア製品がPDF1.6のパスワード方式セキュリティを正しく処理できるとは、PDF1.6仕様で規定する標準セキュリティ・ハンドラのリビジョン(の機能)を、その製品に実装していることを意味していることになります。

標準セキュリティ・ハンドラによる利用許可制御の設定項目

次に、オーナーパスワードにより設定できるPDFの利用許可制御について、PDF Referenceに記載されている内容を説明します。

PDF作成者は、PDFにオーナーパスワードを設定するとき、PDFを受け取ったユーザがPDFに対して何ができるかを許可できます。PDF利用許可の内容は、PDFに保存される暗号辞書中のフラグのある桁をONにすることで設定します。

標準のセキュリティ・ハンドラには、リビジョン番号2,3,4の3種類があります。PDF Reference 1.6の表3-20 (pp.99-100)に基づいてリビジョン2で設定できる項目を表1、リビジョン3と4で設定できる項目を表2に整理します。

表1.リビジョン2の標準セキュリティ・ハンドラで許可できること

ビット位置 ONの時許可
印刷を許可する
内容の変更を許可する
テキストや画像の抽出を許可する
テキスト注釈の追加・変更と対話式フォームフィールドを埋めることを許可する。ビット4がONならば、新しい対話式フォームフィールドを作成したり、変更することも許可する

表2.リビジョン3、4の標準セキュリティ・ハンドラで制限できること(*は、リビジョン3・4で、リビジョン2に追加されたこと)

ビット位置 ONの時許可
印刷許可する—さらにビット12がONなら高精度印刷を許可、OFFなら低解像度印刷を許可(*)
内容の修正を許可する
アクセシビリティ以外の目的でテキストや画像の抽出を許可する(*)
テキスト注釈の追加・変更と対話式フォームフィールドを埋めることを許可する。ビット4がONならば、新しい対話式フォームフィールドを作成したり、変更することも許可する
ビット6が不許可でも、署名を含め対話式フォームフィールドを埋めることを許可する(*)
10 アクセシビリティの目的(スクリーン・リーダなど)でテキストや画像の抽出を許可する(*)
11 ビット4(内容の修正)が不許可の時でも、文書の合成を許可する—ページ挿入・ページ回転・ページの削除・しおりの作成・サムネイルの作成(*)
12 高精度印刷を許可する

ちなみに、リビジョン2の標準セキュリティ・ハンドラは40ビットの暗号方式、リビジョン3の標準セキュリティ・ハンドラは、PDFのバージョン1.4から使用可能になった128ビットの暗号方式です。また、バージョン1.5からはリビジョン4の標準セキュリティ・ハンドラが使用可能です。(リビジョン4での違いについては、後述します)。

ここで分かりますように、リビジョン3・4の標準セキュリティ・ハンドラの方が、リビジョン2よりも詳細な許可設定ができるようになっています。

【注意】上の説明は、あくまで仕様書で規定されている内容であることに注意してください。つまり、皆さんが日ごろご覧になっている実際のプログラムの動きとは違うかもしれない、ということです。すべてのプログラムが、仕様を上の通りに実装しているとは限らないからです。

Acrobatの実装状況

さて、PDF Referenceでの標準セキュリティ・ハンドラについて記述されている仕様を紹介しましたが、次に実際のプログラムの画面で、どうなっているかをチェックしてみたいと思います。

まず、Adobe Acrobat(プリンタ・ドライバ)でセキュリティ設定をするためのダイヤログを見ます。(このダイヤログは、PDF 1.4レベルで、標準セキュリティ・ハンドラのリビジョン3を選んでいる状態に相当します)。
Adobe-Driver-P1-JP.PNG

・「文書を開くときにパスワードが必要」にチェックしますと、ユーザーパスワードを設定することになります。そうしますと、PDFを利用する人がパスワードを入れないと文書を開くことができなくなります。

・「文書の印刷および編集とセキュリティ設定にパスワードが必要」は、少々、分かりにくい日本語のようにも思いますが、ここにチェックしますと、昨日、説明しましたオーナーパスワードを設定できることになります。

さて、オーナーパスワード設定の状態では、次の二つのダイヤログに示すように、PDF に次のセキュリティを設定できるようになります。

・印刷許可(次のいづれか) — 許可しない、低解像度、高解像度
・変更を許可(次のいづれか) — ページの挿入、削除、回転
              フォームフィールドの入力と署名
              注釈の作成、フォームフィールドの入力と署名
              ページの抽出を除く全ての操作
・テキスト、画像、およびその他の内容のコピーを有効にする
・スクリーンリーダデバイスのテキストアクセスを有効にする

Adobe-Driver-P2-JP.PNG

Adobe-Driver-P3-JP.PNG

セキュリティ設定のダイヤログを見ますと、Adobe Acrobatのプリンタ・ドライバでは、PDF Referenceに記載されているすべてのセキュリティ設定パターンは指定できないことが分かります。例えば、PDF Referenceの仕様では、「ページの挿入、削除、回転」と「フォームフィールドの入力と署名」は独立に設定 — 両方NO、どちらか一方のみYes、両方Yesの4通りの設定 —できるはずなのに、このダイヤログのメニューでは、両方Yesの設定は不可能です。

さて、PDFに設定されているセキュリティの状態を確認するには、Adobe ReaderでPDFを開いて、文書のプロパティ「セキュリティ」タブを選択します。そこでセキュリティ設定の詳細を確認することができます。

SecurityTabStatus.PNG

リビジョン4の標準セキュリティ・ハンドラ

次に、標準セキュリティ・ハンドラのリビジョン4について整理してみます。

リビジョン4の標準セキュリティ・ハンドラは、PDF 1.5(Acrobat6)以降で使えます。この標準セキュリティ・ハンドラで追加になっている機能は次の点です。

(1) PDF 1.5の仕様で追加された、暗号フィルター辞書(CryptFilter)機能 — 後述 — を使用できます。
(2) 暗号辞書の中で、PDFの中のストリング、ストリーム、添付ファイルに対して使用する暗号フィルターを個別に指定できます。なお、添付ファイルについてはPDF1.6からとなります。
(3) 暗号辞書の中で、メタデータを暗号化するかどうかを指定できます。なにも指定しないと、メタデータも暗号化しますが、「メタデータは暗号化しない」ようにすることも指定できます。

レビジョン4で追加されたのは、PDFに関するパスワードによるアクセス管理ではなく、むしろPDFコンテンツへの暗号のかけ方をより細かく設定可能にする機能、と言えます。

暗号フィルター辞書とは

暗号フィルター辞書は、PDF 1.5から追加された仕様で、暗号フィルターを定義するものです。その役割は、主に使用する暗号アルゴリスムの指定、暗号フィルターを適用するタイミングを指定などです。

PDFの暗号化では、これまでRC4暗号アルゴリズムを使っていましたが、PDF 1.6から新しい暗号アルゴリズムAES(Advanced Encryption Standard)も使えるようになりました。暗号フィルターで、使用するアルゴリズムをRC4にするかAESにするか指定できます。また、暗号化しないでスルーする暗号フィルターを定義することもできます。

さて、PDF Referenceの仕様上は、上のような機能が追加されていますが、Acrobat7 のPDFドライバで、使用できるようになっているのは、「メタデータを暗号化しない」という機能のみのようです。AES暗号アルゴリズムはもとより、ストリームとストリングで暗号フィルターを切り替えるというような機能も指定できません。

次の図は、Acrobat 7のPDF ドライバのセキュリティ設定のダイヤログですが、「文書メタデータを暗号化しない」のチェック・ボックスが追加されています。
AC7.PNG

折角追加された、AES暗号アルゴリズムはAdobeのプリンタ・ドライバからは指定することができません。このあたりは、Acrobat 8で変更になるかもしれませんね。

AES暗号アルゴリズム

昨日は、PDF 1.6から仕様上、AES(Advanced Encryption Standard)を指定可能になったとお話しました。

AES暗号は、米国が2001年に標準として定めた新しい暗号アルゴリズムです。
AES暗号などによりますと、米国でそれまで使っていた標準暗号方式が、技術進歩により脆弱になったため、世界中から公募した15種類の暗号方式から選択されたもので、最終的にベルギーの研究者が考案したものが採用された、とあります。

従来、PDFで使われていた暗号アルゴリズムRC4は、私企業のプライペートな暗号アルゴリズムであったのに対して、AESは、政府が標準として定めた暗号アルゴリズムであり、仕様書が一般に公開されているのが大きな特徴です。

AESの仕様書(英文PDF)

PDFでも、今後は、AESをサポートするPDF生成ソフト、PDF消費ソフトが増えてくることを期待したいと思います。

Acrobat7のPDFドライバでは、AESが使えませんが、Acrobat7(GUI)では、暗号アルゴリズムとしてAESを設定することができます。

次の図のようにAcrobatでPDFを読んで、セキュリティを設定する際に、互換性のある形式として「Acrobat 7.0およびそれ以降」というカテゴリを選択しますと、AES暗号アルゴリズムを設定することになります。

AC7-setting.png

ただし、注意しなければならないのは、セキュリティ設定時にAESで暗号をかけてしまうと、PDF のリーダソフトの標準セキュリティ・ハンドラがAESに対応していないとファイルを開けなくなることです。

例えば、Adobe Readerの場合、Adobe Reader7では、AES暗号を設定したPDFを開くことができます。
■AES暗号でセキィリティを設定したPDFを、Adobe Reader7で開き、セキュリティ・タブで「詳細情報」を表示
ReadACE-by-Acrobat7.PNG

しかし、Adobe Reader6の標準セキュリティ・ハンドラはAES暗号アルゴリズムを内蔵していないため、PDFに正しくない暗号が掛かっている、と誤認してしまいます。
■AES暗号でセキィリティを設定したPDF(上と同じ)を、Adobe Reader6で開こうとするとエラーになってしまいます。
ReadACE-by-Acrobat6.PNG

Adobeの製品以外でもPDFを処理する様々な製品があります。現時点では、AES暗号を不用意に使いますと、受け手がPDFの内容を表示することができなくなります。多くのソフトでAES暗号が使えるようになるまでには、少し時間がかかるものと思います。

Antenna House PDF Driver

Antenna House PDF Driver では、AcrobatのPDFプリンタ・ドライバとほぼ同様のメニューで、パスワード方式のセキュリティ設定が可能です。 さらに、Antenna House PDF Driver V3.1では、出力PDFにバージョン1.6指定時、業界他社に先駆けてPDFの新しい暗号方式であるAESを採用しました。出力PDFのバージョンを1.6に指定し、PDFのオーナーパスワード・ユーザーパスワードを設定した場合、AES暗号アルゴリズムでPDFのコンテンツを暗号化するようになります。

Antenna PDF Driver のPDFセキュリティ設定ダイヤログ
AHDriverSecurity.PNG

公開鍵セキュリティ・ハンドラ

PDF Referenceの3.5 暗号化の項には、パスワード・ベースの標準セキュリティ・ハンドラの他に、3.5.3 公開鍵セキィリティ・ハンドラという、もうひとつのセキュリティ・ハンドラが規定されています。

公開鍵セキィリティ・ハンドラは、公開鍵暗号化技術を使ってPDFにセキュリティをかける方式です。

公開鍵暗号化技術については、いろいろなところで解説されていますが、ざっとまとめて見ますと次のようになると思います。

例えば、AとBの2者間で、公開鍵暗号化方式を使って暗号化通信を行おうというときの順序は、

1.Bは、公開鍵と秘密鍵のペアを用意します。このふたつの鍵は、まったく異なる鍵ですが、一方で暗号化したものは他方の鍵でしか、暗号解除することができないものです。
2.Bは、公開鍵の方をインターネットやメールなどを通じて、公開(Aに渡)します。秘密鍵は、外部に漏れないように保持します。
3.Aは、Bの公開鍵を使って文書を暗号化し、暗号化した文書をBに送信します。
4.Bは、Aから受け取った(暗号化された)文書を、秘密鍵を使って暗号を解除します。
5.うまく暗号が解除できれば、受け取った文書はBの公開鍵で暗号化されたものであることになります。

この通信方式は、電子署名(デジタル署名)とは鍵の使い方が逆になっていることに注意してください。ちなみに、電子署名は、秘密鍵で暗号化したものを相手に渡し、相手は、公開鍵で暗号を解除するものです。

さて、PDFの公開鍵セキィリティ・ハンドラは次のようなことを行うとされています。
(PDF Reference 1.6 pp.104 - 106)

1.PDFの文書コンテンツを暗号化するときに使用する暗号キーの元と、PDFを送信する相手(複数人)のPDFの利用権限(相手によって変えることができます)設定データを用意します。

2.PDFを送信する相手の公開鍵を入手します。複数のときは、公開鍵は相手毎に異なったものになります。

3.1で用意したキーと相手の利用権限設定データを、相手毎に、各人の公開鍵を使って暗号化します。それらの暗号化されたデータをまとめて、受信者データ表として作成します。

4.PDFの暗号化辞書に3で作成した受信者データ表を記録します。

こうして作成した暗号化済PDFを、相手に配信します。

PDFを受け取った相手は、各人の秘密鍵を用いて、受信者データ表の中から暗号キーの元と自分用の利用権限データとを取り出します。この暗号キーの元を使って、PDFの暗号を解いてPDFを閲覧します。この時、自分用の利用権限データが有効になりますので、PDFの配信元が設定した利用権限の範囲内でしかPDFを利用できないことになります。

パスワード方式の標準セキィリティ・ハンドラでは、PDFの受け手によって利用権限を変更することはできないのですが、公開鍵セキィリティ・ハンドラを使うと相手によって利用権限を変えることができます

なお、PDFの利用権限の設定は、「PDFの利用許可制御」の項で説明しましたものと同じです。


Copyright © 1996-2008 Antenna House, Inc. All right reserved.
Antenna House is a trademark of Antenna House, Inc.