Идентификация и аутентификация. Так ли все просто?

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

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

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

https://www.youtube.com/watch?v=ixDmnU7–d8

Именно такой вывод можно сделать, анализируя примеры реальных успешных атак на криптосистемы. Известны лишь единичные случаи взлома с использованием исключительно математических методов. В то же время различных примеров взломов реальных систем так много, что их анализом вынуждены заниматься целые компании, наиболее известная из которых Counterpane Systems Б. Шнайера.

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

Самое ненадежное звено системы – человек. Типичные ошибки пользователей, нарушающих безопасность всей системы защиты:

Получают распространение атаки типа отказ в обслуживании (denial of service), провоцирующие пользователя отключать “заедающую” систему защиты при решении неотложных задач.

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

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

Многие качественные криптографические средства подпадают под действие экспортных ограничений, искусственно снижающих качество этих средств. Например, в США запрещен экспорт криптоалгоритмов с длиной ключа более 56 бит.

Все программные средства, произведенные в США и легально экспортируемые за рубеж, обеспечивают ослабленную криптографическую защиту. Аналогичная ситуация имеет место и в Европе. Так, например, существуют две версии алгоритма поточного шифрования А5 (стандарт GSM) – надежная А5/1 и существенно менее стойкая А5/2 для поставок в развивающиеся страны.

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

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

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

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

Причины наличия большинства “дыр” (или люков) в ПО, т.е. не описанных в документации возможностей работы с ним, очевидны: забывчивость разработчиков, которые в процессе отладки продукта создают временные механизмы, облегчающие ее проведение, например, за счет прямого доступа к отлаживаемым частям программы. По окончании отладки часть “дыр” убирается, а о части разработчики благополучно забывают либо оставляют их сознательно, особенно в ранних версиях продукта, когда в будущем весьма вероятна его доработка.

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

Очень часто эти “заглушки” остаются в конечной версии программы. Либо опять же по причине забывчивости, либо в расчете на будущую модификацию продукта, либо, например, если в процессе разработки выясняется, что какая-то подпрограмма не нужна, а удалить заглушку не представляется возможным.

Третий источник “дыр” – неправильная обработка (или ее отсутствие) каких-либо нестандартных ситуаций, которые могут иметь место при работе программы: неопределенный ввод, ошибки пользователей, сбои и т.п. В этом случае противник может искусственно вызвать в системе появление такой нестандартной ситуации, чтобы выполнить нужные ему действия.

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

Существуют программы, изначально предназначенные для разрушительных действий: это компьютерные вирусы, компьютерные черви, троянские программы и пр. С полным на то основанием они получили обобщенное название разрушающих программных воздействий (РПВ).

РПВ могут выполнять одно или несколько из перечисленных действий, опасных для системы защиты:

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

Аппаратуру легче физически защитить от проникновения извне. Криптомодули могут помещаться в особые контейнеры, которые делают невозможным изменение алгоритма функционирования. Интегральные схемы могут покрываться специальным химическим составом, при этом любая попытка преодоления защитного слоя приводит к самоуничтожению их внутренней логической структуры. Тем не менее известны случаи выявления и аппаратных закладок.

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

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

  1. Поиск по таблицам – неуязвим для временных атак.
  2. Фиксированные сдвиги – неуязвимы для временных атак.
  3. Булевы операции – неуязвимы для временных атак.
  4. Сложение/вычитание – трудно защитить от временных атак.
  5. Умножение/деление – наиболее уязвимые для временных атак операции.

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

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

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

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

К моменту выхода этого курса в большинстве существующих систем обеспечения безопасности произойдет замена криптоалгоритмов с секретным и открытым ключом на лучшие на сегодняшний день – соответственно AES и ECCS, которые были описаны в данной главе.

Поэтому в последующих главах везде, где будет идти речь об алгоритмах блочного шифрования DES, Triple DES (3DES) и других, следует учитывать скорее всего уже свершившийся переход к AES; везде, где речь идет об алгоритме открытого шифрования RSA, следует учитывать скорее всего уже свершившийся переход к ECCS.

