Паролі та стійкість - гід у криптографії

Паролі, які ми вибираємо.

У сучасному інформаційному суспільстві кожна людина хоч раз стикалася з поняттям про пароль. У деяких їх десятки, а хтось чув про паролі з фільмів про шпигунів. Спробуємо розібратися у значенні цього поняття.

Саме слово пароль, швидше за все, походить від французького слова parole, яке означає "слово, мова". Словник Даля визначать слово пароль як військове слово, що передається при вечірній зорі на добу вартовим, для оклику і допиту проходять за межу, пропускаються лише знають пароль.

З того часу фактичне визначення слова пароль не змінилося і основним його значенням є найпростіший засіб автентифікації. Пароль є тим секретом, володіння (знання) якого найчастіше визначає вірність аутентифікації перед будь-ким.

Для користувачів різних ресурсів питання вибору паролів залежить від політики безпеки та вимог до пароля цього ресурсу. Прикладом є піни до SIM-карт, які мають певну структуру у вигляді 4 цифрових символів. Адміністратори деяких ресурсів самостійно генерують паролі та нав'язують їх користувачу. Таке рішення має як плюси, оскільки воно гарантує якість виробленого пароля, проте є мінуси. Насамперед, це складність запам'ятовування нав'язаного пароля для користувача і, як наслідок, небезпека того, що користувач напише цей складний пароль у легко доступному місці і, тим самим, зведе нанівець всю перевагу складного та якісного пароля. Другим мінусом є недовіра користувача програмі вироблення пароля або тому, що цей пароль може бути відомий адміністраторам самого ресурсу, оскільки саме вони контролюють програму вироблення пароля.

Не використовуйте однаковіпаролі для різних ресурсів. Це рішення, звісно, ​​суттєво спрощує завдання запам'ятовування пароля, проте у разі компрометації цього пароля під удар можуть потрапити всі ваші дані на захищених ресурсах. На жаль, подібна схема вироблення пароля дуже поширена серед користувачів, які змушені реєструватися на великій кількості найрізноманітніших сайтів. При цьому існує великий ризик зіткнутися з нечесними власниками тих чи інших ресурсів, які можуть використовувати введений вами пароль для корисливих цілей.

Не використовуйте поширені послідовності як паролі, наприклад “123456” або “qwerty”. Також рекомендується, щоб ваш пароль не був словом української чи будь-якої іншої поширеної мови.

Не використовуйте персональну інформацію як елемент пароля. Дні народження, номери та моделі машин та інша подібна інформація може бути легко отримана людьми, які знають вас.

Популярним засобом підвищення стійкості пароля є використання написання українських слів у латинській розкладці клавіатури. Слід розуміти, що цей захід дуже слабко підвищує захищеність пароля, т.к. зловмисники чудово знають про такий спосіб.

Усі перебори та перебори.

Для того, щоб навчитися вибирати якісний пароль, необхідно добре знати основні методи злому парольного захисту. Розглянемо питання щодо перебору паролів, т.к. саме цей метод є найпоширенішим методом отримання чужого пароля. Насамперед в організацію перебору необхідно визначити функцію перевірки вірності пароля. У деяких випадках хакеру доступний хеш-код від пароля і зловмисник здатний здійснювати перебір на своїх обчислювальних потужностях, а іноді є можливість перевіряти пароль тількибезпосередньо на ресурсі.

Зберігання паролів у вигляді хеш-кодів є одним із найпоширеніших методів зберігання паролів у різних ОС та програмах. Докладніше про зберігання паролів буде сказано нижче. Якщо зловмисник знає, яка хеш-функція використовувалася, це істотно спрощує завдання. Перебір можна здійснювати повний, тобто. використовувати всі доступні послідовності символів, а можна за словником. У разі повного перебору зловмиснику, використовуючи знання максимального розміру пароля n і число можливих символів пароля M, необхідно спробувати Mn варіантів.

