เครื่องมือความปลอดภัย

เครื่องมือตรวจสอบความปลอดภัยรหัสผ่าน

การวิเคราะห์แบบเรียลไทม์ด้วยเครื่องมือ zxcvbn: พจนานุกรมรหัสผ่านทั่วไป การเรียงลำดับบนแป้นพิมพ์ ลำดับ การทำซ้ำ และวันที่ ล้วนทำให้คะแนนลดลง — นี่เป็นมาตรวัดความปลอดภัยที่แม่นยำกว่าการนับประเภทตัวพิมพ์เล็ก/ตัวพิมพ์ใหญ่/ตัวเลข/สัญลักษณ์ ทุกอย่างทำงานในเครื่องของคุณเท่านั้น รหัสผ่านของคุณจะไม่ออกจากเบราว์เซอร์เลย

ขับเคลื่อนโดย zxcvbn พจนานุกรมรหัสผ่านอ่อนแอ ทำงานฝั่งไคลเอ็นต์ 100% ผลลัพธ์แบบเรียลไทม์
คำนวณบนอุปกรณ์ของคุณเท่านั้น — ไม่มีการอัปโหลดข้อมูล
k-anonymity: เพียง 5 ตัวอักษรแรกของแฮช SHA-1 จะออกจากเบราว์เซอร์ของคุณ
ความปลอดภัย /100
อ่อนแอมาก ยอดเยี่ยม
ความยาว
เอนโทรปีที่มีประสิทธิภาพ
บิต
ขนาดชุดอักขระ
การโจมตีแบบออฟไลน์ (ฟาร์ม GPU, ~10 พันล้านครั้งต่อวินาที)
การโจมตีแบบออนไลน์ (จำกัดอัตรา, ~100 ครั้งต่อชั่วโมง)
การตั้งค่านโยบายขั้นสูง

คั่นด้วยเครื่องหมายจุลภาคหรือขึ้นบรรทัดใหม่ ไม่คำนึงถึงตัวพิมพ์ Zxcvbn จะตรวจจับรูปแบบตัวพิมพ์ที่แตกต่าง การใช้ตัวอักษรแทน (เช่น Pa$$w0rd) และการกลับลำโดยอัตโนมัติ

เปรียบเทียบรหัสผ่านสองตัว

สิ่งนี้สำคัญอย่างไร

ทำไม "ตัวพิมพ์ใหญ่ + ตัวพิมพ์เล็ก + ตัวเลข + สัญลักษณ์" จึงไม่ใช่ความปลอดภัย

P@ssw0rd! ตรงตามเงื่อนไขตัวอักษรทั้งสี่ประการ แต่ก็ยังติดอันดับรายการรหัสผ่านที่รั่วไหลบ่อยที่สุด ความแข็งแกร่งขึ้นอยู่กับความคาดเดาได้ ไม่ใช่การคำนวณคลาสตัวอักษร

01

การจับคู่รหัสผ่านอ่อนแอ

พจนานุกรมรหัสผ่านธรรมดาและคำทั่วไปในตัวจะถูกปรับค่าลงอย่างมาก — รหัสผ่าน 123456 และ P@ssw0rd จะได้คะแนนว่าอ่อนแอมากอย่างถูกต้อง

02

การตรวจจับรูปแบบ

การเดินแป้นพิมพ์ ลำดับตรง การทำซ้ำ วันที่ และคำธรรมดาทั้งหมดจะลดพื้นที่การคาดเดาที่มีประสิทธิภาพ

03

เอนโทรปีที่มีประสิทธิภาพ ไม่ใช่เอนทรปีที่ทฤษฎี

คะแนนจะประมาณการจำนวนการคาดเดาจริงจากโครงสร้างที่พบ — ไม่ใช่ขนาดชุดอักขระคูณด้วยความยาว

04

สองสถานการณ์การโจมตี

การประมาณการแยกต่างหากสำหรับการแครก GPU แบบออฟไลน์และการทายแบบออนไลน์ที่มีการจำกัดอัตรา จะช่วยให้เข้าใจต้นทุนของผู้โจมตีได้

05

นโยบายและรายการคำห้ามแบบกำหนดเอง

ตั้งค่าความยาวขั้นต่ำและข้อกำหนดคลาส เพิ่มชื่อบริษัทหรือชื่อรหัสโครงการเพื่อให้สอดคล้องกับกฎรหัสผ่านองค์กร

06

ใช้งานในพื้นที่อย่างสมบูรณ์

รหัสผ่านของคุณจะไม่ออกจากเบราว์เซอร์หรือสัมผัสเซิร์ฟเวอร์ การตั้งค่าจะอยู่ใน localStorage ของคุณเท่านั้น

การทำความเข้าใจความแข็งแกร่งของรหัสผ่าน

วิธีการคำนวณคะแนน ความหมายของเวลาในการแครก และสิ่งที่สร้างรหัสผ่านที่ดีจริงๆ

