Так называемая аутентификация (аутентификация) заключается в подтверждении личности пользователя, что является важным шагом для входа на сайт.
Пароль является наиболее распространенным методом аутентификации, но он небезопасен и его легко украсть или подделать.
Во все большем количестве мест требуется включить двухфакторную аутентификацию (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. Справочная ссылка
- Multi-factor authentication, by Wikipedia
- Time-based One-time Password Algorithm, by Wikipedia
- Enabling Two-Factor Authentication For Your Web Application, by Bozhidar Bozhanov
- simontabor/2fa, by Simon Tabor
(Конец текста)
====================================
После двух-трех лет работы программисты часто сталкиваются с профессиональными узкими местами: 80% из них тратят свое время на то, чтобы не ложиться спать допоздна, чтобы работать сверхурочно и исправлять ошибки, и лишь немногие предпочитают повышать квалификацию в свободное время, улучшать свой потенциал и ломать через потолок зарплат.
Удасити(Udacity), передовая платформа обучения технологиям из Силиконовой долины, поможет вам освоить передовые технологии.
Его курсы и проекты исходят от известных компаний Силиконовой долины, таких как Google и Facebook, и предоставляют такие услуги, как ручная проверка и индивидуальные онлайн-вопросы и ответы, отказываясь тратить время и обходные пути.
В этом году Double Eleven вместо того, чтобы копить дешевые товары, которые нельзя использовать в течение года, лучше инвестировать в Udacity, чтобы улучшить себя в будущем. С 1 по 11 ноября на весь курс будет действовать максимальная скидка в размере 1111 иен, что позволит вам с легкостью пользоваться учебными ресурсами Силиконовой долины!
Количество мест со скидкой ограничено, в порядке живой очереди, нажмитездесьУзнать больше.
(Заканчивать)