Даже если не рассматривать мою статью, за годы было написано множество работ (как солидных, так и шуточных) о том, как создавать надежные пароли. Однако, большинство из них основывается скорее на анекдотических предположениях, нежели на фактических доказательствах. То, что следует ниже — это ряд серьезных рекомендаций.
Атака, которую я буду рассматривать, — это автономный подбор пароля. Эта атака основывается на том, что взломщик либо располагает зашифрованной копией вашего документа, либо имеет зашифрованный файл паролей сервера и может тестировать пароли так быстро, насколько это для него возможно. Бывают случаи, когда подобная атака бессмысленна. В частности, банковские карты достаточно защищены, даже несмотря на всего лишь четырехзначный PIN-код, поскольку вы не можете перебирать его автономно. А полиция с большей вероятностью получит ордер для доступа к вашему почтовому ящику на Hotmail, нежели будет морочиться со взломом пароля. Система депонирования ключа в вашей шифровальной программе наверняка более уязвима, чем ваш пароль, так же, как и любые «секретные вопросы», которые вы установили на случай, если забудете основной пароль.
Современные средства автономного перебора одновременно быстры и умны. AccessData продает Password Recovery Toolkit (Пакет восстановления паролей), или PRTK. В зависимости от взламываемой программы PRTK способна проверять до сотен тысяч паролей в секунду, при этом вначале она тестирует наиболее распространенные и уже затем переходит к более сложным.
Таким образом, стойкость вашего пароля опирается на две вещи: на механизмы программы, замедляющие подбор паролей, и на порядок, в котором средства вроде PRTK проверяют различные пароли.
Некоторые прикладные программы содержат процедуры, предназначенные для намеренного замедления подбора паролей. Хорошие шифровальные средства не используют ваш пароль непосредственно как ключ шифрования; в них реализован процесс, преобразующий пароль в криптографический ключ. И программа может сделать этот процесс настолько медленным, насколько захочет.
Результаты налицо. Microsoft Office, к примеру, имеет простейшую схему преобразования пароля в ключ, так что PRTK может проверять по 350.000 паролей Microsoft Word в секунду, работая на 3 ГГц Pentium 4, являющимся на сегодня эталонным ПК. А WinZip и того хуже — свыше миллиона проверок в секунду для версии 7.0, правда с версии 9.0 криптографическая замедляющая функция стала значительно лучше: PRTK может пробовать лишь 900 паролей в секунду. PGP тоже сильно усложняет жизнь для программ вроде PRTK, так же допуская порядка 900 проверок в секунду.
При взломе программ с намеренно замедленными функциями важно, чтобы ни одна попытка не прошла даром. Простая атака полным перебором на шестизначный пароль из строчных букв, от “aaaaaa” до “zzzzzz”, потребует более 308 миллионов комбинаций. Это совершенно нерационально, поскольку бльшую часть времени программа будет тестировать маловероятные пароли типа “pqzrwj”.
По словам Эрика Томпсона из AccessData, обычный пароль состоит из корня и дополнения. Корень — не обязательно словарное слово, но все же нечто произносимое. Дополнение — это либо окончание (в 90% случаев), либо приставка (10% случаев).
Итак, первая атака, которую предпринимает PRTK, — это проверка словаря из примерно 1.000 распространенных паролей, чего-то вроде “letmein”, “password”, “123456” и т.п. Затем, она тестирует их же с сотней дополнительных часто встречающихся окончаний: “1”, “4u”, “69”, “abc”, “!" и пр. Хотите верьте, хотите нет, но одни эти 100.000 комбинаций восстанавливают порядка 24% паролей.
Затем PRTK применяет ряд более сложных словарей корней и дополнений. Эти словари включают:
- Словарь общеупотребимых слов: 5.000 слов
- Словарь имен собственных: 10.000 слов
- Полный словарь: 100.000 слов
- Словарь фонетических конструкций: 1/10.000 от числа комбинаций полного перебора
Словарь фонетических конструкций весьма занятен. Это не совсем словарь; это схема цепочек Маркова, которая генерирует произносимые англоязычные строки данной длины. Например, PRTK способна сгенерировать и проверить словарь всех произносимых шестизначных строк или всех едва произносимых семизначных строк. Сейчас они работают над механизмами генерации для других языков.
Кроме того, PRTK производит полный перебор всех четырехзначных строк; она прогоняет словари со всеми строчными буквами (что наиболее распространено), с первой заглавной (второй по распространенности случай), со всеми заглавными и с последней заглавной; она проверяет словари с распространенными подстановками: "$" вместо “s”, "@" вместо “a”, “1” вместо “l” и т.д., включая даже “l33t-speak” с цифрой “3” вместо “e”.
Словари дополнений содержат такие компоненты:
- Все двузначные цифровые комбинации
- Все даты с 1900 по 2006
- Все трехзначные цифровые комбинации
- Все одиночные символы
- Все комбинации из одной цифры плюс одиночного символа
- Все двузначные комбинации символов
Фирменный соус AccessData — это последовательность, в которой программа проверяет различные комбинации словарей корней и дополнений. Исследования, проведенные компанией, показали, что лидером популярности паролей является семи-девятизначный корень плюс одно из распространенных дополнений, причем более вероятно, что человек выберет непредсказуемый корень, нежели необычное дополнение.
Как правило, PRTK работает на сети компьютеров. Взлом паролей — это элементарно распараллеливаемая задача, к тому же легко выполняемая в фоновом процессе. В крупной организации типа Секретной Службы сотни компьютеров могут пыхтеть над чьим-то паролем. Фирма под названием Tableau разрабатывает специализированную FPGA-микросхему, предназначенную для аппаратного ускорения работы PRTK с такими «медленными программами», как PGP и WinZip: по грубым оценкам, в 150–300 раз.
Насколько все это круто? По оценкам Эрика Томпсона, за время от пары недель до месяца его программа способна взломать от 55% до 65% всех паролей. (Разумеется, это очень существенно зависит от атакуемого приложения.) Это хорошие, но не сногсшибательные результаты.
Однако, лишь при отсутствии личных и биографических данных. При всякой возможности AccessData собирает любую доступную личную информацию по объекту атаки перед началом работы. Если она может просмотреть другие пароли, то может предположить, какие типы паролей предпочитает человек. Насколько крупный он использует корень? Какой вид корня? Куда он ставит дополнение, в начало или в конец? Использует ли символьные подстановки? Почтовые индексы являются распространенными дополнениями, так что они тоже идут в файл. Так же как и адреса, имена из адресной книги, другие пароли и все прочие приватные данные. Вся эта информация несколько повышает процент успеха PRTK, но, что более важно, сокращает время поиска с недель до дней и даже часов.
Теперь, если вы хотите, чтобы ваш пароль было трудно подобрать, следует выбирать нечто, чего нет ни в одном словаре корней и дополнений. Нужно смешивать заглавные и строчные буквы в середине корня. Нужно вставлять цифры и знаки в середину корня, причем не в качестве распространенных подстановок. Либо вы должны переместить дополнение в середину корня. Или использовать два корня с дополнением посередине.
Даже что-нибудь из менее приоритетных словарных вариантов PRTK — семизначная фонетическая конструкция совместно с необычным дополнением — едва ли будет угадана. Равно, как пароль, составленный из первых букв предложения, особенно если в такую мешанину добавить символы и цифры. Да, конечно, такие пароли трудно запомнить, поэтому для их хранения вам следует пользоваться такой программой, как бесплатный и открытый Password Safe. (Кстати, PRTK способна тестировать только 900 паролей Password Safe 3.0 в секунду.)
Но даже если так, это все равно может вам не помочь. AccessData продает еще одну программу, Forensic Toolkit (Экспертно-следственный пакет), которая, помимо всего прочего, сканирует жесткий диск на предмет любых строк печатного текста. Она просматривает документы, системный реестр, почтовый архив, своп-файлы, свободное пространство диска... абсолютно всё. А затем формирует из всего найденного словарь, который скармливает PRTK.
И PRTK взламывает более 50% паролей лишь по одному такому словарю.
Так происходит потому, что подсистема управления памятью ОС Windows в процессе обычной работы оставляет фрагменты данных повсюду. Вы вводите пароль в программу, и он размещается где-то в памяти. Windows выгружает страницу памяти на диск, и она сохраняется в хвосте какого-то файла. Она перемещается в дальний угол вашего жесткого диска и остается там навечно. Linux и MacOS в этом отношении едва-ли сколь-нибудь лучше.
Я должен отметить, что все сказанное не имеет ничего общего с алгоритмом шифрования и длиной ключа. Слабый 40-битовый алгоритм не делает эти атаки проще, а стойкий 256-битовый алгоритм нисколько их не усложняет. Описанные атаки симулируют процесс ввода пользователем своего пароля, поэтому итоговый размер ключа не играет никакой роли.
Многие годы я повторял, что наиболее легкий способ атаковать криптографическую программу практически никогда не связан со взломом алгоритма, поскольку почти неизбежно в ней присутствует программная ошибка, позволяющая вам обойти математику и взломать софт. Похожая ситуация происходит и здесь. Самый простой способ узнать пароль — это даже не заниматься его подбором, а использовать сущностные недостатки самой операционной системы.
1 В оригинале статья называется “Choosing Secure Passwords”, но переводчик счел нужным ее переименовать, поскольку, на его взгляд, приведенное в ней описание методик подбора паролей представляет больший интерес, чем рекомендации по созданию паролей, незначительно отличающиеся от всех остальных, — прим. пер.