Alat Keselamatan

Penguji Kekuatan Kata Laluan

Analisis masa nyata dengan enjin zxcvbn: kamus kata laluan biasa, lalai papan kekunci, turutan, pengulangan dan tarikh semuanya menurunkan mata anda — ukuran keselamatan yang jauh lebih tepat daripada mengira kelas huruf kecil/huruf besar/angka/simbol. Semuanya berjalan secara tempatan; kata laluan anda tidak pernah meninggalkan pelayar.

Dikuasakan oleh zxcvbn Kamus kata laluan lemah 100% sisi klien Keputusan masa nyata
Dikira hanya pada peranti anda — tidak pernah dimuat naik
k-anonymity: hanya 5 aksara pertama hash SHA-1 meninggalkan pelayar anda
Kekuatan /100
Sangat lemah Cemerlang
Panjang
Entropi berkesan
bit
Saiz set aksara
Serangan luar talian (farm GPU, ~10 bilion tekaan/saat)
Serangan dalam talian (dibatasi kadar, ~100 tekaan/jam)
Tetapan dasar lanjutan

Dipisahkan oleh koma atau baris baharu, tidak sensitif huruf besar/kecil. zxcvbn secara automatik menangkap variasi huruf besar/kecil, penggantian leet (cth. Pa$$w0rd) dan pembalikan.

Bandingkan dua kata laluan

KENAPA INI PENTING

Kenapa "huruf besar + huruf kecil + digit + simbol" bukanlah keselamatan

P@ssw0rd! memenuhi empat petak aksara namun masih berada dalam senarai pelanggaran sebenar. Kekuatan bergantung pada kebolehkaan tekaan, bukan pengiraan kelas aksara.

01

Padanan kata laluan lemah

Kamus terbina dalam kata laluan dan perkataan biasa didenda berat — password, 123456 dan P@ssw0rd diberikan skor yang sangat lemah dengan betul.

02

Pengesanan corak

Laluan papan kekunci, turutan lurus, pengulangan, tarikh dan perkataan biasa semua mengurangkan ruang tekaan berkesan.

03

Entropi berkesan, bukan teori

Skor menganggar tekaan sebenar daripada struktur yang ditemui — bukan saiz set aksara didarab dengan panjang.

04

Dua senario serangan

Anggaran berasingan untuk penggodaman GPU luar talian dan tekaan terhad kadar dalam talian membantu memahami kos penyerang.

05

Dasar dan senarai sekatan khusus

Tetapkan panjang minimum dan syarat kelas; tambah nama syarikat atau kod projek untuk memenuhi peraturan kata laluan korporat.

06

Sepenuhnya setempat

Kata laluan anda tidak pernah meninggalkan pelayar atau bersentuhan dengan pelayan; tetapan hanya berada dalam localStorage anda sendiri.

Memahami kekuatan kata laluan

Cara kerja pemarkahan, maksud masa penggodaman dan apa yang sebenarnya menjadikan kata laluan yang baik.

Bagaimanakah skor 0–4 zxcvbn dikira?

zxcvbn pertama membahagikan kata laluan kepada cebisan: perkataan kamus (kata laluan biasa, perkataan Inggeris), laluan papan kekunci, turutan, pengulangan, tarikh dan serpihan daya kasar.

Ia menganggar tekaan per cebisan, menggabungkannya ke dalam jumlah tekaan dan memetakkannya kepada skor 0–4. Transformasi biasa dikira secara automatik — pembalikan kes sensitif huruf, penggantian leet (@→a, 0→o), akhiran tahun — itulah sebabnya P@ssw0rd mendapat skor buruk walaupun kepelbagaian aksaranya.

Apakah perbezaan antara entropi berkesan dan saiz set aksara?

Saiz set aksara mendarabkan saiz abjad dengan panjang — siling teori yang menganggap setiap aksara benar-benar rawak, yang hampir tidak berlaku pada kata laluan sebenar.

Entropi berkesan (bilangan bit yang ditunjukkan di sini) adalah ruang tekaan sebenar yang dianggar oleh zxcvbn setelah menemui perkataan kamus dan corak. Pada panjang yang sama, iloveyou2024 mempunyai entropi berkesan yang jauh lebih rendah daripada rentetan rawak.

Bagaimanakah masa penggodaman dianggar — adakah ia boleh dipercayai?

Masa pemecahan = anggaran tebakan ÷ tebakan per saat. Dua kelajuan ditunjukkan: ~10 bilion/saat untuk peternakan GPU luar talian (penyerang mempunyai hash), dan ~100/jam untuk log-in terhad kadar dalam talian.

Anggapnya sebagai tingkat magnitud, bukan ramalan: kelajuan sebenar bergantung pada algoritma hash (bcrypt/Argon2 adalah magnitud lebih perlahan daripada MD5), perkakasan dan kualiti kamus. Terdapat perbezaan 10× tidak mengubah apa-apa; jurang berjuta-juta kali ganda melakukannya.

