2010-07-07 19 views
14

Questa è una domanda in due parti:Aiuto con il calcolo (e l'utilità) di password di entropia

Parte 1

In primo luogo, si tratta di calcolare l'entropia di una password in PHP. Non sono stato in grado di trovare esempi di codice che siano empiricamente validi e vorrei davvero un aiuto nel trovare il modo "giusto" per calcolare un numero finale. Un sacco di persone in rete hanno il loro algoritmo di ponderazione casalingo, ma sono davvero alla ricerca della risposta scientifica all'equazione.

Userò la password entropy come parte di un sistema di sicurezza più grande e come un modo per analizzare la nostra sicurezza generale dei dati basata su informazioni accessibili se la password di un utente è compromessa e con quale facilità una password può essere violata vigore.

Parte 2

La seconda parte di questa domanda è: quanto sia utile sarà questo numero davvero? Il mio obiettivo finale è generare un "punteggio" per ogni password del sistema che possiamo usare per monitorare la nostra sicurezza generale del sistema come entità dinamica. Probabilmente dovrò lavorare su un altro algoritmo o due per gli attacchi di dizionario, l33t password di sostituzione, ecc., Ma ritengo che l'entropia svolgerà un ruolo importante in una valutazione del sistema "globale". Comunque, accolgo con favore suggerimenti per altri approcci.

Lo que

Ho visto qualche accenno di equazioni logaritmiche per calcolare detto entropia, ma devo ancora vedere un buon esempio che non è in realtà scritto come un'equazione matematica. Potrei davvero usare un esempio di codice (anche se non strettamente in PHP) per farmi andare avanti.

estensione

Nel fare un commento mi sono reso conto che posso spiegare meglio l'utilità di questo calcolo. Quando sto lavorando su sistemi legacy in cui gli utenti hanno password estremamente deboli devo avere qualche prova concreta di tale debolezza prima di poter dimostrare che obbliga tutti gli utenti a cambiare le loro password con una nuova password (forzata) forte. Memorizzando un punteggio di rafforzamento della password per ciascun account utente nel sistema, è possibile creare diverse metriche per mostrare la debolezza complessiva del sistema e creare un caso per password più forti.

TIA

+0

Non posso aiutare con l'entropia, ma ho già usato [cracklib2] (http://www.fifi.org/doc/cracklib2/) con successo. C'è un pacchetto Pear chiamato [crack] (http://pecl.php.net/package/crack) per l'uso con PHP. – Mike

+0

Cos'è il downvote? Se hai intenzione di contrassegnarlo per favore fammi sapere perché così posso regolare la domanda o claify. – Shane

+2

+1 per neutralizzare un downvote solo perché è una domanda chiara. –

risposta

11

Entropia di una stringa è una definizione formale specificato qui: http://en.wikipedia.org/wiki/Entropy_(information_theory)

Quanto è utile che il valore sta per essere? Dipende. Ecco un metodo (in Java) per calcolare l'entropia che ho fatto per un incarico:

public static double entropy() { 
    double h = 0, p; 
    for (int i = 0; i < count.size(); i++){ 
     p = count.get(i)/(totalChars*1.0); 
     h -= p*Math.log(p)/Math.log(2); 
    } 
    return h; 
} 

count è una mappa in cui (key, value) corrisponde a (char, countForChar). Questo ovviamente significa che devi elaborare la stringa prima di chiamare questo metodo.

EDIT 2: Ecco lo stesso metodo, riscritto in PHP

function entropy($string) { 
    $h=0; 
    $size = strlen($string); 
    foreach (count_chars($string, 1) as $v) { 
     $p = $v/$size; 
     $h -= $p*log($p)/log(2); 
    } 
    return $h; 
} 

EDIT 3: C'è molto di più per la sicurezza della password di entropia. L'entropia riguarda l'incertezza; che non necessariamente traduce in maggiore sicurezza.Ad esempio:

entropia della "[email protected]!0aj" è 2,5, mentre l'entropia "password" è 2.75

+0

Grazie per la risposta, ma sono a conoscenza della definizione di entropia, sono più interessato alla sua applicazione con sicurezza delle password e come farlo in PHP. Ad esempio, probabilmente non voglio eseguire un algoritmo di entropia termodinamica contro le password. LOL – Shane

+1

@Shane - Lo so. Vedi la mia modifica. – quantumSoup

+0

grazie per l'aggiornamento - questo aiuterà molto, credo. Sulla tua nota sulla sicurezza, sei assolutamente corretto ed è per questo che ho menzionato l'utilizzo di questo come parte di un sistema più grande e anche di fare controlli del dizionario e così via. Per questa parte però credo che possa funzionare. – Shane

2

forzando un certo livello di entropia è un requisito di CWE-521.

(1) Lunghezza minima e massima;
(2) Richiede set di caratteri misti (alfa, numerico, speciale, caso misto);
(3) Non contengono nome utente;
(4) Scadenza;
(5) Nessun riutilizzo della password.

+0

@Rook - In realtà stavo sperando che passassi - sei stato un grande commentatore su un'altra domanda che avevo riguardo la memorizzazione di password in chiaro (http://stackoverflow.com/questions/2283937/how-should-i-ethically -approach-user-password-storage-for-later-plaintext-retriev) e ho pensato che sarebbe stato perfetto. Puoi offrire ulteriori suggerimenti sulla metrica della password? Sto cercando di ricostruire insieme un modo per monitorare la sicurezza generale del sistema in base alle password utilizzate all'interno del sistema. Ho pensato che l'entropia sarebbe un buon punto di partenza, ma sono aperto anche ad altre metriche suggerite. – Shane

+0

@Shane Prima di tutto queste regole faranno incazzare la gente, ma saranno più sicure. La regola n. 2 in CWE-521 è meglio applicata usando un'espressione regolare, e ciò impedirà le password più comunemente usate, così come tutte le parole del dizionario e lì è la regola migliore che potrebbe essere applicata. Non vedo come sia d'aiuto una dimensione massima, ma il massimo potrebbe essere di qualche kb (perché no?). Ad essere onesti, la tua domanda è un po 'strana, l'entropia riguarda il potenziale e imponendo un set di caratteri mix ne stai aumentando il potenziale. – rook

+0

@Shane Una nota a margine CWE-257 è estremamente importante e non ho idea del motivo per cui la ignorate. Se qualcuno non conosce la propria password, non ha senso dirglielo.Se è necessario aggiornare il digest del messaggio utilizzato, è possibile farlo al successivo accesso. Non c'è assolutamente nulla da guadagnare dalla prospettiva di un utente e questo ti rende un bersaglio succoso dal punto di vista dell'attaccante. – rook

0

Per utilizzare l'entropia non è necessario ottenere l'Entropia di Shannon di una singola password, ma come un elemento in un elenco di password comuni. Se una password è molto simile ad altre password, la sua entropia sarà bassa rispetto ad altre password. Se è davvero unico, sarà più alto.