Это то, что прослушивало меня в течение многих лет: почему большинство онлайн-сервисов высоко оценивают энтропию пароля, ссылаясь на нее как на меру безопасности и применяя ее, когда пользователи выбирают пароль?
Я решил выйти с этим вопросом после прочтения статьи "Сделать сильные веб-пароли?" (и, конечно же, классический мультфильм Дилберта).
Типичная политика онлайн-сайта состоит в том, чтобы требовать минимум 6 или 8 цифр с верхним + строчным + цифровым паролем. Эта длина несколько важна для сложности атаки грубой силы, например, восстановить пароль из хэша. Но типичный способ угадывания происходит в Интернете, так это то, что кто-то пытается войти на сервер, который может отказаться после нескольких попыток.
Представьте себе, например, что мы защищаем некоторую услугу среднего размера с помощью всезначного ПИН-кода. Один сразу думает о 4-значных или 6-значных контактах, но это может быть не очень хорошая идея, поскольку слишком много людей будут испытывать соблазн войти в дни рождения своих детей, которые по сути являются общественными знаниями.
Итак, вот мой 5-значный PIN-код. Я сохраняю для каждого пользователя флаг "возможной атаки".
- Пользователь регистрируется правильно → OK
- В противном случае сохраните сеанс https и разрешите еще 2 попытки.
- Вход пользователя → OK
- В противном случае разрешите еще 2 попытки с 5-минутным перерывом перед ними.
- Вход пользователя → OK
- Пользователь прерывает сеанс → устанавливает флаг
- Пользователь прерывает сеанс, но регистрируется в порядке позже: присутствует пользователь с диалоговым окном и позволяет очистить флаг
- Пользователь исчерпывает вышеприведенные попытки: отправьте письмо по ссылке; разрешить очистку флага
- Если в течение месяца установлено более 100 флагов, установите глобальный флаг "возможной атаки", который требует, чтобы люди, у которых нет вопросов безопасности ответа cookie.
- Автоматически очищать флаг пользователя в некоторых случаях (например, пользователь, наконец, зарегистрировался с того же компьютера)
Предположим, что имена пользователей как-то известны (обратите внимание, что это не относится к большинству сайтов). Атака грубой силы против одного пользователя безнадежна - вы заблокированы после 5 попыток, поэтому у вас есть шанс 1/200000. Если вы попытаетесь угадать пароль более 200 раз в месяц, флаг погаснет, и вы ничего не получите. Если вы попробуете < 200 пользователей в месяц, то через год у вас есть < 1% вероятность взлома одного пользователя; вам гораздо лучше с фишингом, вирусами, социальной инженерией или чем-то еще.
Размер сайта имеет значение только в смысле отсутствия ложных срабатываний, то есть пользователей, которые действительно забывают свой пароль (скажем, 1% в месяц), восстанавливают его, но не очищают флаг (скажем, 1% от них), и когда вы не можете очистить флаг автоматически (скажем, 10% от них). Это означает, что 10 ожидаемых ложноположительных флагов в месяц на пользователей 10 6 --- это означает, что сайт среднего размера имеет достаточно низкую вероятность войти в режим "паники", что в любом случае не так плохой.
Я считаю, что эта схема очень практична. Вот некоторые очевидные первые факты об этом (обновления):
- Преимущества. ПИН-код легче запомнить. Я считаю, что это большое преимущество, поскольку теперь можно потребовать, чтобы пользователь помнил пароль, который вы создали. Я считаю, что большинство людей гораздо лучше запоминают 5 случайных цифр, чем любой другой случайный пароль.
- компромисс: Хеширование не поможет, если ваш злоумышленник знает как хэшированный PIN-код, так и соль. Это возможно, если кто-то ворвался в вашу базу данных и узнал, что ваш процесс соления. Тем не менее, я считаю, что стандартная парольная энтропия тоже не поможет.
- Преимущества: люди гораздо счастливее запоминают случайные 5 цифр, чем случайные буквенно-цифровые пароли; поэтому гораздо проще также потребовать, чтобы мы сгенерировали пароль, а не пользователь. Это устраняет атаки словаря/персональных данных.
Мои вопросы:
- Каковы другие компромиссы/преимущества моей схемы по сравнению с тем, что я назвал типичным?
- Не будут ли сайты и организации со средним размером лучше с моей схемой паролей?
- Каковы причины, по которым они выбирают схему, которую они имеют?
Примечание: Я не защищаю всегда короткие пароли. Мои собственные пароли обычно генерируются случайным образом и зашифровываются менеджером паролей (1Password
) с 12-символьным паролем с высокой энтропией. Но я думаю, что часто вышеприведенная схема была бы лучше, чем у нас на практике.