คะแนน 0–4 ของ zxcvbn คำนวณอย่างไร

zxcvbn จะแบ่งรหัสผ่านออกเป็นชิ้นๆ ก่อน: คำในพจนานุกรม (รหัสผ่านธรรมดา คำภาษาอังกฤษ), การเดินแป้นพิมพ์, ลำดับ, การทำซ้ำ, วันที่ และชิ้นส่วนแบบบรูทฟอรซ์

จะประมาณการจำนวนการคาดเดาต่อชิ้น รวมเป็นจำนวนการคาดเดาทั้งหมด และแมปเป็นคะแนน 0–4 การแปลงรูปแบบทั่วไปจะถูกคำนวณโดยอัตโนมัติ — การกลับลำตัวพิมพ์ การใช้ตัวอักษรแทน (อักษร @→a, 0→o) ส่วนท้ายปี — จึงทำให้ P@ssw0rd ได้คะแนนต่ำแม้จะมีรูปแบบตัวอักษรที่หลากหลาย

ความแตกต่างระหว่างเอนทรปีที่มีประสิทธิภาพกับขนาดชุดอักขระคืออะไร

ขนาดชุดอักขระคือการคูณขนาดพจนานุกรมด้วยความยาว — เพดานทฤษฎีที่ถือว่าทุกตัวอักษรสุ่มอย่างสมบูรณ์ ซึ่งรหัสผ่านจริงแทบไม่เคยเป็นแบบนั้น

เอนทรปีที่มีประสิทธิภาพ (จำนวนบิตที่แสดงที่นี่) คือพื้นที่การคาดเดาจริงที่ zxcvbn ประมาณการหลังจากพบคำในพจนานุกรมและรูปแบบ เมื่อความยาวเท่ากัน iloveyou2024 จะมีเอนทรปีที่มีประสิทธิภาพน้อยกว่าสตริงสุ่มมาก

เวลาในการแครกประมาณอย่างไร — เชื่อถือได้หรือไม่

เวลาในการถอดรหัส = จำนวนการทายโดยประมาณ ÷ จำนวนการทายต่อวินาที จะแสดงความเร็ว 2 แบบ คือ ~10 พันล้าน/วินาที สำหรับฟาร์ม GPU ออฟไลน์ (ผู้โจมตีมีแฮช) และ ~100 ชั่วโมง สำหรับการเข้าสู่ระบบออนไลน์ที่มีการจำกัดอัตรา

ให้ถือว่าเป็นอันดับของขนาด ไม่ใช่การคาดการณ์: ความเร็วจริงขึ้นอยู่กับอัลกอริทึมแฮช (bcrypt/Argon2 ช้ากว่า MD5 มากตามอันดับของขนาด) ฮาร์ดแวร์ และคุณภาพของดิกชันนารี ความผิดพลาดเพียง 10× ไม่ส่งผลอะไรเลย แต่ช่องว่างที่มีมากกว่าหนึ่งล้านเท่าเท่านั้นที่มีความสำคัญ

อะไรที่ทำให้รหัสผ่านที่ดีจริงๆ?

มีสองวิธีที่มั่นคง: สตริงแบบสุ่มที่มีอักษร 16 ตัวขึ้นไปจากตัวจัดการรหัสผ่าน โดยไม่ซ้ำกันในแต่ละเว็บไซต์; หรือพาสเฟรสที่มีคำที่ไม่เกี่ยวข้องกัน 4 คำขึ้นไป (เช่น correct-horse-battery-staple) — ยาวและไม่มีความหมาย

ไม่ว่าคุณจะเลือกแบบไหน ควรใช้ร่วมกับการตรวจสอบยืนยันแบบหลายปัจจัย (MFA) และอย่าใช้รหัสผ่านเดียวกันซ้ำในหลายเว็บไซต์

เว็บไซต์ของฉันต้องใช้อักษรพิมพ์ใหญ่/พิมพ์เล็ก/ตัวเลข/สัญลักษณ์ — ทำไมคะแนนถึงต่ำ?

นโยบายองค์กร (ความยาว, ชั้นอักษร) คือขั้นต่ำในการปฏิบัติตาม: มันตอบว่า "ปฏิบัติตามหรือไม่" ส่วนคะแนน zxcvbn ตอบว่า "สามารถทายได้หรือไม่" ทั้งสองอย่างนี้ไม่เกี่ยวข้องกัน

การเพิ่มเครื่องหมายอัศเจรีย์และปีลงในคำทั่วไป (password!2024) จะผ่านการตรวจสอบนโยบายส่วนใหญ่ แต่จะถูกโจมตีด้วยดิกชันนารีในไม่กี่วินาที

รหัสผ่านของฉันถูกอัปโหลดไปที่ไหนหรือไม่?

