Google Authenticator — приложение для двухэтапной аутентификации с помощью Time-based One-time Password Algorithm (TOTP) и HMAC-based One-time Password Algorithm (HOTP) от Google LLC. Сервис реализует алгоритмы, указанные в RFC 6238 и RFC 4226.
Authenticator представляет 6- или 8-значный одноразовый цифровой пароль, который пользователь должен предоставить в дополнение к имени пользователя и пароля, чтобы войти в службы Google или других сервисов. Authenticator также может генерировать коды для сторонних приложений, такие как менеджеры паролей или услуг хостинга файлов. Предыдущие версии программы были доступны с открытым исходным кодом на GitHub, но последние выпуски являются частной собственностью GoogleWillis, Nathan (22 January 2014)."FreeOTP multi-factor authentication ". LWN.net. Retrieved 10 August 2015..
Пример использования Как правило, пользователи должны сначала установить приложение на своё мобильное устройство. Для того, чтобы войти на сайт или воспользоваться услугами сервиса, требуется ввести имя пользователя и пароль, запустить приложение Authenticator и ввести в специальное поле сгенерированный одноразовый пароль.
Для этого сайт предоставляет общий секретный ключ пользователю, который должен быть сохранен в приложение Google Authenticator. Этот секретный ключ будет использоваться для всех будущих входов на сайт.
С двухэтапной аутентификацией простое знание логина/пароля не является достаточным для взлома учётной записи. Злоумышленник также должен знать секретный ключ или иметь физический доступ к устройству с Google Authenticator. Альтернативным путем является MITM-атака: если компьютер пользователя заражен трояном, то имя пользователя, пароль и одноразовый код могут быть перехвачены, чтобы затем инициировать свой собственный сеанс входа на сайте или отслеживать и изменять информацию между пользователем и сайтом.
Реализации Google Authenticator представлен на Android,https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2 A BlackBerry и iOS. Также доступно несколько сторонних реализаций:
Windows Phone 7.5/8/8.1/10: Microsoft Authenticator Virtual TokenFactor Windows Mobile: Google Authenticator for Windows Mobile Java CLI: Authenticator.jar Java GUI: JAuth FXAuth J2ME: gauthj2me lwuitgauthj2me Mobile-OTP (Chinese only) totp-me Palm OS: gauthj2me Python: onetimepass PHP: GoogleAuthenticator.php Ruby: rotp, twofu Rails: active_model_otp (third party implementation) webOS: GAuth Windows: gauth4win MOS Authenticator WinAuth .NET: TwoStepsAuthenticator HTML5: html5-google-authenticator MeeGo/Harmattan (Nokia N9): GAuth Sailfish OS: SGAuth, SailOTP Apache: Google Authenticator Apache Module PAM: Google Pluggable Authentication Module oauth-pam Backend: LinOTP (Management Backend implemented in python) Chrome/Chrome OS: Authenticator iOS: OTP Auth
Техническое описание Поставщик услуг генерирует 80-битный секретный ключ для каждого пользователя (хотя RFC 4226 § 4 требует минимум 128 бит и рекомендует 160 бит). Ключ предоставляется в виде 16-, 26-, 32-значной строки в кодировке Base32 или в виде QR-кода. С помощью секретного ключа клиент создает HMAC-SHA1 от: количества 30-секундных интервалов с начала «эры UNIX» для варианта TOTP счётчика, который увеличивается с каждым новым кодом для варианта HOTP.
Затем часть HMAC извлекается и преобразуется в 6-значный код.
Псевдокод для Time-based OTP function GoogleAuthenticatorCode(string secret) // based on RFC 4226 key := base32decode(secret) // key: array of uint8 message := htobe64(current Unix time / 30) // message: uint64, make it big-endian hash := HMAC-SHA1(key, message) // hash: array of uint8 offset := last nibble of hash // offset := hash[hash.size() - 1] & 0x0F truncatedHash := (hash[offset] << 24) | (hash[offset+1] << 16) // truncatedHash: uint32 big-endian | (hash[offset+2] << 8) | hash[offset+3] truncatedHash = truncatedHash & 0x7FFFFFFF // reset MSB code := truncatedHash mod 1000000 pad code with 0 until length of code is 6 return code // code: string
Псевдокод для Event/Counter OTP function GoogleAuthenticatorCode(string secret) key := base32decode(secret) message := counter encoded on 8 bytes hash := HMAC-SHA1(key, message) offset := last nibble of hash truncatedHash := hash[offset..offset+3] //4 bytes starting at the offset Set the first bit of truncatedHash to zero //remove the most significant bit code := truncatedHash mod 1000000 pad code with 0 until length of code is 6 return code
Перенос аккаунтов
Пользователи могут выбрать, какие учетные записи экспортировать, а затем, после проверки с помощью ввода ПИН-кода устройства или биометрической аутентификации, отобразить QR-код, с помощью которого данные могут быть импортированы в приложение Authenticator на другом телефоне.
См. также
Microsoft Authenticator
Примечания
Ссылки Google Authenticator on Google Help Google Authenticator legacy source code on GitHub Google Authenticator implementation in Python on Stack Overflow
Authenticator