Công cụ bảo mật

Công cụ kiểm tra độ mạnh mật khẩu

Phân tích tức thời dựa trên engine zxcvbn: Các mẫu như từ điển mật khẩu yếu phổ biến, chuỗi bàn phím, chuỗi liên tiếp, lặp lại và ngày sẽ bị trừ điểm, gần đúng với an toàn thực tế hơn việc đếm ký tự "chữ hoa/chữ thường + số + ký hiệu". Tính toán hoàn toàn cục bộ, mật khẩu không ra khỏi trình duyệt.

Engine zxcvbn Nhận dạng từ điển mật khẩu yếu 100% tính toán cục bộ Kết quả tức thời
Mật khẩu chỉ được tính toán tại máy, không được tải lên
k-anonymity: Chỉ gửi 5 ký tự đầu của hash SHA-1, mật khẩu không ra khỏi trình duyệt
Độ mạnh /100
Cực yếu Rất mạnh
Độ dài
Entropy hiệu quả
bit
Không gian ký tự
Phá mật khẩu ngoại tuyến (cụm GPU, khoảng 10 tỷ lần/giây)
Đoán mật khẩu trực tuyến (giới hạn tốc độ, khoảng 100 lần/giờ)
Cài đặt chiến lược nâng cao

Ngăn cách bằng dấu phẩy hoặc xuống dòng, không phân biệt chữ hoa/thường. zxcvbn sẽ tự động nhận dạng biến thể chữ hoa/thường, thay thế Leet (ví dụ: Pa$$w0rd) và cách viết ngược.

So sánh hai mật khẩu

TẠI SAO QUAN TRỌNG

Tại sao "có chữ hoa, chữ thường, số và ký hiệu" không đồng nghĩa an toàn

P@ssw0rd! Đầy đủ bốn loại ký tự, nhưng lại nằm trong danh sách mật khẩu bị rò rỉ thực tế. Độ mạnh mật khẩu phụ thuộc vào độ khó đoán, không phải phép tính số lượng loại ký tự.

01

Khớp từ điển mật khẩu yếu

Tích hợp từ điển mật khẩu và từ thông dụng, sẽ phạt nặng khi trùng; các mật khẩu như password, 123456, P@ssw0rd đều được xác định là cực yếu.

02

Nhận dạng mẫu

Chuỗi phím bàn phím, chuỗi liên tiếp, đoạn lặp lại, ngày tháng, từ thông dụng đều sẽ làm giảm không gian đoán hiệu quả đáng kể.

03

Entropy hiệu quả chứ không phải entropy lý thuyết

Điểm đánh giá dựa trên cấu trúc đã nhận dạng để ước tính số lần đoán thực tế, không phải đơn giản bằng kích thước bộ ký nhân với độ dài.

04

Hai tình huống tấn công

Ước tính riêng thời gian bạo lực GPU ngoại tuyến và tấn công đoán giới hạn tốc độ trực tuyến, giúp bạn đánh giá trực quan chi phí tấn công.

05

Chính sách tùy chỉnh và danh sách đen

Cho phép thiết lập độ dài tối thiểu và yêu cầu về ký tự, thêm các từ yếu đặc biệt như tên công ty, mã dự án, phù hợp với quy tắc mật khẩu của doanh nghiệp.

06

Tính toán tại địa phương trong suốt quá trình

Mật khẩu không rời khỏi trình duyệt và không đi qua bất kỳ máy chủ nào; cài đặt chỉ tồn tại trong localStorage của bạn.

Kiến thức liên quan đến độ mạnh mật khẩu

Về nguyên tắc xếp hạng, thời gian bẻ khóa và cách xác định một mật khẩu tốt.

Cách tính điểm 0–4 của zxcvbn?

Zxcvbn đầu tiên chia mật khẩu thành nhiều đoạn: từ trong từ điển (mật khẩu phổ biến, từ tiếng Anh), đường đi trên bàn phím, chuỗi, sự lặp lại, ngày tháng, đoạn bạo lực, v.v.

Sau đó ước tính số lần đoán cần thiết cho từng đoạn, lấy tổng số kết hợp rồi ánh xạ thành 5 mức từ 0–4. Nó cũng tự động xem xét các biến thể phổ biến như đảo chữ hoa/thường, thay thế Leet (@→a, 0→o), hậu tố năm, nên P@ssw0rd sẽ không nhận điểm cao chỉ vì có nhiều loại ký tự.

Khác biệt giữa "entropy hiệu dụng" và không gian ký tự là gì?

Không gian ký tự là giới hạn lý thuyết tính bằng cách nhân kích thước tập ký tự với độ dài, giả định mỗi ký tự hoàn toàn ngẫu nhiên — thực tế mật khẩu hầu như không bao giờ đáp ứng điều này.

Entropy hiệu dụng (số bit hiển thị trên trang này) là không gian đoán thực tế mà zxcvbn ước tính sau khi nhận diện được từ từ điển và mẫu. Ví dụ: với cùng độ dài, entropy hiệu dụng của "iloveyou2024" thấp hơn nhiều so với chuỗi ngẫu nhiên.

Cách ước tính thời gian bẻ khóa? Có đáng tin cậy không?

Thời gian bẻ khóa = Số lần đoán ước tính Ý tốc độ đoán mỗi giây. Trang này cung cấp hai tốc độ: cụm GPU ngoại tuyến khoảng 10 tỷ lần/giây (khi kẻ tấn công đã lấy được mã băm mật khẩu), tốc độ giới hạn trực tuyến khoảng 100 lần/giờ (giao diện đăng nhập có giới hạn tần suất).

