PDFの標準セキュリティ機能
更新日:
このページの目的
PDFの仕様にはさまざまなセキュリティ機能が規定されています。PDF関連の製品を作る立場からは、PDFのセキュリティ機能に関する仕様についての正確な知識が必要です。
一方、そのPDFを使用する立場からは、PDFでどのようなセキュリティ機能を使うことができるのかということと、使用している製品が“仕様に定められている機能をどこまで実装しているか”について知っておく必要があります。
PDF仕様で規定されているすべてのセキュリティ機能が、すべてのPDF作成ソフト、PDFリーダーやPDF編集ソフト(PDFを受け取って利用するソフトを総称して消費ソフトといいます)に実装されている訳ではありません。
PDFのセキュリティに関する仕様には文書内容の暗号化に関する項目と、PDF電子署名(デジタル署名)に関する項目があります。本記事では主に暗号化について説明します。
なお、現時点で、PDFの仕様にはISO 32000-1:2008(PDF 1.7)とISO 32000-2:2017(PDF 2.0)の二つのレベルがあります。そして暗号化の仕様はISO 32000-2で大幅に変更になっています。本記事では主にISO 32000-1のレベルを中心に説明しています。
ページ末尾の参考資料では、PDFセキュリティの使用方法や利用例などをわかりやすく紹介しているページへのリンクがありますので、併せてご覧ください。
PDFの暗号化方式の概要
PDFではコンテンツのみを暗号化
最初にPDFでは、セキュリティを(1)どうやって実現しているかということと、(2)何ができるのか、ということについて整理します。
PDFには、テキスト文字列、イメージ、線画などさまざまなコンテンツ情報が入っています。そのコンテンツを整理して、ランダムにアクセスするための構造情報があります。
PDFにセキュリティをかける場合は、一定の暗号化アルゴリズムを使って暗号化することになりますが、PDFのファイル全体に暗号をかける訳ではありません。通常はコンテンツになるデータのみに暗号をかけ、構造情報は暗号化しません。こうすることで暗号が掛かっているPDFファイルを認識して、暗号を解くことができるようになっています。
PDFファイルはアプリケーションとは独立して流通していますし、PDFを作成する側がいろいろな暗号化方式を使うことができます。PDFファイル全体に暗号をかけてしまうと、PDFビューアが表示したくても、どんな暗号化方式が使われているかということさえも認識できなくなってしまいますので、これは当然なことです。
暗号辞書とセキュリティハンドラ
- 1.暗号辞書
- PDFに暗号が掛かっているときは、PDFファイルのトレイラに暗号辞書が登録されます。PDFでは多くの場合、作成ソフトと消費ソフトが別のアプリケーションとなりますので、お互いに暗号の方式についての情報を交換する必要があります。この交換すべき情報を暗号辞書の内容に設定するようになっています。PDFにこの暗号辞書がないならば、暗号化されていないということを意味します。
- 2.セキュリティハンドラ
- PDFの暗号化処理は、セキュリティハンドラというプログラムで処理します。セキュリティハンドラとは、文字通りPDFの暗号セキュリティを取り扱うプログラム・モジュールです。暗号辞書にはセキュリティハンドラとセキュリティハンドラのための各種パラメータについての情報を登録します。
PDF標準ではさまざまなアプリケーションで共通に使えるセキュリティハンドラがいくつか定義されています。
第一は標準セキュリティハンドラ(7.6.3)— パスワード方式(共通鍵暗号方式)と言い、PDFを作成する人と、PDFを利用する人の間で取り決めた共通のパスワードを使って、PDFの内容へのアクセスを制御する方式です。
第二は公開鍵セキュリティハンドラ(7.6.4)— 公開鍵暗号方式を使用する方式です。
PDFを作成・利用する人が独自のセキュリティハンドラを作成して使うこともできます。
標準セキュリティハンドラ
PDFの作成時にPDFの内容をパスワード方式で暗号化します。PDFの利用者が適切なパスワードを入力すれば内容を自由に利用できます。
ユーザーパスワードとオーナーパスワード
PDFには次の2種類のパスワードを設定できます。一方だけを設定できますし、両方のパスワードの設定もできます。
- ユーザーパスワード
- 閲覧パスワードとも言い、PDFを表示して読むことができるための閲覧許可を与えます。
- オーナーパスワード
- 編集パスワードとも言い、PDFの内容を修正したり、データを取り出したりなどの制限事項を設定します。
ユーザーパスワード
PDF作成時にユーザーパスワードが設定されていると、PDFリーダーなどでPDFを開くときにパスワードの入力を求められます。正しいパスワードを入れないと、PDFを表示できません。
このパスワードの使い方は、一般的に、セキュリティの掛かったサービスにログインするときの方式に似ていますので、経験されている方も多く、分かりやすいと思います。
オーナーパスワードによるPDFの利用許可制御
PDFの作成者はオーナーパスワードを設定するときにパスワードに加えて、PDFを受け取ったユーザーがPDFに対して操作できる項目も指定します。
PDFの利用者が受け取ったPDFに、オーナーパスワードのみが設定されている場合は、パスワードを入力しなくてもPDFのリーダーなどでPDFを開くことができます。そして制限事項で許可されている範囲内でPDFを利用できます。しかし、制限事項で許可されていない目的に利用するためには、正しいオーナーパスワードを入力しなければなりません。
オーナーパスワードによるPDFの利用許可制御は、PDF独自の機能です。
※PDFをオーナーパスワードで保護しても、FireFox(バージョン 67.0で確認)のPDFリーダーでは保護が無効になります。
標準セキュリティハンドラによる利用許可制御の設定項目
オーナーパスワードにより設定できる項目は、PDFのバージョンによって異なります。これは標準セキュリティハンドラにリビジョン番号 2、3、4の三つがあり、PDFのバージョンによって使えるリビジョンが異なるためです。
PDFバージョン | 使用できるリビジョン |
---|---|
PDF 1.3 | 2 |
PDF 1.4 | 3 |
PDF 1.5以降 | 4 |
PDF利用許可できる項目は、PDFに保存される暗号辞書中のフラグのある桁をONにすることで設定します。リビジョン2で設定できる項目を表2、リビジョン3と4で設定できる項目を表3に整理します。
ビット位置 | ONの時の許可内容 |
---|---|
3 | 印刷を許可する |
4 | 内容の変更を許可する |
5 | テキストや画像の抽出を許可する |
6 | テキスト注釈の追加・変更と対話式フォームフィールドを埋めることを許可する。ビット4がONならば、新しい対話式フォームフィールドを作成したり、変更することも許可する |
ビット位置 | ONの時の許可内容 |
---|---|
3 | 印刷許可する—さらにビット12がONなら高精度印刷を許可、OFFなら低解像度印刷を許可(*) |
4 | 内容の修正を許可する |
5 | アクセシビリティ以外の目的でテキストや画像の抽出を許可する(*) |
6 | テキスト注釈の追加・変更と対話式フォームフィールドを埋めることを許可する。ビット4がONならば、新しい対話式フォームフィールドを作成したり、変更することも許可する |
9 | ビット6が不許可でも、署名を含め対話式フォームフィールドを埋めることを許可する(*) |
10 | アクセシビリティの目的(スクリーン・リーダなど)でテキストや画像の抽出を許可する(*) |
11 | ビット4(内容の修正)が不許可の時でも、文書の合成を許可する—ページ挿入・ページ回転・ページの削除・しおりの作成・サムネイルの作成(*) |
12 | 高精度印刷を許可する |
*は、リビジョン3、4で、リビジョン2に追加されたこと
リビジョン4の標準セキュリティハンドラ
次に、標準セキュリティハンドラのリビジョン4について整理してみます。
リビジョン4の標準セキュリティハンドラは、PDF 1.5(Acrobat6)以降で使えます。この標準セキュリティハンドラで追加になっている機能は次の点です。
- 暗号辞書の中で、PDFの中のストリング、ストリーム、添付ファイルに対して使用する暗号フィルターを個別に指定できます。なお、添付ファイルの暗号化はPDF 1.6からとなります。
- 暗号辞書の中で、メタデータを暗号化するかどうかを指定できます。なにも指定しないと、メタデータも暗号化しますが、「メタデータは暗号化しない」ようにすることも指定できます。
リビジョン4で追加されたのは、PDFに関するパスワードによるアクセス管理ではなく、むしろPDFコンテンツへの暗号のかけ方をより細かく設定可能にする機能、と言えます。
AES暗号アルゴリズム
PDFの暗号化のアルゴリズムは初期はRC4暗号アルゴリズムを使っていました。PDF 1.6から新しい暗号アルゴリズムAES(Advanced Encryption Standard)を選択できるようになりました。PDFの暗号化の際に、使用するアルゴリズムをRC4にするかAESにするか指定できます。また、暗号化しないでスルーする暗号フィルターを定義することもできます。
AES暗号は、米国が2001年に標準として定めた新しい暗号アルゴリズムです。
AES暗号などによりますと、米国でそれまで使っていた標準暗号方式が、技術進歩により脆弱になったため、世界中から公募した15種類の暗号方式から選択されたもので、最終的にベルギーの研究者が考案したものが採用された、とあります。
RC4は私企業のプライペートな暗号アルゴリズムであったのに対して、AESは政府が標準として定めた暗号アルゴリズムであり、仕様書が一般に公開されているのが大きな特徴です。
(参考)AESの仕様書(英文PDF)
PDFバージョン別暗号アルゴリズムとキーの長さ
PDFのバージョン毎に暗号化の機能が強化されてきた結果、PDFのバージョン毎に使える暗号のアルゴリズムとキーの長さが複雑な関係になっています。次の表はISO 32000-1で使えるものです。
PDFバージョン | 使用できる暗号アルゴリズム | 暗号キー長 |
---|---|---|
PDF 1.3 | RC4 | 40 |
PDF 1.4 | RC4 | 40/128 |
PDF 1.5 | RC4 | 40/128 |
PDF 1.6 | RC4/AES | 40/128 |
PDF 1.7 | RC4/AES | 40/128 |
PDF 2.0(参考) | AES | 256 |
Acrobatをはじめ多くのPDFソフトはPDF 1.4から暗号キー長128ビットがデフォルトです。しかし、ISO 32000-1の仕様上は「40ビット超128ビット以下で8の倍数」になっています。
PDF 1.7でAES 256ビットの暗号を指定できますが、このとき出力されるPDFはアドビ拡張(ISO 32000-1:2008の規定外)となります。
パスワード方式セキュリティの使用例
Acrobatの実装状況
Adobe Acrobat(Adobe PDF プリンタードライバー)でセキュリティ設定をするためのダイアログを見ます。(このダイアログは、PDF 1.4レベルで、標準セキュリティハンドラのリビジョン3を選んでいる状態に相当します)。
- 「文書を開くときにパスワードが必要」にチェックするとユーザーパスワードを設定することになります。こうして作成したPDFは、PDFを開く際にパスワードを入れないと文書を開くことができなくなります。
- 「文書の印刷および編集とセキュリティ設定にパスワードが必要」にチェックしますとオーナーパスワードを設定できます。
オーナーパスワードを設定した状態では、次の二つのダイアログに示すように、PDFに次のセキュリティを設定できるようになります。
- 印刷許可(次のいずれか) — 許可しない、低解像度、高解像度
- 変更を許可(次のいずれか) — ページの挿入、削除、回転
フォームフィールドの入力と署名
注釈の作成、フォームフィールドの入力と署名
ページの抽出を除く全ての操作 - テキスト、画像、およびその他の内容のコピーを有効にする
- スクリーンリーダデバイスのテキストアクセスを有効にする
セキュリティ設定のダイアログを見ますと、Adobe Acrobatのプリンタードライバーでは、ISO 32000-1に記載されているすべてのセキュリティ設定パターンは指定できないことが分かります。
例えば、ISO 32000-1の仕様では、「ページの挿入、削除、回転」と「フォームフィールドの入力と署名」は独立に設定 —両方NO、どちらか一方のみYes、両方Yesの4通りの設定 —できるはずなのに、このダイアログのメニューでは、両方Yesの設定は不可能です。
PDFに設定されているセキュリティの状態を確認するには、Adobe ReaderでPDFを開いて、文書のプロパティ「セキュリティ」タブを選択します。そこでセキュリティ設定の詳細を確認することができます。
Antenna House PDF Driver
弊社製品であるPDF作成仮想プリンタードライバー『Antenna House PDF Driver』では、AcrobatのPDFプリンタードライバーとほぼ同様のメニューで、パスワード方式のセキュリティ設定が可能です。
PDFのバージョンを1.6以上に指定し、PDFのオーナーパスワードやユーザーパスワードを設定した場合に、AES暗号アルゴリズムでPDFのコンテンツを暗号化します。
公開鍵セキュリティハンドラ
ISO 32000-1の7.6 暗号化の項には、パスワード・ベースの標準セキュリティハンドラの他に、7.6.4 公開鍵セキュリティハンドラという、もうひとつのセキュリティハンドラが規定されています。公開鍵セキュリティハンドラは、公開鍵暗号化技術を使ってPDFにセキュリティをかける方式です。
公開鍵暗号化技術についてはいろいろなところで解説されていますが、ざっとまとめてみますと次のようになります。
例えば、AとBの2者間で、公開鍵暗号化方式を使って暗号化通信を行おうというときの順序は、次のとおりです。
- Bは、公開鍵と秘密鍵のペアを用意します。このふたつの鍵は、まったく異なる鍵ですが、一方で暗号化したものは他方の鍵でしか暗号解除することができないものです。
- Bは、公開鍵の方をインターネットやメールなどを通じて、公開(Aに渡)します。秘密鍵は外部に漏れないように保持します。
- Aは、Bの公開鍵を使って文書を暗号化し、暗号化した文書をBに送信します。
- Bは、Aから受け取った(暗号化された)文書を、秘密鍵を使って暗号を解除します。
- うまく暗号が解除できれば、受け取った文書はBの公開鍵で暗号化されたものであることになります。
この通信方式は、電子署名(デジタル署名)とは鍵の使い方が逆になっていることに注意してください。ちなみに電子署名は、秘密鍵で暗号化したものを相手に渡し、相手は公開鍵で暗号を解除するものです。
さて、PDFの公開鍵セキュリティハンドラは次のようなことを行うとされています。
(ISO 32000-1, 7.6.4 Public-Key Security
Handlers,
pp.64 - 67)
- PDFの文書コンテンツを暗号化するときに使用する暗号キーの元と、PDFを送信する相手(複数人)のPDFの利用権限(相手によって変えることができます)設定データを用意します。
- PDFを送信する相手の公開鍵を入手します。複数のときは公開鍵は相手毎に異なったものになります。
- 「1」で用意したキーと相手の利用権限設定データを、相手毎に各人の公開鍵を使って暗号化します。それらの暗号化されたデータをまとめて、受信者データ表として作成します。
- PDFの暗号化辞書に「3」で作成した受信者データ表を記録します。
こうして作成した暗号化済PDFを相手に配信します。
PDFを受け取った相手は各人の秘密鍵を用いて、受信者データ表の中から暗号キーの元と自分用の利用権限データを取り出します。この暗号キーの元を使ってPDFの暗号を解いてPDFを閲覧します。この時、自分用の利用権限データが有効になりますので、PDFの配信元が設定した利用権限の範囲内でしかPDFを利用できないことになります。
パスワード方式の標準セキュリティハンドラでは、PDFの受け手によって利用権限を変更することはできないのですが、公開鍵セキュリティハンドラを使うと相手によって利用権限を変えることができます。
なお、PDFの利用権限の設定は、「PDFの利用許可制御」の項と同じです。
関連製品のご紹介
開発者向けライブラリ
Antenna House PDF Tool API
『Antenna House PDF Tool API』は、PDFセキュリティの設定や設定されている情報の取得などを、コマンドラインやプログラムから制御できる、開発者向けのライブラリです。
PDFセキュリティの設定以外にも、PDFの情報取得や、様々な加工・編集ができます。WindowsとLinux環境でご利用いただけます。
わかりやすいインターフェイスで、なおかつ詳細なPDFセキュリティの設定ができるため、多くのソフト/システム開発会社様にご導入いただいております。もちろん、弊社のデスクトップ製品、システム製品、サービスなど様々な製品にも組み込んで利用されています。
Antenna House PDF Driver
『Antenna House PDF Driver』ならPDFの作成時にPDFセキュリティの設定を行えます。GDI型のPDF作成仮想プリンタードライバーと、これを制御する「付属API」から成るMicrosoft Windows対応の製品です。
お客様で開発されるプログラムにPDFの作成機能と、PDFセキュリティを含む様々な設定ができるAPIを提供します。
あなたにはこんな記事もおすすめ!
PDFのやりたいことから探す! アンテナハウスのデスクトップ製品
お問い合わせ
本ページへのご意見・ご質問は次の電子メールアドレスまでお気軽にお問い合わせください。
- 電子メール
- info@antenna.co.jp
また、弊社オンラインショップでは本ページで紹介した製品をお得な価格でご購入いただけます。ぜひご利用ください。