Apa yang sebenarnya membuat kata laluan yang baik?

Dua jalan yang kukuh: rentak rawak 16+ karakter daripada pengurus kata laluan, unik bagi setiap laman; atau frasa laluan 4+ perkataan tidak berkaitan (seperti correct-horse-battery-staple) — panjang dan tidak bermakna.

Apa pun yang anda pilih, pasangkan dengan pengesahan berbilang faktor (MFA) dan jangan sekali gunakan semula kata laluan yang sama merentas laman.

Laman saya memerlukan huruf besar/kecil/nombor/simbol — kenapa skor rendah?

Dasar korporat (panjang, kelas karakter) adalah tahap pematuhan: ia menjawab "adakah ia memenuhi syarat?". Skor zxcvbn menjawab "bolehkah ia diteka?". Kedua-duanya tidak bergantung.

Menambahkan tanda seru dan tahun kepada perkataan biasa (password!2024) lulus kebanyakan pemeriksaan dasar tetapi jatuh kepada serangan kamus dalam beberapa saat.

Adakah kata laluan saya dimuat naik ke mana-mana?

Tidak. Semua berjalan dalam pelayar anda melalui JavaScript — tiada permintaan rangkaian yang menghantar kata laluan, dan ia juga berfungsi di luar talian. Hanya dasar khas anda (peraturan panjang, senarai blok) disimpan secara tempatan; ia tidak pernah mengandungi kata laluan.

Memeriksa kekuatan kata laluan dalam kod

Untuk menambah pemeriksaan kekuatan secara langsung ke borang daftar atau pertukaran kata laluan anda sendiri, gunakan port zxcvbn untuk bahasa anda:

JavaScript
<!-- 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>
            
Node.js
// npm i @zxcvbn-ts/core
import { zxcvbn } from '@zxcvbn-ts/core';

const result = zxcvbn('P@ssw0rd!');
console.log(result.score, result.guesses_log10);
            
PHP
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'];
            
Python
pip install zxcvbn
            
from zxcvbn import zxcvbn

res = zxcvbn('P@ssw0rd!')
print(res['score'], res['crack_times_display'])
            
Go
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)
}
            
Rust
# 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}"),
    }
}
            

Skor dan anggaran corak mungkin berbeza sedikit daripada laman ini bergantung pada versi perpustakaan, tetapi prinsipnya sama. Untuk pemeriksaan pada pelayan, kuasakan juga had panjang dan pengehadan kadar supaya input yang terlalu besar tidak boleh digunakan untuk membakar CPU.

Soalan lazim

Bagaimana pengesan kekuatan kata laluan ini berfungsi?

Ia menggunakan zxcvbn, algoritma sumber terbuka daripada Dropbox: kata laluan dipadankan dengan kamus kata laluan biasa, senarai perkataan Bahasa Inggeris, lalutan papan kekunci, turutan, tarikh dan corak berulang. Anggaran purata bilangan tebakan yang diperlukan oleh penyerang dipetakan kepada skor 0–4 dan anggaran masa pemecahan.

P@ssw0rd kelihatan kompleks — kenapa ia "sangat lemah"?

Ia merupakan salah satu kata laluan lemah paling ikonik dalam corpus pelanggaran. Ia muncul terus dalam kamus zxcvbn, dan huruf besar serta gantian leet (a→@, o→0) diiktiraf secara automatik. Karakter pelbagai dengan struktur yang boleh diramalkan sepenuhnya adalah betul-betul apa yang cuba dilakukan penyerang berasaskan peraturan terlebih dahulu.

Berapa panjang sepatutnya kata laluan?

Apabila dijana secara rawak, 12+ karakter biasanya mengalahkan serangan dalam talian, manakala 16+ menentang pemecahan GPU luar talian untuk bertahun-tahun. Panjang lebih penting daripada kerumitan karakter: rentak huruf kecil rawak 20 karakter mengalahkan rentak campuran 10 karakter daripada keempat-empat kelas.

Kenapa pisahkan masa pemecahan luar talian dan dalam talian?

Senario serangan berbeza: selepas pelanggaran pangkalan data, penyerang boleh cuba hash secara tempatan pada GPU dengan berbilion tebakan per saat; terhadap log-in langsung, pengehadan kadar membenarkan hanya beberapa tebakan per saat. Kata laluan yang sama boleh bertahan lebih kurang satu trilion kali ganda dalam satu senario berbanding yang lain — lalu kedua-duanya ditunjukkan.

Adakah input saya disimpan di mana-mana?

Tidak. Kata laluan anda hanya berada dalam memori pelayar anda dan hilang apabila disegarkan. Hanya tetapan dasar khas anda (peraturan panjang, senarai blok) disimpan dalam storan tempatan — ia tidak pernah mengandungi kata laluan.

Alat berkaitan