Каковы наилучшие правила выбора символов, которые следует использовать в пароле?

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

Однако, если подумать, есть много персонажей, о которых я понятия не имею, какое влияние они окажут на вещи. Иностранные символы, символы ascii и т. Д., Чтобы назвать пару.

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

В любом случае, есть ли какие-либо стандартные рекомендации по длине, разрешенным символам и так далее?

Я не уверен, имеет ли это значение, но я буду использовать ASP.NET с C #.


person Gene Roberts    schedule 21.12.2008    source источник


Ответы (9)


В паролях обычно разрешены любые печатные символы ASCII без пробелов (от 33 до 126 включительно). Многие специалисты по безопасности (и комментаторы SO) советуют использовать кодовую фразу вместо пароля. , поэтому вам нужно будет разрешить пробелы. Аргумент состоит в том, что из-за их длины и из-за того, что фразы отсутствуют в словаре, парольные фразы труднее взломать, чем пароли. (Парольную фразу также легче запомнить, поэтому законному пользователю не нужно записывать ее на стикере прямо на мониторе.)

Некоторые надежные генераторы паролей используют хеш, поэтому я бы установил очень высокий предел длины ( 512 или 1024) просто для включения. Генераторы паролей сегодня часто выдают строки из 32-128 символов, но кто знает, какие хеши будут использоваться в ближайшие несколько лет.

person Bill the Lizard    schedule 21.12.2008
comment
И я хочу использовать åäöÅÄÖ и другие символы, отличные от ASCII. Пришло время использовать юникод. Просто кодируйте его в UTF-8, а затем хешируйте. - person some; 21.12.2008
comment
Хорошая точка зрения. Я не знаю причин, по которым нельзя использовать Unicode. - person Bill the Lizard; 21.12.2008
comment
Я бы даже сказал, что следует разрешить пробелы (по крайней мере, U + 0020, традиционное пространство), поскольку по соображениям безопасности использование парольной фразы (в отличие от пароля) может быть предпочтительнее. - person Joachim Sauer; 21.12.2008
comment
Да, я бы позволил пробел, но, вероятно, никаких других пробелов. - person Jon Skeet; 21.12.2008
comment
Я согласен с @saua. Иногда я использую пробел в паролях. - person Hosam Aly; 21.12.2008
comment
Зачем ограничивать пробелы? Если он может быть закодирован / хеширован для хранения, это прерогатива пользователя относительно того, что следует вводить. Скотт Мейерс называет это проблемой замочной скважины. aristeia.com/TKP/draftPaper.pdf - person mskfisher; 15.04.2010

Символы, отличные от ASCII, безусловно, усложняют ввод пароля на ограниченных устройствах (мобильные телефоны, консоли и т. Д.), Но обычно это возможно. Возможно, если пользователь хочет это сделать, вы должны ему позволить. Достаточно просто сделать разумную и последовательную вещь - например, закодировать в UTF-8 перед хешированием. Вы столкнетесь с трудностями только в том случае, если какое-то устройство ввода отправит символы в виде композиции (например, е + острый акцент вместо «е острый») - но я подозреваю, что в реальной жизни этого не произойдет. (Вы можете разложить все самостоятельно, но в крайнем случае это будет сложно.)

Однако я бы ограничился печатными символами. Добавление вкладок, каналов форм и т. Д. В пароль действительно вызывает проблемы.

person Jon Skeet    schedule 21.12.2008
comment
Пока он хеширует так же, это не должно быть проблемой, не так ли? - person some; 21.12.2008
comment
Проблема в том, что символы не могут быть различимы / идентифицированы человеческим глазом, что затрудняет отслеживание / отладку. - person PolyThinker; 21.12.2008
comment
У символа табуляции есть специальное действие автозаполнения в большинстве браузеров. Что, если пользователи не могут его ввести? Попросить их скопировать и вставить из Блокнота? - person chakrit; 21.12.2008
comment
@chakrit: Точно, это не печатный символ, поэтому я бы его избегал. - person Jon Skeet; 21.12.2008
comment
Если вы не можете его набрать, его будет сложно ввести, если предположить, что вы используете тот же интерфейс. - person devios1; 21.12.2008
comment
@ chaiguy1337: Проблема в этом предположении. Я регулярно использую разные устройства для одного и того же сайта. - person Jon Skeet; 21.12.2008
comment
@polythinker: пароли никогда и никогда не должны отображаться пользователю. Всегда. Поэтому любые проблемы, связанные с их нечеткостью при отображении пользователю, являются спорными. - person Dave Sherohman; 21.12.2008
comment
@Jon: Это предположение не проблема. Вы знаете, какие устройства вы, вероятно, будете использовать, и можете самостоятельно ограничить количество используемых символов. Другие пользователи используют другие наборы устройств и могут соответственно выбирать свои пароли. Это не требует, чтобы приложение налагало внешние ограничения на всех пользователей. - person Dave Sherohman; 21.12.2008
comment
@ Дэйв: Когда я начинал работать с StackOverflow, у меня не было телефона Android. Теперь я время от времени отправляю сообщения. Есть ли действительно веская причина разрешить пользователю включать табуляцию или подачу формы в пароль? Конечно, разрешить символы и т. Д., Но непечатаемые символы? - person Jon Skeet; 21.12.2008
comment
@Dave: Я полностью согласен с тем, что пароли никогда не показываются. Я становлюсь очень раздраженным, когда регистрируюсь на сайте, выбираю пароль, а затем он отправляет мне пароль по электронной почте в виде обычного текста. Аааааааааааааааааааа! - person Jon Skeet; 21.12.2008

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