4.3. Классификация методов шифрования информации

Основные объекты изучения классической криптографии показаны на
рис.
3.4, где А и В – законные пользователи, W – противник или криптоаналитик. Учитывая что схема на
рис.
3.

Процедуры зашифрования E (encryption) и расшифрования D (decryption) можно представить в следующем виде:

Функции за- и расшифрования взаимно обратные, иначе говоря, для любого текста X справедливо:

На
рис.
3.5 приведена классификация методов шифрования информации. Различают два типа алгоритмов шифрования симметричные (с секретным ключом) и асимметричные (с открытым ключом). В первом случае обычно ключ расшифрования совпадает с ключом зашифрования, т.е.

либо знание ключа зашифрования позволяет легко вычислить ключ расшифрования. В асимметричных алгоритмах такая возможность отсутствует: для зашифрования и расшифрования используются разные ключи, причем знание одного из них не дает практической возможности определить другой. Поэтому, если получатель А информации сохраняет в секрете ключ расшифрования K_{dA} = SK_AK_{eA} = PK_ASK – secret key, PK – public key).

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

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

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

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

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

Идея, лежащая в основе итерационных блочных шифров, состоит в построении криптостойкой системы путем многократного применения относительно простых криптографических преобразований, в качестве которых К. Шеннон предложил использовать преобразования замены (подстановки) (substitution) и перестановки (permutation); схемы, реализующие эти преобразования, называются SP-сетями. Действие таких шифров аналогично “алгоритму”, к которому прибегают, когда месят тесто:

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

Рассеивание и перемешивание предполагают:

Наличие у шифра этих свойств:

Самые известные блочные шифры – DES (Data Encryption Standard), старый американский стандарт шифрования, созданный в 1974 г., де-факто многолетний неофициальный мировой стандарт шифрования; российский стандарт криптозащиты ГОСТ 28147-89 и новый американский стандарт шифрования AES (Advanced Encryption Standard), принятый в 2001 г. в результате многолетнего открытого международного конкурса.

Структура раундового преобразования DES и ГОСТ носит название петли Фейстеля, схема которой приведена на
рис.
3.7, а структура функций за- и расшифрования – сеть Фейстеля. Структура AES носит название “Квадрат”.

DES работает с блоками данных разрядностью 64 бита с использованием 56-разрядного ключа, из которого по специальному фиксированному алгоритму, использующему перестановки и сдвиги, вырабатываются раундовые ключи. Применяемые преобразования – поразрядное сложение по модулю 2, подстановки и перестановки, число раундов равно 16, перед началом первого раунда выполняется начальная фиксированная перестановка IP, после 16-го раунда выполняется обратная перестановка IP^{–1}

Интересно отметить, что в первоначальной схеме, предложенной IBM, все шестнадцать 48-разрядных раундовых ключей выбирались независимо, т.е. размер ключа был равен 768 битам. Однако по требованию Агентства национальной безопасности США (АНБ), во-первых, размер ключа был уменьшен до 64 бит, из которых только 56 являются секретными, во-вторых, в алгоритме определены перестановки лишь специального вида, не зависящие от ключа, что наводило критиков этого алгоритма на мысль, будто АНБ могла использовать известные ей слабости алгоритма для его взлома.

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

ГОСТ 28147-89. Ключевая информация ГОСТа представляет собой два массива данных: собственно ключ K и таблицу замен H. Ключ – это массив из восьми 32-разрядных элементов K = K_0 K_1 … K_7

В качестве исходных данных раундовая функция шифрования ГОСТа получает 64-разрядный блок данных D = (L, R) и 32-разрядный раундовый ключ, в качестве которого используется один из элементов ключа Кi. В ходе выполнения преобразования левая L и правая R половины блока данных рассматриваются как отдельные 32-разрядные элементы данных, в качестве которых они подвергаются следующим преобразованиям:

  1. сложение по модулю 2^{32} полублока R и элементом ключа;
  2. разбиение результата S на восемь четырехбитовых блоков, поблочная замена по таблице замен, формирование из получившихся блоков нового значения S;
  3. циклический сдвиг результата S на 11 разрядов влево;
  4. поразрядное сложение по модулю 2 (XOR) результата S и полублока L;
  5. элемент R становится новым значением элемента L, значение результата предыдущей операции становится новым значением элемента R.

