Учебное пособие по двухфакторной аутентификации (2FA) - Жуан Ифэн

задняя часть сервер алгоритм Безопасность

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

Пароль является наиболее распространенным методом аутентификации, но он небезопасен и его легко украсть или подделать.

Во все большем количестве мест требуется включить двухфакторную аутентификацию (2FA). В данной статье представлена ​​его концепция и метод реализации.

В конце статьи естьновости о событиях,Удасити(Udacity) «Предложение Double Eleven» курсы могут быть снижены до 1111 юаней.

Концепция двухфакторной аутентификации

Как правило, существует три различных типа доказательств, которые могут подтвердить личность человека.

  • секретная информация: Некоторая информация, которую знает только пользователь и никто другой, например, пароль.
  • Личные вещи: личные вещи пользователя, такие как удостоверения личности и ключи.
  • Физиологические характеристики: генетические характеристики пользователя, такие как отпечатки пальцев, внешний вид, радужная оболочка и т. д.

Эти свидетельства называются тремя «факторами». Чем больше факторов, тем сильнее доказательство и надежнее тождество.

Двухфакторная аутентификация означает, что аутентификация требует одновременного подтверждения двух факторов.

Банковская карта является наиболее распространенной двухфакторной аутентификацией. Пользователи должны предоставить как банковскую карту, так и пароль для получения наличных.

2. Схема двухфакторной аутентификации

Распространенная двухфакторная комбинация — это пароль + какой-то личный предмет, например U-shield для онлайн-банкинга. Пользователь подключает защитный экран USB, а затем вводит пароль для входа в онлайн-банкинг.

Тем не менее, пользователи не могут постоянно носить с собой U-экран, и мобильный телефон является лучшей заменой. Пароль + телефон — лучшее решение для двухфакторной аутентификации.

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

Однако короткие сообщения небезопасны, их легко перехватить и подделать, а SIM-карты также можно клонировать. уже естькейс, сначала подделайте удостоверение личности, затем подайте заявку на точно такой же номер мобильного телефона и переведите деньги.

Поэтому безопасная двухфакторная аутентификация - это не пароль + смс, а следующееTOTP.

3. Концепция ТОТП

Полное название TOTP — «одноразовый пароль на основе времени» (Time-based One-time Password). Оно признано надежным решением и соответствует международным стандартам.RFC6238.

Его шаги следующие.

На первом этапе после включения пользователем двухфакторной аутентификации сервер генерирует ключ.

Шаг 2: Сервер предлагает пользователю отсканировать QR-код (или использовать другие методы), чтобы сохранить ключ на мобильном телефоне пользователя. То есть сервер и мобильный телефон пользователя теперь имеют один и тот же ключ.

Обратите внимание, что ключ должен быть привязан к телефону. Как только пользователь меняет телефон, необходимо сгенерировать новый ключ.

На третьем этапе, когда пользователь входит в систему, мобильный клиент использует этот ключ и текущую метку времени для создания хэша со сроком действия по умолчанию 30 секунд. Пользователь отправляет этот хеш на сервер в течение срока действия.

На четвертом этапе сервер также использует ключ и текущую метку времени для создания хэша, который сравнивается с хэшем, отправленным пользователем. Пока они не совпадают, вход в систему запрещен.

5. Алгоритм TOTP

Внимательно изучив приведенные выше шаги, у вас может возникнуть вопрос: как мобильный клиент и сервер могут гарантировать, что они оба получат один и тот же хэш в течение 30 секунд?

Ответом является следующая формула.


TC = floor((unixtime(now) − unixtime(T0)) / TS)

В приведенной выше формуле TC представляет собой счетчик времени,unixtime(now)текущая временная метка Unix,unixtime(T0)временная метка согласованной начальной точки, значение по умолчанию0, то есть 1 января 1970 года. TS — это время, в течение которого хеш действителен, по умолчанию — 30 секунд. Таким образом, приведенная выше формула принимает следующий вид.


TC = floor(unixtime(now) / 30)

Следовательно, пока оно находится в пределах 30 секунд, значение TC остается тем же. Предпосылка заключается в том, что время сервера и мобильного телефона должны быть синхронизированы.

Далее можно вычислить хэш.


TOTP = HASH(SecretKey, TC)

В приведенном выше кодеHASHЭто согласованная хеш-функция, по умолчанию используется SHA-1.

TOTP делится на аппаратные генераторы и программные генераторы, все из которых используют вышеуказанные алгоритмы.

(Описание: Аппаратный генератор TOTP)

(Примечание: Google Authenticator — это мобильное приложение, которое генерирует TOTP)

5. Внедрение ТОТП

TOTP легко написать и реализовать на каждом языке. Ниже я использую JavaScript для достижения2faДавайте продемонстрируем реальный код.

Сначала установите этот модуль.


$ npm install --save 2fa

Затем сгенерируйте 32-символьный ключ.


var tfa = require('2fa');

tfa.generateKey(32, function(err, key) {
  console.log(key);
});
// b5jjo0cz87d66mhwa9azplhxiao18zlx

Теперь хэш можно сгенерировать.


var tc = Math.floor(Date.now() / 1000 / 30);
var totp = tfa.generateCode(key, tc);
console.log(totp); // 683464

6. Резюме

Преимущество двухфакторной аутентификации заключается в том, что она гораздо более безопасна, чем простой вход по паролю. Даже если пароль утек, пока телефон все еще там, учетная запись в безопасности. Различные методы взлома паролей недействительны для двухфакторной аутентификации.

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

Одна из самых больших проблем с двухфакторной аутентификацией — восстановление учетной записи.

Как только вы забудете свой пароль или потеряете свой телефон, вы должны обойти двухфакторную аутентификацию, если хотите восстановить свой логин, что создает брешь в безопасности. Если вы не подготовите два набора двухфакторной аутентификации, один будет использоваться для входа в систему, а другой — для восстановления учетной записи.

7. Справочная ссылка

(Конец текста)

====================================

После двух-трех лет работы программисты часто сталкиваются с профессиональными узкими местами: 80% из них тратят свое время на то, чтобы не ложиться спать допоздна, чтобы работать сверхурочно и исправлять ошибки, и лишь немногие предпочитают повышать квалификацию в свободное время, улучшать свой потенциал и ломать через потолок зарплат.

Удасити(Udacity), передовая платформа обучения технологиям из Силиконовой долины, поможет вам освоить передовые технологии.

Его курсы и проекты исходят от известных компаний Силиконовой долины, таких как Google и Facebook, и предоставляют такие услуги, как ручная проверка и индивидуальные онлайн-вопросы и ответы, отказываясь тратить время и обходные пути.

В этом году Double Eleven вместо того, чтобы копить дешевые товары, которые нельзя использовать в течение года, лучше инвестировать в Udacity, чтобы улучшить себя в будущем. С 1 по 11 ноября на весь курс будет действовать максимальная скидка в размере 1111 иен, что позволит вам с легкостью пользоваться учебными ресурсами Силиконовой долины!

Количество мест со скидкой ограничено, в порядке живой очереди, нажмитездесьУзнать больше.

(Заканчивать)