TOTP аутентификация — как это работает

TOTP аутентификация обычно используется как второй фактор при двухфакторной аутентификации. В этой статье я вам расскажу про TOTP и где это можно применять.








Лично я познакомился с этим алгоритмом настраивая NextCloud. Настраивая в этой системе двухфакторную аутентификацию в качестве второго фактора можно было выбрать TOTP аутентификацию. Можете почитать про TOTP на википедии, я же расскажу простыми словами.




Для того, чтобы настроить TOTP (Time-based One-time Password Algorithm) на NextCloud я проделал следующее:




  • при включении TOTP аутентификации, NextCloud выдал мне QR-код;
  • я с помощью специального приложения на смартфоне отсканировал этот QR-код;
  • затем это приложение начало постоянно, раз в 30 секунд, генерировать одноразовые пароли для входа на NextCloud.




Что интересно, пароль генерирует приложение на смартфоне и смартфону не обязательно иметь выход в интернет. Но время на смартфоне должно быть синхронизировано со временем на сервере, куда вы подключаетесь. Это нужно из-за того что этот алгоритм генерирует одноразовые пароли на основываясь на текущем времени клиента и сервера.




Работает алгоритм TOTP таким образом:




  • Сервер (в моём случае NextCloud) создает секретный ключ для пользователя.
  • Секретный ключ отправляется приложению (я считал с помощью приложения QR-код выданный сервером).
  • Приложение на смартфоне использует текущее время и секретный ключ для генерирования одноразового пароля.
  • Раз в определённый промежуток времени (например каждые 30 секунд) одноразовый пароль пересоздается.
  • При входе на сервер вы вводите одноразовый пароль.
  • Так как сервер владеет секретным ключом, то по своему текущему времени он может сгенерировать такой-же одноразовый пароль и сравнить с тем, что прислал пользователь. Если они совпадут, то вход разрешается.




В этой статье на Хабре алгоритм описан намного подробнее.




Помимо NextCloud его можно применять в Linux аутентификации, для этого есть pam модули. Про это можно почитать тут. Также его можно реализовать для любого web приложения.




На андроиде вы можете использовать следующие приложения:









2021-08-18T11:00:00
Безопасность