2009-06-19 3 views
36

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

Я решил выступить с этим вопросом после прочтения статьи "Do Strong Web Passwords Accomplish Anything?" (и, конечно же, classic Dilbert cartoon).

Типичная политика онлайн-сайта состоит в том, чтобы требовать минимум 6 или 8 цифр с верхним + строчным + цифровым паролем. Эта длина несколько важна для сложности атаки грубой силы, например, восстановить пароль из хэша. Но типичный способ угадывания происходит в Интернете, так это то, что кто-то пытается войти на сервер, который может отказаться после нескольких попыток.

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

Итак, вот мой 5-значный PIN предложение. Я сохраняю для каждого пользователя флаг «возможной атаки».

  1. пользователь входит в систему правильно -> OK
  2. В противном случае, держать HTTPS сессию и позволит еще 2 попытки
  3. входа пользователя в систему -> OK
  4. В противном случае, позвольте еще 2 попытки с 5-минутном перерыв перед ними
  5. журналов пользователя в -> OK
  6. Пользователь разрывает сеанс -> установите флаг
  7. Пользователь разрывает сеанс, но журналы в обычно позже: настоящий пользователь диалога и разрешить для очистки флага
  8. Пользователь исчерпывает попытки выше: отправить электронное письмо со ссылкой; разрешить очистить флаг
  9. Если в течение месяца установлено более 100 флагов, установите глобальный флаг «возможной атаки», который требует, чтобы люди, у которых нет вопросов безопасности ответа cookie
  10. Автоматически очищать флаг пользователя в некоторых случаях (например, пользователь, наконец, вошел в систему с того же компьютера)

Предположим, что имена пользователей как-то известны (обратите внимание, что это не относится к большинству сайтов). Атака грубой силы против одного пользователя безнадежна - вы заблокированы после 5 попыток, поэтому у вас есть шанс 1/200000. Если вы попытаетесь угадать пароль более 200 раз в месяц, флаг погаснет, и вы ничего не получите. Если вы попробуете < 200 пользователей в месяц, то через год у вас есть < 1% вероятность взлома одного пользователя; вам гораздо лучше с фишингом, вирусами, социальной инженерией или чем-либо еще.

Размер сайта имеет значение только в смысле отсутствия ложных срабатываний, то есть пользователей, которые действительно забывают свой пароль (скажем, 1% в месяц), восстанавливают его, но не очищают флаг (давайте скажем, 1% от них), и когда вы не можете очистить флаг автоматически (скажем, 10% от них). Это составляет 10 ожидаемых ложноположительных флагов в месяц за 10 пользователей --- это означает, что сайт среднего размера имеет достаточно низкую вероятность войти в режим «паники», что в любом случае не так уж плохо.

Я считаю, что эта схема очень практична. Вот некоторые очевидные первые факты о нем (обновления):

  • преимущество: PIN-код легче запомнить. Я считаю, что это большое преимущество, так как теперь можно потребовать, чтобы пользователь помнил пароль, который вы создали. Я считаю, что большинство людей гораздо лучше запоминают 5 случайных цифр, чем любой другой случайный пароль.
  • tradeoff: Хеширование не поможет, если ваш злоумышленник знает как хэшированный PIN-код, так и соль. Это возможно, если кто-то ворвался в вашу базу данных и узнает, каков ваш процесс соления. Тем не менее, я считаю, что стандартная парольная энтропия тоже не поможет.
  • Пособие: люди гораздо счастливее запоминают случайные 5 цифр, чем случайные буквенно-цифровые пароли; поэтому гораздо проще также потребовать, чтобы мы сгенерировали пароль, а не пользователь. Это устраняет атаки на словари/персональные данные.

Мои вопросы:

  1. Каковы другие компромиссы/выгоды от моей схемы по сравнению с той, которую я описал как типичный?
  2. Не будет сайтов и организаций среднего размера лучше с моей парольной схемой?
  3. Каковы причины, по которым они выбирают схему, которую они имеют?

