PDF 暗号化の解説:RC4 vs AES-128 vs AES-256
PDF 暗号化とは、PDF のコンテンツストリームに適用される暗号保護であり、パスワードなしではファイルを読めないようにするものです。PDF 仕様は歴史上いくつかのアルゴリズムをサポートしてきましたが、そのすべてが今も安全とは限りません。本ページでは各アルゴリズムが何をするか、どの PDF バージョンで導入されたか、今日ファイルを保護する際にどれを選ぶべきかを説明します。
仕組み
PDF 暗号化の動作原理
PDF ライターがファイルを暗号化する際、ランダムなファイル暗号化鍵を生成し、その鍵でコンテンツストリーム(およびファイル内の特定の他の文字列)を暗号化し、ファイル暗号化鍵をユーザーのパスワードで保護された暗号化辞書に格納します。ファイルを開く際、ビューアーはパスワードを求め、そこから鍵を導出し、その鍵でファイル暗号化鍵を復号し、ファイル暗号化鍵でコンテンツを復号します。
重要な帰結:パスワードはファイルに格納されません。格納されるのはパスワードで暗号化された値です。パスワードを検証する際、ビューアーはその値の復号を試み、結果を既知の平文マーカーと照合します。これがパスワード復元が存在しない理由です — ファイルに含まれるのはパスワードではなく、パスワードで施錠されたものだけです。
アルゴリズム
RC4 — 非推奨・破綻
RC4 は 1987 年に設計されたストリーム暗号で、1990 年代に広く使われました(PDF、SSL、WEP)。PDF 1.2 は 40 ビット RC4 を導入し、後のバージョンは 128 ビット RC4 に拡張しました。RC4 は現在 PDF で非推奨であり、現代のセキュリティ用途では破綻していると考えられています。具体的には:
- 40 ビット RC4 は現代のハードウェアで自明に総当たり可能です。
- 128 ビット RC4 は総当たり不可能ですが、RC4 には平文の情報を漏洩する統計的偏りがあり、RC4 暗号化 PDF に対するいくつかの実践的攻撃が公表されています。
- 現代のビューアーは一部の構成で RC4 暗号化ファイルについて警告するか、開くことを拒否します。
新たに RC4 暗号化 PDF を作成しないでください。遭遇した場合は、(パスワードで)復号し、AES-128 または AES-256 で再暗号化してください。
アルゴリズム
AES-128 — 堅牢・広く対応
AES-128 は PDF 1.5(2003 年、Acrobat 6/7)で導入されました。AES はブロック暗号であり、AES-128 は 128 ビット鍵を使います。PDF の AES モードは文字列ごとにランダムな 16 バイト初期化ベクトル付きで CBC を使います。AES-128 には実践的攻撃がなく、すべての現代 PDF ビューアーが広く対応しています。AES-256 が利用できない場合の妥当なデフォルトです。
アルゴリズム
AES-256 — 現在の標準
AES-256 は PDF 1.6 Extension Level 3(2008 年、Acrobat 9)で導入されました。256 ビット鍵を使い、元の PDF 1.6 Ext Level 3 設計では SHA-256 でパスワードから鍵を導出します。後の改訂(PDF 2.0 / Extension Level 8)は多数の反復を持つ PBKDF2 を使うより強い鍵導出を追加し、総当たりをはるかに困難にしました。これは「AES-256 R6」や「Acrobat X 互換」と呼ばれることがあります。
ツールが提供するなら AES-256 を優先してください。新旧の鍵導出の選択肢がある場合は、新しい(PBKDF2 ベース)ものを選んでください。
歴史
各アルゴリズムを導入した PDF バージョン
- PDF 1.2(1996 年) — 40 ビット RC4。
- PDF 1.3(1999 年) — 128 ビット RC4。
- PDF 1.5(2003 年) — AES-128(V4、R4)。
- PDF 1.6 Ext Level 3(2008 年) — AES-256(V5、R5)。
- PDF 2.0 / Ext Level 8(2017 年) — PBKDF2 鍵導入付き AES-256(V5、R6)。
実践
どのアルゴリズムを選ぶべきか
新規ファイル:PBKDF2 鍵導出(R6)付き AES-256(署名者と受信者のビューアー両方が対応している場合)、そうでなければ AES-128。新規ファイルに RC4 は選ばないでください。パスワードはアルゴリズムより重要です:AES-256 上の 6 文字パスワードは、AES-128 上の 20 文字ランダムパスワードより弱いです。なぜなら攻撃面は暗号ではなくパスワードだからです。
古いファイルを開く場合:現代のビューアーはどれも三つすべてを扱えます。ファイルを管理できるなら、復号して AES-256 で再暗号化してください。
役立つ健全性確認:PDF を保護した後、暗号化に使ったのとは別のビューアーで開いてみてください。二つ目のビューアーが警告なしに開けるなら、暗号化は広く互換です。元のツールだけが開けるなら、非標準モードを使った可能性があります。
IXPDF
IXPDF の現在の暗号化機能
IXPDF の現在の PDF エンジン(pdf-lib)は暗号化 PDF の書き込み・読み取りに対応していません。PDF 保護およびPDF ロック解除ページはこの制限を率直に説明し、Research Required と表示しています。ブラウザ互換の暗号化ライブラリを評価中であり、これによりアップロードなしで完全にブラウザ内で AES-256 保護を提供できるようになります。それまでは、信頼できるローカルツールについてパスワード保護ガイドを参照してください。
関連記事