0Pricing
Ethical Hacking Academy · บทเรียน

การแฮช

MD5, SHA, bcrypt

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

แฮชคืออะไร

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

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

คุณสมบัติของแฮชที่ดี

ฟังก์ชันแฮชเชิงเข้ารหัสควรมีคุณสมบัติดังนี้:

  • กำหนดแน่นอน: ข้อมูลนำเข้าเดียวกันให้ผลลัพธ์เดียวกัน
  • คำนวณได้รวดเร็ว (สำหรับการทำแฮชทั่วไป) แต่ควรช้าสำหรับการทำแฮชรหัสผ่าน
  • ต้านทานการหาข้อมูลต้นทาง: เมื่อมีไดเจสต์แล้ว จะไม่สามารถค้นหาข้อมูลนำเข้าได้
  • ต้านทานการชนกัน: การหาข้อมูลนำเข้าสองชุดที่ให้ไดเจสต์เดียวกันทำได้ยาก
  • เอฟเฟกต์หิมะถล่ม: การเปลี่ยนเพียงหนึ่งบิตจะทำให้บิตผลลัพธ์ประมาณครึ่งหนึ่งเปลี่ยน

MD5

MD5 สร้างไดเจสต์ขนาด 128 บิต (อักขระเลขฐานสิบหก 32 ตัว) ทำงานรวดเร็วและเคยใช้กันอย่างแพร่หลาย แต่ ถูกทำลายในเชิงการเข้ารหัส แล้ว เนื่องจากมีการโจมตีให้เกิดการชนกันที่ใช้ได้จริง

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

echo -n 'password' | md5sum
# 5f4dcc3b5aa765d61d8327deb882cf99

ตระกูล SHA

ตระกูล SHA (อัลกอริทึมแฮชที่ปลอดภัย) มีความแข็งแกร่งกว่า:

  • SHA-1: 160 บิต ปัจจุบันถือว่าถูกทำลายแล้ว (การโจมตีการชนกัน “SHADOW HAMMER” / SHAttered) ควรหลีกเลี่ยง
  • SHA-2: ประกอบด้วย SHA-256 และ SHA-512 ใช้งานอย่างแพร่หลายและยังปลอดภัยในปัจจุบัน
  • SHA-3: การออกแบบที่ใหม่กว่า ซึ่งอาศัย Keccak และเป็นทางเลือกนอกเหนือจาก SHA-2
echo -n 'password' | sha256sum
# 5e884898da28047151d0e56f8dc629...

การทำแฮชไม่ใช่การเข้ารหัสลับ

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

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

ปัญหา: ตารางค้นหาเรนโบว์

เนื่องจากการแฮชให้ผลลัพธ์ที่แน่นอน ค่าแฮชของคำว่า 'รหัสผ่าน' จึงเหมือนกันสำหรับผู้ใช้ทุกคน ผู้โจมตีจะคำนวณตารางค้นหาขนาดใหญ่ล่วงหน้า ซึ่งจับคู่ค่าไดเจสต์กับข้อความต้นฉบับ โดยเรียกตารางเหล่านี้ว่า ตารางค้นหาเรนโบว์

หากผู้ใช้สองคนใช้รหัสผ่านเดียวกัน ค่าแฮชที่จัดเก็บไว้ก็จะเหมือนกัน ทำให้ข้อเท็จจริงนี้รั่วไหล ค่าแฮชแบบเร็วทั่วไปอย่าง MD5 หรือ SHA-256 เพียงอย่างเดียวจึงไม่เหมาะสำหรับรหัสผ่าน

การเติมค่าสุ่ม

ค่าสุ่ม คือค่าที่สุ่มและไม่ซ้ำกัน ซึ่งเติมลงในรหัสผ่านแต่ละรายการก่อนการแฮช ผลที่ได้คือ:

  • รหัสผ่านที่เหมือนกันจะให้ค่าแฮชที่แตกต่างกัน
  • ตารางค้นหาเรนโบว์ที่คำนวณไว้ล่วงหน้าจะใช้การไม่ได้

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

