Відповіді:
Якщо ваша система використовує криптографічний хеш для зберігання паролів, наприклад, 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
файл (якщо припустити, що у вас є кореневий доступ). Кожен рядок відформатований як 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$
означає, що ви використовуєте міхура$5$
означає, що ви використовуєте SHA-256$6$
означає, що ви використовуєте SHA-512SHA-512 - найкращий доступний хеш для використання, який пропонує glibc. Я не знаю, наскільки сильний міхур, але він не входить до складу 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 року, але я вважаю, що протягом кількох років, якщо не більше, більшість усіх дистрибуцій використовували хеши.
Поточні 12.04 та 14.04 LTS (довготривалі випуски підтримки) Ubuntu за замовчуванням використовують SHA-512, як це можна побачити з попередньо $6$
створеним хешем у файлі / etc / shadow:
catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]
Тепер довжина ключа або пароля, дозволена для будь-якого алгоритму хешування, не є єдиним, що дозволяє визначити, який розмір пароля у вас може бути. Інший інтерес - це те, як написана програма та яка сама програма буде підтримуватися. Всі сучасні програми passwd і, мабуть, більшість crypt(3)
функцій в Linux. крипта довгий час (оскільки принаймні MD5 використовувався і, мабуть, до цього) дозволила вказувати символи на фактичний ключ. Це означає, що єдине обмеження щодо часу, яким він буде приймати ключ, ґрунтується на тому, скільки оперативної пам’яті має та програма, але, швидше за все, це набагато набагато довше, ніж будь-який пароль, який будь-хто зможе запам'ятати (мільйони символів?).
Це має відповісти на ваше запитання про те, як довго може бути пароль. Сподіваюся, я допоміг.
Список літератури:
Це залежить від того, який модуль аутентифікації використовується. У сучасних системах Linux не існує максимального обмеження довжини пароля. Деякі застарілі системи можуть мати обмеження, накладені системою зберігання паролів - начебто популярні максимуми становлять 8, 40 та 255.
Залежно від того, як зберігається пароль, MD5, SHA1, BlowFish тощо, я думаю, що немає обмежень у встановленні паролем самим методом зберігання.
У старих реалізаціях може бути обмеження, яке може становити 8 або 255 символів.
Це здається, що питання краще підходить для www.serverfault.com, хоча :)
Команда passwd передбачає команду mcrypt для шифрування. Відповідно до вихідного коду mcrypt, максимальний розмір stdin обмежений до 512 символів (шифрів) - але це було два роки тому .... - (я оновлю цю відповідь у наступні години) ... Так ... У вихідному коді 2.6.8 mcrypt в каталозі src, є файл getpass.c - там на початку ви бачите значення 512, встановлене як статичне значення char. (Я хотів би накачати його до 1,4 ГБ ...):