как использовать GoogleAuthenticator для tfa (двухфакторная аутентификация) в пользовательском веб-приложении для входа в систему, отличном от Google

хорошо, я потратил 2 часа на то, чтобы узнать, что это такое и как использовать его в веб-приложении! но без успеха.

Большинство ссылок говорят о сканировании кодов или вводе какого-либо ключа в мобильном приложении GoogleAuthenticar, и оно будет возвращать изменяющиеся коды подтверждения каждые 30 секунд.

Немного вещей:

  1. Веб-приложение имеет собственный логин. Это означает, что пользователи не входят в веб-приложение с помощью Google.
  2. Если злоумышленник получает пароль пользователя, он видит QR-код как следующий шаг, который он может отсканировать непосредственно с помощью приложения GoogleAuthenticator на своем мобильном телефоне (насколько мне кажется). Как это привязано только к мобильному телефону пользователя?
  3. На различных сайтах упоминается общий секрет между пользователем и сервером, что означает, что во время регистрации мы предоставляем пользователю общий секрет, который он может использовать в своем мобильном приложении GoogleAuthenticator, а затем использовать его при чтении QR-кода?
  4. Что делать в приведенном выше случае, если пользователь потерял или забыл секрет? Используйте функцию «забыть секрет», чтобы снова отправить секрет на электронную почту пользователя?

Я смущен тем, как это может быть реализовано в моде, когда это приложение не для Google, а для Android!

Все, что я понимаю, это то, что это просто концепция, требующая нашей собственной реализации с некоторой помощью исходного кода GoogleAuthenticator. Пожалуйста, поправьте меня?

Я думаю, что решение заключается в том, что мы должны написать собственное мобильное приложение, как этот парень упомянул здесь, хотя я до сих пор не уверен, что секрет между мобильным приложением и сервером будет уникальным при каждой установке это приложение, которое идентифицирует только конкретного пользователя, или есть ли способ написать наше собственное приложение и использовать мобильное приложение GoogleAuthenticator без входа в Google в нашем веб-приложении?


person coding_idiot    schedule 27.03.2014    source источник


Ответы (1)


Google Authenticator (мобильное приложение) реализует Алгоритм одноразового пароля на основе времени. В сценарии, о котором вы спрашиваете, двухфакторная аутентификация будет работать следующим образом:

  • Пользователь создает одноразовый пароль, который проверяется серверным приложением.
  • Сервер проверит пароль, используя процедуру, описанную в алгоритме TOTP.

Генерация пароля на пользовательском устройстве может быть выполнена любым приложением, реализующим TOTP, которое было «настроено» для вашей учетной записи пользователя. Настроить здесь означает, что вы поделились секретом с сервером, как вы упомянули себя в вопросе.

