Entropia entropica per una passphrase (lunghezza minima delle parole ...)

4

Modifica: 2013-05-17. 2013/5/27

Dopo aver letto la prima risposta di Tom Leek e alcuni documenti sul Web, ho iniziato a scrivere alcune opzioni sul mio strumento genpassphrase .pl :

$ ./genpassphrase.pl -h
Usage: genpassphrase.pl [-h] [-d dict file] [-i mIn length] [-a mAx length]
   [-e entropy bits] [-r random file] [-w words] [-l lines] [lines]
Version: passphrase.pl v1.3 - (2013-05-12 10:43:14).
    -h           This help.
    -l num       number of phrases to generate  (default: 1)
    -w num       number of words by phrase  (default: 5)
    -e bits      Entropy bits for each words (default: 15)
    -d filename  Dictionary file (default: /usr/share/dict/american-english)
    -i length    Minimal word length (default: 4)
    -a length    Maximal word length (default: 11)
    -r device    Random file or generator (default: /dev/urandom)

L'output di default assomiglia a:

With 5 words over 32768 (     15 entropy bits ) = 1/3.777893e+22 -> 75 bits.
With 5 words from 56947 ( 15.797 entropy bits ) = 1/5.988999e+23 -> 78.987 bits.
  3.736 206.819 foggier     enforced    albatrosses loftiest    foursquare  

Primo numero di visualizzazioni della parola uniq trovata nel dizionario, ridotte a 2^Entropy . La seconda riga mostra il conteggio iniziale della parola uniq e calcola l'entropia teorica in base a questo.

Ogni linea di uscita inizia con due valori, la prima è l'entropia di Shanon , non sono chiara per quanto riguarda il significato e l'utilizzo di questa. Il secondo è basato sul numero di caratteri nell'intera linea, con 1/26 per ciascuno di essi.

Riduzione dell'entropia informatica

La risposta di David Cary conferma che questo calcolo è molto approssimativo e difficile da rappresentare, ma fornisce alcune buone valutazioni e un modo di pensare:

Penso che ridurre tutto il valore possa far luce sulla mia domanda:

$ ./genpassphrase.pl -i 1 -a 1 -l 4
Warning: Bunch of 26 words too small! Entropy bits dropped down to 4 bits index.
With 5 words over 16 (      4 entropy bits ) = 1/1.048576e+06 -> 20 bits.
With 5 words from 26 (  4.700 entropy bits ) = 1/1.188138e+07 -> 23.502 bits.
  2.322  23.502     f           r           h           j           u           
  1.922  23.502     t           f           g           e           f           
  1.922  23.502     r           k           i           y           r           
  2.322  23.502     y           u           x           f           i           

Questo rende più facile rappresentare come la selezione umana su questo ridurrebbe l'entropia: per esempio se non mi piacciono le lettere da uno, due o fino a 10, l'entropia finale di 4 bit, basata su 26 lettere è ancora mantenuta ...

Quindi per estensione, se su un gruppo di 56947 parole, non escluderò più di 24179 parole, l'entropia finale di 15 bit / parola è ancora mantenuta, ma mentre:

$ ./genpassphrase.pl -a 8
With 5 words over 32768 (     15 entropy bits ) = 1/3.777893e+22 -> 75 bits.
With 5 words from 34954 ( 15.093 entropy bits ) = 1/5.217764e+22 -> 75.466 bits.
  3.397 159.815 corded      boosts      hatters     overhear    rabbles     

Se l'umano non sceglierà, per parole campione più lunghe del carattere, il numero di parole da escludere passerà al 2186. Peggiore: se l'uomo rifiuta di usare parole più lunghe di 7 caratteri (con il mio file personale), questo diminuirà l'entropia complessiva:

$ ./genpassphrase.pl -a 7
Warning: Bunch of 24366 words too small! Entropy bits dropped down to 14 bits index.
With 5 words over 16384 (     14 entropy bits ) = 1/1.180592e+21 -> 70 bits.
With 5 words from 24366 ( 14.573 entropy bits ) = 1/8.588577e+21 -> 72.863 bits.
  3.923 141.013 nitpick     buglers     loaders     arms        promo       

a 70 bit (forse 72,8 bit ??), invece di 75.

Da lì ...

Vorrei finalizzare questo strumento con alcuni documenti e raccomandazioni chiari.

