web-dev-qa-db-ja.com

疑似乱数データを識別するためにどのような統計を使用できますか?

内容が「ランダム」であるように見えるファイルを特定しようとするコードに取り組んでいます。そのため、そのようなランダム性を識別するために使用できる統計的尺度を探しています。

これまでに以下を実装しました。

  • サンプルのシャノンエントロピー(つまり-∑ p(x)ログ2 p(xサンプル全体[〜#〜] x [〜#〜]
  • バイトごとのサンプル分散(0.0が完全スコア)
  • ビット単位の平均(0.5が満点)
  • 各バイトのビット0から7に分布するビットごとの平均(有意な分散を探す)
  • 0x20≤b≤0x7Eの範囲内のバイトの割合(37.11%が完全なスコア)
  • ビットペア数(つまり、00、01、10、11の等しい数をチェックする)
  • 繰り返されるバイト距離(つまり、xxx*xx**xx***x、...パターンを探す)

これらは、2つのSHA512ハッシュを連結することによって生成される128バイトが、統計を見るだけでASCIIテキストまたは実行可能ファイルと簡単に区別できるという点で、均一な「ランダム性」の合理的な尺度を与えるようです。

ただし、サンプルデータが暗号化PRNGによって生成されたことを示す可能性がある、調査する必要がある他の強力なインジケーターがあるかどうかを知りたいです。

pdate:明確にするために、私はnot暗号のランダム性ソースとしてのPRNGの品質をテストしようとしています。非ランダムファイル(実行可能ファイル、JPEG、アーカイブなど)とランダムファイル(TrueCryptキーファイルなど)を区別しようとしています。これまでの私のテストは、明らかにランダムではないデータ(ASCIIテキストなど)と、何らかの方法で均一に分散されていないデータを識別する方法として使用されています。これをテストする他の方法を探しています。

19
Polynomial

AES競争 の最中、組織体(NIST)は、提出された15個のブロック暗号の出力に対して広範な統計テストを実行するという問題に直面しました。 、 Diehardテスト 。もちろん何も見つかりませんでした。当時の暗号学者からのコメントは、これらのテストは暗号アルゴリズムのコンテキストでは少しばかげていたというものでした(もちろん、非公式のコメント:イベントの主催者を当惑させることはばかげています)。誰かが彼らを運営することは広報にとって良いことでしたが、それから注目に値することは何も期待されていませんでした。

これは、たとえば物理システムの大きなシミュレーションを強化するために必要な統計的ランダム性予測不可能性の違いを示しています、これはセキュリティのために必要です。たとえば、次の [〜#〜] prng [〜#〜] を検討してください。

  • カウンターを128ビットのシードに設定します。
  • PRNGの次の128ビットを生成するには、カウンターを1増やし、その値をAESとすべてゼロのキーで暗号化して、128ビットを生成します。

これはPRNGはDiehardスイートのすべてのテストに成功します。テストに関する限り、統計的に「完全」です(純粋なaleaからの逸脱は、約2を生成した後に検出される可能性があります)71 ビット、つまり2億テラバイト以上)。ただし、セキュリティの場合、128ビットの出力が確認されたら将来の出力を予測するのは簡単であるため、ひどいです(AESとすべてゼロのキーでこれらの128ビットを復号化します) :これにより、現在のカウンター値がわかります)。

概要:a 暗号的に安全なPRNG は、ランダム性と区別できない出力を生成します。統計テストだけでなく、潜在的に使用された特定のPRNGアルゴリズムを正確に知っている人によっても。特定のバイトシーケンスがPRNGからのものであることを示すことができる統計ツールがある場合、それからあなたはPRNGが暗号的に安全ではないことだけでなく、それがひどく悪いことも証明しました。 Daveのハッシュ でさえ、 Diehardテストの観点。

簡単に言えば、あなたのツールは、ある程度の専門知識で生成されたランダム性をキャッチしませんが、完全なアマチュアからのほとんどの非ランダム性をキャッチしません。このようなツールを使用すると、「自家製のスキームを使用するよりも知識が必要な非暗号化者」ではなく、「キーボードに触れてはいけないチンパンジー」をターゲットにします。

注:良い steganography ツールは、データをトランスポートメディアに詰め込む前にデータを暗号化し、正確に統計ツールからの検出を回避します。暗号化は、ランダム性と区別できないビットも生成するはずです。

10
Thomas Pornin

http://www.fourmilab.ch/random/ は以下を使用します

  • カイ二乗検定
  • 算術平均
  • モンテカルロPi推定
  • シリアル相関係数

「非圧縮性」を追加することもできます(これは、圧縮ファイルを排除するために圧縮ファイルを識別する必要があることも意味します)。ダンDDiehardおよびDieharder)提案は非常に徹底的な解決策のように見えます。 (Edit:Dieharderは、出力のスナップショットではなく、PRNGのテストを厳密に対象としています。小さなデータサンプルに適しています。)

あなたのタスクは、統計 File Carving および暗号化されたデータのフォレンジック検索に関連するいくつかの問題を共有します。データセットが小さいほど、それが「ランダム」であるかどうかの決定が難しくなります。

0
mr.spuratic