If i help You, send me BTC please 1CJGz4UGyL7hTjPeN8j7fu9LRmmWiWSRHi

Google authenticator backup.

Постов 25 из 175

Потерял телефон с google authenticator, что делать?

Я пользуюсь двухэтапной аутентификацией на некоторых серверах. Т.е., например, чтобы войти в почту gmail: ввожу логин пароль, а затем ввожу одноразовый пароль, сгенерированный google authenticator. И вот мне подумалось, а что, если я потеряю телефон, на котором стоит этот google authenticator? Я больше не войду в сервисы, для которых он генерирует одноразовый пароль? А если после утери девайса у меня появится срочная необходимость войти в сервисы, защищенные этим TOTP? А если мне просто захочется зайти в эти сервисы, когда телефон будет разряжен и не будет возможности его зарядить, но под рукой будет компьютер?

Решение.

Когда сервис, защищенный TOTP предлагает сканировать QR-код для Google Authenticator — можно не только сканировать QR-код, но и записать собственно значение ключа. Например, для google mail оно может быть такое:

csnji4rfndisoh323fdsioah3u2iodso

а для сервиса btc-e такое:

DHSJHDW89E8DFUS98RIO23J390EFU234IR90WEUIF903DMSKAKDS=

Так вот, в случае, если телефон с установленным Google authenticator потерян (разряжен), можно сгенерировать одноразовый пароль просто на компьютере. В Ubuntu достаточно запустить консоль, в ней запустить python, а в python определить функцию:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def totpgen ():
	import time
	import hmac
	import hashlib
	import base64
 
	### TOTP-key for Google
	#secret = base64.b32decode("csnji4rfndisoh323fdsioah3u2iodso", True)
	#totp for btc-e
	#secret = base64.b32decode("DHSJHDW89E8DFUS98RIO23J390EFU234IR90WEUIF903DMSKAKDS====")
	### Calc counter from UNIX time (see RFC6238) 
	counter = long(time.time() / 30)
 
	### Use counter as 8 byte array
	bytes=bytearray()
	for i in reversed(range(0, 8)):
	  bytes.insert(0, counter & 0xff)
	  counter >>= 8
 
	### Calculate HMAC-SHA1(secret, counter)
	hs = bytearray(hmac.new(secret, bytes, hashlib.sha1).digest())
 
	### Truncate result (see RFC4226)
	n = hs[-1] & 0xF
	result = (hs[n] << 24 | hs[n+1] << 16 | hs[n+2] << 8 | hs[n+3]) & 0x7fffffff
 
	### Print last 6 digits
	return str(result)[-6:]

Для генерирования одноразового пароля Google mail вставить в качестве аргумента для функции base64.b32decode ключ, полученный от Google, и раскомментировать строку:

8
secret = base64.b32decode("csnji4rfndisoh323fdsioah3u2iodso", True)

Для генерирования одноразового пароля btc-e вставить в качестве аргумента для функции base64.b32decode ключ, полученный от btc-e, дописать в конце его «===» и раскомментировать строку:

10
secret = base64.b32decode("DHSJHDW89E8DFUS98RIO23J390EFU234IR90WEUIF903DMSKAKDS====")

После этого вызвать из той же консоли эту функцию:

1
2
totpgen ()
123456

И всех делов)
Для Windows все примерно также, только среду python нужно скачать.

Полезные ссылки.

Что такое Одноразовый пароль.
Далее, очень подробно и с примером, как работает одноразовый пароль.
Как работает TOTP, wiki.

Преимущества TOTP

— есть стандарт для реализации
— доступны реализации с открытым кодом (для реализации технологии, но не для встраивания в работающие системы, которые не поддерживают эту технологию)
— большое (и все увеличивающееся) количество систем, поддерживающих эту технологию (названия поддерживающих систем говорят сами за себя)
— проверенная и доказанная надежность
— отсутствие дополнительных точек отказа при доставке сообщений, присущих доставке пароля, например с помощью SMS
— отсутствие накладных расходов, присущих доставке пароля, например с помощью SMS
— отсутствие необходимости доверять данные сторонним системам

, , , ,

Menu