Перевірка надійності пароля
Аналіз у реальному часі на рушії zxcvbn: словники поширених паролів, послідовності клавіш, послідовності символів, повторення та зразки з дат знижують ваш бал — це набагато правдивіший показник безпеки, ніж підрахунок класів символів (великі/малі літери, цифри, символи). Весь процес відбувається локально; ваш пароль ніколи не залишає браузер.
- Рушій
- zxcvbn
- Оцінка
- Шкала 0–4
- Конфіденційність
- Ніколи не завантажується
- Словник
- Вбудовані поширені паролі
Розширені налаштування політики
Розділені комами або рядками, нечутливі до регістру. zxcvbn автоматично враховує варіанти регістру, заміни цифр літерами (наприклад, Pa$$w0rd) та звороти.
Порівняння двох паролів
ЧОМУ ЦЕ ВАЖЛИВО
Чому «верхні + нижні літери + цифра + символ» — це не безпека
P@ssw0rd! відповідає всім чотирьом умовам символів і все одно очолює списки втрачених даних. Сила залежить від вгадуваності, а не від арифметики класів символів.
Перевірка слабких паролів
Вбудований словник поширених паролів та слів серйозно зменшує оцінку — пароль, 123456 та P@ssw0rd правильно оцінюються як дуже слабкі.
Виявлення шаблонів
Комбінації з клавіатури, прямі послідовності, повторення, дати та поширені слова зменшують ефективний простір для вгадування.
Ефективна, а не теоретична ентропія
Оцінка розраховує реальні спроби вгадування на основі знайдених структур, а не добуток розміру набору символів на довжину.
Два сценарії атак
Окремі оцінки для офлайн-злому на GPU та онлайн-обмеженого вгадування допомагають зрозуміти витрати атакуючого.
Користувацька політика та чорний список
Встановіть мінімальну довжину та вимоги до класів символів; додайте назви компанії або кодові назви проектів, щоб відповідати корпоративним правилам щодо паролів.
Повністю локально
Ваш пароль ніколи не залишає браузер і не контактує з сервером; налаштування зберігаються лише у вашому localStorage.
Розуміння сили пароля
Як працює система оцінювання, що означає час злому та що саме робить пароль хорошим.
Як розраховується оцінка zxcvbn від 0 до 4?
Zxcvbn спочатку розбиває пароль на фрагменти: слова зі словника (поширені паролі, англійські слова), комбінації з клавіатури, послідовності, повторення, дати та фрагменти, що піддаються грубому перебору.
Він розраховує кількість спроб вгадування для кожного фрагмента, об'єднує їх у загальну кількість та відображує на оцінку від 0 до 4. Поширені перетворення враховуються автоматично — зміна регістру, заміни цифр літерами (@→a, 0→o), додатки року — тому P@ssw0rd погано оцінюється, незважаючи на різноманітність символів.
Чим відрізняється ефективна ентропія від розміру набору символів?
Розмір набору символів множить розмір алфавіту на довжину — це теоретична межа, яка передбачає, що кожен символ повністю випадковий, чого реальні паролі майже ніколи не є.
Ефективна ентропія (кількість бітів, що відображається тут) — це реальний простір для вгадування, який оцінює zxcvbn після знаходження слів зі словника та шаблонів. При однаковій довжині iloveyou2024 має набагато меншу ефективну ентропію, ніж випадковий рядок.
Як розраховується час злому — чи є ці оцінки надійними?
Час злому = приблизне число підборів ÷ кількість підборів на секунду. Показано дві швидкості: ~10 мільярдів/сек для офлайн-ферми GPU (зловмисник має хеш), та ~100 годину для онлайн-логіну з лімітом запитів.
Сприймайте їх як порядки величини, а не прогнози: реальна швидкість залежить від хеш-алгоритму (bcrypt/Argon2 на порядки повільніші за MD5), апаратного забезпечення та якості словників. Похибка в 10× нічого не змінює, а розрив у мільйони разів – дуже суттєвий.
Що насправді робить пароль хорошим?
Два надійні варіанти: випадкова строка з 16+ символів (зокрема, створена менеджером паролів, унікальна для кожного сайту); або фраза з 4+ не пов'язаних слів (як-от correct-horse-battery-staple) – довга та безглузда.
Не важливо, який варіант ви оберете – обов'язково поєднуйте його з багатофакторною автентифікацією (MFA) і ніколи не використовуйте той самий пароль для різних сайтів.
Мой сайт вимагає верхній/нижній регістр/цифру/символ – чому низький бал?
Корпоративна політика (довжина, набір символів) – це мінімальна вимога відповідності: вона відповідає на запитання "чи відповідає вона?". А оцінка zxcvbn відповідає на запитання "чи можна її підібрати?". Ці два показники не пов'язані між собою.
Додавання знаку оклику та року до поширеного слова (пароль!2024) проходить більшість перевірок політики, але за секунди піддається словниковому атаку.
Чи передається мій пароль куди-небудь?
Ні. Все працює у вашому браузері через JavaScript – мережевих запитів, що відправляють пароль, немає, і інструмент можна використовувати офлайн. Тільки ваша налаштована політика (правила довжини, чорний список) зберігається локально; пароль ніколи не потрапляє до неї.
Перевірка надійності пароля в коді
Щоб додати перевірку надійності в реальному часі до своєї форми реєстрації або зміни пароля, використовуйте порт zxcvbn для вашої мови:
<!-- CDN -->
<script src="https://unpkg.com/[email protected]/dist/zxcvbn.js"></script>
<script>
const res = zxcvbn('P@ssw0rd!');
console.log(res.score, res.crack_times_display);
</script>
// npm i @zxcvbn-ts/core
import { zxcvbn } from '@zxcvbn-ts/core';
const result = zxcvbn('P@ssw0rd!');
console.log(result.score, result.guesses_log10);
composer require bjeavons/zxcvbn-php
<?php
require __DIR__ . '/vendor/autoload.php';
use ZxcvbnPhp\Zxcvbn;
$zxcvbn = new Zxcvbn();
$res = $zxcvbn->passwordStrength('P@ssw0rd!');
echo $res['score'];
pip install zxcvbn
from zxcvbn import zxcvbn
res = zxcvbn('P@ssw0rd!')
print(res['score'], res['crack_times_display'])
go get github.com/nbutton23/zxcvbn-go
package main
import (
"fmt"
zxcvbn "github.com/nbutton23/zxcvbn-go"
)
func main() {
res := zxcvbn.PasswordStrength("P@ssw0rd!", nil)
fmt.Println(res.Score, res.Guesses)
}
# Add dependency
cargo add zxcvbn
use zxcvbn::zxcvbn;
fn main() {
match zxcvbn("P@ssw0rd!", &[]) {
Ok(estimate) => {
println!("score: {}", estimate.score()); // 0..4
if let Some(times) = estimate.crack_times() {
println!("offline: {:?}", times.offline_slow_hashing_1e4_per_second());
}
}
Err(err) => eprintln!("zxcvbn error: {err}"),
}
}
Оцінки та приблизні значення можуть незначно відрізнятися від тієї, що на цій сторінці, залежно від версії бібліотеки, але принципи залишаються тими самими. Для серверних перевірок також застосовуйте обмеження довжини та швидкості запитів, щоб забагато введених даних не перевантажували CPU.
Часті запитання
Як працює цей перевіряч надійності паролів?
Він використовує zxcvbn – алгоритм з відкритим кодом від Dropbox: пароль зіставляється зі словниками поширених паролів, списками англійських слів, послідовностями клавіатури, послідовностями дат та повторюваних патернів. Приблизне середнє число підборів, потрібне зловмиснику, відображається у вигляді оцінки від 0 до 4 та розрахунку часу злому.
P@ssw0rd виглядає складно – чому він "дуже слабкий"?
Це один з найвідоміших слабких паролів у базах даних про зломи. Він прямо наявний у словниках zxcvbn, а регістр та заміни літер на схожі символи (a→@, o→0) розпізнаються автоматично. Різноманітні символи з абсолютно передбачуваною структурою – це саме те, що атакуючі, що використовують словникові алгоритми, намагаються підібрати першими.
Яка має бути довжина пароля?
Якщо пароль згенерований випадково, 12+ символів зазвичай достатньо, щоб протистояти онлайн-атакам, а 16+ вистачає, щоб протистояти офлайн-атакам на GPU протягом багатьох років. Довжина має більше значення, ніж складність символів: випадкова строка з 20 малих літер краща, ніж 10-символьна строка, що складається з усіх чотирьох типів символів.
Чому розділяються час офлайн та онлайн злому?
Сцена атак різні: після злому бази даних зловмисник може перебирати хеші локально на GPU з мільярдами спроб за секунду; проти реального логіну обмеження швидкості дозволяє лише кілька спроб за секунду. Той самий пароль може виживати у одного сценарію в трильйони разів довше, ніж в іншому – тому показуються обидва значення.
Чи зберігаються мої дані вводу де-небудь?
Ні. Ваш пароль перебуває лише в пам'яті браузера і зникає після оновлення сторінки. Лише ваші налаштування політики (правила довжини, чорний список) зберігаються в локальному сховищі – в них ніколи немає пароля.