Статья Как появилось шифрование паролей

vaspvort

Ночной дозор
Команда форума
Модератор
ПРОВЕРЕННЫЙ ПРОДАВЕЦ
Private Club
Migalki Club
Старожил
Меценат💎
Регистрация
10/4/18
Сообщения
7.095
Репутация
12.129
Реакции
19.157
USDT
0
Сделок через гаранта
18
Многие знают об основных разработчиках Unix — Кене Томпсоне и Деннисе Ритчи. Но особая роль принадлежит их коллеге, криптографу Роберту Моррису, вклад которого был особым:

  • первая и несколько последующих версий математической библиотеки;
  • множество интересных приложений для обработки текста, таких как typo и др.;
  • ряд программ crypt, которые поставлялись с ранними версиями Unix;
  • схема шифрования паролей, которая в основных чертах применяется до сих пор.
История создания механизма паролей (с шифрованием) наиболее интересна, потому что Моррис и Томпсон заложили фундамент современной информационной безопасности. Они разработали и внедрили базовые принципы шифрования и хранения секретов.


Эта история описана в исторической статье Кена Томпсона и Роберта Морриса «Безопасность паролей: история одного случая» 1978 года, упоминается в книге Маркоффа и Хафнер «Киберпанк: разбойники и хакеры компьютерного фронтира» (1991) и воспоминаниях Денниса Ритчи, непосредственного участника тех событий. Деннис Ритчи известен как соавтор языка программирования С и ОС Unix. Он также помогал Моррису в разных криптографических проектах, а совместный взлом шифровальной машины M-209 (она же CSP-1500 и C-38) называл «одной из самых интересных вещей, которые он делал и видел».

jykhnctrfpjzzvp6-efiwva90a8.png

В научной статье Томпсон и Моррис описывают основные подходы к разработке схемы шифрования паролей и архитектуру системы, которая получилась в итоге.

Принципы разработки​

Вот некоторые принципы, которые использовались в разработке.

  • Конкурсы. Для создания максимально безопасной системы авторы постоянно проводили конкурсы на новые способы атаки («плохой парень»), а также на новые методы защиты от новых атак («хороший парень»). Причины создания конкретных механизмов становятся понятнее, если принять в расчёт потенциальные атаки.
  • Юзабилити. Основной целью было «обеспечение безопасности при минимальном неудобстве для пользователей». Если сисадмин хочет оставить полностью открытую систему без паролей или ввести пароли только для отдельных пользователей, он может это сделать.
  • Права. Система должна не только предотвращать вход неавторизованных пользователей, но и не позволять уже вошедшим пользователям выполнять действия, на которые они не имеют права. Например, пароль «суперпользователя» (root) особенно критичен, поскольку такой юзер обладает всеми видами разрешений и имеет неограниченный доступ ко всем ресурсам.
Создатели Unix пришли к выводу, что «безопасность алгоритма шифрования паролей представляет интересную интеллектуальную и математическую задачу, но это лишь одна крошечная грань очень большой проблемы». Гораздо важнее на практике физическая безопасность компьютера, канала связи и физический контроль над самим компьютером. Самое главное — отслеживание действий бывших сотрудников, поскольку они не находятся под прямым контролем и могут обладать инсайдерской информацией о системе, ресурсах и методах доступа.

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

Первая схема​

Изначально Unix была реализована с файлом passwords, в котором хранились пароли всех пользователей в открытом виде. Такой способ сложился исторически, но был крайне небезопасным.

Очевидное решение — зашифровать пароли, поместив в файл passwords только зашифрованную форму. Когда пользователь входит в систему, пароль шифруется и сравнивается с зашифрованной версией в файле. Если они совпадают, попытка входа принимается. Такая схема впервые описана в книге Уилкса «Компьютерные системы с разделением времени» 1968 года.

Оставалось выбрать способ шифрования. В то время в системе случайно оказалась удобная и качественная программа шифрования. Она имитировала шифровальную машину M-209, которую использовала армия США во Второй мировой.

