0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PyotpでPythonでワンタイムパスワードを発行しよう

Posted at

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です!

最後に

この記事が面白かったり、参考になったら
いいね、コメントおねがいします!
最後まで読んでいただきありがとうございます!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?