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: Не допускайте слишком слабых паролей
Вместо того, чтобы заставлять пользователя подчиняться саморазрушительным правилам, разрешите все, что даст достаточно высокий балл. Как высоко зависит от вашего варианта использования.
И самое главное
Когда вы принимаете пароль и сохраняете его в базе данных, не забудьте засолить и хешировать его! .