Надежность использования криптосистем

 

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

Эффективность любой криптосистемы зависит от ее стойкости к анализ зу зашифрованной информации. А уровень криптостойкости системы за­висит как от ее разработчика, так и от возможностей криптоаналитиков, пытающихся ее вскрыть. Поэтому знание истории атак и «дыр» в крипто­системах, а также понимание причин, по которым они имели место, явля­ется одним из необходимых условий разработки защищенных систем. Пер­спективным направлением исследований в этой области является анализ успешно проведенных атак или выявленных уязвимых мест в криптосисте­мах с целью их обобщения, классификации и выявления причин и законо­мерностей их появления и существования.

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

 

 

Рис. 5.30. Причины ненадежности криптосистем

 

 

логарифмирования и т. п.). К наиболее известным из них относятся DES, RSA, ГОСТ. Таким образом, они не могут быть вскрыты иначе, чем полным перебо­ром или решением указанной задачи. Но тем не менее, можно выделить следую­щие основные группы причин ненадежности криптографи-ческих систем:

• Применение нестойких алгоритмов

• Ошибки в реализации криптоалгоритмов

• Неправильное применение криптоалгоритмов

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

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

Научный подход к анализу криптостойкости шифров приобрел строй­ность после публикации в 1949 году работы К. Шеннона «Теория связи в секретных системах». Он предложил рассматривать криптостойкость сис­тем с двух точек зрения — теоретической (совершенной) и практической (вычислительной) стойкости.

С точки зрения теоретической стойкости рассматривается насколько на­дежна некоторая криптосистема, если криптоаналитик, ее вскрывающий, не ограничен временем и обладает всеми необходимыми средствами. Теоретическая криптостойкость использует два допущения: криптоаналитику известна только шифрованная информация и ключ используется только один раз. Решение этого вопроса приводит к следующему выводу: объем сек­ретного ключа для построения теоритической стойкости шифра недопус­тимо велик для большинства практических применений.

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

Криптоанализ может быть основан на использовании как общих математи­ческих методов, так и частных, полученных для конкретной криптографической защиты. Поэтому для примера рассмотрим, как проводится криптоанализ про­стейших шифров подстановок и перестановок. При этом широко используется статистическое распределение символов в алфавите. Например, в шифре моно­алфавитной замены количество возможных перестановок, для английского язы­ка, равно 26!=4 1026. Но даже при таком огромном количестве перестановок этот шифр не является стойким. Это обусловлено следующими причинами:

• В шифротексте сохраняются статистические зависимости сим­волов и сочетаний символов исходного текста

• Перемешанный относительный алфавит может быть установлен постепенным подбором.

Для любого естественного языка частота встречаемости букв в тексте раз­лична, вспомните, например, телеигру «Поле чудес». Частота встречаемости букв в процентах от общего количества символов в сообщении для русского, английского и немецкого алфавитов наглядно представлена на рис 5.31.

Кроме того на основании анализа частоты встречаемости различных букв шифротекста можно установить, на каком языке написано исходное сообще­ние. Как видно из рис. 5.31, одни и те же буквы используются с различной частотой. Например, буква Q очень редко встречается в английском и немец­ком языках, и заметно чаще в итальянском и французском. Буква О активно используется в русском, английском, итальянском, испанском и португальс­ком языках, но реже во французском и немецком. Все это позволяет доста­точно быстро расшифровывать простые шифры. Но вернемся к рис. 5.30.

Малая скорость стойких криптоалгоритмов — это основной фактор, зат­рудняющий применение хороших алгоритмов, например, в системах «то­тального» шифрования или шифрования «на лету». В частности, програм­ма Norton DiskReet, хотя и имеет реализацию криптоалгоритма DES, при смене пользователем ключа может не перешифровывать весь диск, так как это займет слишком много времени. Аналогично, программа компрессии «на лету» Stacker фирмы Stac Electronics имеет опцию закрытия паролем компрессируемых данных. Однако она не имеет физической возможности зашифровать этим паролем свой файл, обычно имеющий размеры в несколь­ко сот мегабайт, поэтому она ограничивается очень слабым алгоритмом и

 

 

