05 July 2015

One Time Password (OTP) Implementation

One Time Password (OTP) คือ รหัสผ่านที่สามารถใช้ได้ครั้งเดียวซึ่งมี ข้อดีคือ Password ที่ถูกส่งผ่านไปบน network นั้นจะแตกต่างกันตามช่วงเวลา ทำให้กรณีที่ถูก sniff ไป password ก็จะไม่สามารถนำมา replay ได้ สำหรับข้อเสียนั้นคือ เรื่องของ cost ในการ implement ที่มีสูง เนื่องจากว่ามีการอาศัยอุปกรณ์ต่างๆเพิ่มเติม และการ maintain ที่ทำได้ยากกว่าการส่ง password ปกติ
หลักการทำงานของ OTP จะสามารถแบ่งได้ 3 ประเภทคือ
1. Time Synchronisation – อุปกรณ์ที่ generate OTP หรือที่เรียกว่า Token และ Authentication Server นั้นจะต้องมีการ Sync Time กัน และมีค่าตั้งต้น (Seed Value) ที่เหมือนกัน ดังนั้นในขั้นตอนของการ initial token นั้นจะต้องแน่ใจว่าทั้ง 2 ส่วนมีเวลาที่เท่ากัน และหลังจาก initial ไปแล้วจะต้องคอยดูเรื่อง time drift ของอุปกรณ์ Token ด้วยเนื่องจากว่าไม่สามารถ sync ใหม่ได้ด้วยตัวเอง หาก time drift มีมากเกินไป จะทำให้ password ที่สร้างขึ้นมาทั้ง 2 ฝั่งมีค่าไม่เท่ากัน สุดท้ายก็จะไม่สามารถ authenticate ผ่านได้ สิ่งที่จะต้องให้ความสำคัญสำหรับ Time Synchronisation คือช่วง Window Timing ที่จะอนุญาตให้ OTP สามารถใช้งานได้ เช่นหากเรายอมให้ OTP มีอายุการใช้งานแค่ 10 วินาที ซึ่งถือว่าเป็น Window Timing ที่สั้นมากทำให้มีความปลอดภัยสูง แต่อาจจะไม่ดีต่อ User เนื่องจากว่า User นำ OTP ไปใช้ไม่ทัน
2. Mathematical Algorithm – อุปกรณ์ที่ generate OTP หรือที่เรียกว่า Token และ Authentication Server นั้นจะต้องมีค่าตั้งต้น (Seed Value) ที่เหมือนกัน ดังนั้นในขั้นตอนของการ initial token นั้นจะต้องแน่ใจว่าได้นำค่า Seed Value ที่ถูกต้องไปใส่ที่ Authentication Server ขั้นตอนการสร้าง password นั้น จะใช้งาน function ซึ่งส่วนใหญ่จะเป็น hash function (อาศัย feature ที่มี fix size output) โดย password จะถูกสร้างตาม order คือ password ครั้งถัดไปนั้นจำเป็นต้องใช้ข้อมูลของ password ครั้งก่อนหน้า ลำดับของ password จะเป็น ดังนี้ f(s), f(f(s)), f(f(f(s))), … โดย f = hash function และ s = seed value ทางฝั่ง Authentication Server ก็จะคอยเก็บไว้ว่าค่า password ที่ใช้ล่าสุดคืออะไร โดยการเก็บนี้มีความสำคัญในเรื่องของการ maintain ค่า OTP อย่างมาก เช่น ถ้ามีการใช้งาน password ตัวที่เป็น f(f(s)) ทาง user ก็จะจำไว้ว่าหากมี password ตัวไหนที่มีการ generate ออกมาก่อนตัวนี้ก็จะไม่สามารถใช้งานได้ เช่น f(s) จะไม่สามารถใช้งานได้
3. Challenge – Response Algorithm – ในการสร้าง OTP แต่ละครั้งของ Token นั้นจะต้องมีการส่ง Challenge จาก Server มาให้ที่ Token โดยอาจจะเป็นการแสดงบนหน้าจอ แล้ว User ทำหน้าที่ input Challenge เข้าไปที่ Server เองก็ได้ ซึ่ง Token ก็จะทำการสร้าง OTP โดยใช้ค่า Challenge เป็น 1 ใน parameter เพื่อสร้าง OTP จากนั้น User จึงนำ OTP ที่สร้างออกมานี้ไปใช้งาน วิธีการนี้จึงเรียกว่า Challenge – Response
สรุป OTP โดยทางทฤษฏีแล้วถือว่ามี Security สูงมาก แต่ในทางปฏิบัติจะสามารถ implement ได้หลากหลายรูปแบบ ซึ่งแต่ละแบบนั้นมีระดับความปลอดภัยที่ไม่เท่ากัน เราจะคิดว่าใช้ OTP อย่างเดียวแล้วจะปลอดภัยไม่ได้
----------------------------------------------------------------
----------------------------------------------------------------

No comments:

Post a Comment