SecuredKit

Опубліковано: · автор:

Чому вимірювачі надійності пароля брешуть: тест 10 перевірок

Я прогнав P@ssw0rd2026! через 10 перевірок надійності пароля. Одна показала 2 мільйони років, а скрипт зламав його за 50 тисяч спроб. Яким вимірювачам можна вірити.

Точність перевірки надійності пароля: 10 сервісів оцінюють P@ssw0rd2026! від «дуже слабкий» до «2 мільйони років»

Я прогнав P@ssw0rd2026! через десять перевірок надійності пароля за один вечір. Одна повідомила, що на його злам піде два мільйони років. Невеликий скрипт, який я нацькував на той самий пароль, знайшов його приблизно за 50 тисяч спроб — швидше, ніж ви встигнете кліпнути. Обидві відповіді правильними бути не можуть, і саме ця прірва між ними — головна проблема вимірювачів надійності пароля.

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

Тест

Я взяв P@ssw0rd2026! навмисно. У ньому 13 символів, великі й малі літери, цифра, два знаки і рік. Він відповідає всім вимогам до «надійного пароля» зразка 2003 року. І водночас це один із найбільш передбачуваних рядків, які людина може набрати: слово password, прикрашене замінами (a→@, o→0), які будь-який інструмент для злому пробує найперше, плюс поточний рік і ! в кінці.

Я прогнав його через десять перевірок і записав, що саме показала кожна з них 2 листопада 2026 року. Ось розкид.

ПеревіркаВердиктПоказаний час злому
PasswordMonsterДуже слабкий6,41 секунди
Service Victoria (уряд Австралії)Слабкий12 днів
BitwardenДуже слабкий17 хвилин
SecuredKit (моя)Слабкий, 23 біти17 хвилин (bcrypt)
NordPassПомірний17 хвилин
RoboFormСлабкий(час не показано)
Kaspersky«Час змінити пароль»(час не показано)
демо zxcvbnОцінка 2 / 417 хвилин (повільний хеш)
passwordmeter.comПрийнятний, ~77 бітів20 000 років (швидкий хеш)
Security.org(без мітки)2 000 000 років

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

Що роблять чесні

Шість із семи точних перевірок побудовані на zxcvbn — оцінювачі, який Dropbox опублікував 2016 року, — або поводяться так само. RoboForm прямо пише про це на власній сторінці. Bitwarden, урядовий інструмент Service Victoria і довідкове демо zxcvbn повертають однакове попередження й однакові поради слово в слово — це і є ознака спільного рушія, — хоча кожен бере для заголовного часу свій рядок із виводу zxcvbn.

zxcvbn не вимірює ваш алфавіт. Він намагається вгадати пароль так, як це зробив би зломщик, і повідомляє, скільки спроб на це піде. Він несе з собою словники (поширені паролі, англійські слова, імена) і знає всі хитрощі: leet-заміни, велику літеру на початку, рік чи коротке число в кінці, клавіатурні ряди на кшталт qwerty. Для P@ssw0rd2026! він знаходить слово password під замінами, здирає їх, додає рік як дешевий суфікс і зупиняється приблизно на 10 млн спроб загалом. Проти пароля, збереженого з повільним хешем на зразок bcrypt, це близько 17 хвилин. Проти швидкого хешу на кшталт MD5 — частка секунди. Його попередження відверте: «Це схоже на поширений пароль».

Моя власна Перевірка стійкості пароля використовує той самий підхід і працює повністю у браузері, тож пароль, який ви вводите, ніколи не залишає пристрій. Вона оцінила тестовий рядок як Слабкий, 23 біти, назвала заміну P@ssw0rd поіменно й повідомила, що велика перша літера «майже не допомагає». Саме такої поведінки й треба хотіти: щоб вимірювач називав точний прийом, яким скористався б зловмисник.

Що роблять нечесні

Тепер про дві, що провалилися. Перевірка Security.org показала, що на злам P@ssw0rd2026! піде два мільйони років. passwordmeter.com назвав його «прийнятним», оцінив приблизно в 77 бітів і показав час злому понад трильйон років для онлайн-атаки.

Ці вимірювачі роблять арифметику, а не імітацію. Формула така: ентропія = довжина × log₂(набір_символів). Для пароля з 13 символів із 95 друкованих символів ASCII це 13 × log₂(95) ≈ 85 бітів — астрономічно велике число. Далі вони ділять вигаданий простір ключів на швидкість вгадування й друкують результат.

Сама математика не хибна. Вона відповідає не на те запитання. довжина × log₂(набір_символів) — це надійність пароля, обраного випадково з того алфавіту. P@ssw0rd2026! випадково не обирали. Його обрала людина, яка потяглася до очевидного слова й очевидних прикрас, і зловмисник це знає. Формула набору символів не має уявлення про те, що «слово password тут усередині». Тож вона оцінює костюм, а не того, хто його носить, — і костюм має чудовий вигляд.

Віддам належне passwordmeter.com: він усе ж позначив «Містить дату або рік» у своїх нотатках про шаблони, тож наполовину здогадується. Просто не дозволяє цьому знанню перекрити головне число. Security.org не дав і такого натяку.

Я спробував його зламати