Рис. 5.31. Частота использования букв: а — английского и немецкого алфавитов;

6 — русского алфавита

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

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

Использование собственных криптоалгоритмов идет от незнания или не­желания использовать уже известные алгоритмы — такая ситуация, как ни парадоксально, также имеет место быть, особенно в программах типа Freeware и Shareware, например, архиваторах. Например, архиватор ARJ (до версии 2.60 включительно) использует (по умолчанию) очень слабый алго­ритм шифрования — простое гаммирование, что позволяет достичь скорос­ти перебора в 350000 паролей/сек, на машине класса Pentium. Аналогичная ситуация имеет место и в случае с популярными программами из Microsoft Office — для определения пароля там необходимо знать всего 16 байт файла .doc или .xls, после чего достаточно перебрать всего 16 вариантов. В Microsoft Office 97 сделаны значительные улучшения алгоритмов шифрования, в ре­зультате чего осталась возможность только полного перебора, но не везде. MS Access 97 использует примитивнейший алгоритм, причем шифруются не данные, а сам пароль операцией XOR с фиксированной константой. И таких примеров можно привести еще великое множество.

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

Такая причина, как уменьшение криптостойкости системы при генерации ключа основана на том, что криптосистема либо обрезает пароль пользователя, либо генерирует из него данные, имеющие меньшее количество бит, чем сам пароль. В старых версиях UNIX пароль пользователя обрезается до 8 байт пе­ред хэшированием. Любопытно, что, например, Linux 2.0, требуя от пользова­телей ввода паролей, содержащих обязательно буквы и цифры, не проверяет, чтобы 8-символьное начало пароля также состояло из букв и цифр. Поэтому пользователь, задав, например, достаточно надежный пароль passwordlsgoodl 9, будет весьма удивлен, узнав, что хакер вошел в систему под его именем с помо­щью элементарного пароля password. Novell Netware позволяет пользователям иметь пароли до 128 байт, что дает (считая латинские буквы без учета регистра, цифры и спецсимволы) 68Ш или 2™ комбинаций. Но при этом, во-первых, хэш-функция получает на входе всего лишь 32-байтовое значение, что ограничивает эффективную длину пароля этой же величиной. Более того, во-вторых, на выхо­де хэш-значение имеет длину всего 128 бит, что соответствует 2128 комбинаций. Это дополнительно снижает эффективную длину до 21 символа, то есть в 6 раз по сравнению с первоначальной. Полностью аналогичная ситуация происходит с архиватором RAR версий 1.5х — выбор пароля больше 10 символов не при­водит к росту времени, необходимого на его вскрытие.

Некоторые криптоалгоритмы (в частности, DES, IDEA) при шифрова­нии со специфическими ключами не могут обеспечить должный уровень криптостойкости. Такие ключи называют слабыми (weak). Для DES извест­но 4 слабых и 12 полуслабых (semi-weak) ключей. И хотя вероятность попасть в них очень мала, для серьезных криптографических систем пре­небрегать ей нельзя. Мощность множества слабых ключей IDEA составля­ет немного-немало — 251 (впрочем, из-за того, что всего ключей 2т, веро­ятность попасть в него в 3>107раз меньше, чем у DES).