ไม่มี ทุกอย่างทำงานในเบราว์เซอร์ของคุณผ่าน JavaScript — ไม่มีการส่งคำขอเครือข่ายใดๆ ที่ส่งรหัสผ่าน และยังทำงานแบบออฟไลน์ได้อีกด้วย มีเพียงนโยบายที่คุณตั้งเอง (กฎความยาว, รายการบล็อก) เท่านั้นที่ถูกเก็บไว้ในเครื่อง; ไม่มีส่วนใดที่มีรหัสผ่านเลย

การตรวจสอบความปลอดภัยรหัสผ่านในโค้ด

หากต้องการเพิ่มการตรวจสอบความแข็งแรงแบบเรียลไทม์ให้กับแบบฟอร์มการลงทะเบียนหรือเปลี่ยนรหัสผ่านของคุณเอง ให้ใช้พอร์ต zxcvbn สำหรับภาษาของคุณ:

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

คะแนนและการประมาณรูปแบบอาจแตกต่างจากหน้านี้เล็กน้อยขึ้นอยู่กับเวอร์ชันของไลบรารี แต่หลักการยังคงเหมือนเดิม สำหรับการตรวจสอบฝั่งเซิร์ฟเวอร์ ควรบังคับใช้ขีดจำกัดความยาวและการจำกัดอัตราเพื่อไม่ให้ข้อมูลนำเข้าที่มีขนาดใหญ่เกินไปถูกใช้เผาผลาญ CPU

คำถามที่พบบ่อย

ตัวตรวจสอบความแข็งแรงรหัสผ่านนี้ทำงานอย่างไร?

มันใช้ zxcvbn อัลกอริทึมโอเพ่นซอร์สจาก Dropbox: จะจับคู่รหัสผ่านกับดิกชันนารีรหัสผ่านทั่วไป รายการคำภาษาอังกฤษ การเดินแป้นพิมพ์ ลำดับ วันที่ และรูปแบบการทำซ้ำ จำนวนการทายโดยเฉลี่ยโดยประมาณที่ผู้โจมตีต้องการจะถูกแมปเป็นคะแนน 0–4 และการประมาณเวลาในการถอดรหัส

P@ssw0rd ดูซับซ้อน — ทำไมมันถึง "อ่อนแอมาก"?

มันเป็นหนึ่งในรหัสผ่านอ่อนแอที่มีชื่อเสียงที่สุดในฐานข้อมูลการรั่วไหลของข้อมูล มันปรากฏโดยตรงในดิกชันนารีของ zxcvbn และการพิมพ์ตัวใหญ่รวมถึงการใช้ตัวอักษรเลียนแบบ (a→@, o→0) จะถูกจดจำโดยอัตโนมัติ การใช้อักษรที่หลากหลายแต่มีโครงสร้างที่คาดเดาได้อย่างสมบูรณ์คือสิ่งที่ดิกชันนารีของผู้โจมตีแบบใช้กฎหมายจะลองก่อนเสมอ

รหัสผ่านควรมีความยาวเท่าไหร่?

เมื่อสร้างแบบสุ่ม อักษร 12 ตัวขึ้นไปมักจะป้องกันการโจมตีออนไลน์ได้ ส่วนอักษร 16 ตัวขึ้นไปจะทนต่อการถอดรหัสแบบออฟไลน์ด้วย GPU ได้หลายปี ความยาวสำคัญมากกว่าความซับซ้อนของอักษร: สตริงตัวพิมพ์เล็กแบบสุ่มที่มี 20 ตัวจะดีกว่าสตริงผสมทั้งสี่ประเภทที่มี 10 ตัว

ทำไมต้องแยกเวลาในการถอดรหัสแบบออฟไลน์และออนไลน์?

สถานการณ์การโจมตีแตกต่างกัน: หลังจากการรั่วไหลของฐานข้อมูล ผู้โจมตีสามารถลองแฮชในพื้นที่บน GPU ได้หลายพันล้านครั้งต่อวินาที; ส่วนการโจมตีการเข้าสู่ระบบสด การจำกัดอัตราจะอนุญาตให้ลองได้เพียงไม่กี่ครั้งต่อวินาทีเท่านั้น รหัสผ่านเดียวกันอาจอยู่รอดได้นานกว่าหนึ่งล้านล้านเท่าในสถานการณ์หนึ่งเมื่อเทียบกับอีกสถานการณ์ — จึงต้องแสดงทั้งสองแบบ

ข้อมูลนำเข้าของฉันถูกเก็บไว้ที่ไหนหรือไม่?

ไม่มี รหัสผ่านของคุณอยู่ในหน่วยความจำเบราว์เซอร์ของคุณเท่านั้น และจะหายไปเมื่อรีเฟรชหน้า มีเพียงการตั้งค่านโยบายที่คุณตั้งเอง (กฎความยาว, รายการบล็อก) เท่านั้นที่ถูกเก็บไว้ในที่จัดเก็บในเครื่อง — พวกมันไม่มีส่วนใดที่มีรหัสผ่านเลย

เครื่องมือที่เกี่ยวข้อง