Полученные значения элементов L и R выдаются в качестве результата шага раундового преобразования.

ГОСТ 28147-89 определяет три режима шифрования данных (простая замена, гаммирование и гаммирование с обратной связью) и режим выработки имитоприставки (кода аутентификации сообщений).

9.4. Схема Kerberos

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

В настоящее время на роль фактического стандарта сервера аутентификации претендует Kerberos, продукт разработанный в Массачусетском технологическом институте (MIT) в середине 1980-х гг. и претерпевший с тех пор ряд принципиальных изменений. Широкому распространению Kerberos способствовало то, что его версия, реализованная в MIT, является свободно распространяемым продуктом.

Программные средства, выполняющие аутентификацию по схеме Kerberos, разработаны для всех популярных ОС. Поддержка службы Kerberos предусмотрена в некоторых современных сетевых ОС.
Схема Kerberos является типичным примером реализации симметричных методов аутентификации, она приведена на
рис.
3.33.

Схема предусматривает взаимодействие между тремя программными компонентами – клиентом С, сервером Kerberos и прикладным сервером S. ПО сервера Kerberos разделено по своим функциям на две части: сервер аутентификации AS (Authentication Server) и сервер выдачи разрешений (билетов)

TGS (Ticket Granting Server). Клиент С – это компьютер, на котором установлено клиентское ПО, способное участвовать во взаимодействии по протоколу Kerberos, и зарегистрирован какой-либо пользователь. В некоторых случаях прикладной сервер может являться клиентом некоторого другого сервера, например сервер печати может пользоваться услугами файлового сервера. Сервер S – субъект, предоставляющий ресурсы сетевым клиентам.

Клиент С, который хочет обратиться к прикладному серверу для получения его услуг, должен получить разрешение от AS. Разрешение – это зашифрованная информация, которую клиент передает серверу S или серверу TGS. Разрешение позволяет серверу убедиться в подлинности клиента. Все разрешения, кроме первого, клиент получает от сервера TGS. Первое разрешение, разрешение на доступ к самому TGS, клиент получает от сервера AS. Разрешение – это шифровка, полученная на секретном ключе, известном только серверу S и серверу Kerberos, поэтому первый, получив разрешение, может быть уверен, что оно поступило именно от сервера Kerberos. Разрешения являются многоразовыми, имеющими определенный срок жизни (несколько часов). Когда этот срок истекает, клиент должен вновь пройти процедуру аутентификации. При установлении каждого соединения используется временная метка, поэтому в сети должна действовать служба единого времени.
Необходимость в сервере TGS объясняется стремлением сократить число сообщений, зашифрованных с использованием секретного ключа клиента, которому требуются услуги нескольких серверов. Именно поэтому сервер Kerberos “раздваивается” на сервер AS, с которым клиент взаимодействует при помощи секретного ключа K_{C, AS}K_{C, TGS}

