Google Authenticator 애플리케이션을 사용하여 생성 할 수있는 일회용 비밀번호를 사용하려고 합니다 .
Google Authenticator의 기능
기본적으로 Google Authenticator는 두 가지 유형의 비밀번호를 구현합니다.
- 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 Authenticator 앱을 사용하여 생성 한 비밀번호와 동일하지 않다는 것입니다. 여러 intervals_no
값 (정확히 처음 10000,으로 시작 intervals_no = 0
)을 시도했지만 secret
GA 앱에서 제공된 키 와 동일합니다.
내가 가진 질문
내 질문은 다음과 같습니다.
- 내가 뭘 잘못하고 있죠?
- 파이썬에서 HOTP 및 / 또는 TOTP를 어떻게 생성 할 수 있습니까?
- 이에 대한 기존 Python 라이브러리가 있습니까?
요약하자면, Python 코드 내에서 Google Authenticator 인증을 구현하는 데 도움이되는 단서를 제공해주세요.