0Pricing
Cryptology Academy · บทเรียน

bcrypt: อัลกอริทึมและปัจจัยต้นทุน

เรียนรู้กลไกภายในของ bcrypt ปัจจัยงาน และการปรับต้นทุนอย่างเหมาะสม

bcrypt: อัลกอริทึมและปัจจัยต้นทุน เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

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

ต้นกำเนิดของ bcrypt

ออกแบบโดย Niels Provos และ David Mazières โดยอิงจากการเข้ารหัส Blowfish ตัวอักษร 'b' ย่อมาจาก Blowfish แนวคิดสำคัญคือการใช้ขั้นตอนการตั้งค่าคีย์ที่มีต้นทุนสูงของ Blowfish เพื่อทำให้การทำงานช้าลงโดยตั้งใจ

รูปแบบแฮชของ bcrypt

$2b$12$saltsaltsaltsaltsaltsalthashhashhashhashhashhash $2b$: รุ่นของขั้นตอนวิธี 12: ปัจจัยต้นทุน (log2 ของจำนวนรอบ) salt: อักขระ base64 จำนวน 22 ตัว (16 ไบต์) hash: อักขระ base64 จำนวน 31 ตัว (24 ไบต์)

ปัจจัยต้นทุน

ต้นทุน 12 = 2^12 = 4096 รอบ ต้นทุน 13 = 8192 รอบ การเพิ่มค่าขึ้นหนึ่งระดับจะทำให้เวลาคำนวณเพิ่มเป็นสองเท่า ปรับค่าให้การแฮชใช้เวลาประมาณ 100-300ms บนฮาร์ดแวร์ของคุณ ความเร็วของผู้โจมตีจะเพิ่มขึ้นในอัตราเดียวกัน

bcrypt ใน Python

import bcrypt password = b'my_password' salt = bcrypt.gensalt(rounds=12) # generates random salt hashed = bcrypt.hashpw(password, salt) # Verify: bcrypt.checkpw(password, hashed) # True

ค่าเสริมแบบสุ่มในตัว

bcrypt จะสร้างและจัดเก็บค่าเสริมแบบสุ่มโดยอัตโนมัติเสมอ gensalt() จะสร้างค่าเสริมแบบสุ่มขนาด 16 ไบต์ด้วยวิธีที่ปลอดภัยทางการเข้ารหัส คุณไม่จำเป็นต้องจัดการค่าเสริมแบบสุ่มแยกต่างหาก เพราะค่าดังกล่าวฝังอยู่ในสตริงแฮชแล้ว

ขีดจำกัด 72 อักขระของ bcrypt

bcrypt จะตัดข้อมูลนำเข้าที่เกิน 72 ไบต์ทิ้ง รหัสผ่านที่ยาวเกิน 72 อักขระจะถือว่าเหมือนกันเมื่อพิจารณาเฉพาะ 72 ไบต์แรก วิธีแก้: แฮชล่วงหน้าด้วย SHA-512 ก่อนใช้ bcrypt (แต่ควรตรวจสอบแนวทางนี้ให้เหมาะสม)

ลำดับการตรวจสอบรหัสผ่าน

การเข้าสู่ระบบ: 1. ผู้ใช้ส่งรหัสผ่าน 2. ดึงแฮชที่จัดเก็บไว้ออกจากฐานข้อมูล 3. bcrypt.checkpw(submitted, stored_hash) 4. checkpw ดึงค่าเกลือจากแฮชที่จัดเก็บไว้ แล้วคำนวณใหม่ 5. ส่งคืนค่า True/False ห้ามจัดเก็บรหัสผ่านดิบโดยเด็ดขาด

ผลการทดสอบประสิทธิภาพ

bcrypt ที่มีปัจจัยต้นทุน 12: - CPU สำหรับผู้ใช้ทั่วไป: ประมาณ 150 มิลลิวินาทีต่อแฮช - GPU (RTX 4090): ประมาณ 50,000 แฮชต่อวินาที (เทียบกับ 10B สำหรับ SHA-256) ข้อได้เปรียบของผู้โจมตีลดลงจาก 1 พันล้านเท่าเหลือประมาณ 300 เท่าเมื่อใช้ bcrypt ที่มีปัจจัยต้นทุน 12

คำแนะนำเกี่ยวกับปัจจัยต้นทุน

OWASP 2024: ปัจจัยต้นทุนของ bcrypt ≥ 10 ค่าที่แนะนำ: 12 ควรตรวจสอบทุกปี — เมื่อฮาร์ดแวร์มีประสิทธิภาพสูงขึ้น ให้เพิ่มปัจจัยดังกล่าว ใช้การแฮชใหม่แบบออนไลน์: เมื่อล็อกอิน ให้ตรวจสอบและอัปเกรดหากจำเป็น

ข้อจำกัดของ bcrypt

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

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ปัจจัยต้นทุน 12 ในแฮช bcrypt หมายถึงอะไร

สรุปทบทวน

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

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

บทเรียน “bcrypt: อัลกอริทึมและปัจจัยต้นทุน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “bcrypt: อัลกอริทึมและปัจจัยต้นทุน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “bcrypt: อัลกอริทึมและปัจจัยต้นทุน”

เรียนรู้กลไกภายในของ bcrypt ปัจจัยงาน และการปรับต้นทุนอย่างเหมาะสม คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “bcrypt: อัลกอริทึมและปัจจัยต้นทุน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม

ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใด SHA-256 แบบธรรมดาจึงใช้กับรหัสผ่านไม่ได้
  2. bcrypt: อัลกอริทึมและปัจจัยต้นทุน
  3. Argon2: การแฮชรหัสผ่านที่ใช้หน่วยความจำสูง
  4. PBKDF2 และการเลือกอัลกอริทึมที่เหมาะสม
← กลับไปที่ Cryptology Academy