web-dev-qa-db-ja.com

PDFセキュリティ/暗号化はどの程度強力ですか?

機密情報を含むPDFドキュメントを自分のシステムから別のシステムに安全に伝えたい。後者は私が信頼している別の人によって運営されています。ただし、この人物は情報セキュリティと暗号化についての知識があまりないため、非常に高度なセキュリティメカニズムを導入していません。 g。 FDEはありません。そのシステムのディスクが破棄される前に安全にワイプされることを保証することはできません。

公開鍵暗号に頼りたくありません。 (これは複雑で確認が難しく、多くの場合、認証局を信頼する必要があり、実際には確認できません。)鍵グレードの素材から生成された共有秘密は、安全な方法ですでに確立されています。

私は、AES-256暗号化コンテナーを使用し、外部メディアに保存された強力なキーファイル(非信頼システムの場合-FDE暗号化ディスクの安全なコンテナーに保存されているだけ)にロックされて、トランスポート中に読み取られないようにするためのメッセージ。しかし、私が心配しているのは、表示アプリケーション(Adobe Readerなど)によって読み取られるようにコンテナーから抽出された後、ドキュメント自体が一時スペースのどこかにリークすることです。このため、ドキュメントレベルでも暗号化を使用したいと考えています。このため、事前に確立されたキーグレードの資料からドキュメントパスワードを導出しました。 (マテリアルには、関連性なしに複数のキーを派生させるのに十分なエントロピーがあります。)

私のPDF生成ソフトウェアは、trailerに_%PDF-1.4_と書かれた_/Encrypt 64 0_ファイルを出力します。

ここで_64 0 obj_を検索すると、<</Filter/Standard/V 2/Length 128/R 3/O(...)/U(...)/P ....>>ディレクティブが見つかります。 PDF仕様を確認したところ、ここで使用されている暗号化スキーム(バージョン2、リビジョン3)はRC4とMD5に基づいていることがわかりました。どちらも既知のセキュリティ上の欠陥があります。 (RC4などのキーに関する統計情報を生成する特定のキーストリームバイトの統計的バイアスおよび線形結合の問題について知っています。)それでも、情報を保護するのに十分だと思いますか? (Bruce Schneier氏は、RC4を「効率的に」破壊できる方法はおそらくすでに存在していると述べていますが、これはかなり大胆な主張のように見えますが、弱点が見つかったものの、これまであまり実用的ではない攻撃、つまり、物事を必要としない攻撃を意味しますリリーテッドキー攻撃のために類似のキーで暗号化された数百万のメッセージのように。)私のセキュリティポリシーは不十分であり、さまざまな方法で情報を伝える必要があると思いますか?もしそうなら、どうですか?私が言ったように、受信者は「暗号オタク」ではなく、これ以上の鍵交換またはソフトウェアのインストールを私に責めます。したがって、セキュリティとは別に、「簡単」で「使用可能」なソリューションが本当のコアです。

また、「暗号化」されたPDFドキュメントでも、多くの構造情報(PDFは基本的にはツリー構造)が暗号化されずに利用できることを確認しました。重要な情報が漏洩する可能性はありますか?私の知る限り、ページ構造、境界ボックス、チェックサム、フォント記述子、特定のオブジェクトの透明度と位置、相互参照テーブルなどに関する情報はすべてプレーンテキストであり、おそらく多くのメタデータも一緒です。しかし、私が試したPDF分析用のすべてのツールは、正しいキーを提供せずにファイルを処理するのに失敗し、暗号化されているため何もできないと述べました。ただし、プレーンテキスト形式で入手できる情報が多ければ、決定的な攻撃者はキーを知らなくても、ドキュメントの構造について多くのことを知ることができると思います。何が見える可能性があるかを見つける「簡単な」方法はありますか?たとえば、ページディクショナリがプレーンテキストであることは明らかであるため、攻撃者は、たとえば、暗号化キーがなくてもドキュメントのページ数を確認できます。ただし、これまでのところ、暗号化されたPDF文書で「この文書には50ページあります」と報告するPDF分析ツールを見たことがありません。正しいパスワードが指定されていないと、これらの情報はすべて失敗しましたが、この情報は主にパスワードを知らなくても利用できるため、shouldでも抽出され、「適切な」分析ツールによって置き換えられますwithout =提供されたファイルキー。正しい暗号化キーを指定せずにファイルから「抽出」できる情報を確認する簡単な方法はありますか?

もう1つ気になるのは、ストリームがすべて圧縮されていることです(_/Filter/FlateDecode_)。それらがすべて暗号化されていることを実際に確認するにはどうすればよいですか?たとえば、ドキュメントルートノードのみが暗号化されている(ドキュメントはツリー構造であることを忘れないでください)ため、ドキュメントを「開く」ことはできませんが、すべての情報は基本的にアクセス可能です、実際の情報が含まれている「リーフノード」は「プレーン」である(またはむしろ圧縮されているだけで暗号化されていない)ので?暗号化されたPDFドキュメントでは、すべてのストリームを暗号化する必要があるとPDF仕様に記載されています。ただし、PDFは非常に複雑な形式であることを考えると、ソフトウェアを信頼して、その仕様に従い、すべてのストリームを実際に暗号化するにはどうすればよいでしょうか。結局のところ、どちらも「ランダムに見える」ため、暗号化されたストリームと圧縮されたストリームを簡単に区別することはできません。私ができることは、圧縮方法を見つけてストリームを解凍し、何か有用なものが得られるかどうかを確認することだけですが、それはかなり実用的ではありません。各ストリームが実際に暗号化されているだけでなく、圧縮されていることを(「区別」の意味で)決定する最も簡単な方法は何ですか? 「部分的に暗号化」されますか(一部のストリームは「プレーン」、または圧縮のみ、一部は暗号化されます)PDF何らかの理由で「開けません」か、「完全に暗号化されていない」か、単に動作することを「表示」しますビューアで暗号化されたPDFのように?

PDFのセキュリティに他に(潜在的な)欠陥や弱点がありますが、注意する必要がありますか? 「所有者パスワード」に基づく制限は簡単に回避され、弱い「所有者パスワード」は使用しないでください。「ユーザーパスワード」OR「所有者パスワード」を使用できるため、ファイルからの情報とともに、ファイル内のストリームに使用された対称暗号化キーを導出します。他に知っておくべきことはありますか?

3
no.human.being

AESでPDFを暗号化することは可能です: https://blogs.Adobe.com/security/2011/08/pdf-encryption-options.html

構造ツリーは暗号化されている(つまり、それは残りのコンテンツを含む大きなblobを指すスタブである)と思いました。しかし、私はそれをレビューしていません、あなたはそれについてより深い知識を持っているようです。

ドキュメントが適切に暗号化されていることを確認するには、ツリーが適切に暗号化されていることを手動で確認するか、作成に使用したプログラムのコードを確認して、ドキュメントが正しく作成されていることを確認します。

あなたがプログラムがしてはいけない非常にばかげたことをしているプログラムについて非常に心配しているようですが、私はそれが値するに値するとは確信していません。ただし、オープンソースのPDFジェネレーターを使用することをお勧めします。

差別化された暗号化ストリームについては、/ Encryptが必要です(ただし、子ノードにある可能性があります)。圧縮ストリームに使用される形式の名前が含まれるのと同じように(それを理解する必要はありません)。

パラノイアを追加する場合は、ドキュメントテキストを使用して画像を作成し、その画像を含むPDFを作成できます。このようにすると、機密情報を含むストリームが(ページごとに)1つだけ存在し、抽出が難しくなります(アクセスできなくなります)。

4
Ángel