LINUX.ORG.RU

TOTP в качестве первого и единственного фактора аутентификации

 


0

1

Time-based OTP - удобная штука. Но, почему-то, всегда используется только в качестве второго фактора аутентификации.

Есть ли какие-нибудь предпосылки не использовать одноразовые пароли, основанные на времени, в качестве первого и единственного фактора?

Речь не идёт о банковском секторе, важной электронной почте и т.п.

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

Да, я в курсе про методики типа «добавлять к паролю суффикс из домена» и т.п., но это всё полумеры.

Если у меня есть уверенность, что телефон не попадёт в руки злоумышленников, а даже если попадёт, я всегда могу пойти и физически на сервере сбросить все пароли, то что меня должно ограничить от использования апликации google authenticator в качестве ключа к моим сервисам?

★★★★★

Последнее исправление: AngryElf (всего исправлений: 1)

что меня должно ограничить от использования апликации google authenticator в качестве ключа к моим сервисам?

маленькое пространство паролей в каноничном TOTP

ivlad ★★★★★
()
Последнее исправление: ivlad (всего исправлений: 1)
Ответ на: комментарий от ivlad

Миллион паролей за 30 секунд - мало? О том, что у меня ломают пароли, я узнаю по тому, что сервер лежит :)

AngryElf ★★★★★
() автор топика
Ответ на: комментарий от AngryElf

Это не миллион за 30 секунд. Это миллион каждые 30 секунд.

Положим, я атакующий. Пространство паролей - 10^6, предположим, я могу за 30 секунд спросить сто (всего!) случайных паролей, это 10^2. Тогда вероятность, что я угадаю, равна 10^2/10^6. Вероятность, что я не угадаю, равна 1-10^2/10^6. Каждый раз, когда я не угадываю, я пробую снова. Вероятность не угадать за две попытки (тут можно принять, что результат генерирования OTP почти случайный) равна (1-10^2/10^6)^2. Вероятность не угадать за N попыток равна (1-10^2/10^6)^N, соответственно, вероятность угадать равна 1-(1-10^2/10^6)^N.

Теперь предлагаю взять калькулятор и посчитать вероятность для N=10^4, 10^5.

1-((1-10^2/10^6)^10^4)
.63213895356707007589

1-((1-10^2/10^6)^100000)
.99995462276604103883
Что такое 10^4 тридцатисекундных промежутков?
30*10^4/60/60/24
3.47222222222222222222
Трое с половиной суток. За трое с половиной суток, я с вероятностью 63% угадаю твой пароль.

А за месяц с хвостиком — с вероятностью 99,995%.

И это еще не считая того факта, что в практической ситуации OTP проверяет не только пароль текущего промежутка, но еще и одного-двух соседних, на случай рассинхронизации часов.

ivlad ★★★★★
()
Последнее исправление: ivlad (всего исправлений: 1)

А чем это лучше пароля?
Даже хуже: уведут секретный хеш у одного из сервисов получат доступ ко всем сервисам. Пароль хотя-бы захеширован (или нет).
Чем тебя аутентификация по ключам, как в ssh, не устраивает?

KillTheCat ★★★★★
()
Последнее исправление: KillTheCat (всего исправлений: 1)
Ответ на: комментарий от ivlad

Это не миллион за 30 секунд. Это миллион каждые 30 секунд.

Да, этот момент я как-то пропустил. Спасибо за разжёвывание.

Впринципе, способ можно использовать, если, например, дать не более пары попыток в 30 секунд на каждый логин и, например, требовать пароль двойной длины (конкатенацию паролей от двух ключей). Процент тогда падает ниже плинтуса.

AngryElf ★★★★★
() автор топика
Ответ на: комментарий от KillTheCat

Даже хуже: уведут секретный хеш у одного из сервисов получат доступ ко всем сервисам.

Я на каждый сервис свой секрет заведу, не вижу проблемы.

Чем тебя аутентификация по ключам, как в ssh, не устраивает?

Как мне браузер на мобиле научить аутентифицироваться по ssh-ключам?

Если ты про авторизацию по пользовательским сертификатам, то мне лично оно не нравится, например тем, что нельзя иметь два логина на один и тот же сервис. Ну и то, что везде нужен рабочий и актуальный https, а это, ввиду приключений openssl за последние 2 года - не тривиально. Ну и https такой возможен не везде.

AngryElf ★★★★★
() автор топика
Ответ на: комментарий от ivlad

Даже если и угадаешь пароль после большого количества неудачных попыток, то в этом случае в практической реализации OTP тебя просто попросят подождать 30 секунд и ввести следующий пароль. Который надо будет угадывать еще раз =)

bigbit ★★★★★
()
Ответ на: комментарий от AngryElf

Я на каждый сервис свой секрет заведу, не вижу проблемы.

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

Как мне браузер на мобиле научить аутентифицироваться по ssh-ключам?

Через плагин или js.

KillTheCat ★★★★★
()
Ответ на: комментарий от KillTheCat

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

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

Сохранение в браузере тоже не всегда работает. Например, на ios не хранятся пароли, введённые при http-basic-auth. Ну и, опять-таки, пароль хранится, хотя в этом нет нужды.

Как мне браузер на мобиле научить аутентифицироваться по ssh-ключам?

Через плагин или js.

Линк?

AngryElf ★★★★★
() автор топика
Ответ на: комментарий от bigbit

Даже если и угадаешь пароль после большого количества неудачных попыток, то в этом случае в практической реализации OTP тебя просто попросят подождать 30 секунд и ввести следующий пароль. Который надо будет угадывать еще раз =)

Не, ну после подбора пароля, средний сервис сгенерит куку, действующую некоторое время. Останется только эту куку в браузер затолкать.

Так что атака вполне реализуема.

AngryElf ★★★★★
() автор топика
Ответ на: комментарий от AngryElf

Какая кука? Если подобранному паролю предшествует N неудачных попыток (например, 10), то сразу после угадывания пароля аутентификация не будет успешной. У тебя запросят дополнительную информацию - как вариант, подождать 30 секунд следующего пароля и ввести его. Только после этого аутентификация будет успешной, и появится кука.

bigbit ★★★★★
()
Ответ на: комментарий от bigbit

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

Это зависит. pam_otp есть несколько штук, не все из них имеют стейт. ТС написал про «TOTP в качестве первого и единственного фактора аутентификации». Да, правда, что есть реализации, которые переспрашивают и это поможет.

ivlad ★★★★★
()
Ответ на: комментарий от ivlad

Вопрос всегда можно уточнить :)

Впринципе, я так понимаю, достаточно схемы «угадать два последовательных пароля» для достаточно высокого уровня безопасности.

Осталось это написать...

AngryElf ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.