เครื่องมือสร้าง Bcrypt

5 จาก 2 การให้คะแนน

เครื่องมือสร้าง Bcrypt เป็นเครื่องมือฟรีสำหรับสร้างแฮชรหัสผ่านแบบ bcrypt จากข้อความใดก็ได้ เพื่อจัดเก็บรหัสผ่านอย่างปลอดภัย

bcrypt คืออะไร และยังปลอดภัยอยู่ไหม?

Bcrypt เป็นอัลกอริทึมแฮชรหัสผ่านที่ยังเหมาะสำหรับใช้จัดเก็บรหัสผ่าน หากกำหนดค่า cost อย่างเหมาะสม แม้ว่าระบบรุ่นใหม่มักเลือกใช้ Argon2id มากกว่า Niels Provos และ David Mazières ออกแบบ bcrypt ขึ้นในปี 1999 โดยใช้กระบวนการกำหนดตารางคีย์ของรหัสลับ Blowfish เพื่อจงใจให้การเดารหัสผ่านแต่ละครั้งใช้ทรัพยากรมาก

การแฮชเป็นกระบวนการทางเดียว แอปพลิเคชันจึงตรวจสอบรหัสผ่านด้วยการแฮชค่าที่ผู้ใช้ป้อนตามพารามิเตอร์ที่จัดเก็บไว้ แทนการกู้คืนรหัสผ่านต้นฉบับ bcrypt ต่างจากอัลกอริทึมอเนกประสงค์อย่าง SHA-3 ตรงที่สร้างระเบียนแบบเข้ารหัสซึ่งมีความยาวคงที่และมีข้อมูลครบในตัว ทั้งเวอร์ชัน ค่า cost ค่า salt และ checksum

ระเบียน bcrypt มาตรฐานมีความยาว 60 อักขระ ASCII ส่วน checksum แทนข้อมูล 184 บิต และแสดงเป็น 31 อักขระด้วยรูปแบบการเข้ารหัสที่คล้าย Base64 ซึ่งเป็นแบบเฉพาะของ bcrypt ปัจจุบัน bcrypt ยังไม่ถือว่าถูกทำลายในเชิงการเข้ารหัส แต่มีข้อจำกัดจากการออกแบบที่มีมานาน โดยการใช้งานแบบดั้งเดิมจะประมวลผลข้อมูลนำเข้าไม่เกิน 72 ไบต์ นอกจากนี้ Argon2id ยังมีการป้องกันแบบใช้หน่วยความจำสูง ซึ่ง bcrypt ไม่มี

ใช้เครื่องมือสร้าง Bcrypt อย่างไร?

ป้อนข้อความที่ต้องการแฮช เรียกใช้เครื่องมือ แล้วคัดลอกค่าที่แสดงในช่องผลลัพธ์ แฮช Bcrypt ให้จัดเก็บผลลัพธ์ทั้งหมด อย่าแยกเก็บเฉพาะ checksum ช่วงท้าย

  1. ใช้รหัสผ่านหรือข้อความทดสอบตามจริงทุกประการ รวมถึงตัวพิมพ์ใหญ่และเล็ก ช่องว่าง และเครื่องหมายวรรคตอน
  2. สร้างผลลัพธ์ bcrypt
  3. คัดลอกให้ครบทั้ง 60 อักขระ รวมถึงเครื่องหมายเวอร์ชันและค่า cost ที่อยู่ด้านหน้า
  4. บันทึกผลลัพธ์ลงในคอลัมน์แฮชรหัสผ่านของฐานข้อมูล
  5. เมื่อลงชื่อเข้าใช้ ให้ใช้ฟังก์ชันตรวจสอบ bcrypt ของแพลตฟอร์ม อย่าสร้างแฮชใหม่แล้วเปรียบเทียบข้อความโดยตรง

โดยปกติ bcrypt จะสร้าง salt แบบสุ่มใหม่สำหรับแฮชแต่ละรายการ ดังนั้นการแฮชข้อมูลเดียวกันสองครั้งอาจได้ระเบียนต่างกันสองค่า และทั้งคู่ยังตรวจสอบกับข้อมูลเดิมได้สำเร็จ นี่เป็นพฤติกรรมตามปกติที่ช่วยไม่ให้รหัสผ่านเหมือนกันมีค่าจัดเก็บเหมือนกัน