Программа M-209 оказалась вполне пригодной. В ней пароль использовался не как текст для шифрования, а как ключ, и с помощью этого ключа была зашифрована константа. Зашифрованный результат вводился в файл паролей.

Авторы исследовали возможности брутфорса и обратили внимание, что люди часто выбирают короткие и простые пароли, которые легко запомнить, из ограниченного набора символов (например, только строчные буквы) и часто выбирают слова или имена. Эта человеческая привычка значительно облегчает поиск ключа.

Критическим фактором является количество времени, необходимое для шифрования пароля и сверки результата: на компьютере PDP-11/70 оно составило примерно 1,25 миллисекунды. Проверка зашифрованного пробного пароля по всем паролям в файле занимает не больше времени.

В этой исторической работе Морриса и Томпсона опубликована первая таблица по времени брутфорса:

mgb3bvihlqwkl1kjwelj-qj4txi.png

В конечном итоге, защита от несанкционированного раскрытия паролей с такой системой невозможна, поскольку раскрытие одного пароля раскрывает схему и пароли всех остальных пользователей. Файл с паролями записывается на магнитную ленту для резервного копирования, так что любой желающий может его прочитать после раскрытия схемы.

Усовершенствования​

Более медленное шифрование​

Очевидно, первый использованный алгоритм шифрования был слишком быстрым. Появление нового алгоритма шифрования DES от NIST сильно помогло. Шифры DES по своей конструкции трудно обратить, плюс он чрезвычайно медленный при реализации в ПО.

DES был реализован и использован следующим образом: первые восемь символов пароля пользователя используются в качестве ключа для DES; затем алгоритм применяется для шифрования константы. Хотя изначально константа была равна нулю, она легко доступна и её можно привязать к железу. Затем алгоритм DES итерируется 25 раз, а полученные 64 бита переупаковываются в строку из 11 символов.

Менее предсказуемые пароли​

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

Соль​

Программа паролей получает 12-битное случайное число (считывая часы реального времени) и добавляла его к введённому паролю. Объединённая строка шифровалась, а в файл паролей записывались 12-битное случайное число (называемое солью) и 64-битный результат шифрования.

Когда пользователь позже входит в систему, 12-битное число извлекается из файла паролей и добавляется к введённому паролю. Зашифрованный результат, как и раньше, сравнивается с записанными 64 битами в файле паролей.

cl1cth0mbbzejgxtph41echqveu.jpeg

С такой модификацией стало непрактичным использование заранее подготовленного зашифрованного словаря, с которым раньше взламывали новые пароли за миллисекунды.

Кроме того, становится практически невозможно узнать, использовал ли человек на двух или более системах один и тот же пароль.

Защита от атаки по времени​

Для успешного входа в Unix необходимо ввести действительное имя пользователя, а затем правильный пароль. Когда впервые внедрили медленный алгоритм DES, шифрование выполнялось только в том случае, если имя пользователя было действительным, поскольку в противном случае не было зашифрованного пароля для сравнения с введённым паролем. В результате ответ задерживался примерно на полсекунды на действительном имени, но был мгновенным на недействительном. Злоумышленник мог узнать, является ли определённое имя пользователя действительным. Рутину изменили, чтобы выполнять шифрование в любом случае.

Выводы​

Опыт показал поразительно изощрённые попытки проникновения в системы удалённого доступа. Поэтому защита паролей требует особого внимания.

Нужно помнить, что система работает во враждебной среде. Авторы подчёркивают, что бесполезно скрывать особенности работы системы. Наоборот, они обнародовали алгоритм шифрования и пригласили всех желающих к атаке, полагая, что такой подход сведёт к минимуму будущие проблемы. Подход оказался успешным.

С тех пор минуло более полувека, но выводы разработчиков Unix остаются актуальными до сих пор.

Источник
 
  • Теги
    des unix брутфорс
  • Назад
    Сверху Снизу