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 // Надійність пароля % 
}


Алгоритм оцінки, що використовується в даному плагіні, спирається на загальні положення теорії інформації.
В якості оцінки стійкості пароля використовується значення його ентропії. Детальніше можна почитати на Вікіпедія.

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



де 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


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.