การประมวลผลเกิดขึ้นบนเซิร์ฟเวอร์ ข้อมูลที่คุณป้อนจะส่งไปยังเซิร์ฟเวอร์ผ่าน HTTPS และไม่มีการจัดเก็บ หากเป็นรหัสผ่านที่ใช้งานจริงในระบบ โปรดพิจารณาว่าการป้อนรหัสผ่านลงในบริการออนไลน์ของบุคคลที่สามสอดคล้องกับนโยบายความปลอดภัยขององค์กรหรือไม่

ถอดรหัสหรือย้อนกลับแฮช bcrypt ได้ไหม?

ไม่ได้ แฮช bcrypt ไม่สามารถถอดรหัสได้ เพราะไม่ใช่ข้อมูลที่ผ่านการเข้ารหัสและไม่มีคีย์สำหรับถอดรหัส วิธีโจมตีที่ทำได้ในทางปฏิบัติคือเดารหัสผ่านที่เป็นไปได้ แล้วตรวจสอบแต่ละค่ากับแฮชที่จัดเก็บไว้

Bcrypt ทำให้กระบวนการเดาช้าลงด้วยค่า cost ที่ปรับได้ แต่ไม่อาจทำให้รหัสผ่านที่สั้น พบได้ทั่วไป หรือเคยรั่วไหลมาก่อนมีความปลอดภัย และผู้โจมตีที่พยายามอย่างจริงจังยังอาจค้นพบข้อมูลนำเข้าที่คาดเดาง่ายได้ salt ช่วยป้องกันไม่ให้ผู้โจมตีนำตารางที่คำนวณไว้ล่วงหน้าชุดเดียวไปใช้กับหลายบัญชี แต่ salt ไม่ใช่ข้อมูลลับและรวมอยู่ในระเบียนที่จัดเก็บ

วิธีอ่านผลลัพธ์ bcrypt

โดยทั่วไปผลลัพธ์ bcrypt จะใช้รูปแบบ modular crypt ตัวอย่างโครงสร้างคือ $2y$12$[22-character salt][31-character checksum] ค่านี้ใช้แสดงรูปแบบเท่านั้น ไม่ใช่แฮชของรหัสผ่านที่ระบุไว้

ส่วนประกอบ ความยาวโดยทั่วไป หน้าที่
เครื่องหมายเวอร์ชัน 4 อักขระ ระบุรูปแบบย่อยของ bcrypt เช่น $2y$ หรือ $2b$
Cost 3 อักขระ บันทึกค่า cost สองหลัก ตามด้วยอักขระคั่น
Salt 22 อักขระ เข้ารหัส salt แบบสุ่มขนาด 128 บิต
Checksum 31 อักขระ เข้ารหัส checksum ของ bcrypt ขนาด 184 บิต

ต้องเก็บส่วนประกอบเหล่านี้ไว้ด้วยกัน การแก้ไขอักขระ ตัดค่าให้สั้นลง หรือบันทึกลงในคอลัมน์ที่สั้นเกินไป มักทำให้การตรวจสอบล้มเหลว เครื่องหมายเวอร์ชันอาจแตกต่างกันระหว่างไลบรารีที่ใช้งานร่วมกันได้ แอปพลิเคชันจึงควรใช้ API สำหรับรหัสผ่านที่เป็นมาตรฐาน แทนการแยกและประกอบระเบียนขึ้นใหม่เอง

ควรใช้ bcrypt เมื่อใด?