Процесс аутентификации состоит из пяти (односторонняя аутентификация) или шести (взаимная аутентификация) шагов.

  1. Клиент С посылает серверу аутентификации сообщение, содержащее идентификаторы клиента ID_C и требуемого сервера выдачи разрешений ID_{TGS}, отвечающего за представление соответствующей услуги, а также информацию n_C, предназначенную для идентификации конкретного запроса: время, свой сетевой адрес и т.п.
  2. Сервер аутентификации осуществляет поиск в базе данных Kerberos по идентификатору клиента и идентификатору услуги, находит соответствующие ключи K_{C, AS} и K_{AS, TGS}, формирует сеансовый ключ K_{C, TGS} для взаимодействия клиента и сервера выдачи разрешений. После этого сервер AS посылает ответ клиенту. Этот ответ содержит две шифровки. Первая, полученная на секретном ключе клиента K_{C, AS}, содержит сеансовый ключ K_{C, TGS} для работы с сервером выдачи разрешений, идентификатор последнего ID_{TGS} и срок жизни lt_{C, TGS} разрешения клиенту на работу с сервером TGS. Вторая шифровка, полученная на ключе K_{AS, TGS}, – это разрешение T_{C, TGS} (ticket-granting ticket) клиенту на взаимодействие с сервером TGS. В состав второй шифровки, которую клиент прочесть не может, так как не знает ключа K_{AS, TGS},
    входят идентификаторы ID_C и ID_{TGS}, сеансовый ключ K_{C, TGS} и срок жизни этого разрешения lt_{C, TGS}.
  3. Получив сообщение, клиент расшифровывает первую его половину на ключе K_{C, AS}, проверяет отметку n_C, узнает сеансовый ключ K_{C, TGS} и срок жизни разрешения на работу с сервером TGS. Таким образом, в результате обмена сообщениями с сервером AS клиент получает разрешение на работу с сервером TGS. Затем клиент посылает запрос серверу выдачи разрешений. Сообщение для сервера TGS включает в себя две шифровки. Первая, полученная на сеансовом ключе K_{C, TGS}, включает в себя идентификаторы ID_C и ID_S, идентификатор запроса n_C и временную метку ts_{C, TGS}. Вторая – это “запечатанное” ключом K_{AS, TGS} разрешение T_{C, TGS}.
  4. Сервер выдачи разрешений расшифровывает разрешение T_{C, TGS}, узнает сеансовый ключ K_{C, TGS}, с помощью которого читает первую часть пришедшего сообщения и проверяет идентификатор n_C и временную метку ts_{C, TGS}. Удостоверившись в подлинности клиента, сервер TGS вырабатывает сеансовый ключ K_{C, S} для взаимодействия клиента С и сервера S. На знании этого ключа и будет основываться в будущем взаимная аутентификация C и S. После этого сервер отправляет сообщение клиенту, содержащее зашифрованные на ключе K_{C, TGS} сеансовый ключ и срок жизни разрешения клиенту на работу с сервером, а также само это разрешение T_{C, S}, зашифрованное на секретном ключе K_{S, TGS}.
  5. Клиент, получив сообщение, расшифровывает первую его часть, из которой извлекает сеансовый ключ K_{C, S} для работы с сервером S и срок жизни разрешения на взаимодействие с сервером S. Само “запечатанное” ключом K_{S, TGS} разрешение T_{C, S} клиент прочесть не может. Таким образом, в результате обмена с сервером выдачи разрешений клиент получает разрешение на дальнейшее взаимодействие уже с прикладным сервером. Наконец, клиент посылает серверу S сообщение, содержащее зашифрованные на сеансовом ключе K_{C, S} свой идентификатор ID_C, идентификатор n_C и временную метку ts_{C, S}, а также разрешение T_{C, S}, полученное от сервера TGS.
  6. Приняв сообщение от клиента и “распечатав” разрешение T_{C, S}, целевой сервер узнает сеансовый ключ K_{C, S} и с его помощью проводит аутентификацию клиента, проверяя идентификатор n_C и временную метку ts_{C, S}. Ответ сервера клиенту посылается в том случае, когда требуется взаимная аутентификация. Ответ прикладного сервера в этом случае содержит зашифрованный на ключе K_{C, S} результат преобразования h (ts_{C, S}) метки ts_{C, S}.

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

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

Помимо серверов AS и TGS в системе имеется объект, отвечающий за управление базой данных, называемый диспетчером базы данных Kerberos DBM (Database Manager), а также сервер распространения ключей Kerberos KDS (Key Distribution Server).

Похожее:  Как сделать «вход на сайт через контакт» или ВК OpenAPI? - Записки начинающего админа и сеошника

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *