ความปลอดภัยของรหัสผ่านในเบราว์เซอร์: สร้าง, เข้ารหัส, แฮช และทดสอบ — ไม่ต้องใช้เซิร์ฟเวอร์
คู่มือปฏิบัติสำหรับเครื่องมือจัดการรหัสผ่านและการเข้ารหัสบนเบราว์เซอร์ — สร้างรหัสผ่านที่แข็งแกร่ง, เข้ารหัสข้อความด้วย AES-256, แฮชรหัสผ่านด้วย PBKDF2 และตรวจสอบความแข็งแกร่งของรหัสผ่านได้ทันที
นักพัฒนาและผู้ใช้ที่ใส่ใจด้านความปลอดภัยทุกคนต่างต้องการเครื่องมือชุดเดียวกัน: สร้างรหัสผ่านที่แข็งแกร่ง, เข้ารหัสข้อความที่ละเอียดอ่อน, แฮชรหัสผ่านเพื่อจัดเก็บ หรือตรวจสอบว่าแฮชตรงกันหรือไม่ สิ่งเหล่านี้เคยต้องติดตั้ง OpenSSL หรือแอปพลิเคชันเฉพาะทาง แต่ปัจจุบัน Web Crypto API มีความสามารถเพียงพอที่จะทำทุกอย่างได้ภายในเบราว์เซอร์ — โดยไม่ต้องส่งข้อมูลไปยังเซิร์ฟเวอร์และไม่มีข้อมูลใดออกจากอุปกรณ์ของคุณเลย
นี่คือภาพรวมของเครื่องมือสำคัญและวิธีใช้งานแต่ละอย่างอย่างมีประสิทธิภาพ
1. Password Generator: วิธีที่ถูกต้องในการสร้างรหัสผ่าน
มนุษย์สร้างรหัสผ่านแบบสุ่มได้แย่มาก เราใช้รูปแบบต่างๆ โดยไม่รู้ตัว — คำจากพจนานุกรม, ชื่อคน, ปี, หรือลำดับแป้นพิมพ์อย่าง qwerty123 เครื่องมือสร้างรหัสผ่านแบบสุ่มจริงๆ จะหลีกเลี่ยงสิ่งเหล่านี้ทั้งหมด
Password Generator ของเราใช้ crypto.getRandomValues() — ตัวสร้างตัวเลขสุ่มแบบปลอดภัยทางการเข้ารหัสที่มีอยู่ในเบราว์เซอร์สมัยใหม่ทุกตัว สิ่งที่ทำให้มันแตกต่างจาก Math.random():
Math.random()เป็นลำดับสุ่มเทียม — คาดเดาได้หากรู้ค่า seedcrypto.getRandomValues()ดึงค่าจาก entropy ระดับ OS — ไม่สามารถคาดเดาได้จริงๆ
การตั้งค่าที่แนะนำ:
| กรณีการใช้งาน | ความยาว | ตัวเลือก |
|---|---|---|
| เข้าสู่ระบบเว็บไซต์ | 16+ | ตัวพิมพ์ใหญ่, ตัวพิมพ์เล็ก, ตัวเลข, สัญลักษณ์ |
| รหัสผ่านฐานข้อมูล | 24+ | ชุดอักขระทั้งหมด |
| วลีรหัสผ่านสำหรับคีย์เข้ารหัส | 32+ | ชุดอักขระทั้งหมด |
| PIN (ปลดล็อคอุปกรณ์) | 8+ | ตัวเลขเท่านั้น |
สิ่งที่ควรหลีกเลี่ยง:
- รหัสผ่านที่สั้นกว่า 12 ตัวอักษร (สามารถถอดรหัสได้ด้วย GPU สมัยใหม่)
- รหัสผ่านที่เป็นสัญลักษณ์เท่านั้น (หลายบริการไม่รองรับ)
- รหัสผ่านที่เคยใช้งานที่ไหนมาก่อน
2. Password Strength Checker: ตรวจสอบก่อนที่จะใช้งาน
ก่อนตั้งรหัสผ่าน — หรือเมื่อตรวจสอบรหัสผ่านที่มีอยู่ — ลองผ่าน Password Strength Checker ของเราดู โดยจะประเมิน:
- คะแนนความยาว — ยิ่งยาวยิ่งดีเสมอ
- ความหลากหลายของชุดอักขระ — ตัวพิมพ์เล็ก, ตัวพิมพ์ใหญ่, ตัวเลข, สัญลักษณ์
- รูปแบบทั่วไป — คำจากพจนานุกรม, ลำดับแป้นพิมพ์, อักขระซ้ำ
- ค่า Entropy (บิต) — การวัดทางคณิตศาสตร์ว่ายากแค่ไหนในการเดา
คะแนน entropy เป็นตัววัดที่ซื่อสัตย์ที่สุด รหัสผ่านที่มี entropy 128 บิตจะใช้เวลานานกว่าอายุของจักรวาลในการโจมตีแบบ brute force ด้วยความเร็วการคำนวณในปัจจุบัน
"password" → Entropy: ~11 bits ❌ แย่มาก
"P@ssw0rd" → Entropy: ~18 bits ❌ ยังแย่อยู่ (มีรูปแบบ)
"correct-horse-bat" → Entropy: ~44 bits ⚠ ปานกลาง (คำจากพจนานุกรม)
"Kx9#mP2$vL7nQw" → Entropy: ~87 bits ✅ แข็งแกร่ง
"mQ3$kX9#nP7&vL2@" → Entropy: ~104 bits ✅ แข็งแกร่งมาก
3. AES-256 Encryption: ปกป้องข้อความด้วยการเข้ารหัสระดับทหาร
ต้องการจัดเก็บโน้ตลับ, เข้ารหัสค่าคอนฟิก หรือส่งข้อความที่ละเอียดอ่อนผ่านช่องทางที่ไม่ปลอดภัย? เครื่องมือ AES Encrypt / Decrypt ของเราใช้ AES-256-GCM — cipher เดียวกับที่ธนาคาร, รัฐบาล และแอปส่งข้อความแบบ end-to-end ใช้งาน
หลักการทำงานของ AES-256-GCM (อธิบายแบบย่อ)
- วลีรหัสผ่านของคุณถูกประมวลผลผ่าน PBKDF2 จำนวน 200,000 รอบเพื่อสร้างคีย์ขนาด 256 บิต
- IV (initialization vector) แบบสุ่มถูกสร้างขึ้นสำหรับการเข้ารหัสแต่ละครั้ง — ทำให้ข้อความเดิมเข้ารหัสได้ผลลัพธ์ต่างกันทุกครั้ง
- ข้อความถูกเข้ารหัสและสร้าง authentication tag — ตรวจจับการแก้ไขข้อมูล
- ผลลัพธ์ถูกเข้ารหัสแบบ base64:
IV + tag + ciphertext
Plaintext: "API_KEY=sk_live_abc123"
Passphrase: "my-strong-passphrase"
↓
Encrypted: "a3Fm9K2...base64...Xp7nQ=="
คุณสมบัติด้านความปลอดภัย:
- ✅ Zero knowledge — ไม่มีข้อมูลถูกส่งไปยังเซิร์ฟเวอร์ใดๆ
- ✅ Authenticated encryption — การถอดรหัสจะล้มเหลวหาก ciphertext ถูกแก้ไข
- ✅ Salt + IV แบบสุ่ม — ข้อมูลเดิมให้ผลลัพธ์ต่างกันในแต่ละครั้ง
- ✅ 200,000 รอบ PBKDF2 — ทนทานต่อการโจมตีแบบ brute force บนวลีรหัสผ่าน
การใช้งานจริง:
- เข้ารหัสค่าใน
.envก่อนจัดเก็บในแอปโน้ต - แชร์รหัสผ่านกับเพื่อนร่วมงานผ่านอีเมล/Slack (ส่ง ciphertext และแชร์วลีรหัสผ่านผ่านช่องทางอื่น)
- เข้ารหัสบันทึกส่วนตัวหรือโน้ตส่วนตัว
- จัดเก็บ API key ในสเปรดชีตในรูปแบบเข้ารหัส
4. Password Hash Generator: PBKDF2 สำหรับการจัดเก็บที่ปลอดภัย
หากคุณกำลังสร้างแอปที่จัดเก็บรหัสผ่านของผู้ใช้ คุณต้องไม่จัดเก็บรหัสผ่านแบบ plaintext — หรือแฮชที่อ่อนแออย่าง MD5/SHA-1 Password Hash Generator ของเราใช้ PBKDF2-SHA256 เพื่อสร้างแฮชรหัสผ่านที่ปลอดภัย
ทำไมต้องใช้ PBKDF2 แทน MD5/SHA-256?
| แฮช | เวลาต่อการเดาหนึ่งครั้ง (GPU) | จำนวนรอบ | ผลสรุป |
|---|---|---|---|
| MD5 | 0.001ms | 1 | ❌ ใช้ไม่ได้แล้ว |
| SHA-256 | 0.002ms | 1 | ❌ เร็วเกินไป |
| PBKDF2-SHA256 | 200ms+ | 200,000 | ✅ เหมาะสม |
| bcrypt (cost 12) | 300ms+ | adaptive | ✅ เหมาะสม |
จุดประสงค์ทั้งหมดของการแฮชรหัสผ่านคือทำให้การเดาแต่ละครั้งมีต้นทุนสูง แฮชที่เร็วนั้นอันตรายอย่างมากสำหรับรหัสผ่าน
รูปแบบผลลัพธ์ของแฮช:
pbkdf2$200000$<salt>$<hash>
salt ถูกสร้างแบบสุ่มต่อแฮชหนึ่งค่า ซึ่งหมายความว่ารหัสผ่านเดิมจะให้แฮชต่างกันในแต่ละครั้ง — ป้องกันการโจมตีด้วย rainbow table
5. TOTP / 2FA Generator: ทดสอบรหัส Authenticator ของคุณ
TOTP / 2FA Generator ของเราสร้าง time-based one-time password ที่เข้ากันได้กับ Google Authenticator, Authy และแอป authenticator ที่รองรับ RFC 6238 ทุกตัว ใส่ secret key แบบ Base32 และรับรหัส 6 หลักพร้อม countdown
กรณีการใช้งาน:
- ตรวจสอบว่าการใช้งาน TOTP บนเซิร์ฟเวอร์ของคุณสร้างรหัสที่ถูกต้อง
- ทดสอบการตั้งค่า 2FA ก่อนเผยแพร่ให้ผู้ใช้
- สร้างรหัสสำหรับ secret ที่ลงทะเบียนไว้แล้ว (เป็นวิธีสำรอง)
รหัส TOTP เปลี่ยนทุก 30 วินาที ผูกกับเวลา UTC ปัจจุบัน และเป็นไปไม่ได้ทางคณิตศาสตร์ที่จะคาดเดาโดยไม่มี secret key
6. Diceware Passphrases: จดจำง่ายและแข็งแกร่งทางคณิตศาสตร์
Diceware Password Generator ของเราสร้าง passphrase จาก EFF wordlist — แนวทางเดียวกับที่นักวิจัยด้านความปลอดภัยใช้สำหรับรหัสผ่านหลักและคีย์เข้ารหัสดิสก์
ตัวอย่าง: correct-horse-battery-staple-voyage
ทำไม passphrase ถึงดีกว่ารหัสผ่านอักขระสุ่มสำหรับรหัสผ่านหลัก:
| รหัสผ่าน | Entropy | ความง่ายในการจดจำ |
|---|---|---|
Kx9#mP2$ (8 ตัวอักษร) |
~52 bits | ยากมาก |
correct-horse-battery (3 คำ) |
~58 bits | ง่าย |
correct-horse-battery-staple (4 คำ) |
~77 bits | ปานกลาง |
correct-horse-battery-staple-voyage (5 คำ) |
~96 bits | พอรับได้ |
สำหรับรหัสผ่านหลักของ password manager — ที่คุณต้องจำและไม่ควรจดไว้ที่ไหน — passphrase แบบ diceware 5 คำคือสมดุลที่ดีที่สุดระหว่างความปลอดภัยและการจดจำ
รายการตรวจสอบความปลอดภัย
ตรวจสอบสิ่งเหล่านี้ก่อนนำระบบการยืนยันตัวตนใดๆ ไปใช้งาน:
- ✅ สร้างรหัสผ่านด้วย Password Generator — ใช้
crypto.getRandomValues() - ✅ ตรวจสอบความแข็งแกร่งของรหัสผ่านด้วย Password Strength Checker — มุ่งเป้าที่ 80+ entropy bits สำหรับบัญชีสิทธิ์พิเศษ
- ✅ แฮชรหัสผ่านที่จัดเก็บด้วย PBKDF2, bcrypt หรือ Argon2 — ตรวจสอบรูปแบบผลลัพธ์ด้วย Password Hash Generator
- ✅ เข้ารหัสค่าที่ละเอียดอ่อนที่จัดเก็บด้วย AES Encrypt — ใช้ AES-256-GCM ไม่ใช่ AES-ECB
- ✅ เปิดใช้งาน 2FA และทดสอบรหัสด้วย TOTP Generator
- ✅ สำหรับรหัสผ่านหลัก ใช้ Diceware Generator — อย่างน้อย 5 คำขึ้นไป
ประเด็นสำคัญ: ทุกเครื่องมือในรายการนี้ทำงานทั้งหมดในเบราว์เซอร์ของคุณ รหัสผ่าน, ข้อความ plaintext และแฮชของคุณจะไม่มีวันออกจากอุปกรณ์ นี่ไม่ใช่แค่ฟีเจอร์ — มันคือมาตรฐานขั้นต่ำที่ยอมรับได้สำหรับเครื่องมือด้านความปลอดภัย