Je vais intervenir et parler un peu d'entropie et de probabilité et j'espère que cela vous aidera à comprendre.
Premièrement, qu'est-ce que la probabilité? C'est en fait une question ouverte parmi les statisticiens, mais voici la définition fréquentialiste: nous disons que si une pièce juste est retournée, elle a une probabilité de 0,5 de faire face. Cependant, si vous lancez une pièce, vous remarquerez peut-être que les cinq premiers résultats sont tous des têtes, ce qui ne semble pas correct. Ainsi, le fréquentialiste dit que si vous deviez lancer la pièce "assez" de fois, vous finirez par découvrir qu’un tirage au sort sur deux est une tête.
La clé est cette probabilité ne dit rien sur ce qui va réellement se passer . Un mot de passe à haute entropie peut être deviné du premier coup par simple chance, quels que soient les résultats possibles, etc.
Maintenant, qu'est-ce que l'entropie? Si vous commencez à dire "eh bien, c'est le nombre de résultats possibles ...", vous avez peut-être raison dans un contexte de génération de données aléatoires, mais c'est l'exemple parfait où vous devez vraiment comprendre ce qui se passe en dessous.
Tout d'abord, parlons d'auto-information. Il s'agit d'une variable aléatoire (ce qui signifie qu'il existe un certain nombre de résultats possibles) qui varie selon la probabilité de chaque résultat (puis nous prenons -log2 (P (X)) pour l'encoder en "bits" d'information). Nous devons donc attribuer à chaque résultat une probabilité.
Comme d'autres l'ont souligné, certaines variantes du choix du code PIN sont plus probables. Tous les mêmes numéros (1111, 2222, 3333, ...), anniversaires (20XX, 19XX) et ainsi de suite. Vous devez attribuer une probabilité plus élevée à ces nombres, car les personnes simplement mises sont plus susceptibles de les choisir et ne vont certainement pas choisir une séquence aléatoire. La façon dont vous attribuez la probabilité aux autres nombres dépend entièrement de vous et dépend vraiment de ce que vous en savez sur le processus de choix d'une épingle.
Maintenant, l'entropie, ou pour garder @codesinchaos heureux, l'entropie de Shannon en particulier, est le moyen de la distribution des informations personnelles. C'est la valeur "la plus probable" de l'auto-information compte tenu des probabilités de chaque choix. Qu'est-ce que ça veut dire? Comme le dit la réponse actuelle la plus votée, il s'agit d'une mesure du processus de choix et de sa qualité, et non de l'épingle elle-même.
Que se passe-t-il lorsque vous supprimez des choix à forte probabilité comme 1111, 2222, 3333 ? Ces résultats donnent une très faible auto-information (-log (P (X)) est petit pour les grandes probabilités, car nous nous attendons à ce qu'elles se produisent) et leur suppression déplace donc la distribution vers la droite, c'est-à-dire déplace l'emplacement de la distribution vers le centre. Cela augmentera sa moyenne. Donc, supprimer les choix que la plupart des gens feraient autrement avec une probabilité élevée augmente en fait l'entropie .
Examinons l'entropie d'une manière différente: si vous deviez deviner les codes PIN, dans quel ordre les essayeriez-vous (en supposant qu'il n'y ait pas de lock-out)? Vous commenceriez avec les NIP les plus probables pour certains. Ce que dit l'entropie, c'est que si vous répétiez cette expérience suffisamment de fois (c'est-à-dire que vous essayiez de deviner le code PIN d'un grand nombre de cartes dont les codes PIN ont été choisis exactement avec la même logique), un choix d'entropie plus faible vous donnerait, à l'attaquant, plus de succès
Encore une fois, il reste à savoir ce qui pourrait se passer dans le cas théorique de nombreuses cartes, et non ce qui pourrait arriver parce que l’attaquant a de la chance .
Voici votre résumé:
- Ce que devient l'entropie dépend de la façon dont vous attribuez des probabilités à l'espace de résultat.
- Sans aucun doute, si vous laissez les humains choisir des codes PIN, ils choisiront certaines valeurs avec une probabilité beaucoup plus élevée que d'autres.
- Cela signifie que vous ne pouvez pas supposer que la distribution sous-jacente est uniforme et dire "entropie == nombre de résultats".
- Si vous supprimez les options de mauvais choix les plus probables, l'entropie augmente.
- L'entropie, comme la probabilité de deviner correctement, ne dit absolument rien sur la question de savoir si un attaquant aura de la chance et devinera correctement votre code PIN. Cela dit simplement qu'en théorie une meilleure entropie donne plus de mal à votre attaquant.
Maintenant, pour compléter ma réponse, examinons les aspects pratiques. Si nous allons comparer aux mots de passe, aux choix de sortie de fonction de hachage ou aux données aléatoires, les codes PIN sont nul. Si vous donnez à un attaquant et à un défenseur le libre choix du code PIN et aucune autre information, le nombre de suppositions pour avoir raison 50% du temps (paradoxe d'anniversaire) est ridiculement bas. Les codes PIN feraient de mauvaises fonctions de hachage.
Cependant, les humains ne peuvent pas très bien mémoriser 128 bits de données, surtout lorsqu'ils sont ivre et qu'ils essaient de payer pour un kebab en utilisant une puce et une épingle. Les codes PIN sont donc un compromis pragmatique et avec trois suppositions comme limite, à part un attaquant qui a beaucoup de chance, vous devriez être prudent.
TL; DR Suppression du choix du plus probable Les codes PIN de vos choix possibles améliorent vos chances face à un attaquant qui ne devinera pas au hasard (c'est-à-dire la plupart des attaquants).
Edit: Je pense que cette discussion justifie des mathématiques maintenant. Voici ce que je vais supposer dans mes calculs:
- Nous utilisons des codes PIN à 4 chiffres
-
Les données du lien de Raesene sont correctes, c'est-à-dire que:
# 1 1234 10,713% # 2 1111 6,016% # 3 0000 1,881% # 4 1212 1,197% # 5 7777 0,745% # 6 1004 0,616% # 7 2000 0,613% # 8 4444 0,526% # 9 2222 0,516% # 10 6969 0,512% # 11 9999 0,451% # 12 3333 0,419% # 13 5555 0,395% # 14 6666 0,391% # 15 1122 0,366% # 16 1313 0,304% # 17 8888 0,303% # 18 4321 0,293% # 19 2001 0,290% # 20 1010 0,285%
- Je vais également supposer que tout code PIN non mentionné dans cette liste a une chance égale d'être choisi parmi la probabilité "non allouée" restante (probabilité 1-totale consommée ci-dessus). C'est presque définitivement incorrect, mais nous n'avons que peu de données.
Pour calculer cela, j'ai utilisé le code sage suivant:
def shannon_entropy (probabilités ): contributions = [p * (-1 * log (p, 2)) pour p en probabilités] return sum (contributions)
Calcule l'entropie de shannon réelle pour un ensemble donné de probabilités . print
importation itertoolstotal_outcomes = 10.0 ^ 4probability_random_outcome = 1 / total_outcomesprobability_random_outcomemaximum_entropy = -log (probability_random_outcome, 2) maximum_entropymaximum_entropy_probability_list = liste (itertools.repeat (probability_random_outcome, total_outcomes)) = maximum_entropy_calculated shannon_entropy (maximum_entropy_probability_list) ( maximum_entropy) print (maximum_entropy_calculated)
Montre que ma fonction calcule avec précision l'entropie maximale, en prenant une liste de 10 ^ 4 probabilités, chacune à 1/10 ^ 4.
Puis
probabilité_list_one = [10,713 / 100, 6,016 / 100, 1,881 / 100, 1,197 / 100, 0,745 / 100, 0,616 / 100, 0,613 / 100, 0,526 / 100,0,516 / 100, 0,512 / 100, 0,451 / 100, 0,419 / 100, 0,395 / 100, 0,391 / 100, 0,366 / 100, 0,304 / 100, 0.303 / 100,0.293 / 100,0.290 / 100,0.285 / 100] result_count_one = 10 ^ 4 - len (probabilité_list_one) print ("Outcome count 1:", result_count_one) probabilité_consumed_one = sum (probabilité_list_one) print ("Probabilité consommée par liste: ", probabilité_consumé_one) probabilité_ro_one = (1-probabilité_consumé_one) / result_count_oneentropy_probability_list_one = probabilité_list_one + liste (itertools.repeat (probabilité_ro_one, result_count_one)) entropy_one = shannon_entropy entropyone_list_probability
Ici, comme je l'ai dit ci-dessus, je prends ces 20 probabilités et suppose que le reste des probabilités est réparti uniformément entre les résultats restants, en étendant la liste avec chaque probabilité définie uniformément. Le calcul est effectué.
probabilité_list_two = [6,016 / 100, 1,881 / 100, 1,197 / 100, 0,745 / 100, 0,616 / 100, 0,613 / 100, 0,526 / 100,0,516 / 100, 0,512 / 100, 0,451 / 100, 0,419 / 100, 0,395 / 100, 0,391 / 100, 0,366 / 100, 0,304 / 100, 0,303 / 100,0,293 / 100,0,290 / 100,0,285 / 100] result_count_two = 10 ^ 4 - len (probabilité_list_two) -1print ("Nombre de résultats 2:", résultat_count_two) probabilité_consumé_two = somme (probabilité_list_two) print ("Probabilité consommée par la liste:", probabilité_consumé_two) probabilité_ro_two = (1-probabilité_consumes_two_two) /o résultat_liste_consommé (1-probabilité_consumé_two) .repeat (probabilité_ro_two, result_count_two))) entropy_two = shannon_entropy (entropy_probability_list_two) entropy_two
Dans ce cas, je supprime le code PIN le plus probable, 1111 et recalcule l'entropie.
À partir de ces résultats, vous pouvez voir que le choix aléatoire d'un code PIN a 13,2877 bits d'entropie. Répéter cette expérience avec un code PIN supprimé nous donne 13,2876 bits
Choisir un code PIN compte tenu des probabilités de choix pour ces 20 codes PIN et sinon choisir au hasard signifie que votre choix est de 11,40 bits d'entropie, sur 13,2877 bits possibles. À partir de cette base, bloquer le PIN 1111 et autoriser autrement les 19 autres PIN évidents et tous les autres PIN choisis avec une probabilité égale a une entropie de 12,33 bits, sur 13,2876 bits possibles.
J'espère que cela explique pourquoi beaucoup de réponses disent que l'entropie est en baisse plutôt qu'en hausse. Ils envisagent l'entropie maximale possible, plutôt que l'entropie moyenne (entropie de shannon) du système en tenant compte de la possibilité de choix. Une meilleure mesure est l'entropie du shannon, car elle prend en compte la probabilité que chaque choix soit fait globalement et donc comment un attaquant va probablement procéder à l'attaque.
Comme vous pouvez le voir , le blocage de ce PIN 1111 augmente significativement l'entropie du shannon, à un léger coût pour l'entropie globale possible. Si vous voulez discuter de l'entropie, en gros, la suppression du code PIN 1111 aide énormément.
Pour référence que la bande dessinée XKCD calcule l'entropie des mauvais mots de passe à environ 28 bits et l'entropie des bons plus haut, à 44 bits. Encore une fois, cela dépend des hypothèses faites quant aux probabilités de certains choix mais cela devrait également montrer que les codes PIN sont nul en termes d'entropie et que la limite de N-essais pour un petit N est la seule manière continuez.
Feuille de travail Sage publique