Cryptology Academy · บทเรียน

ปัญหาพื้นฐานของการพิสูจน์ตัวตนด้วยรหัสผ่าน

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

บทเรียน 1 จาก 413 ขั้นตอน

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

รูปแบบรหัสผ่านแบบดั้งเดิม

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

เซิร์ฟเวอร์ถูกเจาะและการถอดรหัสแฮช

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

การใช้รหัสผ่านซ้ำขยายผลกระทบจากการรั่วไหล

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

ฟิชชิงหลบเลี่ยงการป้องกันฝั่งเซิร์ฟเวอร์

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

การยัดข้อมูลรับรองในวงกว้าง

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

เซิร์ฟเวอร์เรียนรู้รหัสผ่านของคุณ

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

สิ่งที่เราต้องการจริง ๆ

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

นำการพิสูจน์ความรู้ศูนย์มาใช้กับการยืนยันตัวตน

การพิสูจน์ความรู้ศูนย์มอบกรอบแนวคิดทางทฤษฎีสำหรับเรื่องนี้ โดยผู้พิสูจน์สามารถโน้มน้าวผู้ตรวจสอบให้เชื่อว่าความลับนั้นถูกต้องได้ โดยไม่เปิดเผยตัวความลับเอง โพรโทคอลการยืนยันตัวตนด้วยรหัสผ่านอย่าง SRP และ OPAQUE นำหลักการเหล่านี้มาใช้เพื่อให้ยืนยันตัวตนได้โดยไม่ต้องส่งรหัสผ่านโดยตรงหรือจัดเก็บรหัสผ่านไว้ฝั่งเซิร์ฟเวอร์

ความทนทานต่อการโจมตีแบบพจนานุกรม

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

ปัญหาความไว้วางใจในวงกว้าง

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

แนวทางต่อจากนี้

แนวทางสมัยใหม่ประกอบด้วย SRP (รหัสผ่านระยะไกลแบบปลอดภัย), OPAQUE และ FIDO2/กุญแจผ่าน แต่ละแนวทางแก้ปัญหาพื้นฐานคนละด้าน SRP และ OPAQUE กำจัดความรู้เกี่ยวกับรหัสผ่านของเซิร์ฟเวอร์ ส่วน FIDO2/กุญแจผ่านกำจัดรหัสผ่านโดยสิ้นเชิงด้วยการใช้การเข้ารหัสลับด้วยกุญแจสาธารณะที่ผูกไว้กับต้นทางโดยเฉพาะ

แบบทดสอบจุดอ่อนของการยืนยันตัวตนด้วยรหัสผ่าน

การโจมตีใดที่ NOT ถูกป้องกันด้วยการแฮชรหัสผ่านฝั่งเซิร์ฟเวอร์ที่แข็งแกร่ง (เช่น bcrypt)

ทบทวนบทเรียน: ปัญหาของรหัสผ่าน

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

เริ่มต้นได้ฟรี

เรียนรู้ Cryptology Academy ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
67
บทเรียน
261

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

บทเรียน “ปัญหาพื้นฐานของการพิสูจน์ตัวตนด้วยรหัสผ่าน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ปัญหาพื้นฐานของการพิสูจน์ตัวตนด้วยรหัสผ่าน”

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

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

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

บทเรียน “ปัญหาพื้นฐานของการพิสูจน์ตัวตนด้วยรหัสผ่าน” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ปัญหาพื้นฐานของการพิสูจน์ตัวตนด้วยรหัสผ่าน
  2. SRP: โพรโทคอลรหัสผ่านระยะไกลที่ปลอดภัย
  3. โพรโทคอล PAKE และคุณสมบัติของโพรโทคอล
  4. การพิสูจน์ตัวตนแบบไร้รหัสผ่าน: WebAuthn และ FIDO2
← กลับไปที่ Cryptology Academy