には、どうするのがベストなチェックの強度のパスワード?
質問
には、どうするのがベストなのることを確認することがユーザ指定のパスワードはパスワードの登録またはパスワードを変更します。
ひとつのアイディアを出した(python)
def validate_password(passwd):
conditions_met = 0
conditions_total = 3
if len(passwd) >= 6:
if passwd.lower() != passwd: conditions_met += 1
if len([x for x in passwd if x.isdigit()]) > 0: conditions_met += 1
if len([x for x in passwd if not x.isalnum()]) > 0: conditions_met += 1
result = False
print conditions_met
if conditions_met >= 2: result = True
return result
解決
1:除用パスワード
チェック、入力したパスワードに対するリスト用パスワード(例えばトップ100.000パスワードの漏洩LinkedInのパスワードリスト: http://www.adeptus-mechanicus.com/codex/linkhap/combo_not.zipしなければならないあの忙しい焼き場の中から、 leetspeek換:@A,E3,B8,S5。
削除のパスワードにヒットに対しこのリストから入力した語句もらう前に、第2部です。
2:いくつかのルールのユーザー
黄金のルールのパスワードはなるべきであると説かれた。
をお忘れの強制的使用のキャップ、数字、記号などの大多数のユーザー:-最初の文字資; 入数 1
末;-を入れて !
その後、場合のシンボルが必要です。
代わりにチェックにパスワード強度
驚きの始点参照: http://www.passwordmeter.com/
であることを最低限としては、以下のルール
Additions (better passwords)
-----------------------------
- Number of Characters Flat +(n*4)
- Uppercase Letters Cond/Incr +((len-n)*2)
- Lowercase Letters Cond/Incr +((len-n)*2)
- Numbers Cond +(n*4)
- Symbols Flat +(n*6)
- Middle Numbers or Symbols Flat +(n*2)
- Shannon Entropy Complex *EntropyScore
Deductions (worse passwords)
-----------------------------
- Letters Only Flat -n
- Numbers Only Flat -(n*16)
- Repeat Chars (Case Insensitive) Complex -
- Consecutive Uppercase Letters Flat -(n*2)
- Consecutive Lowercase Letters Flat -(n*2)
- Consecutive Numbers Flat -(n*2)
- Sequential Letters (3+) Flat -(n*3)
- Sequential Numbers (3+) Flat -(n*3)
- Sequential Symbols (3+) Flat -(n*3)
- Repeated words Complex -
- Only 1st char is uppercase Flat -n
- Last (non symbol) char is number Flat -n
- Only last char is symbol Flat -n
だけだ passwordmeter が足りないのでしょうか、そのナイーブアルゴリズムを見る Password1! とがで非常に弱い。必ず無視初期資本文がゴールなどの末尾の数字及び記号としての最後の3つのルール)にも違反している。
計算シャノンエントロピー
参照: いことがこのエントロピーを計算するためのPythonの
3:許可しない任意のパスワードが弱すぎ
より強制的にユーザーが曲がりに自滅を招くルールをもとにおいて高い。どのように高に依存してご利用の場合.
もっとも重要
きのパスワード店、データベースとして ただ塩およびハッシュ!.
他のヒント
言語によって、通常使用の正規表現を確認めた場合は:
- 少なくとも一つの大文字と一 小文字
- 少なくとも一つの番号
- 少なくとも一つの特殊文字
- 長さの少なくとも文字
すでに上記の利用力メータの型を記述します。自分の強度計の場合、パスワードの長さで評価しており
- ひとつの条件を満た弱いパスワード
- 二つの条件を満た中パスワード
- すべての条件を満た強いパスワード
を調整することができ、上記ご要望にお応えします。
のオブジェクト指向アプローチする設定のルールを割り当て量を各ルールに対して繰り返し処理を実行しております。にpsuedoコード
abstract class Rule {
float weight;
float calculateScore( string password );
}
計算の合計スコア点
float getPasswordStrength( string password ) {
float totalWeight = 0.0f;
float totalScore = 0.0f;
foreach ( rule in rules ) {
totalWeight += weight;
totalScore += rule.calculateScore( password ) * rule.weight;
}
return (totalScore / totalWeight) / rules.count;
}
例原則のアルゴリズムに基づく数字はクラス:
float calculateScore( string password ) {
float score = 0.0f;
// NUMBER_CLASS is a constant char array { '0', '1', '2', ... }
if ( password.contains( NUMBER_CLASS ) )
score += 1.0f;
if ( password.contains( UPPERCASE_CLASS ) )
score += 1.0f;
if ( password.contains( LOWERCASE_CLASS ) )
score += 1.0f;
// Sub rule as private method
if ( containsPunctuation( password ) )
score += 1.0f;
return score / 4.0f;
}
二つの単純なメトリクスをチェックっていると言っても過言ではあり:
- 長さです。いと思うんで8文字ます。
- 複数の異なる文字クラスのパスワードが入っています。●これらは通常、小文字の文字、大文字、数字、句読点およびその他の記号です。強いパスワードを含む文字から少なくとも三つのこれらのクラス;まる番号またはその他の非アルファベット文字で大幅に低減効果の辞書攻撃であった。
Cracklibは、新しいパッケージがPythonモジュール可能です。しかし、システムがない時などCentOS5に立ちたいと思っていましctypesラッパーのためのシステムcryptlib.これも作業システムにできないイタlibcrypt.で は 必要とpython ctypesご利用いただくためCentOS5お使いのパソコンを使用しpython26パッケージです。
また利点ができ、ユーザー名とチェックのためのパスワードを含有するまたは実質的に同様のlibcrypt"FascistGecos"機能を必要とせず、ユーザが/etc/passwd.
一部の例への応用が期待されています。
>>> FascistCheck('jafo1234', 'jafo')
'it is based on your username'
>>> FascistCheck('myofaj123', 'jafo')
'it is based on your username'
>>> FascistCheck('jxayfoxo', 'jafo')
'it is too similar to your username'
>>> FascistCheck('cretse')
'it is based on a dictionary word'
を読んでからその他の役立つの答えが、これは何を行ってい:
-1のと同じユーザ名
+0を含むユーザー名
+1以上7char
+1以上11char
+1桁の数字を含む
+1ミックスの下、大文字
+1句読点を含む
+1の非印刷可能なchar
pwscore.py:
import re
import string
max_score = 6
def score(username,passwd):
if passwd == username:
return -1
if username in passwd:
return 0
score = 0
if len(passwd) > 7:
score+=1
if len(passwd) > 11:
score+=1
if re.search('\d+',passwd):
score+=1
if re.search('[a-z]',passwd) and re.search('[A-Z]',passwd):
score+=1
if len([x for x in passwd if x in string.punctuation]) > 0:
score+=1
if len([x for x in passwd if x not in string.printable]) > 0:
score+=1
return score
使用例:
import pwscore
score = pwscore(username,passwd)
if score < 3:
return "weak password (score="
+ str(score) + "/"
+ str(pwscore.max_score)
+ "), try again."
どのように変動するという最も効率のよいもらえたようで、リーズナブル。いFascistCheck=>'も同様のユーザー名"が 館内は、ゆったりしていました。
'abc123ABC!@£' =スコア6/6ない場合は、上位集のユーザー名
それは点下になる。
がオープンで無料 ジョン-リッパ パスワードをクラッカーをすることができる多目的確認、既存のパスワードのデータベースです。
どこを使ってい:
var getStrength = function (passwd) {
intScore = 0;
intScore = (intScore + passwd.length);
if (passwd.match(/[a-z]/)) {
intScore = (intScore + 1);
}
if (passwd.match(/[A-Z]/)) {
intScore = (intScore + 5);
}
if (passwd.match(/\d+/)) {
intScore = (intScore + 5);
}
if (passwd.match(/(\d.*\d)/)) {
intScore = (intScore + 5);
}
if (passwd.match(/[!,@#$%^&*?_~]/)) {
intScore = (intScore + 5);
}
if (passwd.match(/([!,@#$%^&*?_~].*[!,@#$%^&*?_~])/)) {
intScore = (intScore + 5);
}
if (passwd.match(/[a-z]/) && passwd.match(/[A-Z]/)) {
intScore = (intScore + 2);
}
if (passwd.match(/\d/) && passwd.match(/\D/)) {
intScore = (intScore + 2);
}
if (passwd.match(/[a-z]/) && passwd.match(/[A-Z]/) && passwd.match(/\d/) && passwd.match(/[!,@#$%^&*?_~]/)) {
intScore = (intScore + 2);
}
return intScore;
}
の標準的アプローチのアルファ混合、数字、記号、気づきと思い登録MyOpenId、先週のパスワードチェッカーを教えてくれる場合はパスワードは辞書に単語を追加した場合でも番号や交換alphas同様の数(ゼロの代わりに'o'、'1'の代わりに'i'ます。
ちょっと感動しましたね。
書いた小さなJavascriptます。しくは: いパスワードメーター.ダウンロードでき、ソースとの使用-変更でセットアッププログラム.お楽しみに!
わからない場合は誰にでもこの役に立つのが気に入ったのが、東電が悪用したphearったと書いたルールはPython2.6クラスがあるんじゃないでしょうか対応2.5):
import re
class SecurityException(Exception):
pass
class Rule:
"""Creates a rule to evaluate against a string.
Rules can be regex patterns or a boolean returning function.
Whether a rule is inclusive or exclusive is decided by the sign
of the weight. Positive weights are inclusive, negative weights are
exclusive.
Call score() to return either 0 or the weight if the rule
is fufilled.
Raises a SecurityException if a required rule is violated.
"""
def __init__(self,rule,weight=1,required=False,name=u"The Unnamed Rule"):
try:
getattr(rule,"__call__")
except AttributeError:
self.rule = re.compile(rule) # If a regex, compile
else:
self.rule = rule # Otherwise it's a function and it should be scored using it
if weight == 0:
return ValueError(u"Weights can not be 0")
self.weight = weight
self.required = required
self.name = name
def exclusive(self):
return self.weight < 0
def inclusive(self):
return self.weight >= 0
exclusive = property(exclusive)
inclusive = property(inclusive)
def _score_regex(self,password):
match = self.rule.search(password)
if match is None:
if self.exclusive: # didn't match an exclusive rule
return self.weight
elif self.inclusive and self.required: # didn't match on a required inclusive rule
raise SecurityException(u"Violation of Rule: %s by input \"%s\"" % (self.name.title(), password))
elif self.inclusive and not self.required:
return 0
else:
if self.inclusive:
return self.weight
elif self.exclusive and self.required:
raise SecurityException(u"Violation of Rule: %s by input \"%s\"" % (self.name,password))
elif self.exclusive and not self.required:
return 0
return 0
def score(self,password):
try:
getattr(self.rule,"__call__")
except AttributeError:
return self._score_regex(password)
else:
return self.rule(password) * self.weight
def __unicode__(self):
return u"%s (%i)" % (self.name.title(), self.weight)
def __str__(self):
return self.__unicode__()
私は誰かがこの便利!
使用例:
rules = [ Rule("^foobar",weight=20,required=True,name=u"The Fubared Rule"), ]
try:
score = 0
for rule in rules:
score += rule.score()
except SecurityException e:
print e
else:
print score
免責事項:ないユニット試験
ただし、次の時、パスワードをクラッカーする技術を開発しているのです
パスワードの強度チェッカーをしている場合には、時間+リソース(その正当化とみなされる場合に、確認のための以上の数のパスワード)用レインボーテーブル.
シリーズのチェックについてアフターサービスについてを満たす最低限の基準
- 少なくとも8文字
- を含む少なくとも一つの非英数字記号
- 一致しないが含まれるユーザー名/メールすることになりました。
- など
このjQueryプラグインする報告書パスワードの強度(せんとうの自分):http://phiras.wordpress.com/2007/04/08/password-strength-meter-a-jquery-plugin/
同じことをすると移植PHP:http://www.alixaxel.com/wordpress/2007/06/09/php-password-strength-algorithm/
には、どうするのがベストなのることを確認することがユーザ指定のパスワードはパスワードの登録またはパスワードを変更します。
な評価の複雑さや強度、ユーザーが見抜かのシステムまたは取得しようと悔います。ることのみを取得しまの状況 このような.で必要とされるパスワードの漏洩な使用します。ボーナスポイント:くさんの実施の使用を可能とパスワードの管理者および/または2FA.