Швидкість перебору паролів на сучасних обчислювальних машинах дуже різна і залежить від багатьох факторів, насамперед від продуктивності та алгоритму хешування чи шифрування пароля. Для “просунутого” персонального комп'ютера та “звичайного” алгоритму хешування швидкість становить близько 10 5 -10 6 паролів на секунду. Для кластерів із застосуванням технологій типу nVidia CUDA на 4x GeForce GTX295 швидкість для перебору паролів MD5 може досягати 107 паролів в секунду і вище. Таким чином, якщо ваш пароль займає 6 символів у латинському цифро-літерному алфавіті (52 символи) при швидкості перебору 1000000 паролів на секунду, пароль буде знайдено за (52^6)/1000000/3600 = 5 годин. А пароль із 10 символів вже за 458 років. Отже, досить стійкими до такого перебору паролями можна вважати паролі з довжиною понад 8 символів. Перебір за словником займає значно менше часу, але, при цьому, немає гарантій, що пароль буде знайдено. У той же час, статистика мережі Інтернет показує, що користувачі різних країн дуже часто вибирають дуже слабкі, а головне однакові паролі. У цьому випадку зловмиснику потрібен створити якісний словник можливих паролів. Зазвичайокрім найпоширеніших паролів подібні словники містять просто слова різними мовами світу, включаючи варіанти використання різних розкладок клавіатури. В Інтернеті існує безліч подібних словників. Наприклад, на сайті http://www.passwords.ru/dic.php представлені словники як українських, так і англійських слів, є словники українських слів, набрані в латинській розкладці.

Щодо власне програм для перебору паролів, то і тут можна скористатися готовими рішеннями. Існують онлайн-служби для перебору хешованих паролів, наприклад http://www.md5hood.com або http://passcracking.ru/. Дані сервіси дозволяє підібрати слова, якщо як функція хешування використовувалася функція MD5. Останній сайт є українським аналогом проекту RainbowCrack, про який потрібно сказати окремо.

Пошук з використанням райдужних таблиць (rainbow tables) є проміжним варіантом між пошуком за словником та повним перебором. Даний метод заснований на класичному для криптографії принципі компромісу між часом та даними (time-memmory trade-off). Згідно з цим принципом існує можливість зменшувати трудомісткість виконання деякого алгоритму, збільшуючи обсяг пам'яті, зайнятої під попередні обчислення та навпаки. Дотримуючись цього принципу, можна істотно зменшити час перебору хешованих паролів шляхом побудови райдужних таблиць. Дані таблиці будуються за допомогою ланцюжків послідовного застосування хеш-функції. При цьому в таблицю записується лише перше та останні значення. Таблиці сортуються, і, далі, за допомогою бінарного пошуку та деяких додаткових дій здійснюється пошук належності шуканого хеш-коду до того чи іншого ланцюжка. Проект http://project-rainbowcrack.com/ міститьвелика кількість подібних таблиць для основних функцій хешування.

Зауважимо, що й паролі зберігатися у хешованому вигляді з використанням солі(salt) - деякого випадкового вектора, використання попередньо обчислених словників і райдужних таблиць неможливо.

Розглянь питання зберігання паролів в основних програмах та операційних системах (ОС). Почнемо з unix-подібних ОС (Solaris, BSD, Linux).

У даних ОС використовується хешування паролів із застосуванням випадкового вектора - солі. Зазвичай дані облікових записів зберігаються у двох файлах: /etc/passwd та /etc/shadow. Файл passwd містить ім'я користувача, його числовий ідентифікатор (User ID, UID) та домашню директорію, але (всупереч назві) пароля у ньому немає. Пароль записаний у файлі /etc/shadow. Для BSD систем використовується трохи інший принцип (використовується /etc/spwd.db та /etc/master.passwd), але в цілому відмінності не суттєві. Залежно від unix-системи як хеш-функції переважно використовуються: функція crypt() - найстаріший варіант функції хешироанія, заснованої на алгоритмі DES; функція MD5() – найбільш популярне рішення для зберігання паролів; * функція Blowfish() (точніше, хеш-функція, побудована на основі алгоритму Blowfish), що генерує 60-символьний хеш. З урахуванням останніх робіт з аналізу функції хешування MD5, сучасні дистрибутиви ОС рідше використовують функцію МD5, віддаючи перевагу функції Blowfish або SHA-2.

Як ми вже говорили, сіль - випадковий вектор, який генерується для кожного користувача, приєднується до пароля та хешується разом із ним. Сіль зберігається разом із хеш-кодом пароля у відкритому вигляді. Якщо в якості функції хешування використовується MD5, то файл /etc/shadow міститиме приблизно такі записи: $1$Ue1yZO5i$.6G/4l1AYliPdkTh1AkBi/ Тут вісімсимволів після $1$ - сіль, а 22 символи після останнього "$" - хеш-код.

