PDF文書の内容はパスワードによって暗号化することで、権限をもたないユーザーによるアクセスを防止できます。ISO 32000-1の用語ではパスワードによる暗号化機能を標準セキュリティハンドラと呼びます。PDFは上位バージョンほど標準セキュリティハンドラの機能が強化されています。
標準セキュリティハンドラの仕様では、暗号化のアルゴリズムとしてRC4とAESのどちらかから選択可能とされています。
PDFの実装当初から使われてきたのはRC4ですが、RC4は2011年以降、脆弱性の問題が指摘されています(※1)。結果として、暗号の安全性を評価する日本政府のプロジェクト「CRYPTREC」では、令和5年3月30日時点でRC4は「電子政府推奨暗号リスト」から外されています(※2)。一方、AES 128は同リストに記載があり、「当該技術の利用を推奨する」とされています。
同プロジェクトによればAES 128の脆弱性は現時点では問題とされていないようです(※3)。
『PDF Tool API』では、V7.0以降のバージョンで暗号化にRC4 40bitを使えなくなっています。
※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で規定されています。
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 1.7アドビ拡張 | AES | 256 |
PDF 2.0 | AES | 256 |
ISO 32000-1の仕様上は、PDF 1.4以降では暗号化のキー長は40ビット超128ビット以下の範囲で8の倍数単位で設定できます。しかし、PDFアプリケーションの多くは128ビットに固定しています。
『PDF Tool API』では暗号アルゴリズムの種類と暗号キーの長さを指定できます。
『PDF Tool API』が暗号化する際のキー長とアルゴリズムの種類は以下の通りです。
使用できる暗号アルゴリズム | 暗号キー長 |
---|---|
RC4 | 40(※4), 128 |
AES | 128, 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)。
※5: AESの仕様では暗号のキー長は128ビット以上とされています。PDF 1.7の仕様を表すISO 32000-1でAES 40ビットを規定していますが、これは誤りの可能性があります。いずれにせよ新しく作成するPDF文書に40ビット暗号は使わないことを推奨します。
※6: ISO 32000-2:2017ではアドビ拡張の設定値は廃止になっています。
『PDF Tool API』では、入力PDF文書のバージョンと指定した暗号アルゴリズムと暗号キーの長さの組みによって、出力されるPDF文書のバージョンは、次表のようになります。
入力PDF文書のバージョン | RC4 40(※7) | RC4 128 | AES 128 | AES 256 |
---|---|---|---|---|
PDF 1.3 | 1.3 | 1.5 | 1.6 | 1.7 |
PDF 1.4 | 1.4 | 1.5 | 1.6 | 1.7 |
PDF 1.5 | 1.5 | 1.5 | 1.6 | 1.7 |
PDF 1.6 | 1.6 | 1.6 | 1.6 | 1.7 |
PDF 1.7 | 1.7 | 1.7 | 1.7 | 1.7 |
※7 V7.0以降の『PDF Tool API』では、暗号化にRC4 40bitを使うことができなくなっています。
PDF文書には、ユーザーパスワードとオーナーパスワードのどちらか一方または両方を設定できます。ユーザーパスワードはPDF文書を開くためのパスワードです(詳細は1.1.2 ユーザーパスワードによるセキュリティの設定を参照)。オーナーパスワードはPDF文書の利用権限を設定するパスワードです(詳細は1.2 オーナーパスワードを参照)。
ユーザーパスワードとオーナーパスワードは異なっている必要があります。
※8:ユーザーパスワードを解除するには①setPasswordにオーナーパスワードを設定してload、②setUserPassword("")とします。オーナーパスワードを解除するには①setPasswordにオーナーパスワードを設定してload、②setOwnerPassword("")とします。