Теперь постараюсь ответить на ваши вопросы:

  1. Тот факт, что ваше приложение использует собственный набор учетных данных пользователя или Google, не имеет прямого влияния на двухфакторную аутентификацию. Независимо от того, что это за учетные данные, вам нужен способ идентифицировать вашего пользователя (имя пользователя), чтобы иметь возможность перейти к проверке его пароля TOTP, потому что вам нужно знать, кто пользователь. Иными словами, использование TOTP и приложения Google Authenticator не означает необходимость использования учетных данных Google на вашем сайте.

  2. Я не уверен, что правильно понимаю. Настройка приложения Google Authenticator для каждой учетной записи выполняется только один раз. Если злоумышленник сидит прямо за вашей спиной и фотографирует ваш экран, пока вы настраиваете Google Authenticator, то да, он сможет настроить свое собственное приложение с вашими учетными данными, читающими тот же штрих-код, который вы используете. Тем не менее, ему также потребуются ваши учетные данные (правильные), чтобы выполнить вход и затем предоставить одноразовый пароль TOTP. В любом случае, это проблема безопасности, которая возникает из-за того, что пользователь неправильно обрабатывает свои собственные учетные данные, и вы можете столкнуться с аналогичными проблемами, независимо от используемой вами технологии. Чтобы сделать несовершенную метафору, это все равно, что спросить: «если пользователь оставит пин-карту с кодами на столе, злоумышленник увидит ее и украдет ее фотографию, сможет ли он их использовать?». Конечно, он мог.

  3. Да, чтение штрих-кода — это один из способов настройки приложения и обмена секретом между клиентским приложением и сервером. Вы можете использовать другие способы, такие как ввод ключа вручную в приложение, но использование QR-кода быстрее и гораздо менее подвержено ошибкам. Вам даже не нужно будет генерировать QR-код, потому что вы можете использовать веб-API Google, как я объяснял в сообщение в блоге, которое вы читали, когда попросили меня ответить на этот вопрос. На самом деле описанная там библиотека на стороне сервера Java использует веб-API Google и возвращает вам URL-адрес, чтобы пользователь мог проверить и прочитать свой собственный QR. Если вы хотите создать свою собственную логику QR, продолжайте, но нет веских причин, по которым вы должны это делать, если вы имеете право использовать API Google (что вам все равно следует проверить).

  4. Если секрет потерян, это зависит от вашей собственной политики, если это ваше собственное приложение. Прежде всего, вы должны аннулировать старый секрет сразу после уведомления пользователя. Затем вы можете использовать скретч-коды, которые вы, возможно, дали пользователю при создании секрета TOTP, чтобы подтвердить свою личность. Если он также потерял скретч-коды, вы, вероятно, захотите вернуться к каким-либо другим способам подтверждения его личности, таким как использование какой-либо резервной информации в его учетной записи (резервные номера телефонов, контрольные вопросы и т. д.). Как только личность пользователя будет проверена в соответствии с вашими стандартами, вы выдадите новые учетные данные и начнете с самого начала: то есть перенастроить Google Authenticator с использованием нового QR и/или нового секретного ключа.

Подводя итог: да, вы можете использовать приложение Google Authenticator в качестве своего клиентского интерфейса, если хотите: нет необходимости создавать еще один. Единственное, что вы должны учитывать, это то, что Google Authenticator использует 30-секундные окна в своей реализации TOTP: логика на стороне сервера, проверяющая пароль TOTP, должна будет использовать тот же размер окна (то есть IIRC, стандартное значение, предложенное TOTP RFC).

person Enrico M. Crisostomo    schedule 10.04.2014
comment
спасибо, что нашли время и ответили, но тогда это не двухфакторная аутентификация, верно? Помимо пароля пользователя, для пользователя не существует второго механизма аутентификации, поскольку штрих-код может быть правильно прочитан любым злоумышленником, каким-либо образом прошедшим первую аутентификацию. - person coding_idiot; 11.04.2014
comment
Пожалуйста. Это двухфакторная аутентификация (точно так, как это делает Google, кстати). QR-код используется исключительно для настройки клиентского приложения один раз. Только представьте, что это способ передать ваше имя пользователя и ключ вашему клиентскому приложению. Когда вам нужно аутентифицироваться и сервер запрашивает ваш пароль TOTP, вы открываете приложение Google Authenticator и вставляете число, которое оно показывает в данный момент. Сервер аутентифицирует вас, проверив одноразовый пароль, используя алгоритм TOTP. Это второй механизм аутентификации, о котором вы говорите. - person Enrico M. Crisostomo; 11.04.2014
comment
так что просто чтобы убедиться, что я правильно понял. Когда пользователь регистрируется, ему выдается пароль и штрих-код. Поэтому всякий раз, когда требуется вторая аутентификация, штрих-код для сканирования не требуется, поскольку он уже предоставлен во время регистрации. Все, что ему нужно сделать, это просто сгенерировать новую последовательность цифр с помощью приложения Google Authenticator. Теперь, поскольку этот штрих-код есть только у него (каждому пользователю дается свой штрих-код), поэтому сгенерированный пароль должен быть правильным, и сервер сможет проверить его с помощью штрих-кода (который хранится в БД). для этого пользователя) и введенная последовательность ? - person coding_idiot; 12.04.2014
comment
@coding_idiot, в основном да, это правильно, но, пожалуйста, помните, что штрих-код — это просто способ закодировать общий секрет и доставить его пользователю. - person Enrico M. Crisostomo; 18.04.2014