24

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

4 ответа4

36

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

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

Чтобы определить, использует ли ваша система криптографические хеши для хранения паролей, взгляните на файл /etc/shadow (при условии, что у вас есть права суперпользователя). Каждая строка отформатирована как 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. crypt for long long (поскольку по крайней мере MD5 использовался и, возможно, до этого) позволял указатели символов для фактического ключа. Это означает, что единственное ограничение на то, как долго ключ будет приниматься, основано на том, сколько оперативной памяти эта программа имеет для него, но, по всей вероятности, это, вероятно, намного дольше, чем любой пароль, который любой человек сможет запомнить (миллионы символов?).

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

Рекомендации:

7

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

3

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

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

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .