二段階認証でよくあるAuthenticatorのPythonによる実装

概要

MicrosoftやGoogle、AmazonやTwitterのログインで使える6桁の二要素認証用のパスワードですが、ふと思い立ったのでAuthenticator(↓こんなやつ)をPythonでアルゴリズムだけ実装してみました。

仕組み

ワンタイムパスワードが30秒ごとに切り替わっていることからも推察できるように、アルゴリズムは時間ベースのワンタイムパスワード(TOTP)です。

なおシークレットと時間の処理にはHMACベースのワンタイムパスワード(HOTP)を使います。

すみませんが、日本語による詳細な説明は参考文献に任せます。

コード

上記のコードはシークレットが”12345678901234567890″かつタイムカウンタが0のときの結果を出力します。これはHOTPについて記述されているRFC4226のAppendix DのTest Valuesにあわせたものです。実行結果は以下。

各々の値で試したい場合はBASE32に記述されたシークレットはsecret_b32に、time_counterをunixtimeベースの処理にコメントを付け直してください。

数パターンしか試してないですが、たぶんこれで動きます。不具合あったら教えてください。

参考

スポンサーリンク
WPC-336 x 280
WPC-336 x 280

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
WPC-336 x 280