Quali statistiche possono essere utilizzate per identificare i dati pseudocasuali?

19

Sto lavorando su un codice che tenta di identificare i file il cui contenuto sembra essere "casuale". In quanto tale, sto cercando misure statistiche che possano essere utilizzate per identificare tale casualità.

Ho implementato quanto segue finora:

  • entropia di Shannon del campione (es. -Σ p (x i ) log 2 p (x i ) sopra l'esempio X )
  • Bytewise sample variance (0.0 è un punteggio perfetto)
  • Media bitwise (0,5 è un punteggio perfetto)
  • Media bit a bit distribuita tra i bit da 0 a 7 di ciascun byte (cercando qualsiasi varianza significativa)
  • Percentuale di byte compresi nell'intervallo 0x20 e leq; b & leq; 0x7E (il 37,11% è un punteggio perfetto)
  • Conteggi di coppie di bit (vale a dire il controllo per conteggi uguali di 00, 01, 10, 11)
  • Ripetute distanze di byte (vale a dire xx , x*x , x**x , x***x , ... modelli)

Questi sembrano dare una misura ragionevole di "casualità" uniforme, in quanto 128 byte generati dalla concatenazione di due hash SHA512 possono essere facilmente distinti dal testo ASCII o da un file eseguibile semplicemente guardando le statistiche.

Tuttavia, mi piacerebbe sapere se ci sono altri forti indicatori che dovrei esaminare che potrebbero indicare che i dati di esempio sono stati generati da un PRNG crittografico.

Aggiornamento: per essere assolutamente chiaro, sono non cercando di testare la qualità di un PRNG come fonte di casualità crittografica. Sto cercando di distinguere tra file non casuali (ad es. File eseguibili, file JPEG, archivi, ecc.) E file casuali (ad esempio file chiave TrueCrypt). I miei test fino ad ora sono usati come modi per identificare dati ovviamente non casuali (ad esempio testo ASCII) e dati che non sono distribuiti in modo uniforme in qualche modo. Sto cercando altri modi per testarlo.

    
posta Polynomial 11.03.2013 - 05:20
fonte

2 risposte

10

Durante il concorso AES , l'ente organizzatore (il NIST) si è preso la briga di eseguire ampi test statistici sul l'output dei 15 codici a blocchi presentati, con quello che si riteneva essere il gold standard di tali test, i test duri . Non hanno trovato nulla, ovviamente. I commenti dei crittografi in quel momento erano che questi test erano un po 'ridicoli nel contesto degli algoritmi crittografici (commenti non ufficiali, ovviamente: sarebbe scortese mettere in imbarazzo l'ospite dell'evento); è stato positivo per le pubbliche relazioni che qualcuno le gestisce, ma da questo non ci si aspettava che ne valesse la pena.

Questo illustra la differenza tra casualità statistica , come è necessario ad esempio per potenziare le simulazioni di sistemi fisici e imprevedibilità , necessaria per la sicurezza. Prendi in considerazione ad esempio il seguente PRNG :

  • Imposta un contatore su un seme a 128 bit.
  • Per produrre i successivi 128 bit del PRNG, incrementa il contatore di 1, quindi cripta quel valore con AES e una chiave all-zero, ottenendo i 128 bit.

Questo PRNG supererà con successo tutti i test della suite Diehard; è statisticamente "perfetto" per quanto riguarda i test (la partenza dalla pura alea potrebbe essere rilevabile dopo aver generato circa 2 71 bit, cioè più di 200 milioni di terabyte). Tuttavia, per sicurezza , è terribile, dato che è banale predire l'output futuro dopo che sono stati osservati 128 bit di output (decifrati questi 128 bit con AES e una chiave all-zero: questo ti darà il valore corrente del contatore).

Riepilogo: un PRNG crittograficamente sicuro produce un output che è indistinguibile dalla casualità; non solo con test statistici, ma anche da qualcuno che conosce esattamente l'algoritmo PRNG che è stato potenzialmente utilizzato. Se si dispone di uno strumento statistico che può mostrare che una determinata sequenza di byte proviene da un PRNG, allora si è dimostrato non solo che il PRNG non è crittograficamente sicuro, ma anche che è terribilmente cattivo. Anche l'hash di Dave è "casuale" dal punto di vista dei test di Diehard.

In parole più brevi, il tuo strumento non catturerà la casualità che è stata generata con un po 'di esperienza, ma non catturerà la maggior parte della non casualità da parte di tutti i dilettanti. Con tali strumenti, non stai prendendo di mira "non-crittografi che dovrebbero sapere meglio di usare schemi fatti in casa", ma piuttosto "scimpanzé a cui non dovrebbe essere permesso di toccare una tastiera".

Nota: i buoni steganografia strumenti crittografano i dati prima di inserirli nel supporto di trasporto, precisamente per evitare il rilevamento da uno strumento statistico. Anche la crittografia dovrebbe fornire bit indistinguibili dalla casualità.

    
risposta data 11.03.2013 - 12:03
fonte
0

link utilizza il seguente

  • Test del chi quadrato
  • Media aritmetica
  • stima Monte Carlo Pi
  • Coefficiente di correlazione seriale

Potresti anche aggiungere "incompressione" (questo significa anche che potresti dover identificare i file compressi per eliminarli). Il suggerimento di Dan D's Diehard ( e Dieharder ) sembra una soluzione molto approfondita. ( Modifica: Dieharder è strettamente mirato a testare i PRNG, non le istantanee del loro output, e sicuramente non adatto per campioni di dati di piccole dimensioni.)

Il tuo compito condivide alcuni dei problemi coinvolti nella statistica File Carving e nella ricerca forense di dati crittografati: più piccoli sono i dati impostare il più difficile è essere definitivo su se è "casuale".

    
risposta data 11.03.2013 - 11:25
fonte

Leggi altre domande sui tag