Недостаточная защищенность от компьютерных вирусов, «троянских коней», программных закладок и прочих программ, способных перехва­тить секретный ключ или сами нешифрованные данные, а также просто подменить алгоритм на некриптостойкий, приводит к нарушению безопас­ности криптосистемы. Особенно это актуально для операционных систем, не имеющих встроенных средств защиты или средств разграничения дос­тупа — типа MS DOS или Windows 95. Как пример можно привести самый старый способ похищения пароля, известный еще со времен больших ЭВМ, когда программа-«фантом» эмулирует приглашение ОС, предлагая ввести имя пользователя и пароль, запоминает его в некотором файле и прекра­щает работу с сообщением «Invalid password». Для MS DOS и Windows существует множество закладок для чтения и сохранения паролей, набира­емых на клавиатуре. Примером реализации подмены криптоалгоритма яв­ляется закладка, маскируемая под прикладную программу-«ускоритель» типа Turbo Krypton. Эта закладка заменяет алгоритм шифрования ГОСТ 28147-89, реализуемой платой «Krypton-З» (демонстрационный вариант), другим, простым и легко дешифруемым алгоритмом. Последним приме­ром служит имевшие место в июне 1998 года попытки проникновения «тро­янского коня» через электронную почту. В письмо были вложены порног­рафическая картинка и ЕХЕ-файл FREECD.EXE, который за то время, пока пользователь развлекался с письмом, расшифровывал пароли на соедине­ние с провайдером (Dial-Up) и отправлял их на адрес ispp@usa.net.

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

Ясно, что пока программы будут писаться людьми, ошибки в программ­ной реализации всегда будут иметь место. Хороший пример — ОС Novell Netware 3.12, где, несмотря на достаточно продуманную систему аутенти­фикации, при которой, по заявлениям фирмы Novell, «нешифрованный па­роль никогда не передается по сети», удалось найти ошибку в программе SYSCON v. 3.76, при которой пароль именно в открытом виде попадает в один из сетевых пакетов. Этого не наблюдается ни с более ранними, ни с более поздними версиями этой программы, что позволяет говорить имен­но о чисто программистской ошибке. Этот ошибка проявляется только если супервизор меняет пароль кому-либо (в том числе и себе). Видимо, каким-то образом в сетевой пакет ропадает клавиатурный буфер.

Причины наличия люков в криптосистемах очевидны: разработчик хочет иметь контроль над обрабатываемой в его системе информацией и оставля­ет для себя возможность расшифровывать ее, не зная ключа пользователя. Возможно также, что они используются для отладки и по какой-то причине не убираются из конечного продукта. Естественно, что это рано или поздно становится известным достаточно большому кругу лиц и ценность такой криптосистемы становится почти нулевой. Самыми известными примерами здесь являются AWARD BIOS (до версии 4.51PG) с его универсальным паро­лем «A WARD_SW» и СУБД Paradox фирмы Borland International, также име­ющая «суперпароли» «jIGGAe» и «пхббррх». Вплотную к наличию люков в реализации (очевидно, что в этом случае они используют явно нестойкие алгоритмы или хранят ключ вместе с данными) примыкают алгоритмы, даю­щие возможность третьему лицу читать зашифрованное сообщение, как это сделано в нашумевшем проекте CLIPPER, где третьим лицом выступает го­сударство, всегда любящее совать нос в тайны своих граждан.

Хороший, математически проверенный и корректно реализованный датчик случайных чисел (ДСЧ) также важен для криптосистемы, как и хороший, ма­тематически стойкий и корректный криптоалгоритм, иначе его недостатки могут повлиять на общую криптостойкость системы. При этом для моделиро­вания ДСЧ на ЭВМ обычно применяют датчики псевдослучайных чисел (ПСЧ), характеризующиеся периодом, разбросом, а также необходимостью его ини­циализации (seed). Применение ПСЧ для криптосистем вообще нельзя при­знать удачным решением, поэтому хорошие криптосистемы применяют для этих целей физический ДСЧ (специальную плату), или, по крайней мере, вы­рабатывают число для инициализации ПСЧ с помощью физических величин (например, времени нажатия на клавиши пользователем). Малый период и плохой разброс относятся к математическим недостаткам ДСЧ и появляются в том случае, если по каким-то причинам выбирается собственный ДСЧ. Ина­че говоря, выбор собственного ДСЧ так же опасен, как и выбор собственного криптоалгоритма. В случае малого периода (когда псевдослучайных значе­ний, вырабатываемых датчиком, меньше, чем возможных значений ключа) злоумышленник может сократить время поиска ключа, перебирая не сами клю­чи, а псевдослучайные значения и генерируя из них ключи.

