Google Authenticatorアプリケーションを使用して生成できるワンタイムパスワードを使用しようとしています。
Google認証システムの機能
基本的に、Google認証システムは2種類のパスワードを実装します。
- HOTP -パスワードはに準拠して、各呼び出しで変更されることを意味HMACベースのワンタイムパスワード、RFC4226、および
- TOTP-時間ベースのワンタイムパスワード。(私の知る限り)30秒ごとに変更されます。
Google Authenticatorはオープンソースとしても利用できます:code.google.com/p/google-authenticator
現在のコード
HOTPおよびTOTPパスワードを生成するための既存のソリューションを探していましたが、あまり見つかりませんでした。私が持っているコードは、HOTPの生成を担当する次のスニペットです。
import hmac, base64, struct, hashlib, time
def get_token(secret, digest_mode=hashlib.sha1, intervals_no=None):
if intervals_no == None:
intervals_no = int(time.time()) // 30
key = base64.b32decode(secret)
msg = struct.pack(">Q", intervals_no)
h = hmac.new(key, msg, digest_mode).digest()
o = ord(h[19]) & 15
h = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
return h
私が直面している問題は、上記のコードを使用して生成したパスワードが、Android用のGoogle認証システムアプリを使用して生成したものと同じではないことです。私は複数のintervals_no
値を試しましたが(GA で始まる正確に最初の10000 intervals_no = 0
)、secret
GAアプリ内で提供されるキーと同じです。
私が持っている質問
私の質問は:
- 何が悪いのですか?
- PythonでHOTPやTOTPを生成するにはどうすればよいですか?
- このための既存のPythonライブラリはありますか?
まとめると、Pythonコード内にGoogle認証システム認証を実装するのに役立つ手がかりを教えてください。