Примечание: Я не защищаю всегда короткие пароли. Мои собственные пароли обычно генерируются случайным образом и зашифровываются менеджером паролей (1Password) с 12-символьным паролем с высокой энтропией. Но я думаю, что часто вышеприведенная схема была бы лучше, чем у нас на практике.

+2

Это очень ценный вопрос, +1 – dfa

+4

Почему вы ограничиваете выбор паролей ровно 5 числами, минимизируя энтропию? И хранить их в открытом виде? И кто скажет, что многие люди просто не заберут 00000? Внесите свои предложения с помощью обычных паролей, и это намного безопаснее. – molf

+3

Любой, кто будет использовать дату рождения своих детей в качестве знака 4 или 6 цифр, также может использовать его как 5-значный вывод, если он не требует 6 цифр, чего многие не делают. И тогда есть почтовый индекс, который я знаю нескольким людям. Не уверен, что это действительное соображение. – Gerald

ответ

42

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

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

Затем, с 5-значным PIN-кодом, он слишком короткий для защиты с помощью хэша. Есть радужные таблицы (или даже поисковые запросы Google), которые позволят кому-то вернуть пароль, если они получат хэш.

+4

+1, и я бы дал вам +10, если бы мог. Отличный ответ. Никогда не ставьте ничего в текст, всегда будьте осторожны с собственными людьми и никогда не предполагайте, что ваша база данных безопасна. – Eric

+0

Ну, это есть под «компромиссы». Но не могли бы вы рассказать о том, какая разница с типичными паролями - я считаю, что более 50% - это root + uncommon postfix. Как это сильно отличается? В любом случае вам необходимо восстановить все пароли после перерыва и восстановить резервную копию. –

+4

Вы хотите защитить учетную запись своего клиента даже в случае перерыва базы данных. Если вы поместите пароль в открытый текст, вы уже ввернуты. Если вы помещаете хэш, у вас должны быть сильные хэши из-за «таблиц радуги», таблиц предварительно вычисленных хэшей для всех возможных значений в заданном наборе символов. Но это работает только для небольшого набора символов, потому что вам нужно довольно много вычислительной мощности для вычисления всех значений. В нижнем и верхнем регистровом 7-значном пароле значения 52^7 составляют более 10^12. Только с числами, даже с 10 номерами, вы получаете только 10^11 значений. – Ksempac

2

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

+0

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

+0

Вы можете соединить с идентификатором пользователя контакт с такой же легкостью, как и пароль. В этом отношении они не отличаются. –

+0

Поскольку ваш ПИН-код будет использовать только 10 символов (0-9). Пароль будет использовать не менее 36 (0-9 + A-Z). Используя пунктуации и чувствительность к регистру, это составляет более 60 символов. Если вы разрешите все символы ASCII, у вас теперь есть 255 (0/null будет проблематичным). С этими возможными комбинациями символов вы можете понять, почему пароль будет намного сильнее, чем ПИН. Я согласен с тем, что заставить пользователей менять пароли часто делает их более вероятными для их записи (потому что они иначе забыли бы это.) Я могу почти разрешить изменение пароля один раз в год. –

1

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

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

«Томми:.. Как вы знаете, зубная фея не какой-то сумасшедший клей-перехватчик модель воздух самолеты„Buildin“,» он говорит им, ну я не покупаю его Однажды он пробирается в ваш дом, вот и все, что вам нужно. Следующее, что вы знаете, у вас есть деньги, пропавшие без вести с комодом, а ваша дочь сбита с ног ».

В конечном счете, хотя простой пароль, такой как штырь, может быть взломан или угадан с использованием общих комбинаций, и он не чувствует себя в безопасности. Штырь в сочетании с RSA SecurId - это то, с чем мы все смогли договориться.

14

Имейте в виду, что злоумышленник с 3.000 попытками может успешно заблокировать 1000 учетных записей в течение нескольких минут. Другое дело, что он может изменить шансы одного успешного входа в систему, пробуя тысячи разных учетных записей в день. Есть OpenID не вариант?