Що стосується власне пароля, то unix-подібні системи містять різноманітні засоби контролю якості. Залежно від налаштувань та бажання адміністратора пароль користувача може бути як нульовим, так і найскладнішим, аж до нав'язаного примусово.

Далі розглянемо зберігання паролів у ОС сімейства Windows. Інформація про облікові записи користувачів Windows зберігається у гілці "HKEY_LOCAL_MACHINESAM" (SAM - Security Account Manager) реєстру. Оскільки в Windows 2000/XP всі гілки реєстру "фізично" розташовані на диску в каталозі %SystemRoot%System32Config в декількох файлах, то ця гілка - не виняток. Вона міститься у файлі SAM. Зазначимо, що цей файл за замовчуванням недоступний для читання нікому, навіть Адміністратору, але все-таки можна отримати доступ до нього (наприклад, за допомогою програм, типу SAMInside ).

  1. Пароль користувача перетворюється на Unicode-рядок.
  2. Генерується хеш-код на основі цього рядка з використанням алгоритму MD4.
  3. Отриманий хеш-код шифрується алгоритмом DES, причому як ключ використовується RID (тобто ідентифікатор користувача). Це необхідно для того, щоб два користувача з однаковими паролями мали різні хеш-коди. Всі користувачі мають різні RID (RID вбудованого облікового запису Адміністратора дорівнює 500, вбудованого облікового запису Гостя дорівнює 501, а всі інші користувачі послідовно отримують RID-и, рівні 1000, 1001, 1002 і т.д.).

Формування LM Hash:

  1. Пароль користувача перетворюється на верхній регістр і доповнюється нулями до довжини 14 байт.
  2. Отриманий рядок ділиться на дві половинки по 7 байт і кожна з них окремо шифрується алгоритмом DES,на виході якого отримуємо 8-байтний хеш-код – у сумі ж маємо один хеш-код довжиною 16 байт.
  3. Далі LM Hash додатково шифрується так, як і в кроці 3 формування NT Hash.

Для підвищення безпеки зберігання паролів, починаючи з 3-го Service Pack'a у Windows NT (і у всіх наступних NT-системах, аж до Windows 2003), отримані хеш-коди додатково шифруються ще одним алгоритмом за допомогою утиліти syskey. Тобто. до вищеописаних алгоритмів додається ще 4 крок - отримання за допомогою syskey нового хеш-коду від хеш-коду, отриманого на кроці 3.

Таким чином, в обох системах існує практично однакова система зберігання паролів з використанням хеш-функцій та застосування деякого випадкового або секретного вектора (salt у unix та syskey у Windows).

Розглянемо далі питання про парольний захист поширених офісних програм: MS Word та захист pdf-документів.

Захист doc-файлів від відкриття стійкіший. В цьому випадку вміст файлу зашифровано алгоритмом RC4. При цьому ключ шифрування, який отримано з пароля, зберігається в самому файлі в хешованому вигляді. Розмір ключа шифрування залежить від версії програми. До версії MS Office 2000, незалежно від розміру пароля, ключ шифрування був розміром 40 біт, що дозволяє здійснити перебір. Починаючи з версії 2003, існує можливість збільшити розмір ключа до 128 біт, що на сьогоднішній день є цілком розумним рішенням. Слід зазначити, що за замовчуванням варто використовувати 40-бітні ключі, так що неуважних користувачів може очікувати неприємний сюрприз.

Для захисту PDF документів також існує два різні паролі - "пароль користувача" та "пароль власника". За допомогою першого документ може бути захищений від відкриття, за допомогою другогона документ можна накладати різні обмеження, наприклад неможливість друку. Алгоритми шифрування, що використовуються, залежать від формату PDF - до версії 1.4 використовувалися тільки 40-бітні ключі, потім з'явилися 128-бітові, з версії 1.6 впроваджено шифрування по AES з довжиною ключа до 256 біт. При цьому можна використовувати інфраструктуру відкритих ключів (PKI) для генерації ключів для шифрування.

Проте реалізація системи захисту PDF така, що файл з обмеженнями може бути розшифрований миттєво та незалежно від довжини пароля, навіть у разі 128-бітових ключів. Документ із паролем на відкриття позбавлений подібних недоліків і для його відкриття доведеться здійснювати перебір паролів.