stored = salt + hash(salt + password)
# salt is random and unique per user

bcrypt: สร้างมาเพื่อรหัสผ่าน

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

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

$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
# $2b$ = bcrypt, 12 = cost factor, then salt + hash

อัลกอริทึมแฮชช้าอื่น ๆ

นอกจาก bcrypt แล้ว ตัวเลือกสมัยใหม่สำหรับการแฮชรหัสผ่านยังมี:

  • scrypt: ใช้หน่วยความจำสูงในการคำนวณ จึงต้านทานการโจมตีด้วย GPU และ ASIC
  • Argon2: ผู้ชนะการแข่งขันการแฮชรหัสผ่าน และปรับค่าเวลาและหน่วยความจำได้ จึงเป็นตัวเลือกสมัยใหม่ที่แนะนำ
  • PBKDF2: ใช้ค่าแฮชแบบเร็วคำนวณซ้ำหลายพันรอบ ยอมรับได้ แต่ปลอดภัยน้อยกว่าสองตัวเลือกข้างต้น

HMAC และความถูกต้องครบถ้วน

นอกจากใช้กับรหัสผ่านแล้ว ค่าแฮชยังใช้ตรวจสอบ ความถูกต้องครบถ้วน ได้ด้วย HMAC (รหัสยืนยันข้อความที่อิงแฮช) จะรวมค่าแฮชเข้ากับกุญแจลับ เพื่อยืนยันทั้งความถูกต้องครบถ้วนและแหล่งที่มาของข้อความ

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

การพบค่าแฮชในการใช้งานจริง

ในฐานะผู้เชี่ยวชาญด้านความปลอดภัย คุณจะพบค่าแฮชอยู่เสมอ:

  • /etc/shadow บน Linux จัดเก็บค่าแฮชรหัสผ่านที่เติมค่าสุ่ม โดยมีคำนำหน้าอย่าง $6$ (SHA-512) หรือ $2b$ (bcrypt)
  • Windows จัดเก็บค่าแฮช NTLM ไว้ในฐานข้อมูล SAM
  • แอปพลิเคชันเว็บจัดเก็บรหัสผ่านที่แฮชแล้วไว้ในตารางผู้ใช้

การสังเกตคำนำหน้าจะบอกอัลกอริทึมและแนวทางการถอดรหัสที่ควรใช้ได้ทันที

$6$rounds=5000$salt$hash   # SHA-512 crypt
$2b$12$saltandhash...      # bcrypt

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

โปรดเลือกตัวเลือกที่ปลอดภัยที่สุดสำหรับการจัดเก็บรหัสผ่านผู้ใช้

สรุปทบทวน

ขณะนี้คุณเข้าใจเรื่องการแฮชแล้ว:

  • การแฮชเป็นการแปลงข้อมูลแบบ ทางเดียว ที่มีขนาดคงที่และให้ผลลัพธ์แน่นอน แตกต่างจากการเข้ารหัสข้อมูลและการเข้ารหัสลับ
  • MD5 และ SHA-1 ไม่ปลอดภัยแล้ว สำหรับความถูกต้องครบถ้วนทั่วไปให้ใช้ SHA-256
  • สำหรับรหัสผ่าน ให้ใช้อัลกอริทึมที่ทำงานช้าและเติมค่าสุ่ม เช่น bcrypt, scrypt หรือ Argon2
  • ค่าสุ่ม ช่วยป้องกันตารางค้นหาเรนโบว์ ส่วน HMAC เพิ่มการตรวจสอบความถูกต้องด้วยกุญแจ

ต่อไปคุณจะได้สำรวจการเข้ารหัสแบบสมมาตรและแบบไม่สมมาตรด้วย AES และ RSA

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

บทเรียน “การแฮช” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การแฮช”

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

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

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

บทเรียน “การแฮช” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การเข้ารหัสรูปแบบเทียบกับการเข้ารหัสลับ
  2. การแฮช
  3. แบบสมมาตรและแบบอสมมาตร
  4. การถอดรหัสแฮช
← กลับไปที่ Ethical Hacking Academy