Post originale

Dopo aver cercato uno strumento che genera frasi a caso, ho iniziato il mio ...

Prendi il dizionario già presente sulla mia scrivania: /usr/share/dict/american-english e vedi:

wc -l /usr/share/dict/american-english
98569

Dopo una rapida occhiata, vedo molti termini di terminazione 's e nomi che iniziano con una lettera maiuscola.

sed -ne '/^[a-z]\{4,99\}$/p' /usr/share/dict/american-english | wc -l
63469

Oh, c'è meno di 65536, dato che non posso leggere solo 15.953 bit, lo farò scendere all'indice di 15 bit (usando pseudo random come potrebbe essere sufficiente per ora.)

Che con 5 parole, ho potuto calcolare una passphrase a 75 bit:

#!/usr/bin/perl -w
use strict;

open my $fh, "</usr/share/dict/american-english" or die;
my @words = map { chomp $_; $_ } grep { /^[a-z]{4,11}$/ } <$fh>;
close $fh;

while (scalar @words > 32768 ) {
    my $rndIdx=int( rand(1) * scalar @words );
    splice @words, $rndIdx, 1 if $words[$rndIdx]=~/s$/ || int(rand()*3)==2;
}

open $fh, "</dev/random" or die;
$_='';
do { sysread $fh, my $buff, 10; $_.=$buff; } while 10 > length;
$_ = unpack "B80", $_;

s/([01]{15})/print "  ".$words[unpack("s",pack("b15",$1))]/eg;
print "\n";

Questo potrebbe produrre un output come:

  value  nationally  blacktopped  prettify  celebration

Da lì, ho 3 domande:

.1 Qual è la lunghezza minima per una parola? 4 caratteri sono sufficienti? Come calcolare l'entropia per una parola di 4 lettere?

In alfabeto semplice una lettera è 1/26 - > 4.7bits, ma la lettera seguente è generalmente una vocale così 1/6 - > 2.5bits!?

Se ho ragione, una parola di 4 lettere non può rappresentare più di 14.57 bit ??

.2 Alcuni potrebbero provare a eseguirlo più volte per ottenere una scelta:

for i in {1..6};do ./gen_pass_phrase.pl ; done
  commons  tweaking  inhered  driveways  sedately
  pantheon  appeaser  inmate  quantifiers  pyrite
  loopier  cloistering  asceticism  auctions  table
  value  nationally  blacktopped  prettify  celebration
  fainer  arthritis  deplete  vestry  fostering
  deuterium  junipers  luckless  burro  harmonic

e scegli in questo gruppo 5 parole con humanisciy :

commons  value  fainer  quantifiers  celebration

Questo ridurrà entropy in questo:

sexy words would have more chance to be choosed.

Ma non posso rappresentarlo con l'argomentazione numerica.

.3 Dal momento in cui gioco, mi rendo conto che 1/3 parole sono plurali:

sed -ne '/^[a-z]\{4,9\}$/p' /usr/share/dict/american-english | wc -l
 44476
sed -ne '/^[a-z]\{3,8\}s$/p' /usr/share/dict/american-english | wc -l
 13408

Ho provato a compensarli quando rimuovendo le parole che escono, poiché penso che eliminare tutte le parole terminate con s non sia una buona idea, quindi rimuovo exedent mentre s terminato o rand 1/3.

In fine.

Il massimo di 75 bit di entropia, sembra abbandonato con questo metodo, ma non rappresento come dimostrarlo né come calcolarli.

    
posta F. Hauri 07.04.2013 - 21:37
fonte

2 risposte

11

Entropia è una misura del processo di generazione della password. Supponiamo di avere una lista di 32768 parole tra cui scegliere. Selezionate 5 parole in modo casuale e uniforme da quella lista (le parole vengono scelte indipendentemente l'una dall'altra, in modo da ottenere il doppio della stessa). Quindi hai esattamente 75 bit di entropia . Il processo di generazione della password può generare esattamente 2 passphrase distinte che hanno tutte esattamente la stessa probabilità di essere selezionate. Sono 75 bit di entropia, senza alcuna ambiguità.

