ตัวสร้าง 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 เว้นแต่แอปของคุณจำเป็นต้องใช้ความแข็งแกร่งที่เพิ่มขึ้นจริงๆ
เครื่องมือที่เกี่ยวข้อง
ตัวเข้ารหัสไฟล์ Base64
เข้ารหัสไฟล์ใดก็ได้ (PDF, ZIP, รูปภาพ, ไฟล์ปฏิบัติการ) เป็นข้อความ Base64 เพื่อฝังใน JSON, อีเมล, YAML หรือ data URI ทำงานในเครื่องของคุณ ไม่มีการอัปโหลด
ตัวเข้ารหัสและถอดรหัส Base58
เข้ารหัสข้อความ UTF-8 หรือไบต์เลขฐานสิบหก และถอดรหัส Base58 อย่างปลอดภัยด้วยชุดอักขระ Bitcoin, Ripple หรือ Flickr
เครื่องมือเข้ารหัสซีซาร์
เข้ารหัสและถอดรหัสข้อความด้วยรหัสซีซาร์ เลื่อนได้ตั้งแต่ 1-25 รองรับ ROT13 เป็นกรณีพิเศษ และคงเครื่องหมายวรรคตอนกับตัวพิมพ์ใหญ่-เล็กไว้เหมือนเดิม
ตัวเข้ารหัสรหัสลับ A1Z26
เข้ารหัสข้อความด้วยรหัสลับ A1Z26 (A=1, B=2, ... Z=26) หรือถอดรหัสลำดับตัวเลขกลับเป็นตัวอักษร พร้อมปรับตัวคั่นได้
เข้ารหัส / ถอดรหัส AES
เข้ารหัสและถอดรหัสข้อความความเสี่ยงต่ำด้วย AES cipher ของ OpenSSL passphrase จะถูก hash ด้วย SHA-256 และผลลัพธ์ Base64 มี IV รวมกับข้อความเข้ารหัส
เครื่องมือสร้างใบรับรอง SSL
สร้างใบรับรอง SSL/TLS ที่ลงนามด้วยตนเองและคีย์ส่วนตัว RSA ทั้งหมดในเบราว์เซอร์ กำหนด Common Name, SAN และช่วงอายุเอง ส่งออกเป็น PEM
เครื่องมือนี้มีให้บริการในภาษาอื่น
- مولد bcrypt [AR]
- Générateur bcrypt [FR]
- bcrypt 생성기 [KO]
- bcrypt-generator [SV]
- bcrypt-generator [NL]
- bcrypt-Generator [DE]
- Generador bcrypt [ES]
- Generator bcrypt [PL]
- Generator bcrypt [ID]
- bcryptジェネレーター [JA]
- Trình tạo bcrypt [VI]
- Gerador de bcrypt [PT]
- bcrypt Generator [EN]
- Generatore bcrypt [IT]
- Генератор bcrypt [RU]
- bcrypt Oluşturucu [TR]
- bcrypt 生成器 [ZH]