person kenny    schedule 21.12.2008

Короткий ответ: позвольте столько, сколько поддерживает система, которую она может поддерживать. В настоящее время действительно нет оправдания, чтобы не использовать полную поддержку Unicode для ввода текста, включая пароли. Я не думаю, что вам нужно беспокоиться о проблемах с символами, если они обрабатываются буквально (но я не профессионал в этой области - остерегайтесь внедрения sql).

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

Если вам нужен максимальный размер поля (например, для хранения в базе данных), постарайтесь сделать его достаточно большим для всего, что люди будут печатать вручную. На самом деле не существует слишком большого поля пароля, поскольку всегда есть возможность использовать автоматизированный, сгенерированный надежный пароль, но от 64 до 128 символов, безусловно, будет достаточно.

person devios1    schedule 21.12.2008
comment
Пароли никогда не следует хранить в виде открытого текста. Желательно, чтобы они были хэшированы, и тогда все они были бы одинаковой длины. - person some; 21.12.2008

По сути, следует разрешить большинство символов класса Unicode. Пропускайте, однако, управляющие символы (например, 0–31 помимо пробела), отметку порядка байтов (0xfffe и oxfeff). Кроме того, вы хотите сначала канонизировать представление, чтобы избавиться от проблем, вызванных разными представлениями. Вы можете выдавать предупреждения для символов, которые кажутся слишком сложными для ввода, но пользователи сами будут защищаться от этого.

person Paul de Vrieze    schedule 21.12.2008
comment
С другой стороны, символы, которые сложно ввести, на самом деле могут быть средством безопасности. - person devios1; 21.12.2008

Помните: когда вы храните пароли, все пароли должны быть зашифрованы односторонним алгоритмом, например md5 of sha1. Поскольку эти алгоритмы всегда выдают шестнадцатеричные числа, вам не нужно беспокоиться о SQL-инъекциях или чем-то подобном.

Итак, если вы можете использовать md5 или sha1 для персонажа, его следует принять.

person stalepretzel    schedule 21.12.2008

Если вы говорите о предотвращении атак типа SQL-инъекций, вероятно, лучше убедиться, что ваш код выполняет то, что должен делать, а не полагаться на ограничение ввода, чтобы проблема стала проще.

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

person PolyThinker    schedule 21.12.2008

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

(Конечно, даже если вы разрешите все, 99% пользователей все равно будут использовать имя своего питомца в качестве пароля ...)

person Dave Sherohman    schedule 21.12.2008

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

PS: Можно также рассмотреть проблемы с кодировкой в ​​электронном письме, если это не стандартный ascii (например, японские символы), возможно, что пользователь не получит электронное письмо в правильном формате или просто не сможет прочитать его в другой системе из-за шрифтов. не устанавливается.

Все это весит в диапазоне «печатаемых» символов ascii.

person Community    schedule 27.01.2009
comment
Если вам нужно напечатать открытый пароль в электронном письме с подтверждением, не будет ли это также означать, что вы храните его в виде открытого текста, что было бы плохо? Я полагаю, вы могли бы отправить электронное письмо, хешировать пароль, сохранить его в базе данных, а затем «забыть» текстовую версию, но это все равно, похоже, в первую очередь сводит на нет безопасность наличия пароля. - person GeoffreyF67; 01.06.2009
comment
Зачем вы КОГДА-ЛИБО присылаете пользователю пароль? Пароли никогда не следует хранить в виде открытого текста. А если пользователь забудет, просто отправьте электронное письмо со ссылкой на него, чтобы ввести новый пароль - довольно просто и почему более безопасно. - person CJT3; 31.01.2015