TOTP (Time-based one-time Password algorithm)
С ростом числа угроз кибербезопасности, для разработчиков становится все более и более необходимым обновлять стандарты безопасности веб-приложений и быть при этом уверенными в том, что аккаунты пользователей в безопасности. Для этого в настоящее время многие онлайн-приложения просят пользователей добавить дополнительный уровень безопасности для своей учетной записи. Они делают это за счет включения двухфакторной аутентификации. Существуют различные методы реализации двухфакторной аутентификации, и аутентификация TOTP (алгоритм одноразового пароля на основе времени) является одним из них.
Чтобы понять, что из себя представляет TOTP и как он используется, необходимо сначала кратко рассмотреть более базовые понятия. Первое из них – двухфакторная аутентификация. Двухфакторная аутентификация (или многофакторная аутентификация) — это метод идентификации пользователя в каком-либо сервисе (как правило, в Интернете) при помощи запроса аутентификационных данных двух разных типов, что обеспечивает двухслойную, а значит, более эффективную защиту аккаунта от несанкционированного проникновения. Это означает, что после включения двухфакторной аутентификации пользователь должен пройти еще один шаг для успешного входа в систему. Стандартные шаги для входа в учетную запись – это ввод логина и ввод пароля (рис.1).
Рисунок 1. Порядок входа в учетную запись без двухфакторной аутентификации
Включение двухфакторной аутентификации добавляет в порядок входа дополнительный шаг (рис.2). Этот метод более безопасен, поскольку преступник не может получить доступ к учетной записи пользователя, если у него нет доступа как к обычному паролю пользователя, так и к одноразовому паролю.
Рисунок 2. Вход в учетную запись с подключенной двухфакторной аутентификацией
В настоящее время существует два широко используемых метода получения одноразового пароля:
На основе SMS. Каждый раз, когда пользователь входит в систему, он получает на указанный в учетной записи номер мобильного телефона текстовое сообщение, которое содержит одноразовый пароль.
На основе TOTP. При включении двухфакторной аутентификации пользователю предлагается отсканировать QR-код с помощью специального приложения для смартфона, которое в дальнейшем постоянно генерирует одноразовый пароль для пользователя.
Метод на основе SMS не требует пояснений. Несмотря на свою простоту, он имеет ряд проблем. Например, ожидание SMS при каждой попытке входа в систему, проблемы с безопасностью и т. д. Вследствие чего NIST еще в 2016 году рекомендовала не использовать его в новых системах аутентификации. В связи с минусами метода на основе SMS, метод на основе TOTP становится популярным из-за его преимуществ.
Также, стоит отметить, что в настоящий момент есть некоторые разногласия о том, что именно считать шагами, а что факторами аутентификации. Общепризнанным является существование трех факторов:
Знание, например, пароль
Обладание (в физическом смысле), например, смартфон
То, чем вы являетесь, например, биометрические данные
При этом шаги аутентификации являются субъединицами факторов, так, если для входа в систему необходимо введение двух паролей, то по сути мы используем только фактор знания. Если говорить о рассматриваемых нами методах, то метод на основе SMS принято относить к двухшаговой, но однофакторной аутентификации, т. к. пароль для SMS генерируется на сервере, а TOTP к двухфакторной, поскольку для генерации пароля необходимо наличие определенного приложения на смартфоне, что усложняет задачу доступа злоумышленников к этой информации.
Итак, используя для двухфакторной аутентификации метод на основе TOTP, мы создаем одноразовый пароль на стороне пользователя (а не на стороне сервера) через приложение для смартфона. Это означает, что у пользователя всегда есть доступ к своему одноразовому паролю. А также предотвращает отправку текстового сообщения сервером при каждой попытке войти в систему. Кроме того, сгенерированный пароль изменяется через определенный промежуток времени, что делает его, по сути, одноразовым.
Для реализации двухфакторной аутентификации с использованием TOTP необходимо учитывать основное требование – пароль должен создаваться на стороне пользователя, а также постоянно меняться.
Решение данной задачи может выглядеть следующим образом:
Когда пользователь включает двухфакторную аутентификацию, происходит следующее
Внутренний сервер создает секретный ключ для этого конкретного пользователя
Затем сервер передает этот секретный ключ телефонному приложению пользователя
Телефонное приложение инициализирует счетчик
Телефонное приложение генерирует одноразовый пароль, используя этот секретный ключ и счетчик
Телефонное приложение изменяет счетчик через определенный интервал и восстанавливает одноразовый пароль, делая его динамическим
Этот алгоритм включает в себя два этапа:
Создать хеш HMAC (используя алгоритм хеширования SHA-1) из секретного ключа и счетчика
В этом коде на выходе будет строка длиной 20 байт. Эта длинная строка не подходит в качестве одноразового пароля. Итак, нам нужен способ обрезать эту строку. HOTP определяет способ обрезать эту строку до желаемой длины
Это в значительной степени определяет алгоритм HOTP. Документ RFA4226 объясняет, почему это наиболее безопасный способ получить одноразовый пароль из этих двух значений.
Итак, мы нашли способ получить одноразовый пароль с помощью секретного ключа и счетчика. А как следить за счетчиком? Ответ на этот вопрос находится в TOTP. TOTP переводится как «Одноразовый пароль на основе времени». Он был опубликован IETF как RFC6238. TOTP использует алгоритм HOTP для получения одноразового пароля. Единственная разница в том, что здесь вместо «счетчика» используется «время», и это дает решение нашей проблемы. Это означает, что вместо инициализации счетчика и его отслеживания мы можем использовать время в качестве счетчика в алгоритме HOTP для получения OTP. Поскольку и сервер, и телефон имеют доступ ко времени, ни один из них не должен отслеживать счетчик. Кроме того, чтобы избежать проблемы с разными часовыми поясами сервера и телефона, мы можем использовать временную метку Unix, которая не зависит от часовых поясов. Однако время Unix определяется в секундах, поэтому оно меняется каждую секунду. Это означает, что сгенерированный пароль будет меняться каждую секунду, что не очень хорошо. Вместо этого нам нужно добавить значительный интервал перед изменением пароля. Например, приложение Google Authenticator меняет код каждые 30 секунд.
Итак, мы решили проблему счетчика. Теперь нам нужно решить нашу третью проблему: поделиться секретным ключом с приложением телефона. Здесь нам может помочь QR-код. Хотя есть возможность попросить пользователей вводить секретный ключ напрямую в приложение телефона, безопасность ключа зависит от его длины, и пользователю будет неудобно вводить такую длинную строку. Поскольку большинство смартфонов оснащено камерой, пользователь может использовать ее для того, чтобы отсканировать QR-код, и получить от него секретный ключ. Все, что для этого нужно – преобразовать секретный ключ в QR-код и показать его пользователю. В настоящее время есть несколько бесплатных телефонных приложений (например, Google Authenticator App, Authy и т.д.), которые могут генерировать одноразовый пароль для пользователя. Поэтому в большинстве случаев создавать собственное телефонное приложение не нужно. Следующие псевдокоды объясняют способ реализации двухфакторной аутентификации на основе TOTP в веб-приложении.
Пользователя просят отсканировать этот QR-код. Когда приложение телефона сканирует QR-код, оно получает секретный ключ пользователя. Используя этот секретный ключ, текущее время Unix и алгоритм HOTP, приложение телефона сгенерирует и отобразит пароль. Затем система просит пользователя ввести сгенерированный код после сканирования QR-кода. Это необходимо, чтобы убедиться, что пользователь успешно отсканировал изображение и приложение для телефона успешно сгенерировало код.
Здесь используется алгоритм HOTP на стороне сервера, чтобы получить аутентификацию на основе OTP по секретному ключу и текущему времени Unix. Если этот OTP совпадает с введенным пользователем, то появляется возможность включить двухфакторную аутентификацию для этого пользователя. Теперь, после каждой операции входа в систему, проверяется, включена ли для этого конкретного пользователя двухфакторная аутентификация. Если да, то запрашивается одноразовый пароль, отображаемый в приложении телефона. И если этот набранный код правильный, только тогда пользователь аутентифицируется.
Если пользователь потеряет код, есть несколько способов помочь пользователю восстановить его. Обычно, когда они включают двухфакторную аутентификацию, есть возможность показать секретный ключ вместе с QR-кодом и попросить их сохранить этот код в безопасном месте. Такие приложения, как Google Authenticator App, позволяют сгенерировать пароль путем прямого ввода секретного ключа. Если пользователь потеряет код, он может ввести этот надежно сохраненный секретный ключ в приложение телефона, чтобы снова сгенерировать одноразовый пароль. При наличии номера телефона пользователя возможно использовать метод на основе SMS, чтобы отправить пользователю одноразовый пароль, чтобы помочь ему восстановить код.
Двухфакторная аутентификация набирает популярность. Многие веб-приложения реализуют его для дополнительной безопасности. В отличие от метода на основе SMS, метод TOTP также не требует особых усилий. Так что эту функцию стоит реализовать для любого приложения.
Почему вам больше никогда не стоит использовать Google Authenticator
Не бывает достаточной безопасности. С другой стороны, использование глючной или слабой защиты может дать вам шаткую иллюзию безопасности, в то время, как вы остаётесь уязвимым к разного рода угрозам.
Использование только паролей, в общем – плохая идея, мы выяснили это с тех пор, как появился Интернет. Мы осуществляем прогресс, двигаясь к миру без паролей, но в то же время, многие веб-сайты предлагают дополнительную защиту пользовательских аккаунтов с помощью Двух-Факторной Аутентификации (2FA).
В общем и целом, существует 2 типа такой аутентификации: Временный одноразовый пароль (TOTP) а также Универсальный Двух-Фактор (U2F). Вы можете быть уже знакомы с первым типом, поскольку он используется наиболее часто: во время логина, предлагается ввести одноразовый пароль, генерируемый вашим приложением на смартфоне, отдельным аппаратным устройством, или же присылаемый в СМС. Метод прост, но есть несколько простых способов, делающих его опасным.
Я видел предупреждения типа “мой телефон взломали” от трёх людей из Кремниевой Долины/Биткойн среды/венчурной тусни. Будьте на чеку, и включите 2FA.
Как работает TOTP?
Временный одноразовый пароль, в основном популяризованный приложением Google Authenticator, подтверждает вашу личность на основании общего секрета. Этот секрет дложен быть известен вам и вашему провайдеру.
Когда вы заходите на веб-cайт под своей учеткой, ваше устройство генерирует уникальный код, основываясь на общем секрете и текущем времени. Затем вам нужно вручную ввести этот код. Сервер генерирует точно такую-же штуку, основанную на том-же секрете, чтобы успешно сравнить и подтвердить запрос на авторизацию.
Обе стороны генерируют одинаковый хеш, из одинаковых исходных данных, делясь секретом в момент регистрации.
В чём неадекватность TOTP?
Метод весьма прост в использовании, однако, он не лишён нескольких уязвимостей и неудобств.
1. Вам необходимо вручную вводить код во время авторизации (логина)
2. Слишком громоздкий бэкап. Вам необходимо совершать много шагов, чтобы сделать бэкап секрета. Кроме того, хорошие сервисы обычно предоставляют резервные коды, вместо того, чтобы явным образом призывать сохранять секрет. Если вы потеряете ваш секрет, и логин вместе с резервным кодом, вам придётся выполнить весь процесс регистрации TOTP заново.
3. Коды бекапа высылаются через Интернет, что совершенно небезопасно.
4. У вас и провайдера один и тот же секрет. Если атакующий хакнет компанию и получит доступ и к базе паролей, и к базе секретов, он сможет проникать в любой аккаунт совершенно незаметно.
5. Секрет показывается простым текстом или QR-кодом. Он не может быть представлен в виде хеша. Это также означает, что скорее всего секрет хранится в виде текстового файла, на серверах провайдера.
6. Секрет может быть раскрыт во время регистрации, так как провайдеру необходимо выдать вам сгенерированный секрет. Используя TOTP, вам нужно верить в способность провайдеров защитить приватность секрета. Но можете ли вы верить?
Как работает FIDO/U2F?
Стандарт U2F, разработанный Альянсом FIDO, был создан технологическими корпорациями, вроде Google и Microsoft, под влиянием найденных уязвимостей в TOTP. U2F использует криптографию с публичными ключами для подтверждения вашей личности (Reddit – “Объясняйте, будто мне лет пять”). В противовес TOTP, в данном варианте вы являетесь единственным, кто знает секрет (приватный ключ).
Сервер отправляет вам запрос, который затем подписывается секретным (приватным) ключом. Результирующее сообщение отправляется назад на сервер, который может подтвердить личность благодаря наличию в его базе данных вашего публичного ключа.
Выгоды U2F:
1. Через Интернет никогда не пересылается секрет (приватный ключ)
Никакая конфиденциальная информация не будет опубликована, благодаря криптографии публичного ключа.
2. Легче использовать. Нет нужды применять одноразовые коды.
3. Приватность. С секретом не ассоциируется никакая персональная информация.
4. Бекап теоретически легче. Однако, не всегда возможен; например, вы не сможете бекапить Yubikey.
Так как, в случае использования U2F, нет разделяемого двумя сторонами секрета и нет конфиденциальных баз данных, хранимых провайдером, хакер не может просто украсть все базы и получить доступ. Вместо того, он должен охотиться на отдельных пользователей, а это намного более затратно по финансам и времени.
Более того, вы можете забекапить ваш секрет (приватный ключ). С одной стороны, это делает вас ответственным за вашу же безопасность, но с другой – вам больше не нужно доверять какой-то компании, чтобы защитить ваши секреты (приватные ключи).
TREZOR – U2F “по-нашенски”
TREZOR представляет собой маленькое отдельное аппаратное решение, разработанное для хранения приватных ключей и работы в качестве изолированного компьютерного окружения. Изначально разработанный, как безопасный “железный” кошелек для Биткойна, рамки его применения значительно расширились благодаря расширяемости асимметричной криптографии. Теперь, TREZOR может служить в качестве безопасного железного токена для U2F, вам также придётся дополнительно подтверждать логин нажатием кнопки на устройстве.
В отличии от некоторых других токенов, TREZOR всегда использует уникальную подпись для каждого зарегистрированного пользовательского аккаунта. Кроме прочего, устройство выводит U2F на совершенно новый уровень:
1. Легко бекапить и восстанавливать. TREZOR просит вас записать на листочке так называемое “зернышко” (recovery seed), в время первого запуска устройства. Это –, единственный одноразовый процесс из всех остальных на устройстве. Восстановительное зёрнышко представляет собой все секреты (приватные ключи), генерируемые устройством и могут быть использованы в любое время для “восстановления” вашего аппаратного (или “железного”) кошелька.
2. Неограниченное количество U2F личностей, все они сохраняются в рамках единого бэкапа.
3. Секрет безопасно хранится в TREZORе. Его никто никогда не узнает, так как он не может покинуть устройство. Их не смогут украсть ни вирусы, ни хакеры.
4. Защита от фишинга с подтверждением на экране. Кошелёк всегда отображает url веб-сайта, на котором вы логинитесь, а также то, что именно вы хотите авторизовать. Вы можете убедиться, что информация, отправленная в устройство, соответствует вашим ожиданиям.
5. Дополнительная информация по использовании U2F во время настройки, использования и восстановления TREZOR может быть найдена в нашем посте в блоге, или в Пользовательской Документации.
Безопасные характеристики асимметричной криптографии кореллируют с философией безопасности TREZOR. С поддержкой U2F в кошельке, мы вдохновляем пользователей использовать все доступные меры для защиты их аккаунтов и личных данных в онлайне.
TOTP Authenticator – Fast 2FA 4+
Simple 2FA with Cloud Sync
AppyFactor
Screenshots
Description
The easiest way to add another security layer and secure your online presence from hackers.
TOTP Authenticator allows you to quickly and conveniently protect your accounts by adding 2-factor authentication (2FA). The app brings together best in class security practices and seamless user experience together.
This app generates one-time tokens on your device which are used in combination with your password. This helps to protect your accounts from hackers, making your security bulletproof. Just enable the two-factor authentication in your account settings for your provider, scan the QR code provided and you’re good to go!
Note: The app supports app-based 2-factor authentication and doesn’t work when SMS based 2FA is enabled.
— Cloud Sync (paid)
Never lose your codes again! With Cloud Sync, you can easily backup your 2FA data to your iCloud. This keeps you in total control of your data while providing effective cloud backup.
— Chrome Extension (paid)
Make 2FA on desktop easier than ever before! With a single tap, push your 2FA codes to your Chrome browser. No need to manually type in the codes again.
— Dark theme
Do you love the dark mode? We sure do! The app now supports and matches the device’s dark and light modes.
— Multi-platform support
TOTP Authenticator syncs seamlessly across different mobile platforms. You can export your data from one platform, and simply import it on the other.
— Multi-device usage
This 2FA app empowers you to create both cloud backups (via Cloud Sync) and offline backups. You can then import these encrypted backups in any device running TOTP Authenticator. Highly useful in cases where you use 2 devices or need to switch your phone.
— Unlimited account support
You can add and manage unlimited 2FA accounts in the app. We support the majority of the multi-factor authentication accounts with new providers being added regularly. Any site offering two-step authentication via Google Authenticator works flawlessly with our app. Some service not working for you? Contact our support!
— Support for widgets
With TOTP Authenticator, you can easily add a widget for your favourite accounts on the home screen for quick access.
— Personalization
The app allows you to set unique icons to your accounts, either by selecting icons from the provided list or by uploading them. This helps you to easily recognize and sort your accounts.
— Robust security
You can lock the app either with your device’s biometric lock. This helps to protect your codes from prying eyes or in case someone gets access to your phone.
— Quick access via favorites
You can easily pin accounts as favourites so they are prioritised in the list. You can also arrange the order of the accounts, by simply dragging them.
— Extensive Account Support
TOTP Authenticator works with the majority of the services offering 6-digit code based 2FA. This includes Google, Facebook, Fortnite and Instagram account among others. Services like Paypal, Github and Twitter are also supported.
Accounts Supported
• Google
• Facebook
• Apple
• Amazon
• Paypal
• Github
• Fortnite
• Twitter
• Bitbucket
• Dropbox
• Evernote
• LinkedIn
• GoDaddy
• Microsoft
• Dashlane
• Epic Games
• TeamViewer
• WordPress
• Yahoo
• Blizzard Games
& …
TOTP Authenticator – Fast 2FA 4+
AppyFactor
Снимки экрана
Описание
The easiest way to add another security layer and secure your online presence from hackers.
TOTP Authenticator allows you to quickly and conveniently protect your accounts by adding 2-factor authentication (2FA). The app brings together best in class security practices and seamless user experience together.
This app generates one-time tokens on your device which are used in combination with your password. This helps to protect your accounts from hackers, making your security bulletproof. Just enable the two-factor authentication in your account settings for your provider, scan the QR code provided and you’re good to go!
Note: The app supports app-based 2-factor authentication and doesn’t work when SMS based 2FA is enabled.
— Cloud Sync (paid)
Never lose your codes again! With Cloud Sync, you can easily backup your 2FA data to your iCloud. This keeps you in total control of your data while providing effective cloud backup.
— Chrome Extension (paid)
Make 2FA on desktop easier than ever before! With a single tap, push your 2FA codes to your Chrome browser. No need to manually type in the codes again.
— Dark theme
Do you love the dark mode? We sure do! The app now supports and matches the device’s dark and light modes.
— Multi-platform support
TOTP Authenticator syncs seamlessly across different mobile platforms. You can export your data from one platform, and simply import it on the other.
— Multi-device usage
This 2FA app empowers you to create both cloud backups (via Cloud Sync) and offline backups. You can then import these encrypted backups in any device running TOTP Authenticator. Highly useful in cases where you use 2 devices or need to switch your phone.
— Unlimited account support
You can add and manage unlimited 2FA accounts in the app. We support the majority of the multi-factor authentication accounts with new providers being added regularly. Any site offering two-step authentication via Google Authenticator works flawlessly with our app. Some service not working for you? Contact our support!
— Support for widgets
With TOTP Authenticator, you can easily add a widget for your favourite accounts on the home screen for quick access.
— Personalization
The app allows you to set unique icons to your accounts, either by selecting icons from the provided list or by uploading them. This helps you to easily recognize and sort your accounts.
— Robust security
You can lock the app either with your device’s biometric lock. This helps to protect your codes from prying eyes or in case someone gets access to your phone.
— Quick access via favorites
You can easily pin accounts as favourites so they are prioritised in the list. You can also arrange the order of the accounts, by simply dragging them.
— Extensive Account Support
TOTP Authenticator works with the majority of the services offering 6-digit code based 2FA. This includes Google, Facebook, Fortnite and Instagram account among others. Services like Paypal, Github and Twitter are also supported.
Accounts Supported
• Google
• Facebook
• Apple
• Amazon
• Paypal
• Github
• Fortnite
• Twitter
• Bitbucket
• Dropbox
• Evernote
• LinkedIn
• GoDaddy
• Microsoft
• Dashlane
• Epic Games
• TeamViewer
• WordPress
• Yahoo
• Blizzard Games
& …