Такая группа причин, как неправильное применение криптоалгоритмов, приводит к тому, что оказывается ненадежными криптостойкие и корректно реализованные алгоритмы. Самая очевидная причина — это малая дли­на ключа. Стойкие криптоалгоритмы могут иметь малую длину ключа вслед­ствие двух факторов:

• Некоторые алгоритмы могут работать с переменной длиной клю­ча, обеспечивая разную криптостойкость,— и именно задача раз­работчика выбрать необходимую длину, исходя из желаемой крип-тостойкости и эффективности. Иногда на это желание накладыва­ются и иные обстоятельства — такие, как экспортные ограничения

• Некоторые алгоритмы разрабатывались весьма давно, когда дли­на используемого в них ключа считалась более чем достаточной

для соблюдения нужного уровня защиты.

Ошибочный выбор класса алгоритма — это также весьма распространен­ная причина, при которой разработчик выбирает пусть и хороший, но совер­шенно неподходящий к его задаче алгоритм. Чаще всего это выбор шифрования вместо хэширования или выбор симметричного алгоритма вместо алгоритма с открытыми ключами. Примеров здесь масса — это почти все программы, ограничивающие доступ к компьютеру паролем при его включе­нии или загрузке, например AMI BIOS, хранящий вместо хэша пароля его зашифрованный вариант, который, естественно, легко дешифруется. Во всех сетевых процедурах аутентификации естественно применять ассиметричную криптографию, которая не позволит подобрать ключ даже при полном пере­хвате трафика. Однако многие программы довольствуются (в лучшем случае!) стандартной схемой «запрос-отклик», при которой можно вести достаточно быстрый перебор по перехваченным значениям «запроса» и «отклика».

Уже классическим примером стала уязвимость в Windows 3.x и первых версиях Windows 95, связанная с шифрованием. В этом случае программисты фирмы Microsoft, хорошо известные своими знаниями в области безопаснос­ти, применяли алгоритм RC4 (представляющем собой ни что иное, как шифро­вание гаммированием), не меняя гаммы, несколько раз к разным данным — сетевым ресурсам, хранящимся в файлах типа .pwl. Оказалось, что один из наборов данных файла .pwl представлял из себя более чем специфичный текст —20-символьное имя пользователя (в верхнем регистре) и набор указателей на ресурсы. Таким образом, угадав им пользователя (которое в большинстве случаев к тому же совпадает с именем файла) можно вычислить по крайней мере 20 байт гаммы. Так как гамма не меняется при шифровании других ре­сурсов (в этом состоит основная ошибка применения R.C4 в этом случае), могут быть вычислены первые 20 байт всех ресурсов, в которые входит длина каждого из них. Вычислив длину, можно найти значения указателей и тем са­мым прибавить еще несколько десятков байт к угаданной гамме.

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

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

В первую очередь это связано с выбором паролей. Очевидно, что короткие или осмысленные пароли легко запоминаются человеком, но они гораздо про­ще для вскрытия. Использование длинных и бессмысленных паролей бе­зусловно лучше с точки зрения криптостойкости, но человек обычно не может их запомнить и записывает на бумажке, которая потом либо теря­ется, либо попадает в руки злоумышленнику. Именно из того, что неиску­шенные пользователи обычно выбирают либо короткие, либо осмыслен-Т5Б£, та^сщц ^wi^cwpoT даа "метода, та ъск^ътлж.

• Атака полным перебором

• Атака по словарю.

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

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

 

Таблица 5.3. Скорость полного перебора на компьютере класса Pentium/166.

Криптосистема Скорость, паролей / сек
ARJ 2.50 350 000
RC5 - 56 бит 150 000
LM-хэш 50 000
Novell Netware 3.x 25 000
MS Office 97 15 000
UNIX - crypt() 15 000
RAR 2.0
UNIX -MD5

 

 

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

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

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

• То же, но прочитанное справа налево

• Имя или фамилия пользователя

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

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

 

 

3 Симметричные криптосистемы и блочные шифры