...

понедельник, 20 октября 2014 г.

PassGenJS. Генерируем пароли в Javascript с указанием надёжности


В одном проекте появилась необходимость генерации надежного пароля на клиенте. Поискал готовое решение, но ничего подходящего не нашел.

Все библиотеки, которые нашлись, не подходили по ряду причин — генерировали пароль просто по желаемой длине, отсутствовала возможность проверки надёжности пароля. Решено было писать свой «велосипед» — как альтернативное решение, да и опыт лишним не будет. В итоге получилась библиотечка PassGenJS.


Что под капотом:



  • Нет зависимостей

  • Генерация пароля по указанным параметрам (число букв, цифр, символов и т.д)

  • Генерация пароля по величине надёжности (1 — слабый, 4 — сверхнадёжный)

  • Генерация пароля по % надёжности (от 0 до 100%)

  • Проверка надежности пароля через вычисление энтропии




Приведу несколько примеров:




Генерируем надёжный пароль:

PassGenJS.getPassword({score: 3});
// Результат - 8!G$}6&={a(_>




Генерируем очень простой пароль:

PassGenJS.getPassword({score: 1});
// Результат - 82oN




Генерируем пароль c 60% надежностью:

PassGenJS.getPassword({reliabilityPercent: 60});
// Результат - YyopjU5atXBMG




Генерируем пароль c символьными параметрами:

PassGenJS.getPassword({
symbols: 2, // Количество спец. символов
letters: 2, // Количество букв
numbers: 1, // Количество цифр
lettersUpper: 5 // Количество букв в верхнем регистре
});
// Результат - m6A:k=WYPP


Также есть возможность проверить надёжность пароля:



PassGenJS.getScore("YyopjU5atXBMG");
// Результат:
{
"password": "YyopjU5atXBMG", // Пароль
"score": 3, // Надёжность пароля (4 - наилучший)
"entropy": 77, // Энтропия пароля
"reliability": 60.15625, // Надёжность пароля (абсолютное значение)
"reliabilityPercent": 60 // Надёжность пароля в %
}


Алгоритм оценки, используемый в данном плагине, опирается на общие положения теории информации.

В качестве оценки стойкости пароля используется значение его энтропии. Подробнее можно почитать на Wikipedia.


Под энтропией (информационной ёмкостью) пароля подразумевается мера случайности выбора последовательности символов, составляющих пароль, оцененная методами теории информации. В качестве формулы, использующейся для определения энтропии пароля используется



где N — это количество возможных символов, а L — количество символов в пароле. H измеряется в битах.


В рамках плагина используются следующие условия для определения надёжности пароля по его энтропии:



  • N < 56 — Слабый (1)

  • 56 <= N < 64 — Средний (2)

  • 64 <= N < 128 — Надёжный (3)

  • N > 128 — Сверхнадёжный (4)



if (entropy > 0 && entropy < 56) {
score = 1;
} else if (entropy >= 56 && entropy < 64) {
score = 2;
} else if (entropy >= 64 && entropy < 128) {
score = 3;
} else if (entropy >= 128) {
score = 4;
}


Буду рад здоровой критике и любому фидбеку. Если кому-то плагин окажется полезен, то можно развивать дальше:



  • плагин для jquery

  • ограничения на длину пароля

  • исключение определённых символов

  • добавление произвольных букв (через передачу параметра)

  • и т.д.




Демо

GitHub

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий