การแฮช
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 userbcrypt: สร้างมาเพื่อรหัสผ่าน
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