0.ワンタイムパスワードとは?
アカウントにログインする時、「認証アプリの番号を入力してください」
みたいなメッセージを見たことありませんか?
この番号が、今回の本題である
「ワンタイムパスワード」です。
今回はこれの仕組みやPythonでの実装方法を書こうと思います!
1.仕組み
"認証アプリを登録する際に、秘密鍵を発行し、その秘密鍵と時間を計算することでワンタイムパスワードが生成されている。"
って言っても、あんまり分からないじゃないですか。
なので簡単な例えをどうぞ。
例え話「サーバーとクライアントの2つの種」
「サーバーとクライアントは環境が違っても全く同じ育ち方をする
特殊な種(秘密鍵)を持っています。植え始めた時間が違っても途中から育ち始めます。」
(緑のやつが種です)
「サーバーはクライアントに種の育ち具合を聞くことで本人かそうでないかを判別しています。」
どうですか?理解してもらえたでしょうか。こんな感じで例えで考えるとわかりやすいかもしれません!
2.実際に使ってみよう!
事前準備
pip install pyotp qrcode
サンプルコード
otp.py
import pyotp
import secrets
import qrcode
import base64
secret = base64.b32encode(secrets.token_bytes(10)) # 例えでいう、種
totp = pyotp.TOTP(secret) # サーバー側の、木
qrcode.make(totp.provisioning_uri()).save("QR.png")
print(f"The secret is {secret}!")
while True:
answer = input("What is the number? > ")
if totp.verify(answer): # サーバー側の木と一致するか確認
print("Collect!")
else:
print("Incollect!")
break
QR.pngが生成されるので、それを認証アプリで読み取ったらOKです!
最後に
この記事が面白かったり、参考になったら
いいね、コメントおねがいします!
最後まで読んでいただきありがとうございます!