ความปลอดภัยรหัสผ่าน: วิธีสร้าง จัดเก็บและตรวจสอบรหัสผ่านที่แข็งแรง
ตอบด่วน
สร้างพาสเวิร์ดสุ่ม 16+ อักขระด้วย Password Generator ของเรา ไม่ใช้ซ้ำ เก็บใน password manager ที่ server hash ด้วย bcrypt (work factor 12+), scrypt หรือ Argon2id —ไม่ใช้ MD5 หรือ SHA-256 audit ผ่าน Have I Been Pwned API
การแนะนำ
พาสเวิร์ดอ่อน ใช้ซ้ำ และเก็บไม่ถูกต้องทำให้บัญชีถูกยึดส่วนใหญ่ คู่มือนี้แก้ปัญหาสี่ข้อ: (1) สร้างพาสเวิร์ดที่ entropy พอต้าน brute force, (2) hash ด้วย KDF ช้าแทน hash เร็ว, (3) หลีกเลี่ยงใช้ซ้ำ และ (4) audit credential ที่รั่ว
ทีละขั้นตอน
-
สร้างรหัสผ่านเอนโทรปีสูง
ใช้เครื่องมือสร้างรหัสผ่านเพื่อสร้างรหัสผ่านที่มีอักขระ 16+ ตัว โดยผสมตัวเลขบน ล่าง ตัวเลข และสัญลักษณ์ เอนโทรปี = log2(charsetSize^length); ตัวอักษร 16 ตัวอักษรที่มีสัญลักษณ์ 94 ตัวให้ ~ 105 บิต ซึ่งเป็นไปไม่ได้ที่จะใช้กำลังดุร้ายแม้จะคาดเดา 10 ^ 12 ครั้ง / วินาที
-
อย่าใช้รหัสผ่านซ้ำในบริการต่างๆ
การใช้รหัสผ่านเดียวซ้ำหมายถึงการละเมิดเพียงครั้งเดียวจะทำให้ทุกบัญชีที่แชร์รหัสผ่านนั้นเสียหาย สร้างรหัสผ่านที่ไม่ซ้ำกันต่อบริการและจัดเก็บไว้ในเครื่องมือจัดการรหัสผ่าน (Bitwarden, 1Password, KeePassXC) รหัสผ่านหลักเป็นรหัสผ่านเดียวที่คุณต้องจำ — ทำให้เป็นรหัสผ่านที่ยาว
-
แฮชรหัสผ่านด้วย KDF ที่ช้าบนเซิร์ฟเวอร์
อย่าจัดเก็บรหัสผ่านด้วย MD5, SHA-1 หรือ SHA-256 แบบดิบ เนื่องจากเร็วเกินไป และ GPU สามารถลองได้หลายพันล้านต่อวินาที ใช้ bcrypt ที่มีปัจจัยการทำงาน 12+, เข้ารหัสด้วย N=2^17 หรือ Argon2id ที่มีหน่วยความจำ 64MB KDF เหล่านี้จงใจช้าและหน่วยความจำยากในการเอาชนะการโจมตีของ GPU/ASIC
-
ใช้เกลือเพื่อเอาชนะโต๊ะสายรุ้ง
Salt คือค่าสุ่มที่ไม่ซ้ำกันต่อรหัสผ่าน ซึ่งเพิ่มหรือรวมกันก่อนที่จะแฮช ช่วยให้มั่นใจได้ว่ารหัสผ่านที่เหมือนกันจะสร้างแฮชที่แตกต่างกัน ทำให้ตารางสายรุ้งที่คำนวณไว้ล่วงหน้าไร้ประโยชน์ bcrypt และ Argon2 สร้างและฝังเกลือโดยอัตโนมัติ - อย่าม้วนเกลือของคุณเอง
-
ตรวจสอบรหัสผ่านที่ถูกละเมิด
ก่อนที่จะยอมรับรหัสผ่าน ให้ตรวจสอบกับ Have I Been Pwned API โดยใช้โปรโตคอล k-anonymity: ส่งเฉพาะอักขระ 5 ตัวแรกของแฮช SHA-1 รับรายการส่วนต่อท้ายที่ตรงกัน และเปรียบเทียบในเครื่อง สิ่งนี้จะไม่เปิดเผยรหัสผ่านแบบเต็มให้กับ API
ตัวอย่าง
รหัสผ่านที่สร้างยาก (16 ตัวอักษร ~ 105 บิตเอนโทรปี)
ป้อนข้อมูล: ยาว 16 ทุกคลาสตัวละคร
เอาท์พุต: K9$mP2#vL7@nQ4!x (สุ่ม ไม่ซ้ำกัน ไม่เคยใช้ซ้ำ)
ข้อความรหัสผ่านสำหรับรหัสผ่านหลัก (จดจำได้ + รัดกุม)
ป้อนข้อมูล: 4 คำทั่วไปแบบสุ่ม
เอาท์พุต: correct-horse-battery-staple (~44 bits but easy to remember; use 5-6 words for ~60+ bits)
แฮช bcrypt ของรหัสผ่าน (ปัจจัยการทำงาน 12)
ป้อนข้อมูล: รหัสผ่าน 123 พร้อม bcrypt ราคา 12
เอาท์พุต: $2b$12$N9qo8uLOickgx2ZMRZoMy.MrqKQp7vqB4V1e5sTq7vqB4V1e5sTq (เกลือ + ราคา + แฮชที่ฝังอยู่)
ปัญหาทั่วไป
- การใช้ MD5 หรือ SHA-256 สำหรับการแฮชรหัสผ่าน: ทั้งคู่เป็นการแฮชที่รวดเร็ว GPU สมัยใหม่คำนวณ ~10 พันล้าน SHA-256/s ถอดรหัสรหัสผ่าน 8 ตัวอักษรได้ในไม่กี่นาที ใช้ bcrypt, scrypt หรือ Argon2id เสมอ
- การใช้รหัสผ่านเดียวซ้ำทั่วทั้งไซต์: การละเมิดที่ไซต์ที่อ่อนแอที่สุดจะทำให้รหัสผ่านรั่วไหลสำหรับทุกไซต์ สร้างรหัสผ่านที่ไม่ซ้ำใครและจัดเก็บไว้ในผู้จัดการ
- การจัดเก็บรหัสผ่านในรูปแบบข้อความธรรมดาหรือการเข้ารหัสแบบย้อนกลับ: หากฐานข้อมูลรั่ว ทุกบัญชีจะถูกบุกรุกทันที การแฮชเป็นแบบทางเดียวและไม่สามารถย้อนกลับได้ แม้แต่เซิร์ฟเวอร์ก็ไม่สามารถกู้คืนไฟล์ต้นฉบับได้
- ปัจจัยการทำงานต่ำใน bcrypt: ราคา 4 ดีในปี 2545; ในปี 2569 ใช้ต้นทุน 12+ (ประมาณ 4,096 รอบ) แฮชอีกครั้งเมื่อเข้าสู่ระบบเพื่ออัปเกรดแฮชเก่าโดยไม่ต้องบังคับให้รีเซ็ตรหัสผ่าน
เคล็ดลับ
- ตั้งเป้าอย่างน้อย 100 บิตของเอนโทรปีสำหรับบัญชีที่มีมูลค่าสูง นั่นคืออักขระสุ่ม 16 ตัวจากตัวอักษรสัญลักษณ์ 94 ตัว หรือคำศัพท์ลูกเต๋าสุ่ม 6 คำ
- เปิดการตรวจสอบสิทธิ์แบบสองปัจจัย (TOTP หรือคีย์ฮาร์ดแวร์) สำหรับทุกบัญชีที่รองรับ รหัสผ่านที่รัดกุมเพียงอย่างเดียวอาจไม่เพียงพอหากรหัสผ่านถูกฟิชชิง
- ใช้ตัวเลือก 'ยกเว้นอักขระที่ไม่ชัดเจน' ของเครื่องมือสร้างรหัสผ่านของเรา (0/O, 1/l/I) เมื่อรหัสผ่านจะถูกอ่านออกเสียงหรือพิมพ์จากการพิมพ์
- หมุนเวียนรหัสผ่านหลังจากมีการละเมิดที่ได้รับการยืนยันแล้วเท่านั้น ไม่ใช่ตามกำหนดเวลาที่กำหนด การหมุนเวียนแบบบังคับจะทำให้ผู้ใช้ใช้รูปแบบที่คาดเดาได้ เช่น Spring2026!