
11 Лекция - Методы и средства реализации крипто-защищенных информационных систем
.pdf1
МЕТОДЫ И СРЕДСТВА РЕАЛИЗАЦИИ КРИПТОГРАФИЧЕСКИ ЗАЩИЩЕННЫХ ИНФОРМАЦИОННЫХ СИСТЕМ
Для того, чтобы реализовать на практике действительно эффективную систему защиты информации, взять за основу хорошо изученный криптографический алгоритм и написать программу (или построить аппаратную реализацию) недостаточно. Критерием эффективности в данном случае должны служить:
отсутствие уязвимых мест в реализации, сводящих на нет уровень защиты, теоретически обеспечиваемый алгоритм;
минимизация вычислительных ресурсов, требуемых для реализации алгоритма.
Ксожалению, в рамках лекционного курса нет возможности описать все тонкости, связанные с реализацией сложных криптографических алгоритмов, тем более что истинное их понимание приходит только с практикой. Поэтому остановимся только на некоторых аспектах практического использования криптосистем.
Эффективные алгоритмы
Генерация ключей
Проблема генерации случайных чисел - одна из базовых в реализации криптосистем. Только абсолютно случайное число может рассматриваться в качестве надежного ключа.
Идеальным источником случайных чисел являются результаты измерения случайных физических величин, в частности теплового или электрического шума. Если раньше для этого было необходимо создавать специальные устройства (имевшиеся в языках высокого уровня функции генерации случайного числа на самом деле давали только псевдослучайные последовательности), то сейчас в современных процессорах (к примеру, в расширенном наборе команд ММХ2 или KNI Pentium III) генерация случайного числа реализована аппаратно и проводится соответствующей машинной командой.
Однако в ряде случаев такие идеальные средства попросту недоступны. И поэтому приходится использовать генераторы псевдослучайных чисел.
Наиболее распространенным классом являются рекуррентные генераторы. Они генерируют последовательности чисел, в которых каждый член зависит от одного или нескольких предыдущих. Таким образом, через сложную закономерность, вся последовательность зависит от начального числа (которое, в конце концов, должно быть случайным). Это и слабое, и сильное место таких генераторов. Узнав исходное число, а также владея рекуррентным соотношением, злоумышленник может восстановить любой другой член. В то же время псевдослучайные последовательности не лишены достоинств. Лишь однажды синхронизировав исходные значения генераторов, абоненты могут постоянно сменять ключи, которые будут с одной стороны общими для абонентов, с другой стороны недоступными для постороннего наблюдателя.
Рассмотрим два примера подобных способов генерации случайных чисел.
Конгруэнтные датчики
В настоящее время наиболее доступными и эффективными являются конгруэнтные генераторы ПСП. Для этого класса генераторов можно сделать математически строгое заключение о том, какими свойствами обладают выходные сигналы этих генераторов с точки зрения периодичности и случайности.
Одним из хороших конгруэнтных генераторов является линейный конгруэнтный датчик ПСЧ. Он вырабатывает последовательности псевдослучайных чисел Т(i), описываемые соотношением
Т(i + 1) = (А*Т(i)+С) mod m,
где А и С - константы, Т(0) - исходная величина, выбранная в качестве порождающего числа. Очевидно, что эти три величины и образуют ключ.
2
Такой датчик ПСЧ генерирует псевдослучайные числа с определенным периодом повторения, зависящим от выбранных значений А и С. Значение m обычно устанавливается равным 2n , где n - длина машинного слова в битах. Датчик имеет максимальный период М до того, как генерируемая последовательность начнет повторяться. По причине, отмеченной ранее, необходимо выбирать числа А и С такие, чтобы период М был максимальным. Как показано Д. Кнутом, линейный конгруэнтный датчик ПСЧ имеет максимальную длину М тогда и только тогда, когда С - нечетное, и A mod 4=1.
Для шифрования данных с помощью датчика ПСЧ может быть выбран ключ любого размера. Например, пусть ключ состоит из набора чисел x(j) размерностью b, где j = 1,2,...,n. Тогда создаваемую гамму шифра G можно представить как объединение непересекающихся множеств Н(j).
Датчики М-последовательностей
М-последовательности также популярны, благодаря относительной легкости их реализации.
М-последовательности представляют собой линейные рекуррентные последовательности максимального периода, формируемые k-разрядными генераторами на основе регистров сдвига. На каждом такте поступивший бит сдвигает k предыдущих и к нему добавляется их сумма по модулю 2. Вытесняемый бит добавляется к гамме.
Строго это можно представить в виде следующих отношений:
r1 : r0 r2 |
: r1, |
... |
rk 1 |
: rk 2 |
r0 a0r1 a1r2 |
... ak 2rk 1 ; |
|||
k rk 1 |
|
|
|
|
Здесь r0 |
,r1,r2,...,rk 1 - |
k однобитных регистров, a0 ,a1,a2,...,ak 2 - коэффициенты |
неприводимого двоичного полинома степени k-1. k - k-e значение выходной гаммы.
Период М-последовательности, исходя из ее свойств, равен 2k-1.
Другим важным свойством М-последовательности является объем ансамбля, т. е. количество различных М-последовательностей для заданного к. Эта характеристика приведена в таблице:
k |
Объем ансамбля |
k |
Объем ансамбля |
|
|
|
|
5 |
6 |
9 |
48 |
6 |
8 |
10 |
60 |
7 |
18 |
16 |
2048 |
8 |
16 |
|
|
Очевидно, что такие объемы ансамблей последовательности неприемлемы. Поэтому на практике часто используют последовательности Голда, образующиеся
суммированием нескольких М-последовательностей. Объем ансамблей этих последовательностей на несколько порядков превосходит объемы ансамблей порождающих М-последовательностей. Так, при k=10 ансамбль увеличивается от 1023 (М-последовательности) до 388000.
Также перспективными представляются нелинейные датчики ПСП (например, сдвиговые регистры с элементом “И” в цепи обратной связи), однако их свойства еще недостаточно изучены.
Возможны и другие, более сложные варианты выбора порождающих чисел для гаммы шифра.
Генерация простых чисел
В криптосистемах с открытым ключом необходимо генерировать не только случайные числа, но и числа простые.

