web-dev-qa-db-fra.com

Confusion à propos de l'entropie (mot de passe)

Il semble y avoir de nombreux "types" d'entropie différents. J'ai rencontré deux concepts différents:

A) L'exemple XKCD de correcthorsebatterystaple. Il a 44 bits d'entropie car quatre mots choisis au hasard dans une liste de 2048 mots sont 4 * log2 (2048) = 44 bits d'entropie. Je comprends cela.

B) L'entropie de Shannon de la chaîne réelle, c'est-à-dire que l'entropie est calculée en fonction des fréquences des lettres/symboles. En appliquant la formule de Shannon sur correcthorsebatterystaple le résultat est 3,36 bits d'entropie par caractère.

# from http://stackoverflow.com/a/2979208
import math
def entropy(string):
        "Calculates the Shannon entropy of a string"

        # get probability of chars in string
        prob = [ float(string.count(c)) / len(string) for c in dict.fromkeys(list(string)) ]

        # calculate the entropy
        entropy = - sum([ p * math.log(p) / math.log(2.0) for p in prob ])

        return entropy

print entropy('correcthorsebatterystaple')
# => 3.36385618977

Wikipedia ne fait qu'ajouter à ma confusion:

Il est important de réaliser la différence entre l'entropie d'un ensemble de résultats possibles et l'entropie d'un résultat particulier. Un seul tirage d'une pièce équitable a une entropie d'un bit, mais un résultat particulier (par exemple "têtes") a une entropie nulle, car il est entièrement "prévisible".
- Wikipedia: Entropie (théorie de l'information)

Je ne comprends pas très bien la distinction entre l'entropie du tirage au sort (génération) et l'entropie du résultat (la chaîne).

  1. Quand B est-il utilisé et dans quel but?
  2. Quel concept reflète fidèlement l'entropie du mot de passe?
  3. Existe-t-il une terminologie pour différencier les deux?
  4. Le vrai hasard pourrait nous donner correctcorrectcorrectcorrect. En utilisant A, nous avons encore 44 bits. En utilisant B, l'entropie serait la même que celle de correct. Quand la différence entre les deux est-elle importante?
  5. Si une exigence spécifie qu'une chaîne doit avoir 20 bits d'entropie, dois-je utiliser A ou B pour déterminer l'entropie?
39
mds

L'article de Wikipedia explique l'entropie mathématique, qui n'est pas identique à ce que les gens veulent dire lorsqu'ils parlent d'entropie par mot de passe. L'entropie de mot de passe concerne davantage la difficulté de deviner un mot de passe sous certaines hypothèses, ce qui est différent du concept mathématique d'entropie.

A et B ne sont pas des concepts différents d'entropie de mot de passe, ils utilisent simplement des hypothèses différentes pour la construction d'un mot de passe.

A traite correcthorsebatterystaple comme une chaîne de mots anglais et suppose que les mots sont sélectionnés au hasard dans une collection de 2048 mots. Sur la base de ces hypothèses, chaque mot donne exactement 11 bits d'entropie et 44 bits d'entropie pour correcthorsebatterystaple.

B traite correcthorsebatterystaple comme une chaîne de caractères et suppose que la probabilité d'apparition de n'importe quel caractère est la même qu'en anglais. Sur la base de ces hypothèses, correcthorsebatterystaple possède 84 bits d'entropie.

La définition que vous utilisez dépend donc vraiment des hypothèses que vous faites sur le mot de passe. Si vous supposez que le mot de passe est un mot de passe de style XKCD (et que chaque mot a en effet une chance qu'un sur 2048 apparaisse dans le mot de passe), alors A est la bonne façon de calculer l'entropie. Si vous ne supposez pas que le mot de passe est construit comme une collection de mots, mais supposez que la probabilité qu'un caractère apparaisse soit égale à la probabilité de son apparition en anglais, alors B est la bonne façon de calculer l'entropie.

Dans le monde réel, aucune de ces hypothèses n'est correcte. Donc, si vous avez une "exigence qui spécifie qu'une chaîne doit avoir 20 bits d'entropie" et qu'il s'agit de mots de passe générés par l'utilisateur, il est très difficile de donner une définition précise de l'entropie. Pour plus d'informations, voir Calcul de l'entropie du mot de passe? .

Si, d'autre part, vous pouvez utiliser des chaînes générées par ordinateur (et utilisez un bon PRNG), alors chaque caractère alphanumérique (a-z, A-Z, 0-9) donnera presque 6 bits d'entropie.

23
David Wachtfogel

Ce que cela signifie

Tirage au sort l'entropie suppose que d'un tirage au sort, le résultat du tirage précédent n'affectera pas le résultat du tirage suivant. Ainsi, chaque lancer ajoute un bit d'entropie.

Shannon l'entropie suppose que la valeur de la lettre suivante est en fait partiellement déterminée par la valeur de la lettre précédente (et peut-être autres). Des faits tels que "h" suivent souvent "t" et "e" suivent souvent "h" sont pris en considération, de sorte que les motifs courants se voient attribuer une valeur d'entropie inférieure. Ainsi, avec un dictionnaire anglais, la chaîne the aurait une valeur d'entropie de Shannon beaucoup plus faible que la chaîne exu.

Ce que cela signifie pour vous

L'implication directe de cela en ce qui concerne les mots de passe est assez insignifiante. La vraie (et seule) question importante concernant les mots de passe est la suivante:

Dans quel dictionnaire se trouve votre mot de passe?

Autrement dit, si vous deviez dresser une liste de mots de passe potentiels pour mener une attaque par force brute, quelle devrait être la taille du dictionnaire pour contenir votre mot de passe?

Par exemple:

  • Votre mot de passe figure dans le top 500 des mots de passe les plus utilisés
  • Votre mot de passe est dans le dictionnaire des mots anglais en minuscules
  • Votre mot de passe figure dans la liste des mots anglais en minuscules ou en majuscules avec un suffixe à un ou deux chiffres
  • Votre mot de passe figure dans la liste des mots anglais à casse aléatoire avec haxor substitutions numériques (c'est-à-dire A => 4, L => 1, S => 5 )
  • Votre mot de passe figure dans la liste de toutes les chaînes de 8 caractères ou moins à l'aide de chiffres et de lettres majuscules et minuscules.

Tous les exemples ci-dessus sont des exemples de dictionnaires de craquage de mots de passe fréquemment utilisés dans le monde réel.

En d'autres termes

Le but de la complexité des mots de passe est de résister à une attaque par force brute. La taille du plus petit dictionnaire disponible qui contient votre mot de passe détermine le temps nécessaire pour déchiffrer votre mot de passe. Nous pouvons deviner quels dictionnaires seront disponibles pour l'attaquant, mais nous ne pouvons pas le savoir avec certitude. Par conséquent, en tant que proxy pour la taille du dictionnaire, nous utilisons à la place l'entropie . C'est un mauvais substitut car il ne reflète pas la mécanique d'attaque réelle, mais c'est potentiellement mieux que rien.

Les comparaisons de mots de passe basées sur des calculs d'entropie peuvent potentiellement être fructueuses, mais vous devez faire attention à ne pas attribuer trop de valeur à un nombre qui, en fin de compte, n'est qu'indirectement lié à la tenue du mot de passe.

20
tylerl

Je suppose que la façon la plus simple de l'illustrer est avec un exemple.

Disons que nous avons un générateur de nombres aléatoires a une entropie de sortie prouvable de 3 bits par chiffre de sortie. L'entropie "toss" de ce générateur est de 3 bits. Maintenant, disons que vous exécutez cela sur 20 chiffres, et malgré la probabilité ridiculement petite, chaque nombre dans le flux sort comme 6. L'entropie "toss" est toujours de 3 bits par chiffre, donc 60 bits. L'entropie réelle du "mot de passe" du mot de passe est minuscule - on pourrait dire qu'elle est aussi faible que 3 ou 4 bits.

La différence est que l'entropie "toss" représente l'entropie attendue de la sortie, basée sur la modélisation probabiliste du générateur, tandis que l'entropie "résultat" représente l'entropie réelle des informations qu'elle a produites dans un cas réel.

6
Polynomial

Un seul octet peut contenir jusqu'à 8 bits d'entropie. Ceci est la limite supérieure. À mesure que vous en apprenez davantage sur vos données, la quantité d'entropie dans ces blocs de 8 octets diminue. Oh, tous vos octets sont tous des caractères ASCII? Cela signifie que le bit le plus élevé doit être un 0; vous avez jusqu'à 7 bits d'entropie. Aucun caractère de contrôle? Des ASCII set, 0-31 sont des caractères de contrôle - tabulation, entrée, cloche, fin de fichier. Cela réduit encore le caractère. Alphabétique, minuscule uniquement? Maintenant, vous réduisez énormément les options disponibles. Mot anglais Pas beaucoup de ceux-ci - un mot anglais entier, sélectionné au hasard, ne peut avoir que, disons, 12 bits au total, même si les mots peuvent avoir 5 caractères.

Les mots de passe choisis par les humains sont encore pires; non pas parce que les possibilités sont plus petites, mais parce que certaines sont choisies plus fréquemment que d'autres. Si certains mots de passe sont courants, il est plus facile à deviner; qui affecte l'entropie. Si 10% de vos utilisateurs ont un "mot de passe", cela réduira l'entropie dans votre liste de mots de passe - c'est-à-dire qu'il est plus facile à deviner.

Donc, plus vous avez d'informations sur un mot de passe, plus vous pouvez calculer l'entropie. Dans le cas de la formule de Shannon, elle suppose les biais dans les langues naturelles et calcule l'entropie à 3,6 bits * 25 caractères = environ 90 bits. Lorsque vous obtenez les informations supplémentaires (4 mots, chacun d'une liste de 2048), cela tombe à 44 bits.

Regardez-le de cette façon - si quelqu'un piratait ce mot de passe, sachant seulement qu'il s'agissait d'un langage naturel, puis découvrant soudain qu'il s'agissait de 4 mots d'une liste de 2048 (et connaissant la liste), il trouverait soudainement son travail un BEAUCOUP plus facile.

3
AMADANON Inc.

La chose qui vous manque ici est le fait qu'une mesure d'entropie est liée à une distribution de probabilité spécifique . Vous ne pouvez pas parler de l'entropie d'un mot de passe sans faire l'hypothèse, explicite ou implicite, de quelle distribution de probabilité est le mot de passe tiré au hasard . Qui se résume à la nature du processus par lequel le mot de passe est généré.

Dans la bande dessinée XKCD, Munroe vous dit qu'il a généré la phrase secrète en choisissant successivement et indépendamment quatre mots au hasard dans un dictionnaire d'environ 2 ^ 11 mots. Cela vous indique précisément la distribution de probabilité à partir de laquelle le mot de passe est tiré: la distribution uniforme discrète sur un ensemble de 2 ^ 44 phrases de passe distinctes.

Mais quand vous faites cela:

B) L'entropie de Shannon de la chaîne réelle, c'est-à-dire que l'entropie est calculée en fonction des fréquences des lettres/symboles. En appliquant la formule de Shannon sur correcthorsebatterystaple le résultat est 3,36 bits d'entropie par caractère.

... vous choisissez une distribution de probabilité différente de celle utilisée par Munroe, vous allez donc obtenir une estimation différente, celle qui attribue environ 84 bits d'entropie à la chaîne (25 × 3,36).


Si vous évaluez l'entropie des mots de passe pour lesquels vous ne savez pas comment ils ont été générés, une perspective fructueuse et intuitive consiste à adopter l'idée que la distribution de probabilité en jeu est la connaissance et les hypothèses des attaquants sur la façon dont les utilisateurs sélectionnent les mots de passe. Si vous pouvez vous faire une idée raisonnable de l'apparence de cette distribution, l'entropie d'un mot de passe est la longueur de son message dans un code optimal pour cette distribution. C'est, en gros, l'approche dans les meilleurs indicateurs de force de mot de passe comme zxcvbn (bien qu'ils le formulent en termes de nombre moyen de suppositions pour atteindre le mot de passe).

