Какова максимальная длина пароля в системе Unix / Linux?

27

Какова максимально допустимая длина пароля в системе Unix / Linux?

хари
источник
20
Если ответ не 42, так и должно быть.
tvanfosson
лучший вопрос может быть: что я могу разумно ожидать, чтобы кто-то печатал? Если лимит составляет 40, и вы превышаете его, вы делаете что-то не так.
четверг,

Ответы:

39

Если ваша система использует криптографический хеш для хранения паролей, например, MD5, SHA1 и т. Д., То длина самой пароля не ограничена, поскольку эти хеш-коды могут быть созданы с любым количеством данных. Хеш MD5 или SHA1 может быть создан для всего жесткого диска, и это обычно делается для криминалистических целей, потому что, если хотя бы один бит будет изменен очень незначительно, у вас будет совсем другой хеш, и, следовательно, вы сможете проверить, изменились ли данные. Это означает, что вы можете использовать те же самые алгоритмы, чтобы проверить, были ли данные подделаны. Linux (по крайней мере, текущий Linux) использует те же хеш-функции. Он запросит у вас пароль, а затем создаст криптографический хэш пароля, который вы дали, и проверите, соответствует ли этот хэш сохраненному паролю.

Есть небольшой недостаток в использовании этих хешей, который заключается в том, что хеш имеет конечный размер, например, хеш MD5 равен 128 битам. Это означает, что хеш MD5 имеет только 2^128или 340,282,366,920,938,463,463,374,607,431,768,211,456возможные комбинации. Теперь, когда это большое число, это означает, что вы можете иметь то, что они называют коллизией хешей, когда у вас есть два разных элемента или ключа, которые производят один и тот же хеш. Теоретически, чем больше размер ключа, тем ниже вероятность коллизии и тем больше времени потребуется для перебора пароля, но это строго оценивает энтропию и сколько времени она МОЖЕТпринять, но есть также шанс, что первая попытка записи может быть той, которая соответствует, даже если это коллизия хешей. Вообще говоря, вам действительно безопаснее использовать хеш, который имеет больший размер ключа, потому что, предположим, это MD5, шансы на совпадение первого пароля из 340,282,366,920,938,463,463,374,607,431,768,211,456возможных совпадений крайне маловероятны. Также выберите хороший пароль, потому что многие взломщики будут пытаться использовать списки слов, списки имен и мутации этого списка (то есть, если слово «рыба», то они будут пытаться fish1234и fish!@#$т. Д.), Прежде чем они будут полагаться на взлом пароля.

Чтобы определить, использует ли ваша система криптографические хеши для хранения паролей, посмотрите на /etc/shadowфайл (при условии, что у вас есть root-доступ). Каждая строка отформатирована как user:password:last-changed:minimum-age:maximum-age:warning-period:inactivity-period:expiration-date:reserved. Поле пароля может начинаться с $num$(т. Е. Хэш md5 в поле пароля выглядит так, как $1$01234567$b5lh2mHyD2PdJjFfALlEz1он начинается $1$). Если это начинается с этого, то это означает, что ваша система использует криптографический хеш. Формат поля пароля на всех современных системах есть $id$salt$hash. Идентификатор указывает, какой тип криптографического хэша вы используете. Соль - это случайно сгенерированная строка, которая соединяется с ключом (простым текстовым паролем) для защиты от предварительно вычисленных таблиц известных хэшей. Хеш - это криптографический хеш, созданный из соли и ключа / пароля. Если ваше поле пароля начинается с$num$ тогда вы используете криптографические хеши.

Итак, вы знаете, цифры означают это:

  • $1$ означает, что вы используете MD5
  • $2$или $2a$означает, что вы используете blowfish
  • $5$ означает, что вы используете SHA-256
  • $6$ означает, что вы используете SHA-512

SHA-512 - лучший из доступных хэшей, который может использовать glibc. Я не знаю, насколько сильна blowfish, но она не является частью glibc и поэтому доступна только в определенных дистрибутивах, которые ее добавили. SHA-512 производит 512-битные ключи или 2 ^ 512 возможных комбинаций, прежде чем можно ожидать коллизию, и с достаточно сложным паролем, кластеру компьютеров потребуется очень очень много времени, чтобы найти действительный пароль или коллизию в хэше. ,

Кроме того, если у вас есть хеш, который не начинается с, $num$то вы используете DES, и его длина не должна превышать 8 символов. Я считаю, что старые системы, которые используют DES, или, по крайней мере, некоторые из них, будут принимать пароль любого размера, но использовать только первые 8 символов. Это означает, что если вы установите свой пароль, mybigbigappleи кто-то использует пароль, mybigbigcityто он будет разрешен, потому что DES будет использовать только mybigbigи все, что после этого будет отброшено.

Итак, вы знаете, что Ubuntu 8.04, выпущенная в апреле 2008 года, использовала хеши MD5. Ubuntu от 8.10, выпущенный в октябре 2008 года, и все версии с тех пор используют хэши SHA-512. Я не знаю, как далеко до апреля 2008 года, но я считаю, что в течение нескольких лет, если не больше, в большинстве дистрибутивов использовались хэши.

Текущие версии Ubuntu 12.04 и 14.04 LTS (долгосрочные выпуски поддержки), по-видимому, используют SHA-512 по умолчанию, что видно из $6$префикса, добавленного к хешу в файле / etc / shadow:

catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]

