One Time Password (หรือที่รู้จักกันในชื่อ OTP) เป็นรหัสผ่านที่ใช้งานได้เพียงครั้งเดียว ตัวอย่างเช่น การทำธุรกรรมทางการเงินกับธนาคารผ่านอินเทอร์เน็ต จะมีรหัสผ่านยืนยันส่ง SMS มายังโทรศัพท์มือถือ นี่คือ รหัส One Time Password
ภาษาไพทอน (Python) ได้มีนักพัฒนาได้พัฒนาโมดูลสำหรับสร้าง One Time Password ในภาษาไพทอนไว้แล้ว คือ โมดูล pyotp
โมดูล pyotp เป็นโมดูลสำหรับสร้าง One Time Password
- ทำงานตามมาตรฐาน RFC 4226 (HOTP: An HMAC-Based One-Time Password Algorithm) และ RFC 6238 (TOTP: Time-Based One-Time Password Algorithm)
- สนับสนุนการยืนยันผู้ใช้
- เข้ากันได้กับ Google Authenticator ในแอพบน Android, iOS เพิ่มรหัส OTP เข้าไปยังแอพ Google Authenticator ได้
- ใช้ BSD License
- รองรับทั้งภาษาไพทอน 2 และไพทอน 3
สามารถติดตั้งได้โดยใช้คำสั่ง pip:
pip install pyotp
การใช้งาน
ให้ทำการ
[python]import pyotp[/python]
เข้ามาทุกครั้ง
ใช้งาน One Time Password
[python]
totp = pyotp.TOTP('base32secret3232')
totp.now() # => 492039
# OTP verified for current time
totp.verify(492039) # => True
time.sleep(30)
totp.verify(492039) # => False
[/python]
ดึงรหัส OTP ถัดไป
[python]
hotp = pyotp.HOTP('base32secret3232')
hotp.at(0) # => 260182
hotp.at(1) # => 55283
hotp.at(1401) # => 316439
# OTP verified with a counter
hotp.verify(316439, 1401) # => True
hotp.verify(316439, 1402) # => False[/python]
สร้าง base32 Secret Key
[python]pyotp.random_base32() # returns a 16 character base32 secret. Compatible with Google Authenticator[/python]
การตั้งค่ากับ Google Authenticator
แอพ Google Authenticator บนมือถือ Android, iOS สามารถสร้างลิงค์ otpauth:// แล้วนำลิงค์นี้ไปเพิ่มลงแอพ สำหรับใช้สร้างรหัส One Time Password ได้
[python]
totp.provisioning_uri("admin") # บัญชีที่ชื่อว่า admin จะได้ otpauth://totp/admin?secret=base32secret3232 [/python]
นำลิงค์ที่ได้ไปสร้าง QR code (https://chart.apis.google.com/chart?cht=qr&chs=250x250&chl=otpauth://totp/admin?secret=base32secret3232) แล้วนำไปสแกนกับแอพ Google Authenticator จะได้รหัส One Time Password มา แล้วลองเปรียบเทียบรหัสที่ได้ระหว่างโปรแกรมไพทอนที่เขียนกับแอพ Google Authenticator
[python]
import pyotp
totp = pyotp.TOTP("base32secret3232")
print("Current OTP: %s" % totp.now())[/python]
ผลลัพธ์
Current OTP: 250602
แอพ Google Authenticator

หน้าหลักโมดูล pyotp https://github.com/pyotp/pyotp
ลองนำโมดูลนี้ไปออกแบบความปลอดภัยให้กับระบบกันดูครับ
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)