Update

Просто было немного вдохновения о 5 цифр вещи. Если 5 цифр (10^5 = 100000) очень легко запомнить и безопасно в то же самое время, что об этих случаях:

4 letters all lowercase (26^4 = 456.976) => abcd 
3 letters with mixed cases (52^3 = 140.608) => aBc 
3 letters lowercase + numbers (36^3 = 46.656) => ab1 
+2

+1 за предложение обходить проблему полностью с помощью OpenID. – rmeador

+0

Не совсем «блок». Те, кто входит в систему с того же компьютера, что и раньше, будут обходить блок. Если вы читаете алгоритм, когда есть много попыток входа в систему, все начинается с вопроса безопасности от любого пользователя после 100 попыток. –

+1

Извините, я, вероятно, неправильно понял ваше предложение. Однако злоумышленник может быть не только из одного IP-адреса (tor, proxy, redial, xss attack/javascript с других сайтов). Другое дело, что текущие коммутируемые соединения повсюду, я, вероятно, не буду ограничивать учетную запись пользователя определенным IP-адресом, потому что он может измениться через 24 часа. Я лично предпочитаю создавать очень длинный случайный ключ для важных сайтов, и этот ПИН-код может потенциально ограничить меня в моем подходе. – merkuro

2

Остерегайтесь сеанса обработки

Я не знаю, слишком о сеансовой обработке, но, насколько я знаю, большую часть времени он использует с помощью файлов cookie. Когда у вас есть такая схема, как ваша, необходимо записывать ложные попытки в базу данных или в специальные файлы на вашем сервере, так как вы не можете полагаться на обработку сеанса (в вашем описании это звучит немного, как вы можете просто " провести сессию «чтобы иметь всю правду ...»), поскольку сеансы через Интернет очень уязвимы. Это всего лишь куча файлов cookie (которые могут быть удалены) и/или названия страниц (они также могут быть испорчены). Единственное, на что вы можете положиться, - это то, что пользователь по-прежнему проводит сеанс - вы не можете определить, какое из них (скрепляющее) новое соединение не является вашим старым пользователем ...

Специально, это не имеет никакого отношения к разница между «Пользователь имеет еще сеанс» и «Пользователь прерывает сеанс» (ваш элемент 7), это просто пренебрежимая разница и может также стать дырой в безопасности.

Запоминание не очень легко

Вы также сказать, что запоминание 5 цифр более проще. Это может быть правильно для вашей кредитной карты или банковской карты (в Германии у нас есть 4-значный PIN-код), но для веб-сайтов у вас всегда есть проблема, что эти многие веб-сайты имеют пароли. Помнить десятки пятизначных чисел так же сложно, как и множество паролей.

1

PINs vs Пароли, пароли выигрывают, не совершенны, но с сильной политикой, намного лучше, чем PIN-коды.

И кто сказал, что многие люди не пишут свои PIN-коды на липких заметках. Его легче запомнить для запоминания словосочетания, чем 5-значное число, лично я помню номера проще всего, и, таким образом, мои пароли более числовые, чем алфавитный.

1

Я думаю, что было бы легче запомнить «фраз, когда-либо били PIN-коды!», который будет содержать грубую силовую атаку за что-то вроде 400 триллионов лет.

+0

Я специально не говорю о нападениях грубой силы. –

+3

Это все еще легче запомнить. Если сервер собирается внедрить сильную политику блокировки, вы можете просто использовать словарные слова. Даже четырехбуквенное слово будет непрактично угадывать, достаточно ли сервер блокируется. Поэтому, если защита грубой силы важна, используйте кодовую фразу. Если это не так, просто используйте слова. Зачем вводить PIN-код? 21241 легче запомнить, чем «макароны»? –

+0

@ Daniel: +1 для вашего комментария. Для меня, я думаю, 21241 проще :) –

2

