1.1 パスワードセキュリティ

PDF文書の内容はパスワードによって暗号化することで、権限をもたないユーザーによるアクセスを防止できます。ISO 32000-1の用語ではパスワードによる暗号化機能を標準セキュリティハンドラと呼びます。PDFは上位バージョンほど標準セキュリティハンドラの機能が強化されています。

標準セキュリティハンドラの仕様では、暗号化のアルゴリズムとしてRC4AESのどちらかから選択可能とされています。

PDFの実装当初から使われてきたのはRC4ですが、RC4は2011年以降、脆弱性の問題が指摘されています(※1)。結果として、暗号の安全性を評価する日本政府のプロジェクト「CRYPTREC」では、令和5年3月30日時点でRC4は「電子政府推奨暗号リスト」から外されています(※2)。一方、AES 128は同リストに記載があり、「当該技術の利用を推奨する」とされています。

同プロジェクトによればAES 128の脆弱性は現時点では問題とされていないようです(※3)。

『PDF Tool API』では、V7.0以降のバージョンで暗号化にRC4 40bitを使えなくなっています。

注記1

※1 :参考 https://ja.wikipedia.org/wiki/RC4

※2:CRYPTREC暗号リスト(電子政府推奨暗号リスト) https://www.cryptrec.go.jp/list.html

※3:128ビットブロック暗号AESの安全性について http://www.cryptrec.go.jp/topics/cryptrec_20110912_aes_cryptanalysis.html

なお、PDFのバージョンによって暗号化に使うキーの長さに制限があります。暗号化のキー長はパスワードの文字数(パスワードの長さ)ではなく、標準セキュリティハンドラが内部的に計算して作成する値です。キーの作成方法はISO 32000-1で規定されています。

表1・1 ISO 32000規定によるPDFバージョンと暗号アルゴリズム・暗号キー長の関係
PDFバージョン使用できる暗号アルゴリズム暗号キー長
PDF 1.3RC440
PDF 1.4RC440/128
PDF 1.5RC440/128
PDF 1.6RC4/AES40/128
PDF 1.7RC4/AES40/128
PDF 1.7アドビ拡張AES256
PDF 2.0AES256

ISO 32000-1の仕様上は、PDF 1.4以降では暗号化のキー長は40ビット超128ビット以下の範囲で8の倍数単位で設定できます。しかし、PDFアプリケーションの多くは128ビットに固定しています。

『PDF Tool API』では暗号アルゴリズムの種類と暗号キーの長さを指定できます。

『PDF Tool API』が暗号化する際のキー長とアルゴリズムの種類は以下の通りです。

表1・2 『PDF Tool API』が扱えるアルゴリズムとキー長
使用できる暗号アルゴリズム暗号キー長
RC440(※4), 128
AES128, 256

※4 V7.0以降の『PDF Tool API』では、暗号化にRC4 40bitを使うことができなくなっています。

一方、暗号を解読するときは8の倍数で可変のキー長の指定を受け付けます。

『PDF Tool API』 では、AES 40ビットを扱うことはできません。(※5)

AES 256 ビットはPDF 2.0(ISO 32000-2:2017)で正式な仕様になっています。『PDF Tool API』ではPDF 1.7(ISO 32000-1:2008)でAES 256を指定できますが、この場合はアドビ拡張の位置付けとなります。実用上は問題ありませんがISO 32000-1の規定外となります(※6)。

注記2

※5: AESの仕様では暗号のキー長は128ビット以上とされています。PDF 1.7の仕様を表すISO 32000-1でAES 40ビットを規定していますが、これは誤りの可能性があります。いずれにせよ新しく作成するPDF文書に40ビット暗号は使わないことを推奨します。

※6: ISO 32000-2:2017ではアドビ拡張の設定値は廃止になっています。

『PDF Tool API』では、入力PDF文書のバージョンと指定した暗号アルゴリズムと暗号キーの長さの組みによって、出力されるPDF文書のバージョンは、次表のようになります。

表1・3 『PDF Tool API』で出力されるPDF文書のバージョン
入力PDF文書のバージョンRC4 40(※7)RC4 128AES 128AES 256
PDF 1.31.31.51.61.7
PDF 1.41.41.51.61.7
PDF 1.51.51.51.61.7
PDF 1.61.61.61.61.7
PDF 1.71.71.71.71.7

※7 V7.0以降の『PDF Tool API』では、暗号化にRC4 40bitを使うことができなくなっています。

PDF文書には、ユーザーパスワードオーナーパスワードのどちらか一方または両方を設定できます。ユーザーパスワードはPDF文書を開くためのパスワードです(詳細は1.1.2 ユーザーパスワードによるセキュリティの設定を参照)。オーナーパスワードはPDF文書の利用権限を設定するパスワードです(詳細は1.2 オーナーパスワードを参照)。

ユーザーパスワードとオーナーパスワードは異なっている必要があります。

注記3

※8:ユーザーパスワードを解除するには①setPasswordにオーナーパスワードを設定してload、②setUserPassword("")とします。オーナーパスワードを解除するには①setPasswordにオーナーパスワードを設定してload、②setOwnerPassword("")とします。