Đây là tham chiếu bậc thang chứ không phải dự đoán chính xác: tốc độ thực tế phụ thuộc vào thuật toán băm (bcrypt/Argon2 chậm hơn MD5 vài bậc thang), phần cứng của kẻ tấn công và chất lượng từ điển. Nhưng khác biệt dưới 10 lần không ảnh hưởng kết luận — chỉ khi khác biệt hàng triệu lần thì mới có ý nghĩa.

Đâu là mật khẩu được coi là tốt?

Hai hướng đi đáng tin cậy:一是 chuỗi ngẫu nhiên dài hơn 16 ký tự được trình quản lý mật khẩu tạo ra, mỗi trang web khác nhau; hai cụm từ mạnh gồm hơn 4 từ không liên quan với nhau (ví dụ: correct-horse-battery-staple), dài và vô nghĩa.

Bất kể hướng đi nào, hãy kết hợp với xác thực đa yếu tố (MFA) và không tái sử dụng cùng một mật khẩu trên nhiều trang web.

Trang web đã yêu cầu chữ hoa, chữ thường, số và ký tự đặc biệt, tại sao nó vẫn bị đánh giá thấp?

Chiến lược của doanh nghiệp (độ dài, loại ký tự) là tiêu chuẩn tuân thủ, trả lời cho câu hỏi "có tuân thủ quy định hay không"; điểm zxcvbn trả lời cho câu hỏi "có đoán được hay không". Hai điều này là hai việc độc lập.

Thêm dấu chấm than và năm vào từ thông thường (password!2024) có thể vượt qua hầu hết các kiểm tra chiến lược, nhưng sẽ bị hack trong vài giây khi đối mặt với tấn công từ từ điển.

Mật khẩu của tôi sẽ được tải lên?

Không. Việc kiểm tra hoàn toàn được thực hiện bằng JavaScript trong trình duyệt của bạn, trang web không có yêu cầu mạng gửi mật khẩu nào; bạn cũng có thể sử dụng khi mất kết nối. Chiến lược tùy chỉnh được lưu trữ cục bộ trong trình duyệt, cũng không chứa mật khẩu gốc.

Kiểm tra độ mạnh mật khẩu trong mã

Để thực hiện kiểm tra độ mạnh thời gian thực trong biểu mẫu đăng ký / đổi mật khẩu của riêng bạn, bạn có thể sử dụng các triển khai zxcvbn cho từng ngôn ngữ:

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}"),
    }
}
            

Lưu ý: Độ mạnh và ước tính mẫu do các thư viện này đưa ra có thể hơi khác so với trang này do phiên bản, nhưng nguyên lý cốt lõi giống nhau. Khi kiểm tra ở phía máy chủ,建议 đồng thời thực hiện giới hạn độ dài tối đa và giới hạn tần suất, tránh bị tấn công bằng đầu vào siêu dài làm tiêu tốn tài nguyên tính toán.

Câu hỏi thường gặp

Nguyên tắc hoạt động của trình kiểm tra độ mạnh mật khẩu là gì?

Trang này sử dụng thuật toán zxcvbn mã nguồn mở của Dropbox: nó so sánh mật khẩu với các từ điển mật khẩu yếu phổ biến, danh từ tiếng Anh, đường đi bàn phím, chuỗi, ngày tháng và các mẫu lặp lại, ước tính số lần đoán trung bình mà kẻ tấn công cần, sau đó ánh xạ thành 5 mức điểm từ 0 đến 4 và thời gian giải mã.

P@ssw0rd trông rất phức tạp, tại sao chỉ là rất yếu?

Đây là một trong những mật khẩu yếu kinh điển nhất trong các kho mật khẩu bị rò rỉ. Từ điển của zxcvbn chứa nó, và có thể nhận dạng biến đổi chữ hoa chữ thường và thay thế Leet (a→@, o→0). Mặc dù có nhiều loại ký tự, cấu trúc hoàn toàn có thể đoán được, kẻ tấn công sẽ thử nó trong từ điển quy tắc đầu tiên.

Mật khẩu dài bao lâu thì mới an toàn?

Với điều kiện tạo ngẫu nhiên, mật khẩu trên 12 ký tự thường đủ chống tấn công trực tuyến; trên 16 ký tự có thể chống khóa GPU ngoại tuyến trong nhiều năm. Chiều dài quan trọng hơn độ phức tạp ký tự: một chuỗi ngẫu nhiên 20 ký tự chữ thường mạnh hơn nhiều so với mật khẩu 10 ký tự hỗn hợp 4 loại ký tự.

Tại sao thời gian giải mật được phân thành hai thể loại: trực tuyến và ngoại tuyến?

Do kịch bản tấn công khác nhau: Sau khi trang web bị rò rỉ dữ liệu, kẻ tấn công có thể dùng GPU tại địa phương để thử hàng tỷ hàm băm mỗi giây; trong khi giao diện đăng nhập trực tuyến thường có giới hạn tần suất, không thể thử nhiều lần mỗi giây. Thời gian sống của cùng một mật khẩu có thể chênh lệch hàng nghìn tỷ lần trong hai kịch bản, nên cần phân biệt.

Kết quả kiểm tra có được lưu lại không?

Không. Mật khẩu luôn chỉ nằm trong bộ nhớ trình duyệt của bạn, sẽ biến mất khi làm mới trang; chỉ chính sách bạn tự định nghĩa (yêu cầu độ dài, danh sách đen) mới lưu ở trình duyệt địa phương, không chứa bất kỳ mật khẩu nào.

Công cụ liên quan