Я до сих пор не понимаю, почему люди ограничивают длину пароля вообще. Не было бы легче вспомнить предложение или фразу Например, мне может потребоваться, чтобы мой пароль был «this is my stackoverflow password». У меня были бы серьезные проблемы с памятью, если бы я забыл об этом. Длина его составляет 34 символа и использует только алфавит из 27 символов, но по-прежнему невозможно повернуть вспять хэш (4,6 х 10 возможных перестановок).

в сочетании с вашими идеями относительно «атаки флага» и правильного посола/хэширования методы, это было бы идеальным решением, на мой взгляд.

+0

Я надеялся, что кто-то поднял это - передать фразы, в основном недоиспользуемые. Это жалкие сайты, как правило, не поддерживают и не поощряют их. –

+0

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

+0

Вариации это мой пароль stackoverflow, кстати, как 5 бит или что-то :) –

2

Реальная проблема? Люди.

Я знаю школьный округ с 4 паролями: 1111, 2222, 3333 и 4444. Почему? Пользователи собрались вместе и согласились сделать это, чтобы они всегда могли войти, когда персонал был дома. Слишком большая боль, чтобы попасть в закрытый компьютер для обедов, когда работник по обеду был болен.

О, да, я много раз видел компьютер для ланча. И да, вы можете попросить, чтобы ваш остаток превратился в наличные деньги в любое время.

Пользователи безумные.

2

По этой логике, если 5 цифр легче запомнить, чем 8 символов, но содержат достаточную энтропию, то одна цифра и три буквы без учета регистра должны быть еще проще!

10**5 = 100,000 
26**3 * 10 = 175,760 

Теперь всего четыре маленьких персонажа, но они передают больше энтропии!

Возможно, я просто использую свои инициалы, а затем цифру 1. , ,

Я не так доказал это, за исключением того, что существует большая двусмысленная серая область между редукцией ad absurdum и сарказмом.

0

Я также экспериментирую с булавками против паролей. Это зависит от общей безопасности приложения, которое вы пытаетесь построить, но пароли обычно выигрывают каждый раз, если вы включаете проверку безопасности паролей. Я понимаю, что хорошая кодовая фраза, которая содержит не менее 14 символов, может быть даже лучше, чем «типичный» пароль. Это позволяет людям вводить то, что они могут легко запомнить, но что-то, что может быть сложнее повторить в атаке. Просто чистое количество персонажей затрудняет трещину.

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

1

Так как полагаться на блокировку для обеспечения безопасности - это плохой пользовательский интерфейс и приведет к тому, что злоумышленник заблокирует несколько учетных записей, что приведет к неудобствам для реальных пользователей. Вместо этого используйте более сильные пароли с засоленным хэшем, которые сложнее разбить с использованием грубой силы и не подвержены атакам в Rainbow table, если выбор между PIN-кодом и паролем. Если выбор относится к парольной фразе, паролю и PIN-коду. Моя рекомендация - перейти с паролем, за которым следует пароль, а затем PIN-код в порядке убывания предпочтения. Парольная фраза (> 10 символов) обычно более безопасна, чем пароль (от 6 до 8 символов), но не дает большого опыта, так как пользователю нужно вводить парольную фразу (> 10 символов) каждый раз! Сделайте выбор на основе того, насколько чувствительны данные и насколько хорош пользователь, которого вы хотите предоставить. Подождите минуту. Исследуйте новую новую область аутентификации без аутентификации с помощью мобильного устройства в качестве аутентификатора.

0

Другим фактором, который следует учитывать, является легкость входа. PIN-код прост для быстрого ввода на цифровой клавиатуре, так как вы идете на большую сложность, легкость входа падает. Простота зависит от устройства. На стандартной клавиатуре с сенсорным набором я могу легко вводить символы и UC. На смартфоне мне трудно надежно вводить строчные алфавиты, а символы сложны и медленны, потому что клавиатура меньше. Цифровой PIN-код быстро вводится, и я могу запомнить и ввести длинную последовательность цифр. Человеку-наблюдателю легче будет схватить пароль, если запись будет медленной, и использует необычные движения, которые отдают то, что вводится.

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

Смежные вопросы