ควรใช้ bcrypt สำหรับแฮชรหัสผ่านในระบบที่รองรับอยู่แล้ว โดยเฉพาะเมื่อจำเป็นต้องทำงานร่วมกับฐานข้อมูลหรือเฟรมเวิร์กเดิม อัลกอริทึมนี้ถูกออกแบบให้ทำงานช้าและใช้ salt จึงไม่เหมาะสำหรับใช้เป็น checksum ของไฟล์ทั่วไปหรือตัวระบุสำหรับกำจัดข้อมูลซ้ำ

  • งานที่เหมาะสม ได้แก่ รหัสผ่านของแอปพลิเคชัน การทดสอบย้ายระบบ การตรวจสอบขนาดฟิลด์ในฐานข้อมูล และการจำลองสภาพแวดล้อมพัฒนาที่รองรับ bcrypt
  • เลือกใช้ Argon2id แทน สำหรับระบบรหัสผ่านใหม่ เมื่อแพลตฟอร์มรองรับและสามารถจัดการการตั้งค่าหน่วยความจำได้อย่างเหมาะสม
  • เลือกใช้ SHA-3 แทน สำหรับตรวจสอบความสมบูรณ์ของไฟล์ สร้างลายนิ้วมือของเนื้อหา หรือกำจัดข้อมูลซ้ำ เครื่องมือสร้าง SHA-3/384 และเครื่องมือสร้าง SHA-3/512 ให้ค่าไดเจสต์อเนกประสงค์ ไม่ใช่ระเบียนรหัสผ่าน
  • อย่าใช้ bcrypt สำหรับลายเซ็นดิจิทัล การยืนยันความถูกต้องของข้อความ การเข้ารหัส หรือการจัดเก็บข้อมูลที่ต้องกู้คืนในภายหลัง

ช่องว่าง เครื่องหมายวรรคตอน และตัวเลขจะถูกประมวลผลเป็นข้อมูลนำเข้า ไม่ได้ถูกละเว้น อักขระที่มีเครื่องหมายกำกับเสียงและอักขระที่ไม่ใช่อักษรละตินจะถูกเข้ารหัสเป็นไบต์ก่อนที่ bcrypt จะประมวลผล ดังนั้นทั้งสองระบบต้องสร้างข้อมูลไบต์เดียวกัน โดยใช้การเข้ารหัสอักขระและการปรับ Unicode ให้เป็นรูปแบบมาตรฐานอย่างสอดคล้องกัน ขีดจำกัด 72 ไบต์มีความสำคัญเป็นพิเศษในกรณีนี้ เพราะอักขระ Unicode หนึ่งตัวอาจใช้พื้นที่มากกว่าหนึ่งไบต์ ในทางเทคนิคสามารถแฮชข้อมูลนำเข้าที่ว่างเปล่าได้ แต่รหัสผ่านว่างไม่ช่วยต้านทานการคาดเดาอย่างมีความหมาย

คำถามที่พบบ่อย

แฮช bcrypt ต้องใช้พื้นที่ในฐานข้อมูลเท่าไร?

ควรเผื่อพื้นที่อย่างน้อย 60 อักขระ ASCII สำหรับระเบียน bcrypt แบบทั่วไป การใช้ฟิลด์ที่กว้างกว่านี้เล็กน้อยอาจช่วยรองรับการย้ายไปใช้อัลกอริทึมรหัสผ่านอื่นในอนาคต ส่วนคอลัมน์ไบนารีไม่จำเป็นสำหรับรูปแบบเข้ารหัสมาตรฐาน

ย้ายแฮชรหัสผ่าน SHA เดิมไปเป็น bcrypt ได้ไหม?

คุณไม่สามารถแปลงไดเจสต์ SHA ที่มีอยู่ให้เป็นแฮช bcrypt ของรหัสผ่านต้นฉบับได้ หากไม่ทราบรหัสผ่านนั้น วิธีที่ใช้กันทั่วไปคือ ตรวจสอบแฮชเก่าเมื่อผู้ใช้ลงชื่อเข้าใช้ครั้งถัดไป จากนั้นนำรหัสผ่านที่ผู้ใช้ป้อนมาแฮชด้วย bcrypt หรือ Argon2id แล้วใช้ระเบียนใหม่แทนค่าเดิม

ก่อนบันทึกผลลัพธ์ ให้ตรวจสอบว่าคัดลอกค่าครบทั้ง 60 อักขระแล้ว ฟิลด์ฐานข้อมูลไม่ตัดค่าให้สั้นลง และแอปพลิเคชันปลายทางรองรับเครื่องหมายเวอร์ชันที่อยู่ในระเบียน

เครื่องมือยอดนิยม