Хранение ключа вместе с данными

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

Типичным примером здесь будут все WWW-, ftp-, e-mail-клиенты. Дело в том, что для базовой (наиболее часто встречающейся) аутентификации в этих протоколах пароль должен передаваться серверу в открытом виде. Поэтому клиентские программы вынуждены шифровать (а не хэшировать) пароль, причем с фиксированным ключом, чтобы не надоедать пользователю постоянными вопросами. Отсюда следует, что где-то внутри любого броузера, почтового или ftp-клиента (будь то Netscape Communicator, Eudora, Outlook, FAR и т.п.) лежат все ваши пароли в практически открытом виде, и что расшифровать их не представляет труда. (Чаще всего, кстати, пароль в таких программах даже не шифруется, а кодируется алгоритмом типа base-64).

 

Человеческий фактор

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

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

В последние годы много внимания уделяется разрешению этого противоречия. Именно из-за того, что неискушенные пользователи обычно выбирают либо короткие, либо осмысленные пароли, существуют два метода их вскрытия: атака полным перебором и атака по словарю.

В связи с резким ростом вычислительных мощностей атаки полным перебором имеют гораздо больше шансов на успех, чем раньше. Если для системы UNIX функция crypt(), которая отвечает за хэширование паролей, была реализована так, что выполнялась почти 1 секунду на машину класса PDP, то за двадцать лет скорость ее вычисления увеличилась в 15000 раз (!).

Однако вернемся на несколько лет назад, когда вычислительной мощности для полного перебора всех паролей не хватало. Тем не менее, хакерами был придуман остроумный метод, основанный на том, что качестве пароля человеком выбирается существующее слово или какая-либо информация о себе или своих знакомых (имя, дата рождения и т. п.). Ну, а поскольку в любом языке не более 100000 слов, то их перебор займет весьма небольшое время, и от 40 до 80% существующих паролей может быть угадано с помощью такой простой схемы, называемой "атакой по словарю". (Кстати, до 80% этих паролей может быть угадано с использованием словаря размером всего 1000 слов!). Даже вирус Морриса (в 1988 г.!) применял такой способ, тем более что в UNIX "под рукой" часто оказывается файл-словарь, обычно используемый программами-корректорами. Что же касается "собственных" паролей, то файл /etc/passwd может дать немало информации о пользователе: его входное имя, имя и фамилию, домашний каталог. Вирус Морриса с успехом пользовался следующими предположениями:

· в качестве пароля берется входное им пользователя;

· пароль представляет собой двойной повтор имени пользователя;

· то же, но прочитанное справа налево;

· имя или фамилия пользователя;

· то же, но в нижнем регистре.

Пусть сегодня пользователи уже понимают, что выбирать такие пароли нельзя, но до тех пор, пока с компьютером работает человек, эксперты по компьютерной безопасности не дождутся использования таких простых и радующих душу паролей, как 34jXs5U@bTa!6. Поэтому даже искушенный пользователь хитрит и выбирает такие пароли, как hope1, user1997, pAsSwOrD, toor, roottoor, parol, gfhjkm, asxz. Видно, что все они, как правило, базируются на осмысленном слове и некотором простом правиле его преобразования: прибавить цифру, прибавить год, перевести через букву в другой регистр, записать слово наоборот, прибавить записанное наоборот слово, записать русское слово латинскими буквами, набрать русское слово на клавиатуре с латинской раскладкой, составить пароль из рядом расположенных на клавиатуре клавиш и т. п.

Поэтому не надо удивляться, если такой "хитрый" пароль будет вскрыт хакерами - они не глупее самих пользователей, и уже вставили в свои программы те правила, по которым может идти преобразование слов. В самых продвинутых программах (John The Ripper, Password Cracking Library) эти правила могут быть программируемыми и задаваться с помощью специального языка самим хакером.

Приведем пример эффективности такой стратегии перебора. Во многих книгах по безопасности предлагается выбирать в качестве надежного пароля два осмысленных слова, разделенных некоторым знаком, например "good!password". Подсчитаем, за сколько времени в среднем будут сломаны такие пароли, если такое правило включено в набор программы-взломщика (пусть словарь 10000 слов, разделительными знаками могут быть 10 цифр и 32 знака препинания и специальных символа, машина класса Pentium со скоростью 15000 crypt/сек): =140 000 секунд или менее 1.5 дней!

 

Заключение

Положение в применении средств криптографии в прикладных программах бесспорно меняется в лучшую сторону. Постепенно разработчики осознают необходимость применения зарекомендовавших себя алгоритмов, сдвигаются с мертвой точки позиции некоторых стран в вопросе экспорта криптоалгоритмов, разрабатываются новые алгоритмы и стандарты с большей длиной ключа и эффективностью для реализации на всех типах процессоров, от 8-битных до RISC.

Тем не менее, остается огромная пропасть между уровнем стойкости и надежности существующего сейчас ПО, применяющего криптоалгоритмы, в котором до сих пор находятся "детские" дыры (последний пример - реализация PPTP от Microsoft) и тем уровнем криптостойкости, который демонстрируют последние, независимо проанализированные ведущими криптоаналитиками алгоритмы и протоколы, где серьезной уязвимостью считается, например, та, что требует 265 блоков шифрованного текста и затем 258 перебора вариантов или одного открытого текста, зашифрованного 233 разными, но зависимыми друг от друга ключами и затем сложности анализа, равного 257.

 

Резюме

Можно выделить 4 основных группы причин ненадежности криптографических систем: применение нестойких алгоритмов, неправильная реализация или применение криптоалгоритмов, а также человеческий фактор. При этом видна четкая параллель между ними и причинами нарушения безопасности вычислительных систем.

Из-за описанных причин имелись или имеются проблемы в безопасности у всех классов программных продуктов, использующие криптоалгоритмы, будь то операционные системы; криптопротоколы; клиенты и сервера, их поддерживающие; офисные программы; пользовательские утилиты шифрования; популярные архиваторы.

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