ตัวสร้าง bcrypt
bcrypt ยังคงเป็นหนึ่งในตัวเลือกที่ปลอดภัยที่สุดสำหรับการเก็บรหัสผ่าน มันถูกออกแบบให้ช้าโดยตั้งใจ สร้าง salt ของตัวเอง และปรับตามความแรงของฮาร์ดแวร์ได้ผ่านพารามิเตอร์ cost เครื่องมือนี้สร้าง bcrypt hash ที่เป็นไปตามมาตรฐานจากรหัสผ่าน plaintext เพื่อให้คุณ seed ผู้ใช้ทดสอบ ย้ายบัญชีระหว่างระบบ หรือเทียบค่ากับ hash เดิมที่เก็บอยู่ในคอลัมน์ users.password ได้
วิธี hash รหัสผ่านด้วย bcrypt
-
1
ป้อนรหัสผ่าน plaintext
ได้สูงสุด 72 bytes: bcrypt จะตัดส่วนที่เกินออกแบบเงียบๆ
-
2
เลือก cost factor
12 คือค่าเริ่มต้นในเครื่องมือนี้; 10 คือทางเลือกเก่าที่เร็วกว่า; 13 คือระดับที่แข็งแกร่งที่สุดของเครื่องมือนี้ ทุกๆ +1 จะทำให้เวลา hash เพิ่มขึ้นประมาณสองเท่า
-
3
สร้าง salt แบบสุ่ม
ดึง salt 16 bytes จาก cryptographic RNG แล้วฝังไว้ในสตริง hash ที่ได้
-
4
คัดลอก hash
เอาต์พุตเป็นสตริงที่อธิบายตัวเอง เช่น `$2b$12$...` ซึ่งรวม version, cost, salt และ digest ไว้แล้ว
โครงสร้างของ bcrypt hash
$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
| | | |
| | salt (22 Base64 chars) digest (31 Base64 chars)
| cost (2 digits, 4-31)
version (2a, 2b, 2y, all bcrypt)
ทั้งสตริงยาว 60 ตัวอักษร คอลัมน์ชนิด VARCHAR(60) หรือ CHAR(60) คือ schema มาตรฐาน
คำแนะนำ cost factor
| Cost | เวลาโดยประมาณต่อ hash หนึ่งครั้ง (CPU 2024) | การใช้งาน |
|---|---|---|
| 10 | ~80 ms | ค่าเริ่มต้นเก่า ยังพอรับได้ |
| 12 | ~300 ms | baseline ที่แนะนำในปัจจุบัน |
| 13 | ~600 ms | แอปที่ต้องการความปลอดภัยสูงขึ้น |
| 14 | ~1.2 s | เกินช่วงของเครื่องมือนี้ (สูงสุด 13) |
ทุก increment เพิ่ม work factor เป็นสองเท่า ถ้า latency การ login ต่ำกว่า 500 ms สำคัญมาก ให้คงไว้ที่ 10-12
Version byte: 2a vs 2b vs 2y
$2a$, สเปกดั้งเดิมปี 1999 ไลบรารีส่วนใหญ่ออก hash แบบ2a$2b$, revision ปี 2014 ที่แก้บั๊ก truncation ใน crypt_blowfish แนะนำสำหรับ hash ใหม่$2y$, tag เฉพาะ PHP เทียบเท่ากับ$2b$ในทางปฏิบัติ
ทั้งสามแบบ verify ข้ามกันได้ ต่างกันเฉพาะ tag ในสตริง hash
bcrypt ป้องกันอะไรได้บ้าง
- Rainbow tables, salt ที่ไม่ซ้ำต่อ hash ทำให้ lookup ที่คำนวณล่วงหน้าใช้ไม่ได้
- GPU/ASIC cracking, key schedule ของ Blowfish ใช้หน่วยความจำมากและไม่เป็นมิตรกับ GPU แม้ไม่ต้าน GPU เท่า Argon2 แต่ยัง brute force ได้ช้า
- Database leaks, ไม่สามารถกู้ plaintext จาก hash ได้โดยไม่ brute force
สิ่งที่ bcrypt ไม่ได้ป้องกัน: รหัสผ่านอ่อนแอ (ควรกำหนดความยาวขั้นต่ำและตรวจกับ breach lists), credential stuffing (ใช้ second factor), phishing
ขีดจำกัด 72-byte
bcrypt ใช้เฉพาะ 72 bytes แรกของรหัสผ่าน อินพุตที่ยาวกว่านั้นจะถูกตัดแบบเงียบๆ นี่เป็นเหตุผลเดียวกับที่หลายไลบรารีปัจจุบันแนะนำให้ pre-hash รหัสผ่านด้วย SHA-256 ก่อนส่งเข้า bcrypt ทางเลือกสมัยใหม่อย่าง Argon2 และ scrypt ไม่มีข้อจำกัดนี้
คำถามที่พบบ่อย
ปลอดภัยสำหรับการเก็บรหัสผ่านที่ cost ≥ 12 OWASP ยังจัดให้เป็น algorithm ที่ยอมรับได้ Argon2id เป็นตัวเลือกที่แนะนำสำหรับระบบใหม่ แต่การย้าย hash bcrypt เก่ายังไม่ใช่เรื่องเร่งด่วนสูง
เพราะ salt ถูกสุ่มต่อ hash การ verify จะดึง salt จาก hash ที่เก็บไว้ นำรหัสผ่านที่ส่งเข้ามาไป hash ใหม่ด้วย salt นั้น แล้วเปรียบเทียบ
ไลบรารีส่วนใหญ่ไม่เปิดให้ทำ และมีเหตุผลที่ดี, salt ที่คาดเดาได้ทำลายจุดประสงค์ของมัน ใช้ salt ที่ไลบรารีสร้างให้ นั่นคือทางที่ปลอดภัย
ทุกๆ +1 จะเพิ่มเวลา hash ประมาณสองเท่า ดังนั้น cost 13 จะใช้เวลานานกว่า cost 10 ประมาณ 8 เท่า ใช้ช่วง 10-12 เว้นแต่แอปของคุณจำเป็นต้องใช้ความแข็งแกร่งที่เพิ่มขึ้นจริงๆ
เครื่องมือที่เกี่ยวข้อง
รหัสแปลงตัวเลขเป็นตัวอักษร
แปลงตัวเลขเป็นตัวอักษรและย้อนกลับด้วยรหัส A=1, B=2 (A1Z26) สำหรับปริศนา คำทาย และเบาะแสในห้องเอสเคปรูม
เครื่องสร้างค่าแฮช MD5
คำนวณค่า checksum แบบ MD5 ของข้อความและไฟล์เพื่อยืนยันความสมบูรณ์ โดยผลลัพธ์จะตรงกับที่ได้จากฟังก์ชัน md5sum และ openssl dgst -md5
เครื่องสร้างพาสเฟรส (Passphrase)
สร้างพาสเฟรสที่จำง่ายจากคำทั่วไปแบบสุ่ม ปรับจำนวนคำ ตัวคั่น การขึ้นต้นด้วยตัวพิมพ์ใหญ่ และตัวเลขต่อท้ายที่เลือกได้
ตัวเข้ารหัสรหัสลับ A1Z26
เข้ารหัสข้อความด้วยรหัสลับ A1Z26 (A=1, B=2, ... Z=26) หรือถอดรหัสลำดับตัวเลขกลับเป็นตัวอักษร พร้อมปรับตัวคั่นได้
เครื่องมือสร้างกุญแจ PGP
สร้างคู่กุญแจ OpenPGP แบบ ASCII armor พร้อมใบรับรองการเพิกถอนด้วย Curve25519, RSA 2048 หรือ RSA 4096
เครื่องมือเข้ารหัส Polybius
เข้ารหัสอักษรละตินเป็นพิกัด Polybius หรือถอดรหัสคู่ตัวเลขที่คั่นด้วยช่องว่าง โดยใช้ตาราง 5×5 แบบคงที่ที่รวม I/J
เครื่องมือนี้มีให้บริการในภาษาอื่น
- bcrypt 생성기 [KO]
- bcrypt-Generator [DE]
- Generador bcrypt [ES]
- Générateur bcrypt [FR]
- bcrypt-generator [SV]
- bcrypt-generator [NL]
- Generator bcrypt [ID]
- مولد bcrypt [AR]
- Generator bcrypt [PL]
- Trình tạo bcrypt [VI]
- bcryptジェネレーター [JA]
- Gerador de bcrypt [PT]
- Генератор bcrypt [RU]
- bcrypt Oluşturucu [TR]
- bcrypt 生成器 [ZH]
- bcrypt Generator [EN]
- Generatore bcrypt [IT]