รหัสผ่านครั้งเดียว (OTP) ทำงานอย่างไร?
ในบทความนี้ เราจะนำเสนอวิธีการรหัสผ่านครั้งเดียวสองวิธีที่แตกต่างกัน: อีเมล/โทรศัพท์ + รหัสยืนยัน และรหัสไดนามิก
เมื่ออินเทอร์เน็ตมีพัฒนาการ เราได้ใช้บริการออนไลน์หลากหลายประเภทเพื่อตอบสนองความต้องการเกือบทั้งหมดของเรา ขั้นตอนแรกในการใช้บริการเหล่านี้มักจะเป็นการลงทะเบียนและเข้าสู่ระบบ เมื่อพูดถึงการลงทะเบียนและการลงชื่อเข้าใช้ การยืนยันตัวตนด้วย 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 ทำงานดังนี้:
-
ความลับ: HOTP ต้องการกุญแจลับที่ใช้ร่วมกัน K ซึ่งเหมือนกันระหว่างเซิร์ฟเวอร์และลูกค้า
-
เคาน์เตอร์: ส่วนหลักของ HOTP คือเคาน์เตอร์ C ซึ่งเพิ่มขึ้นทุกครั้งที่สร้างรหัสผ่านใหม่
-
การคำนวณ HMAC:
-
ใช้ HMAC-SHA-1 (หรือฟังก์ชันแฮชอื่น ๆ) เพื่อคำนวณรหัสยืนยัน:
-
ที่นี่ H เป็นค่าแฮชขนาด 160 บิต
-
-
การตัดทอน: สกัดกั้นส่วนหนึ่งของค่าแฮช H เพื่อสร้าง OTP สมมติว่าเราต้องการ OTP 6 หลัก กระบวนการเป็นดังนี้:
- สกัดกั้นไบต์สุดท้ายของ H เป็นจุดเริ่มต้นการตัดทอน O
- สกัดกั้น 4 ไบต์เริ่มจาก O แปลงเป็นจำนวนเต็ม T
- ใช้หลักสุดท้าย d หลักของ T คือ OTP = T mod 10^d
โดยสรุป สูตร HOTP คือ:
ที่นี่ d คือความยาวของ OTP ที่ต้องการ (ปกติจะมี 6-8 หลัก)
รหัสผ่านครั้งเดียวตามเวลา
TOTP เป็นการขยายของ HOTP ใช้ตัวนับเวลาตามแทนเคาน์เตอร์ ใช้เวลาปัจจุบันในการสร้างรหัสยืนยันไดนามิก ดังนั้น OTP จะหมดอายุโดยอัตโนมัติตามเวลา หลักการทำงานคือ:
-
ขึ้นกับเวลา: TOTP ใช้เวลาปัจจุบัน T แทนเคาน์เตอร์ HOTP C โดยช่วงเวลาคือช่วงเวลาคงที่ (ปกติคือ 30 วินาที)
- ตัวอย่างเช่น สมมติว่าช่วงเวลาเป็น 30 วินาทีและ Unix timestamp ปัจจุบันคือ T ตัวนับ TOTP จะคำนวณเป็น: T' = T / time_step
- ที่นี่ T′ คือตัวนับแบบขึ้นกับเวลา ในหน่วยของ 30 วินาที
-
การสร้าง OTP: แทนที่ T′ เข้าไปในอัลกอริทึม HOTP เพื่อสร้าง OTP:
-
การอัปเดตแบบไดนามิก: เนื่องจาก TOTP ขึ้นอยู่กับช่วงเวลา OTP จะเปลี่ยนแปลงตามเวลา เซิร์ฟเวอร์สามารถตรวจสอบความถูกต้องได้ตราบใดที่ OTP อยู่ในช่วงเวลาที่กำหนด
โดยสรุป สูตร TOTP คือ:
จากประสบการณ์การใช้แอปยืนยันตัวตน เราสามารถซิงค์ค่าลับระหว่างอุปกรณ์และเซิร์ฟเวอร์ด้วยการสแกน QR โค้ดหรือการคัดลอกและวางโดยตรง จากนั้นเราต้องป้อนรหัสไดนามิกปัจจุบันหนึ่งครั้งเพื่อให้แน่ใจว่าค่าลับเหมือนกัน
ในยุคต้นของการใช้โทรศัพท์มือถือ เราอาจพบว่าเวลาบนอุปกรณ์ต่าง ๆ ไม่เหมือนกัน และเราต้องปรับเวล าในอุปกรณ์ด้วยตนเองอย่างต่อเนื่อง ในช่วงไม่กี่ปีที่ผ่านมา อุปกรณ์เกือบทั้งหมดใช้บริการเวลาเครือข่าย (NTP) เพื่อซิงค์และอัปเดตเวลาของอุปกรณ์อย่างสม่ำเสมอ แม้ว่าเวลาบนอุปกรณ์จะไม่ถูกต้องทุกประการ แต่การอัปเดตบ่อยครั้งนั้นทำให้เวลาสอดคล้องกันระหว่างอุปกรณ์ต่าง ๆ ตามสมมุติฐานนี้ รหัสไดนามิกยังสามารถใช้งานได้แม้ว่าอุปกรณ์จะออฟไลน์ ซึ่งจะยากที่จะรับรหัสยืนยันในสถานะออฟไลน์
หมายเหตุปิดท้าย
ในบทความนี้ เราได้แนะนำวิธีการรหัสผ่านครั้งเดียวสองประเภทที่แตกต่างกัน: อีเมล/โทรศัพท์ + รหัสยืนยัน และรหัสไดนามิก
อีเมล/โทรศัพท์ + รหัสยืนยันอาศัยโครงสร้างพื้นฐานของการสื่อสารและบริการอีเมลหรือข้อความสั้น (SMS) ของบุคคลที่สามในการดำเนินการ; รหัสไดนามิกไม่พึ่งพาบริการภายนอกและสิ่งอำนวยความสะดวกด้านการสื่อสาร และสามารถใช้งานได้แบบออฟไลน์
Logto ซึ่งเป็นบริการ IAM (Identity and Access Management) ยอดนิยมที่ทรงพลังและมีความยืดหยุ่นสูง รองรับทั้งสองวิธี OTP ทำให้ผู้ใช้สามารถเลือกวิธีการที่เหมาะสมกับความต้องการทางธุรกิจมากที่สุด