• ไม่ใช้รหัสผ่าน
  • รหัสผ่านครั้งเดียว
  • otp
  • otp ตามเวลา
  • otp ตามการแฮช

รหัสผ่านครั้งเดียว (OTP) ทำงานอย่างไร?

ในบทความนี้ เราจะนำเสนอวิธีการรหัสผ่านครั้งเดียวสองวิธีที่แตกต่างกัน: อีเมล/โทรศัพท์ + รหัสยืนยัน และรหัสไดนามิก

Darcy Ye
Darcy Ye
Developer

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

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

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

รหัสผ่านครั้งเดียว (OTP) คืออะไร?

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

ในทางทฤษฎี OTP สามารถเป็นสตริงสุ่มที่มีความยาวจากตัวอักษรพิมพ์ใหญ่และพิมพ์เล็กและแม้กระทั่งสัญลักษณ์พิเศษ แต่เพื่อประสบการณ์ของผู้ใช้ บริการส่วนใหญ่ใช้ตัวเลขล้วนเมื่อใช้ OTP

อีเมล / โทรศัพท์ + รหัสยืนยัน

เว็บไซต์หลายแห่งต้องการให้คุณยืนยันตัวตนของคุณโดยการส่งรหัสยืนยัน (หรือรหัสผ่าน) ไปยังอีเมลหรือหมายเลขโทรศัพท์ที่คุณลงทะเบียน

ลองจินตนาการว่า Jack และ Joe กำลังเล่นเกมทายจำนวน โดยที่ Jack คิดถึงตัวเลขระหว่าง 0 ถึง 999 และให้ Joe สามารถทายได้สามครั้งภายในหนึ่งนาที นอกจากรู้ขอบเขตของตัวเลขแล้ว Joe ไม่มีข้อมูลใด ๆ

เราทุกคนรู้ดีว่าเป็นไปไม่ได้เกือบที่จะให้ Joe ทายถูกภายในหนึ่งนาทีด้วยการลองสามครั้งเท่านั้น

อีเมล / โทรศัพท์ + รหัสยืนยันทำงานบนหลักการเดียวกัน: รหัสยืนยันมีอายุการใช้งานสั้นมาก ปกติไม่เกิน 10 นาที (เหมือนกับที่ Jack ให้เวลา Joe "หนึ่งนาที" ในการทายตัวเลข) นอกจากนี้ API หรือวิธีการตรวจสอบรหัสยืนยันมักมีข้อจำกัดในการลองเพื่อป้องกันการโจมตีแบบ brute force ต่อรหัสผ่าน (เหมือนกับที่ Jack ให้ Joe "โอกาสสามครั้ง" เท่านั้น)

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

รหัสไดนามิก

รหัสไดนามิก หรือที่รู้จักกันเป็น OTP แบบใช้เวลา (TOTP) เป็น "ไดนามิก" ในความหมายที่ว่ามันเปลี่ยนแปลงตามเวลา โดยทั่วไป หากเว็บแอปใช้ TOTP มันจะปฏิบัติตาม RFC6238 - TOTP: อัลกอริทึมรหัสผ่านครั้งเดียวตามเวลา

รหัสผ่านครั้งเดียวตามการแฮช

ก่อนนำเสนอ TOTP เราจำเป็นต้องอธิบายสั้น ๆ เกี่ยวกับ RFC4226 - HOTP: HMAC-Based One-Time Password Algorithm (HMAC เป็น อัลกอริทึมการแฮช) อัลกอริทึม HOTP ทำงานดังนี้:

  1. ความลับ: HOTP ต้องการกุญแจลับที่ใช้ร่วมกัน K ซึ่งเหมือนกันระหว่างเซิร์ฟเวอร์และลูกค้า

  2. เคาน์เตอร์: ส่วนหลักของ HOTP คือเคาน์เตอร์ C ซึ่งเพิ่มขึ้นทุกครั้งที่สร้างรหัสผ่านใหม่

  3. การคำนวณ HMAC:

    • ใช้ HMAC-SHA-1 (หรือฟังก์ชันแฮชอื่น ๆ) เพื่อคำนวณรหัสยืนยัน:

      hmac calculation
    • ที่นี่ H เป็นค่าแฮชขนาด 160 บิต

  4. การตัดทอน: สกัดกั้นส่วนหนึ่งของค่าแฮช H เพื่อสร้าง OTP สมมติว่าเราต้องการ OTP 6 หลัก กระบวนการเป็นดังนี้:

    • สกัดกั้นไบต์สุดท้ายของ H เป็นจุดเริ่มต้นการตัดทอน O
    • สกัดกั้น 4 ไบต์เริ่มจาก O แปลงเป็นจำนวนเต็ม T
    • ใช้หลักสุดท้าย d หลักของ T คือ OTP = T mod 10^d

โดยสรุป สูตร HOTP คือ:

hash-based otp calculation

ที่นี่ d คือความยาวของ OTP ที่ต้องการ (ปกติจะมี 6-8 หลัก)

รหัสผ่านครั้งเดียวตามเวลา

TOTP เป็นการขยายของ HOTP ใช้ตัวนับเวลาตามแทนเคาน์เตอร์ ใช้เวลาปัจจุบันในการสร้างรหัสยืนยันไดนามิก ดังนั้น OTP จะหมดอายุโดยอัตโนมัติตามเวลา หลักการทำงานคือ:

  1. ขึ้นกับเวลา: TOTP ใช้เวลาปัจจุบัน T แทนเคาน์เตอร์ HOTP C โดยช่วงเวลาคือช่วงเวลาคงที่ (ปกติคือ 30 วินาที)

    • ตัวอย่างเช่น สมมติว่าช่วงเวลาเป็น 30 วินาทีและ Unix timestamp ปัจจุบันคือ T ตัวนับ TOTP จะคำนวณเป็น: T' = T / time_step
    • ที่นี่ T′ คือตัวนับแบบขึ้นกับเวลา ในหน่วยของ 30 วินาที
  2. การสร้าง OTP: แทนที่ T′ เข้าไปในอัลกอริทึม HOTP เพื่อสร้าง OTP:

    generating totp
  3. การอัปเดตแบบไดนามิก: เนื่องจาก TOTP ขึ้นอยู่กับช่วงเวลา OTP จะเปลี่ยนแปลงตามเวลา เซิร์ฟเวอร์สามารถตรวจสอบความถูกต้องได้ตราบใดที่ OTP อยู่ในช่วงเวลาที่กำหนด

โดยสรุป สูตร TOTP คือ:

totp calculation

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

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

หมายเหตุปิดท้าย

ในบทความนี้ เราได้แนะนำวิธีการรหัสผ่านครั้งเดียวสองประเภทที่แตกต่างกัน: อีเมล/โทรศัพท์ + รหัสยืนยัน และรหัสไดนามิก

อีเมล/โทรศัพท์ + รหัสยืนยันอาศัยโครงสร้างพื้นฐานของการสื่อสารและบริการอีเมลหรือข้อความสั้น (SMS) ของบุคคลที่สามในการดำเนินการ; รหัสไดนามิกไม่พึ่งพาบริการภายนอกและสิ่งอำนวยความสะดวกด้านการสื่อสาร และสามารถใช้งานได้แบบออฟไลน์

Logto ซึ่งเป็นบริการ IAM (Identity and Access Management) ยอดนิยมที่ทรงพลังและมีความยืดหยุ่นสูง รองรับทั้งสองวิธี OTP ทำให้ผู้ใช้สามารถเลือกวิธีการที่เหมาะสมกับความต้องการทางธุรกิจมากที่สุด