Друкарня від WE.UA

Перевірка надійності пароля за допомогою бібліотеки zxcvbn

Всіх вітаю! У цій статті ми будемо перевіряти безпеку паролів за допомогою бібліотеки zxcvbn, яка визначає надійність пароля та допомагає поліпшити його.

Встановлення бібліотеки

Windows:

pip install zxcvbn

MacOS:

pip3 install zxcvbn

Linux:

pip install zxcvbn

Перевірка надійного пароля

Генерація пароля

Пропоную згенерувати випадковий пароль за допомогою модуля, якого ми розробляли ось у цій статті. Такиим чином, ось код для генерації випадкового пароля з 15 символів будь-якого типу (літери, цифри, спец. символи):

manager = Password()
password = manager.generate(15, "all")

print(password)

Отримуємо ось такий пароль:

2Ub!{V%kr=B(qhI

Перевірка надійності пароля

Отже, для отримання усіх даних про надійність пароля застосовується функція zxcvbn(), яка надає абсолютно усю інформацію про наш пароль.

Тепер передаємо функції zxcvbn() наш пароль і виводимо результат:

protection_report = zxcvbn.zxcvbn("2Ub!{V%kr=B(qhI")
print(protection_report)
{'password': '2Ub!{V%kr=B(qhI', 'guesses': Decimal('1000000000000001'), 'guesses_log10': 14.999999999999998, 'sequence': [{'pattern': 'bruteforce', 'token': '2Ub!{V%kr=B(qhI', 'i': 0, 'j': 14, 'guesses': 1000000000000000, 'guesses_log10': 14.999999999999998}], 'calc_time': datetime.timedelta(microseconds=2999), 'crack_times_seconds': {'online_throttling_100_per_hour': Decimal('36000000000000037.99840144433'), 'online_no_throttling_10_per_second': Decimal('100000000000000.1'), 'offline_slow_hashing_1e4_per_second': Decimal('100000000000.0001'), 'offline_fast_hashing_1e10_per_second': Decimal('100000.0000000001')}, 'crack_times_display': {'online_throttling_100_per_hour': 'centuries', 'online_no_throttling_10_per_second': 'centuries', 'offline_slow_hashing_1e4_per_second': 'centuries', 'offline_fast_hashing_1e10_per_second': '1 day'}, 'score': 4, 'feedback': {'warning': '', 'suggestions': []}}

У якості результату отримали словник із по-справжньому багатим вмістом, який показує нам різні аспекти надійності пароля. Нижче я привів означення кожного ключа для глибшого розуміння.

Ключ

Сенс

'password'

Пароль, який ми передали функції.

'guesses'

Кількість спроб, щоб вгадати пароль.

'guesses_log10'

Переводить число кількості спроб у ключі 'guesses' в більш зручний формат від 1 до 15.

'pattern'

Це якби тип шаблону пароля. У даному випадку там написано 'bruteforce', бо наш пароль є набором випадкових символів.

'token'

Це частина нашого пароля, який відповідає шаблону.

'i' та ‘j’

Під час перевірки пароля програма перевіряє пароль, визначаючи його шаблон за окремими частинами якраз завдяки цим індексам. Ключ ‘i’ — це початок, а ‘j’ — кінець.

Наприклад, якщо наш пароль буде містити ім’я та рік народження, то програма за допомогою цих індексів зрозуміє, що перша частина є ім’ям (за шаблоном), а друга — роком народження (це буде вже інший шаблон).

'calc_time'

Час, за який наш процесор виконав функцію zxcvbn().

'score': 4

Оцінка надійності пароля. Пароль оцінюється від 0 до 4. Тобто у даному випадку, наш пароль є максимально безпечним.

'feedback': {'warning': '', 'suggestions': []}}

Тут ми можемо побачити застереженя щодо надійності пароля ('warning') та варіанти його поліпшення ('suggestions').

Окремо про ключі crack_times_seconds та crack_times_display

Ввважаю також за потрібне розписати в окремій частині статті дані ключі:

'crack_times_seconds': {'online_throttling_100_per_hour': Decimal('36000000000000037.99840144433'), 'online_no_throttling_10_per_second': Decimal('100000000000000.1'), 'offline_slow_hashing_1e4_per_second': Decimal('100000000000.0001'), 'offline_fast_hashing_1e10_per_second': Decimal('100000.0000000001')}, 'crack_times_display': {'online_throttling_100_per_hour': 'centuries', 'online_no_throttling_10_per_second': 'centuries', 'offline_slow_hashing_1e4_per_second': 'centuries', 'offline_fast_hashing_1e10_per_second': '1 day'},

Тут показані можливі типи атак для взламу пароля, і час, який витратить шахрай на кожен із цих типів. Ключ 'crack_times_seconds' показує цей час у секундах, а 'crack_times_display' — у більш звичному для нас форматі днів, місяців, років і т. д.

Пропоную розглянути контекст кожного з цих типів для кращого розуміння.

Перший тип ('online_throttling_100_per_hour') — це ситуація, у якій шахрай намагається підібрати ваш пароль через сайт (тобто онлайн), причому його ліміт складає 100 спроб на годину. Шахрай саме заходить на сайт, як і усі інші користувачі. Цей тип має обмеження, адже після декількох невдалих спроб сайт почне вмикати захист від ботів.

Другий тип ('online_no_throttling_10_per_second') — ситуація, у якій шахрай також підбирає пароль, але з лімітом у 10 спроб на секудну. Тут шахрай відсилає запити безпосередньо до сервера, тому обмежень вже менше.

Третій тип ('offline_slow_hashing_1e4_per_second') — ситуація, у якій шахрай має базу даних паролів (тобто ця атака вже проходить не онлайн), але паролі захищені надійним алгоритмом.

Четвертий тип ('offline_fast_hashing_1e10_per_second') — ситуація, у якій шахрай має базу даних паролів, але вони захещені ненадійним алгоритмом. І звісно, що тоді пароль буде легко взламаний, навіть якщо він у загальному є надійним.

Перевірка безпечності ненадійного пароля

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

protection_report = zxcvbn.zxcvbn("qwerty")
print(protection_report)

Ось яку інформацію ми отримали про нього:

{'password': 'qwerty', 'guesses': Decimal('5'), 'guesses_log10': 0.6989700043360187, 'sequence': [{'pattern': 'dictionary', 'i': 0, 'j': 5, 'token': 'qwerty', 'matched_word': 'qwerty', 'rank': 4, 'dictionary_name': 'passwords', 'reversed': False, 'l33t': False, 'base_guesses': 4, 'uppercase_variations': 1, 'l33t_variations': 1, 'guesses': 4, 'guesses_log10': 0.6020599913279623}], 'calc_time': datetime.timedelta(microseconds=109428), 'crack_times_seconds': {'online_throttling_100_per_hour': Decimal('180.0000000000000099920072216'), 'online_no_throttling_10_per_second': Decimal('0.5'), 'offline_slow_hashing_1e4_per_second': Decimal('0.0005'), 'offline_fast_hashing_1e10_per_second': Decimal('5E-10')}, 'crack_times_display': {'online_throttling_100_per_hour': '3 minutes', 'online_no_throttling_10_per_second': 'less than a second', 'offline_slow_hashing_1e4_per_second': 'less than a second', 'offline_fast_hashing_1e10_per_second': 'less than a second'}, 'score': 0, 'feedback': {'warning': 'This is a top-10 common password.', 'suggestions': ['Add another word or two. Uncommon words are better.']}}

Як бачимо, усі аспекти пароля чітко дають нам розуміння, що він ненадійний. Крім того, ми можемо побачити деякі нові ключі у словнику, які теж мають своє значення.

Сенс нових ключів можна побачити у нижче у таблиці.

Ключ

Сенс

'matched_word'

Це слово зі словника, яке підходить до нашого пароля.

'rank'

Місце, яке займає даний пароль у списку популярних паролів.

'dictionary_name'

Показує назву словника, у якому безпосередньо й був знайдений пароль.

'reversed'

Перевіряє, чи написаний пароль задом на перед.

'l33t'

Перевіряє, чи не немає у паролі замін літери на цифру або символ. Таке часто можна побачити у різних паролях.

Наприклад, замість password може бути написано pa$$word.

'base_guesses'

Базова кількість спроб, за які можна вгадати пароль, якби б воно не містило жодних змін.

'uppercase_variations'

Визначає рівень складності пароля, якщо б він містив великі літери.

'l33t_variations'

Визначає рівень складності пароля, якщо б він заміни літер на цифри або символи.

Також варто пам’яти, що ми можемо просто обрати конкретні значення через ключі, а не виводити усю інформацію про пароль повністю.

Наприклад, тут ми виводимо рекомендації щодо поліпшення пароля:

protection_report = zxcvbn.zxcvbn("qwerty")
print(protection_report["feedback"])
{'warning': 'This is a top-10 common password.', 'suggestions': ['Add another word or two. Uncommon words are better.']}

Висновок

Отже, у цій статті ми розглянули бібліотеку zxcvbn(), яка дозволяє повністю перевіряти паролі на пердмет їй надійності завдяки великому спектру можливих типів перевірок. Також ми порівняли висновки надійного та ненадійного паролів. Всім дякую за увагу!

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Magnifique numérique
Magnifique numérique@magnifiquedigitalworld

Прекрасний цифровий світ

102Довгочити
3.2KПерегляди
30Підписники
На Друкарні з 14 липня 2025

Більше від автора

  • Brandlogo - сайт з надихаючими прикладами логотипів

    Brandlogo — це сайт, який містить велику кількість готових прикладів логотипів, що можуть покращити ваші дизайнерські навички та значно вплинути на загальне натхнення.

    Теми цього довгочиту:

    Дизайн
  • Ресурси для знаходження навчальних датасетів

    У цій статті ми розглянемо одразу два сайти, де можна лешко знайди ціквий датасет для використання у навчальних цілях.

    Теми цього довгочиту:

    It

Це також може зацікавити:

  • Build Your Coding Career at the Best Web Development Institute In Lucknow

    The internet has changed the way businesses operate, communicate with customers, and present their products and services. Behind every professional website and web application are developers who turn ideas into functional digital experiences.

    Публікація містить описи/фото насилля, еротики або іншого чутливого контенту.
    AI !Публікація містить зображення, або фрагменти тексту, створені за допомогою штучного інтелекту

    Теми цього довгочиту:

    Web Development Career
  • 5 стратегій монетизації АІ, які реально спрацюють у 2025 році

    Минуло вже більше 3 років, і нові технології ШІ все ще продовжують з'являтися, але, чесно кажучи, лише зовсім недавно ШІ пройшов шлях від хайпу до реальної реально корисної.

    Теми цього довгочиту:

    Бізнес
  • Проходження Hack The Box | Blocky

    Blocky - Linux машина легкого рівня. Якщо провести ретроспективу, то шлях від розвідки до отримання прав root користувача доволі простий, але те, що на машині є певна кількість кролячих нір, зробило її цікавою ціллю для практики.

    Теми цього довгочиту:

    Htb

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити:

  • Build Your Coding Career at the Best Web Development Institute In Lucknow

    The internet has changed the way businesses operate, communicate with customers, and present their products and services. Behind every professional website and web application are developers who turn ideas into functional digital experiences.

    Публікація містить описи/фото насилля, еротики або іншого чутливого контенту.
    AI !Публікація містить зображення, або фрагменти тексту, створені за допомогою штучного інтелекту

    Теми цього довгочиту:

    Web Development Career
  • 5 стратегій монетизації АІ, які реально спрацюють у 2025 році

    Минуло вже більше 3 років, і нові технології ШІ все ще продовжують з'являтися, але, чесно кажучи, лише зовсім недавно ШІ пройшов шлях від хайпу до реальної реально корисної.

    Теми цього довгочиту:

    Бізнес
  • Проходження Hack The Box | Blocky

    Blocky - Linux машина легкого рівня. Якщо провести ретроспективу, то шлях від розвідки до отримання прав root користувача доволі простий, але те, що на машині є певна кількість кролячих нір, зробило її цікавою ціллю для практики.

    Теми цього довгочиту:

    Htb