3
Здесь возможны два подхода:
1.сгенерировать случайное число и проверить, является оно простым или нет;
2.с помощью специальных алгоритмов сразу строить случайное простое
число.
Наиболее простым в реализации представляется первый подход. Здесь в свою очередь самым очевидным способом проверки простоты числа N является перебор всех
простых чисел в интервале 1 k N с проверкой на делимость. Однако, если вспомнить, что в системе RSA для обеспечения высокой стойкости необходим ключ длиной 4096, то предложенный алгоритм окажется бесполезным из-за высокой вычислительной сложности.
В настоящий момент известно достаточно большое число более эффективных способов проверки больших чисел на простоту.
Одним из способов является тест Рабина. Он основан на малой теореме Ферма, согласно которой, напомним, для любого простого N и любого целого положительного a<N:
aN-1=1(mod N). (*)
Сама проверка может быть проведена достаточно быстро.
Пусть требуется найти вычет ad (mod N). Представим d в виде двоичного числа: d = d0 d1d2...dr (d0 - старший двоичный разряд). Положим а0 = а и по рекуррентной формуле:
ai ai2 1adi mod N
найдем ar , которое и будет ничем иным, как искомым вычетом. Сложность данного
алгоритма можно оценить как O(ln N).
Итак, воспользовавшись малой теоремой Ферма для заданного N, можно перебрать все возможные значения а, и если какое-то из них нарушит условие (*), то N следует признать составным. Но, к сожалению, теорема Ферма дает лишь необходимое, но не достаточное условие простоты. Имеются составные числа, удовлетворяющие указанному условию, они носят имя Кармайкла (Carmichael).
Пусть имеется число N= 2s t + 1, где t - нечетно, и требуется установить, простое оно или составное. Вероятностный тест Рабина заключается в следующем.
Выбирается случайное число 1 a N и проверяются два условия:
1. |
N не делится на а; |
|
2. |
at 1 mod N или существует целое k, |
0 k s, для которого |
a2k t 1 mod N .
Если оба условия выполняются, то как показал Рабин, вероятность того, что число N окажется все-таки составным, равна 1/4. Если же провести не один, а m аналогичных тестов, выбирая случайное a, то можно установить простоту числа с вероятностью 4-m. Несмотря на вероятностный характер предложенного алгоритма за счет выбора большого m можно добиться того, что вероятность ошибочного выбора простого числа для создания криптосистемы окажется ниже, чем вероятность ее взлома существующими методами (например, перебором ключа).
Проблемы реализации криптосистем
Итак, мало создать криптосистему с теоретически высокой стойкостью. Опыт показывает, что при реализации (программной или аппаратной) надежных криптосистем, допускаются такие ошибки, которые сводят на нет все усилия математиков.
Можно провести следующую аналогию: нельзя защитить жилище от воров, если установить дорогой и прочный замок и не позаботиться о том, чтобы вор не проник в помещение, просто разбив оконное стекло. Пример более близкий к криптографии: для реализации протокола РРТР (туннельный протокол "точка-точка", с помощью которого можно создавать виртуальные частные сети) был взят относительно надежный алгоритм
4
шифрования RC4. Однако как показали специалисты Counterpane Systems, существует режим, в котором механизм шифрования становится абсолютно прозрачным. Недооценка мелочей в разное время ставила под угрозу целые технологии, уже получившие слишком большую популярность, чтобы их менять: сотовая связь GSM и CDMA, защита от копирования дисков DVD, и даже "шифрование" документов MS Word.
В целом, если проанализировать опыт взлома существующих систем защиты данных, то практически все ошибки реализации можно свести к следующим классам:
невозможность применения стойких криптоалгоритмов;
ошибки в реализации криптоалгоритмов;
неправильное применение криптоалгоритмов;
человеческий фактор.
Отметим сразу, что рассматриваемые далее причины покрывают только два вида потенциально возможных угроз: раскрытия конфтденциальности и нарушения целостности, оставляя в стороне угрозу отказа в обслуживании, которая приобретает все большее значение по мере развития распределенных криптосистем.
Невозможность применения стойких криптоалгоритмов. В этой группе причин можно выделить следующие факторы.
Малая скорость стойких криптоалгоритмов. Данный фактор, затрудняющий применение хороших алгоритмов, например в системах "тотального" шифрования или шифрования "на лету", в настоящее время несколько теряет актуальность, так как современные аппаратные средства позволяют реализовывать стойкие алгоритмы шифрования, обеспечивая при этом высокую скорость работы. Так, версия файловой системы NTFS 5.0 позволяет прозрачно для пользователя организовать шифрование файлов, каталогов и целых дисков симметричным шифром с длиной ключа 128 бит.
Экспортные ограничения. Этот фактор связан с невозможность легального экспорта некоторых криптоалгоритмов или с необходимостью приобретать патент, или права на них.
Использование собственных криптоалгоритмов. Незнание или нежелание использовать известные алгоритмы - такая ситуация, как ни парадоксально, также встречается достаточно часто, особенно в бесплатных или условно-бесплатных, например, архиваторах.
Неправильная реализация криптоалгоритмов. Несмотря на то, что в этом случае применяются криптостойкие или сертифицированные алгоритмы, эта группа причин приводит к нарушениям безопасности криптосистем из-за их неправильной реализации. В этом классе причин можно выделить следующие факторы.
Уменьшение криптостойкости при генерации ключа. Известны многочисленные примеры, когда криптосистема либо обрезает пароль пользователя, либо генерирует из него данные, имеющие меньшее количество бит, чем сам пароль.
Отсутствие проверки на слабые ключи. Некоторые криптоалгоритмы (в частности, DES, IDEA, ГОСТ в «домагмовскую» эпоху) при шифровании со специфическими ключами не могут обеспечить должный уровень криптостойкости. Такие ключи называют слабыми (weak). Хотя вероятность выбора слабого ключа мала, для серьезных систем ей пренебрегать нельзя.
Недостаточная защищенность от разрушающих программных средств.
Разрушающие программные средства (РПС) - компьютерные вирусы, троянские кони, программные закладки и т. п. программы, способные перехватить секретный ключ или сами нешифрованные данные, а также просто подменить алгоритм на некриптостойкий. В случае, если программист не предусмотрел достаточных способов защиты от РПС, они легко способны нарушить безопасность криптосистемы. Особенно это актуально для операционных систем, не имеющих встроенных средств защиты или средств разграничения доступа - типа MS DOS или Windows 95/98/ME.
5
Наличие зависимости времени работы алгоритма от ключа. Это сравнительно новый аспект недостаточно корректной реализации криптоалгоритмов. Многие криптосистемы неодинаково быстро обрабатывают разные входные данные. Это происходит как из-за аппаратных (разное количество тактов на операцию, попадание в процессорный кэш и т. п.), так и программных причин (особенно при оптимизации программы по времени). Время может зависеть как от ключа шифрования, так и от (рас)шифруемых данных. Поэтому злоумышленник, обладая детальной информацией о реализации криптоалгоритма, имея зашифрованные данные, и будучи способным какимто образом измерять время обработки этих данных (например, анализируя время отправки пакетов с данными), может попытаться подобрать секретный ключ. Известны атаки такого типа на алгоритмы RSA, Диффи-Хеллмана и на схему ЭЦП DSS, используемую в прошлом.
Ошибки в программной реализации. Такие ошибки будут иметь место, пока программы пишутся людьми.
Недостатки датчика случайных чисел. Хороший, математически проверенный и корректно реализованный ДСЧ также важен для криптосистемы, как и хороший, математически стойкий и корректный криптоалгоритм, иначе его недостатки могут повлиять на общую криптостойкость системы. При этом для моделирования ДСЧ на ЭВМ обычно применяют датчики псевдослучайных чисел (ПСЧ), характеризующиеся периодом, разбросом, а также необходимостью его инициализации. Применение ПСЧ для криптосистем вообще нельзя признать удачным решением, поэтому хорошие криптосистемы применяют для этих целей физический ДСЧ (специальную плату), или, по крайней мере, вырабатывают число для инициализации ПСЧ с помощью физических величин (например, время нажатия на клавишу пользователем).
Наличие люков. Люком называется не описанная в документации на программный продукт возможность работы с этим программным продуктом. Сущность использования люков состоит в том, что при выполнении пользователем некоторых не описанных в документации действий он получает доступ к возможностям и данным, которые в обычных условиях для него закрыты (в частности - выход в привилегированный режим). Люки чаще всего являются результатом забывчивости разработчиков. В процессе разработки программы разработчики часто создают временные механизмы, облегчающие ведение отладки за счет прямого доступа к отлаживаемым частям продукта. По окончанию отладки большинство люков убирается из программы; но люди есть люди - зачастую они забывают о существовании каких-то мелких "люков". Одним из наиболее показательных примеров использования "забытых" люков является, пожалуй, широко известный в компьютерном мире инцидент с вирусом Морриса (один из первых сетевых червей, распространявшихся через Интернет. Написан аспирантом Корнельского университета Робертом Таппаном Моррисом и запущен 2 ноября 1988 года в Массачусетском технологическом институте). Одной из причин, обусловивших возможность распространения этого вируса, была ошибка разработчика программы электронной почты, входящей в состав одной из версий операционной системы UNIX, приведшая к появлению малозаметного люка. Американские специалисты оценивают ущерб, нанесенный в результате этого инцидента, более чем в 100 миллионов долларов. Причины наличия люков в криптосистемах очевидны: разработчик хочет иметь контроль над обрабатываемой в его системе информацией и оставляет для себя возможность расшифровывать ее, не зная ключа пользователя. Возможно также, что они используются для отладки и по какой-то причине не убираются из конечного продукта. Естественно, что это рано или поздно становится известным сравнительно большому кругу лиц и ценность такой криптосистемы становится почти нулевой.
Неправильное применение криптоалгоритмов. Эта группа причин приводит к тому, что оказывается ненадежными криптостойкие и корректно реализованные алгоритмы.
6
Малая длина ключа. Это самая очевидная причина. Возникает вопрос: как стойкие криптоалгоритмы могут иметь малую длину ключа? Видимо, вследствие двух факторов: некоторые алгоритмы могут работать с переменной длиной ключа, обеспечивая разную криптостойкость - и именно задача разработчика выбрать необходимую длину, исходя из желаемой криптостойкости и эффективности. Иногда на это желание накладываются и иные обстоятельства - такие, как экспортные ограничения; некоторые алгоритмы разрабатывались весьма давно, когда длина используемого в них ключа считалась более чем достаточной для соблюдения нужного уровня защиты (пример - алгоритм DES).
Ошибочный выбор класса криптоалгоритмов. Это также весьма распространенная причина, при которой разработчик выбирает пусть и хороший, но совершенно неподходящий к его задаче алгоритм. Чаще всего это выбор шифрования вместо хеширования или выбор симметричного алгоритма вместо алгоритма с открытыми ключами.
Повторное наложение гаммы шифра. Это приводит к тому, что при известном открытом тексте определяется гамма шифра, которая впоследствии используется для дешифрования другого шифрованного текста.
Хранение ключа вместе с данными. Эта причина приводит к тому, что данные, зашифрованные с помощью криптостойкого и корректно реализованного алгоритма, могут быть легко дешифрованы. Это связано со спецификой решаемой задачи, при которой невозможно вводить ключ извне и он хранится где-то внутри в практически незашифрованном виде. Иначе говоря, здесь наиболее уязвимым будет алгоритм шифрования не ключом, а ключа (с помощью некоего вторичного ключа). Но так как (что опять-таки очевидно следует из специфики задачи) этот вторичный ключ хранить вовне нельзя, то основные данные рано или поздно будут расшифрованы без использования методов перебора.
Типичным примером здесь будут все WWW-, ftp-, e-mail-клиенты. Дело в том, что для базовой (наиболее часто встречающейся) аутентификации в этих протоколах пароль должен передаваться серверу в открытом виде. Поэтому клиентские программы вынуждены шифровать (а не хешировать) пароль, причем с фиксированным ключом, чтобы не надоедать пользователю постоянными вопросами. Отсюда следует, что внутри любого браузера, почтового или ftpклиента (в старых версиях Eudora, Outlook, FAR и т. п.) лежат все пароли в практически открытом виде, и их можно легко расшифровать.
Человеческий фактор. В любой критической системе ошибки человека-оператора являются чуть ли не самыми дорогостоящими и распространенными. В случае криптосистем непрофессиональные действия пользователя сводят на нет самый стойкий криптоалгоритм и самую корректную его реализацию и применение.
В первую очередь это связано с выбором паролей. Очевидно, что короткие или осмысленные пароли легко запоминаются человеком, но они гораздо проще для вскрытия. Использование длинных и бессмысленных паролей безусловно лучше с точки зрения криптостойкости, но человек обычно не может их запомнить и записывает на бумажке, которая потом либо теряется, либо попадает в руки злоумышленнику.
Хакерами был придуман остроумный метод, основанный на том, что в качестве пароля человеком выбирается существующее слово или какая-либо информация о себе или своих знакомых (имя, дата рождения и т. п.). Ну, а поскольку в любом языке порядка 106 слов, их перебор займет весьма небольшое время, и от 40 до 80 % существующих паролей может быть угадано с помощью такой простой схемы, называемой "атакой по словарю". Известный вирус Морриса (в 1988 г.!) применял такой способ, при этом он с успехом пользовался следующими предположениями:
в качестве пароля берется входное имя пользователя;
пароль представляет собой двойной повтор имени пользователя;
то же, но прочитанное справа налево;
имя или фамилия пользователя;
7
то же, но в нижнем регистре.
Ихотя грамотность пользователей растет, атаки подобного вида все еще часто достигают цели.