Твердження «зловмисник знайшов би це швидко» легко заявити, але варто й насправді перевірити, тож я написав короткий гібридний словниковий скрипт і запустив його проти MD5-хешу пароля. Правила — найзвичайніші, які постачаються з будь-яким зломщиком: узяти список 1000 найпоширеніших паролів, застосувати leet-заміни й необов'язкову велику літеру, а потім додати рік із 1900–2099 і за бажанням один знак.

cracked: P@ssw0rd2026! after 50,360 guesses in 0.028 s

П'ятдесят тисяч спроб. На двоядерній хмарній віртуалці, не на зломлювальній фермі. Слово password стоїть другим у тому списку, тож щойно скрипт наклав на нього стандартні заміни й роки, збіг випав майже миттєво. Увесь набір правил, який я застосував, — кожне слово на всі варіації на всі роки й знаки — це близько 88 млн кандидатів. На одній RTX 4090 проти несоленого MD5 (hashcat 6.2.6 дає ~164 млрд спроб на секунду) перебір усіх 88 млн зайняв би менш як тисячну частку секунди. Оцінка в два мільйони років промахнулася приблизно на чотирнадцять порядків.

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

Чому ця брехня небезпечна

Вимірювач надійності — це порада, і люди за нею діють. Якщо вимірювач каже, що P@ssw0rd2026! протримається два мільйони років, ви на цьому спиняєтесь і використовуєте його повторно. Чекліст складу, який досі показує більшість таких інструментів — велика літера, мала, цифра, знак, — активно штовхає вас до паролів на кшталт цього: коротких, рясних на шаблони й саме таких, які атаки за правилами й створені ловити.

Саме тому NIST перестав рекомендувати правила складу. Його настанова (SP 800-63B) тепер радить сервісам відмовитися від примусової складності й натомість звіряти паролі з базами витоків і поширених паролів, бо довжина й непередбачуваність перемагають квоту на знаки. Вимірювач, що винагороджує квоту на знаки, оптимізує саме те, від чого стандарт відмовився. Докладніше про те, де проходить ця межа, я писав у математиці ентропії і про те, скільки реальні паролі витримують проти GPU.

Як за десять секунд відрізнити хорошу перевірку від поганої

Читати код не треба. Наберіть P@ssw0rd2026! або будь-яке словникове слово з leet-замінами й роком і подивіться, що станеться:

  • Хороша ознака: перевірка оцінює пароль як слабкий і каже чому («схоже на поширений пароль», «передбачувані заміни», «містить рік»). Вона імітує атаку.
  • Погана ознака: перевірка оцінює пароль як надійний, бо в ньому 13 символів із різними типами, або називає час злому в тисячі років. Вона рахує ваш алфавіт, а не ваш вибір.

Друга перевірка: наберіть справді випадковий рядок із 16 символів, а потім чотири випадкові слова. Вимірювач на арифметиці набору символів обожнює рядок із 16 символів і часто називає чотири слова «слабкими», бо вони всі малими літерами, — а це навпаки. Вимірювач, що розпізнає шаблони, оцінює обидва як надійні, бо обидва такими й є.

Де я змінив би думку

zxcvbn не ідеальний, і я не хочу його перехвалювати. Його словники переважно англійські й на кілька років застарілі, тож пароль із сучасного сленгу, неанглійського словника чи дуже свіжого списку витоків може отримати вищу оцінку, ніж мав би, — бо слова справді немає в тому списку, що несе вимірювач. Він також не бачить, що ви використали той самий «надійний» пароль ще на дев'яти сайтах, а це той ризик, який насправді дістає більшість людей. Повторне використання не ловить жоден вимірювач надійності — для цього є перевірки витоків і менеджер паролів.

Тож чесне формулювання — не «вірте zxcvbn наосліп». Воно таке: вимірювач, що імітує вгадування, займається правильною справою, а вимірювач, що рахує символи, — ні. Перший можна поліпшити. Другий вимірює те, що ніколи й не було запитанням.

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

FAQ

Чи точні перевірки надійності пароля?

Якісь точні, якісь ні, і вся різниця — у рушії. Перевірка на zxcvbn програє реальну атаку вгадування (словникові слова, leet, клавіатурні ряди, рік у кінці) й оцінює P@ssw0rd2026! як слабкий. Перевірка, що просто множить довжину на розмір набору символів, навіть не здогадується, що слово password сидить усередині, тож видає величезне число. Коли дві перевірки різко не збігаються, помиляється майже завжди саме арифметична.

Чому одна перевірка каже «надійний», а інша — «слабкий»?

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

Чи безпечно вводити справжній пароль в онлайн-перевірку?

Лише коли оцінювання виконується повністю у браузері й нічого нікуди не надсилається. Перевірка витоку, що надсилає кілька перших символів хешу, — це нормально; надсилати сам пароль — ні. Якщо сайт чітко не каже, що працює на стороні клієнта, перевірте пароль тієї самої форми замість справжнього або скористайтеся перевіркою на кшталт моєї, яка прямо заявляє, що пароль не залишає сторінку.

Спробуйте безкоштовний генератор паролів

Генеруйте надійні, безпечні паролі миттєво. 100% приватно, на стороні клієнта.

Відкрити генератор паролів