Che alcune parole siano brevi e altre lunghe, o alcune plurali o alcune più sexy di altre, non ha alcuna influenza sulla tua entropia. Entropia è una proprietà del processo di generazione e il tuo processo di generazione non presta attenzione alla lunghezza o alla sensualità delle parole. Utenti umani medi , quando lasciati ai propri dispositivi a base di carne (il loro cervello), tendono a selezionare alcune parole più spesso di altre; sono cattivi in caso di casualità uniforme. Per loro , calcolare l'effettiva "entropia" è difficile perché non sappiamo realmente quanto siano di parte. Ma questo non ha alcuna influenza sul tuo generatore, che non usa un cervello, ma /dev/random . /dev/random non trova alcune parole più attraenti di altre; i suoi gusti sono più semplici.

(A proposito, dovresti usare /dev/urandom , non /dev/random . Vedi questo .)

    
risposta data 07.04.2013 - 21:52
fonte
3

Come ha correttamente notato Tom Leek, l'entropia è una proprietà del processo di generazione; non è una proprietà di una particolare passphrase generata dal processo.

What's minimal length for one word? Is 4 chars sufficient? How to compute entropy for a 4 letter word?

Quando si estrae 15 bit da un generatore di numeri casuali e si usano quei bit per selezionare in modo uniforme una delle 2 ^ 15 parole univoche da un dizionario, la parola ogni ha esattamente 15 bit di entropia - non importa quanti caratteri è lungo.

Sì, usando un dizionario che solo ha parole inglesi di 4 lettere produrrebbe passphrase con meno di 15 bit di entropia per parola di 4 lettere - questo è un altro modo per dire che ci sono meno di 2 ^ 15 parole lunghe 4 lettere in un dizionario inglese. Ma questo è irrilevante in questo caso - non c'è motivo di escludere arbitrariamente le parole brevi dal tuo dizionario.

Allo stesso modo, ci sono meno di 2 ^ 15 parole che iniziano con "be" in un dizionario inglese - quindi le parole che iniziano con "be" hanno meno di 15 bit di entropia per parola. Allo stesso modo, questo fatto è irrilevante - non c'è motivo di escludere arbitrariamente le parole che iniziano con "essere" dal tuo dizionario.

... run this several time to obtain some choice: ... and choose in this bunch 5 words with is human ... This will reduce entropy ...

Sì, se lasci che un essere umano rifiuti alcune parole, allora ridurrà l'entropia.

Un modo per stimare questo è presumere che ci sia un elenco "reale" di parole che l'umano accetterà e rifiuterà tutte le altre. Se quella lista ha solo 2 ^ N bit, allora ogni parola nella password effettiva selezionata dall'uomo avrà (al massimo) solo N bit di entropia per parola. Purtroppo, è difficile scoprire cosa sia realmente "N".

A volte la ragione per cui gli umani rifiutano certe parole è perché non sanno come scriverle. Un modo per evitarlo riguarda un dizionario molto più breve che include solo parole comuni e facili da usare. Ad esempio, rispetto al caso migliore di 15 bit / parola * 5 parole = 75 bit, si ottiene leggermente più entropia (77 bit) scegliendo in modo uniforme 7 parole da un dizionario molto più breve di 2 ^ 11 parole comuni, come ad esempio il S / Key Dizionario di 2048 parole.

Forse un'opzione migliore è che il computer scelga le passphrase in 5 parole come una lista tutto-o-niente. Se mostri all'utente 8 tali passphrase e costringi l'utente a scegliere una di queste 8 passphrase (anziché mixare e abbinare 5 parole da una lista di 30 parole), si può dimostrare che: Nel peggiore dei casi riduce la forza della passphrase selezionata di 3 bit (a 72 bit). Nei casi migliori (l'utente sceglie sempre il primo, o l'utente usa 3 fair-flips equi per scegliere uno degli 8), la forza della passphrase selezionata è l'entropia completa di 15 bit * 5 parole = 75 bit.

1/3 words are plurals

Finché ogni parola del tuo dizionario di 2 ^ 15 parole è unica e uniformemente scelta, è irrilevante che sia plurale. Come nel precedente caso "be", non vi è alcun motivo per escludere arbitrariamente parole che finiscono in "s" dal tuo dizionario.

(E dubito che 1/3 delle parole siano davvero veri plurali - il tuo test rapido cattura parole come "abaco" e "bus" e "boss" che non sono veri plurali).

risposta data 13.05.2013 - 19:30
fonte

Leggi altre domande sui tag