Теперь длина ключа или пароля, разрешенная для любого алгоритма хеширования, не единственная, чтобы определить, какой размер пароля вам разрешено иметь. Другой интересный вопрос - как пишется программа и какую длину программа будет поддерживать сама. Все современные программы passwd и, вероятно, большинство crypt(3)функций в Linux. Крипт в течение долгого времени (так как по крайней мере MD5 использовался и, вероятно, до этого) позволял указатели символов для фактического ключа. Это означает, что единственное ограничение на то, как долго ключ будет приниматься, основано на том, сколько оперативной памяти эта программа имеет в своем распоряжении, но, по всей вероятности, это, вероятно, намного дольше, чем любой пароль, который любой человек мог бы запомнить (миллионы символов?).

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

Ссылки:

jetole
источник
7
"Какова максимальная длина ответа SU?" LOL Отличный ответ!
Джеймс Мерц
1
Следует отметить, что алгоритм crypt () устарел уже более десяти лет. Независимо от длины пароля crypt () он усекается до 8 символов. В сочетании с очень маленьким пространством клавиш из 12-битной соли функция crypt () стала совершенно небезопасной. В качестве ссылки, вот статья о том, как 1 миллион паролей Gawker был раскрыт из-за использования crypt () в 2010 году: https://www.lightbluetouchpaper.org/2010/12/15/the-gawker-hack- Как миллион паролей были потеряны /
Cremefraiche
8

Это зависит от того, какой модуль аутентификации используется. В современных системах Linux нет максимального ограничения на длину пароля. Некоторые устаревшие системы могут иметь ограничения, налагаемые их системой хранения паролей - популярными максимумами являются 8, 40 и 255.

Джон Милликин
источник
3

В зависимости от того, как хранится пароль, MD5, SHA1, BlowFish и т. Д. Я думаю, что нет никаких ограничений на пароль, установленный самим методом хранения.

В старых реализациях может быть ограничение в 8 или 255 символов.

Хотя этот вопрос лучше подходит для www.serverfault.com :)

Kelsey
источник
5
Это в основном связано с компьютером, но не обязательно для серверов!
Дарт Android
0

Команда passwd использует команду mcrypt для шифрования. Согласно исходному коду mcrypt максимальный размер stdin ограничен 512 символами (шифрами) - но это было два года назад .... - (я обновлю этот ответ в ближайшие часы) ... Да ... В исходном коде 2.6.8 mcrypt в каталоге src, есть файл getpass.c - там в начале вы видите значение 512, установленное как статическое значение char. (Я бы с удовольствием накачал до 1,4 гб ...)

dschinn1001
источник