Aide pour le calcul (et l'utilité) de l'entropie du mot de passe
C'est un question:
Partie 1
tout d'abord, le calcul de l'entropie d'un mot de passe en PHP. J'ai été incapable de trouver des exemples de code qui sont empiriquement solides et je voudrais vraiment de l'aide pour trouver la "bonne" façon de calculer un nombre final. Beaucoup de gens sur le net ont leur propre algorithme de pondération maison, mais je suis vraiment à la recherche de la réponse scientifique à l'équation.
je vais être en utilisant l'entropie du mot de passe n'est qu'une partie d'un système de sécurité plus grand et un moyen d'analyser notre sécurité globale des données basée sur des informations accessibles si le mot de passe d'un utilisateur est compromis et comment facilement un mot de passe peut être cassé par la force brute.
Partie 2
La deuxième partie de cette question est: comment utile ce nombre vraiment être? Mon objectif final est de générer un "score" pour chaque mot de passe dans le système que nous pouvons utiliser pour surveiller la sécurité globale de notre système comme une entité dynamique. Je devrai probablement travailler dans un autre ou deux algorithmes pour les attaques de dictionnaires, les mots de passe de remplacement l33t, etc--mais je pense que l'entropie jouera un rôle important dans une telle évaluation "globale" du système. Je suis toutefois heureux de recevoir des suggestions concernant d'autres approches.
Ce Que Je Sais
j'ai vu une certaine mention des équations logarithmiques pour calculer ladite entropie, mais je dois encore voir un bon exemple qui n'est pas en fait écrit comme un équation mathématique. Je pourrais vraiment utiliser un exemple de code (même si pas strictement en PHP) pour me faire aller.
Extension
En faisant un commentaire, j'ai réalisé que je peux mieux expliquer l'utilité de ce calcul. Lorsque je travaille sur des systèmes existants où les utilisateurs ont des mots de passe extrêmement faibles, je dois avoir des preuves concrètes de cette faiblesse avant de pouvoir plaider en faveur du fait de forcer tous les utilisateurs à changer leurs mots de passe pour un nouveau (forcé) fort le mot de passe. En stockant un score de force de mot de passe pour chaque compte d'utilisateur dans le système, je peux construire plusieurs mesures différentes pour montrer la faiblesse globale du système et de faire un cas pour des mots de passe plus forts.
TIA
3 réponses
entropie d'une chaîne a une définition formelle spécifiée ici: http://en.wikipedia.org/wiki/Entropy_ (résumé de l'information))
quelle sera l'utilité de cette valeur? Il dépend. Voici une méthode (en Java) pour calculer l'entropie que j'ai faite pour une tâche:
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
est une Carte où (clé, valeur) correspond à (char, countForChar)
. Cela signifie évidemment que vous devez traiter la chaîne avant d'appeler cette méthode.
EDIT 2: Voici le même méthode, réécrite en 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: Il y a beaucoup plus à la force du mot de passe qu'entropie. L'entropie est une question d'incertitude, qui ne se traduit pas nécessairement par Plus de sécurité. Par exemple:
Entropie de "akj@!0aj"
est de 2,5, alors que l'entropie de "password"
est de 2,75
forcer un certain niveau d'entropie est une exigence de CWE-521.
(1) longueur Minimale et maximale;
(2) Exiger que le caractère mixte de jeux (alpha,numérique, spéciaux, minuscules / majuscules);
(3) Ne contiennent pas de nom d'utilisateur;
(4) Expiration;
(5) aucune réutilisation de mot de passe.
pour utiliser entropy vous devez non seulement obtenir L'Entropy de Shannon d'un mot de passe simple, mais comme un élément dans une liste de mots de passe communs. Si un mot de passe est très semblable aux autres mots de passe, son entropie sera faible par rapport aux autres mots de passe. Si son très unique, il sera plus élevé.