เครื่องมือตรวจสอบความปลอดภัยรหัสผ่าน
การวิเคราะห์แบบเรียลไทม์ด้วยเครื่องมือ zxcvbn: พจนานุกรมรหัสผ่านทั่วไป การเรียงลำดับบนแป้นพิมพ์ ลำดับ การทำซ้ำ และวันที่ ล้วนทำให้คะแนนลดลง — นี่เป็นมาตรวัดความปลอดภัยที่แม่นยำกว่าการนับประเภทตัวพิมพ์เล็ก/ตัวพิมพ์ใหญ่/ตัวเลข/สัญลักษณ์ ทุกอย่างทำงานในเครื่องของคุณเท่านั้น รหัสผ่านของคุณจะไม่ออกจากเบราว์เซอร์เลย
- เครื่องมือ
- zxcvbn
- คะแนน
- มาตราส่วน 0–4
- ความเป็นส่วนตัว
- ไม่มีการอัปโหลดข้อมูล
- พจนานุกรม
- มีรหัสผ่านทั่วไปอยู่ในระบบ
การตั้งค่านโยบายขั้นสูง
คั่นด้วยเครื่องหมายจุลภาคหรือขึ้นบรรทัดใหม่ ไม่คำนึงถึงตัวพิมพ์ Zxcvbn จะตรวจจับรูปแบบตัวพิมพ์ที่แตกต่าง การใช้ตัวอักษรแทน (เช่น Pa$$w0rd) และการกลับลำโดยอัตโนมัติ
เปรียบเทียบรหัสผ่านสองตัว
สิ่งนี้สำคัญอย่างไร
ทำไม "ตัวพิมพ์ใหญ่ + ตัวพิมพ์เล็ก + ตัวเลข + สัญลักษณ์" จึงไม่ใช่ความปลอดภัย
P@ssw0rd! ตรงตามเงื่อนไขตัวอักษรทั้งสี่ประการ แต่ก็ยังติดอันดับรายการรหัสผ่านที่รั่วไหลบ่อยที่สุด ความแข็งแกร่งขึ้นอยู่กับความคาดเดาได้ ไม่ใช่การคำนวณคลาสตัวอักษร
การจับคู่รหัสผ่านอ่อนแอ
พจนานุกรมรหัสผ่านธรรมดาและคำทั่วไปในตัวจะถูกปรับค่าลงอย่างมาก — รหัสผ่าน 123456 และ P@ssw0rd จะได้คะแนนว่าอ่อนแอมากอย่างถูกต้อง
การตรวจจับรูปแบบ
การเดินแป้นพิมพ์ ลำดับตรง การทำซ้ำ วันที่ และคำธรรมดาทั้งหมดจะลดพื้นที่การคาดเดาที่มีประสิทธิภาพ
เอนโทรปีที่มีประสิทธิภาพ ไม่ใช่เอนทรปีที่ทฤษฎี
คะแนนจะประมาณการจำนวนการคาดเดาจริงจากโครงสร้างที่พบ — ไม่ใช่ขนาดชุดอักขระคูณด้วยความยาว
สองสถานการณ์การโจมตี
การประมาณการแยกต่างหากสำหรับการแครก GPU แบบออฟไลน์และการทายแบบออนไลน์ที่มีการจำกัดอัตรา จะช่วยให้เข้าใจต้นทุนของผู้โจมตีได้
นโยบายและรายการคำห้ามแบบกำหนดเอง
ตั้งค่าความยาวขั้นต่ำและข้อกำหนดคลาส เพิ่มชื่อบริษัทหรือชื่อรหัสโครงการเพื่อให้สอดคล้องกับกฎรหัสผ่านองค์กร
ใช้งานในพื้นที่อย่างสมบูรณ์
รหัสผ่านของคุณจะไม่ออกจากเบราว์เซอร์หรือสัมผัสเซิร์ฟเวอร์ การตั้งค่าจะอยู่ใน 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 สำหรับภาษาของคุณ:
<!-- 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 ได้หลายพันล้านครั้งต่อวินาที; ส่วนการโจมตีการเข้าสู่ระบบสด การจำกัดอัตราจะอนุญาตให้ลองได้เพียงไม่กี่ครั้งต่อวินาทีเท่านั้น รหัสผ่านเดียวกันอาจอยู่รอดได้นานกว่าหนึ่งล้านล้านเท่าในสถานการณ์หนึ่งเมื่อเทียบกับอีกสถานการณ์ — จึงต้องแสดงทั้งสองแบบ
ข้อมูลนำเข้าของฉันถูกเก็บไว้ที่ไหนหรือไม่?
ไม่มี รหัสผ่านของคุณอยู่ในหน่วยความจำเบราว์เซอร์ของคุณเท่านั้น และจะหายไปเมื่อรีเฟรชหน้า มีเพียงการตั้งค่านโยบายที่คุณตั้งเอง (กฎความยาว, รายการบล็อก) เท่านั้นที่ถูกเก็บไว้ในที่จัดเก็บในเครื่อง — พวกมันไม่มีส่วนใดที่มีรหัสผ่านเลย