web-dev-qa-db-ja.com

暗号化されたファイルの重複排除

データベースをダンプして毎晩バックアップされ、AES-256などの最新のアルゴリズムを使用して暗号化された18 GBのデータベースがあるとします。このデータベースには、毎日約5%のレートの更新があります。

バックアップがサポートされるブロックレベルの重複除外で保存されるストレージメディア。これがバックアップパーティションの重複除外率にどのように影響するか知りたいです。

4
Scott Pack

重複排除は、同一のファイルまたはデータブロックの検出で機能します。このような重複は、ランダムデータでごくわずかな確率で発生し、適切に暗号化されたデータは、ランダム性と区別できないはずです。暗号化は機密性を保証するためのものであり、これには特に、2つのソースデータファイルが同一かどうかを盗聴者から隠すことが含まれます。

その意味で、重複排除は、暗号化モデルが弱められている場合にのみ、暗号化されたファイルで機能します。これは簡単な決定ではありません。データベースの場合、どの「ブロック」が変更され、どのブロックが変更されていないかを示すことは、その間にデータベースで何をしたかを完全に明らかにすることはできません。一般的な用語は トラフィック分析 です。ウィキペディアのページには、いくつかの有名な軍事事件がリストされています。トラフィック分析は、競合他社のビジネス戦略を予測するのにも非常に優れています(たとえば、新しい主要製品のリリースの事前準備に気づくなど)。

上記で言及したリークの可能性があるにもかかわらず、ブロックレベルの重複排除を実行したい場合、それを行うには良い方法と悪い方法があります。最初に、入力データをブロックサイズのチャンクに分割する必要があります。ブロックごとに追加のヘッダーが必要なため、実際には少し小さくなっています( [〜#〜] iv [〜#〜] およびa [〜#〜] mac [〜#〜] )。各ブロックは個別に暗号化されます。ここでトリッキーな部分は、重複排除が機能するために、同じブロックデータが呼び出し間で変更されなかった場合、同じように再暗号化される必要があるため、IVを再利用する必要があるということです。 IV値を再利用することは罪です。 CTRのようなモード、特にその最新の導関数 [〜#〜] gcm [〜#〜] および [〜#〜] eax [〜#〜] を使用する場合、致命的です=。ここでの解決策は、ファイル内のブロックオフセットとその内容から一方向関数で計算されたIVです。一方向関数は「ランダムに見える」ものであり、キー付きである必要があります。そうしないと、攻撃者がデータ自体を徹底的に検索して、ブロックIVと一致する可能性があるためです。

次のスキームすべき(弱められたモデル内で)安全ですが、これには注意深い分析が必要になります。

  • 2つのキーがありますK1およびK2(おそらく Key Derivation Function)を使用して単一のマスターキーから派生

  • ブロック番号i、データありd、計算[〜#〜] iv [〜#〜] = HMAC(K1i || d)(IVはiとデータdを連結したHMAC/SHA-256の結果であり、-K1 as key-IVを最初の128ビットに切り捨てます)。

  • 暗号化d AESで[〜#〜] iv [〜#〜]前のステップとキーを使用してK2、CBCモード。

  • [〜#〜] iv [〜#〜]と暗号化の結果をブロックサイズのチャンクにまとめます。

これは、CBCとMAC-and-encryptを使用します。これは、暗号化に関しては「理想的」ではありませんが、モデルは弱くなっています。あなたが求めるものを手に入れます。

編集:重要な注意:ここでは一部のHMACが使用されていますが、これはブロックデータの整合性を保証するものではありません。復号化にIVを使用し、IVを再計算して、ファイル内のものと一致するかどうかを確認できます。これにより、一般的な変更は防止されますが、アクティブな攻撃者は、同じブロックの古いバージョンでブロックを置き換えることができます。バックアップの整合性チェックが必要な場合は、以下を実行します。上記に加えて暗号化とMACを実行し、完全なファイルでMACまたは署名を計算して確認します。バックアップを使用する前に(バックアップを復元する場合は、とにかく完全に読み取ることになるので、MACまたは署名の検証を「無料」で行うことができます)。

7
Thomas Pornin

重複排除はデータのパターンを好み、優れた暗号は出力のパターンを嫌います。その結果、暗号化の前の重複排除は、より良い重複排除結果を生み出すことになります。

私は、データベースの夜間バックアップコピーが複数あると想定します。これは、主に、関心のあるデータベース全体での重複除外の効果です。

特定のブロック暗号modesは変更を前方に伝播します(例:CBC):入力の最初のブロックの単一の違いにより、(ほぼ確実に)完全に異なる出力。重複除外に適していません。

選択した暗号化が入力の変更を出力の同じブロック(ギブまたはテイク)にローカライズする場合、重複排除は効果的です。

ブロック暗号 カウンターモード (CTR、XTS)にはこの伝搬プロパティがないため、ランダムアクセスと並列/同時暗号化と復号化。 ( 同期ストリーム暗号 入力の変更もローカライズします。)

変更されたIV /ノンス/ソルト(ランダムなソルトまたはIVを使用していますよね?)は、すべてのブロックを(ほぼ確実に)変更します。重複除外に適していません。

本当にセキュリティを犠牲にしたい場合は、固定IVまたはCTRモードのAES-256でソルトを使用して重複排除のパフォーマンスを測定し、重複除外のメリットです。

要約すると:

AESのどのモードが使用されているかによって異なります。重複排除の最悪のケースは、バックアップごとにCBCまたはランダムなIV /塩を使用している場合です。重複排除のゲインは(ほぼ)ゼロになります。

CTRまたはXTSモードを使用していて、静的IVが(ではない一般的に良いプランであり、間違いなくCTRモードの場合)、妥当な利益が得られるはずです。

暗号化されていないファイルと比較して、(ほとんど)同じ利益が得られることはありません。ゼロ化されたブロックまたは同一のブロックが大量に実行されている場合(データベースでは珍しいことではありません)、これらは暗号化された出力にそのように表示されません(愚かな何かを使用している場合を除く) ECBモードのように)。期待できる最善の方法は、95%に近づくバックアップファイル間の重複排除です(0%に近づく各暗号化されたバックアップファイル内の重複排除)。

これと同様の問題がどのように解決されるかについては、以下を参照してください。

2
mr.spuratic