Lorsque vous regardez les estimations 44 vs 84 bits que vous montrez dans votre question de ce point de vue, ce qui se passe est le suivant: Munroe obtient une estimation d'entropie beaucoup plus faible pour le mot de passe car il suppose que l'attaquant a une précision de 100% hypothèse sur la façon dont la phrase secrète a été générée, afin qu'ils puissent exclure un grand nombre de chaînes a priori qui ne sont tout simplement pas des enchaînements de quatre mots dans le dictionnaire. Alors que le calcul d'entropie de Shannon que vous illustrez obtient une estimation d'entropie beaucoup plus élevée car ce n'est pas aussi "intelligent" d'une stratégie pour deviner les phrases de passe de style XKCD. zxcvbn est plus intelligent, cependant, et il estime qu'un pirate de mot de passe casserait correcthorsebatterystaple dans environ 10 ^ 14.43696 suppositions, ce qui représente environ (14,4 × 3,3) + 1 ≈ 48,6 bits d'entropie. (Le calcul est une conversion de logarithme en base 10 en base 2, plus un bit pour convertir le nombre de suppositions en entropie.) C'est un peu plus que l'estimation de Munroe, mais zxcvbn est codé pour attaquer d'autres mots de passe que les simples phrases de passe de style XCKD .

1
Luis Casillas