Моделирование и оценка производительности работы защищенных каналов в корпоративных сетях

Тип работы:
Дипломная
Предмет:
Коммуникации, связь, цифровые приборы и радиоэлектроника


Узнать стоимость

Детальная информация о работе

Выдержка из работы

ВВЕДЕНИЕ

В первое поколение (1945−1954) развития компьютерной техники, Клод Шеннон (создатель теории информации), Алан Тьюринг (математик, разработавший теорию программ и алгоритмов) и Джон фон Нейман (автор конструкции вычислительных устройств, которая до сих пор лежит в основе большинства компьютеров) и другие великие математики, стоявшие у истоков информационных технологий, могли лишь мечтать о том, чтобы их ЭВМ могли хотя бы провести элементарные расчёты. По мере развития информационных технологий более остро вставал вопрос не только сохранения результатов расчётов, но и их защиты от несанкционированного доступа. В конечном итоге это привело к широкому использованию шифрования информации на её носителях.

В век, когда информационные технологии поглотили наш мир полностью, когда мы уже не можем представить себе жизнь без компьютера, когда даже поход в магазин за хлебом оборачивается общением с вычислительной техникой, люди все больше задумываются не столько о безопасном хранении данных, а о территориальной безопасной передачи этих данных. Вначале эта проблема решалась прокладкой прямого кабельного соединения физически защищённого от перехвата информации, учитывая большие материальные затраты, такую защиту могли себе позволить только крупные корпорации и государственные органы. Быстрое развитие интернет породило новую тенденцию — использование для построения глобальных корпоративных связей более дешёвого и более доступного транспорта Интернет. Влияние Интернет на корпоративные сети способствовало появлению нового понятия — Intranet, при котором способы доставки и обработки информации, присущие Интернет, переносятся в корпоративную сеть. Однако Интранет представляет собой очевидную угрозу безопасности сети предприятия, поскольку внутренние ресурсы корпоративной сети становятся доступными многим пользователям Интернет, а конфиденциальный трафик может быть просмотрен злоумышленником. Для обеспечения безопасного сетевого соединения с распределенными подразделениями компании организуется виртуальная частная сеть (Virtual Private Networks, VPN), которая использует набор технологий, гарантирующих секретность, защиту и целостность данных, передаваемых по сети общего пользования. Слово «частный» в данном контексте означает, что передача данных между удаленными пользователями корпоративной сети компании осуществляется в зашифрованном виде, что позволяет говорить о создании безопасного канала связи -- «туннеля». В качестве среды транспортировки шифрованных данных используется Интернет.

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

ГЛАВА 1 Предметная область и постановка задачи

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

Все продукты для создания VPN можно условно разделить на две категории — программные и аппаратные. Программное решение для VPN — как правило, готовое приложение, которое устанавливается на подключенном к сети компьютере со стандартной операционной системой. Из соображений защиты и производительности для установки VPN-приложений лучше всего выделять отдельные машины, которые должны устанавливаться на всех концах соединений. Ряд производителей, таких как компании Axent Technologies, Check Point Software Technologies и NetGuard, поставляют VPN-пакеты, которые легко интегрируются с программными межсетевыми экранами и работают на различных операционных системах, включая Windows NT/2000, Sun Solaris и Linux.

Для развертывания программные решения обычно сложнее, чем аппаратные. Создание подобной системы предусматривает конфигурирование сервера для распознавания данного компьютера и его операционной системы, VPN-пакета, сетевых плат для каждого соединения и специальных плат для ускорения операций шифрования. Такая работа сложна даже для опытных специалистов. С другой стороны, стоимость программных решений относительно ниже: в зависимости от размера сети можно приобрести VPN-пакет за 2−25 тыс. долл. (без стоимости оборудования, установки и обслуживания).

Аппаратные VPN-решения включают в себя все, что необходимо для соединения: компьютер, частную (как правило) операционную систему и специальное программное обеспечение. Ряд компаний, в том числе Cisco Systems, NetScreen и Sonic, предлагают целый спектр решений, которые могут масштабироваться в зависимости от количества одновременных VPN-соединений, с которыми планируется работать, и ожидаемого объема трафика. Развертывать аппаратные решения значительно проще, на их запуск требуется всего несколько часов. Еще одним серьезным преимуществом аппаратных VPN-решений является более высокая производительность. В них используются специальные печатные платы и операционные системы, оптимизированные под данную задачу и освобожденные от необходимости поддерживать другие функции. К минусам аппаратных решений относится их высокая стоимость. Диапазон цен — от 10 тыс. долл. за устройство для удаленного офиса до сотен тысяч долларов за VPN для предприятия.

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

1. 1 Аппаратные средства построения VPN

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

· Xedia Access Point 1000. Устройство Access Point 1000 представляет собой высокопроизводительный маршрутизатор для доступа к сети Internet; оно поддерживает ряд IP-услуг, включая передачу трафика в сети Internet по защищенным IPSec-туннелям. Данный маршрутизатор может размещаться как часть службы оператора, например, провайдера услуг Internet, либо как часть инфраструктуры большой корпоративной сети. Обладая мощными средствами обеспечения безопасности, отличной производительностью и возможностями расширения, маршрутизатор Access Point 1000 идеально подходит для работы в качестве интегрированного в VPN маршрутизатора либо в качестве VPN-шлюза в больших информационных центрах. Согласно сайту производителя, его стоимость составляет $ 19 995 за устройство, а также $ 1 000 за программный пакет QVPN.

· Lucent VPN Gateway. Межсетевой шлюз Lucent VPN Gateway специально оптимизирован для обеспечения максимальной безопасности. Безопасность обычно достигается за счет некоторого снижения производительности устройства; это отражается в параметрах производительности данного продукта. В отличие от других испытанных VPN-шлюзов, где аппаратное и программное обеспечение находятся в одном корпусе, в данном продукте аппаратное устройство (устройство для доступа к VPN) и ПО (сервер управления VPN-шлюзом, VPN Gateway Management Server) представляют собой отдельные компоненты. Согласно сайту производителя, его цена составляет $ 21 990; комплект поставки включает два аппаратных модуля Lucent VPN Gateway, программные модули Lucent Security Management Server Software и Lucent IPSec Client, а также лицензию на 100 одновременных VPN-сеансов.

· VPNet VSU-1100. Продукт VSU-1100 представляет собой высокопроизводительный VPN-шлюз для защищённых коммерческих сетевых приложений. Он может применяться крупными предприятиями, создающими собственные VPN, провайдерами сетевых услуг, которые размещают управляемые услуги VPN и провайдерами приложений (ASP- Application Service Provider), оказывающими важные коммерческие услуги (business-critical solutions) корпоративным клиентам. Продукт VSU-1100 поддерживает полный набор VPN-услуг, например, IPSec-шифрование, утвержденное Международной ассоциацией надежности вычислительных систем (ICSA -International Computer Safety Association); сжатие и аутентификацию пакетов; управление ключами с помощью протоколов IKE и протокола IP c ключами защиты (SKIP — Secure Key Internet Protoсol); преобразование сетевых адресов (NAT — Network Address Translation) и цифровые сертификаты. Стоимость составляет $ 4 995 за один узел, $ 9 990 за два узла, а многоузловой модуль VPNmanager MultiSite стоит $ 1 995. Лицензия на один клиентский модуль продается за $ 99.

· RadGuard cIPro-VPN. Продукт cIPro-VPN фирмы Radguard представляет собой аппаратный VPN-шлюз с мощными механизмами безопасности, который может применяться в сетях intranet, extranet, VPN-коллективного пользования и на безопасных виртуальных частных каналах для мобильных пользователей. Продукт cIPro-VPN использует аппаратный модуль сертификации, и совместим со стандартами IPsec и X. 509. Он очень легок в установке и эксплуатации, не требует ни детальных знаний основ информационной безопасности, ни уникальных навыков работы с сетями. Средняя цена равна $ 14 950 за комплект, включающий в себя два устройства доступа к VPN с функциями межсетевого экрана, а также ПО для сертификации и управления.

Следует отметить, что использование рассмотренного перечня аппаратных средств для построения VPN предполагает большие материальные затраты (более 10 000 $). Для многих фирм такое решение является неприемлемым. Высокая стоимость этих устройств не является их единственным недостатком. Здесь следует отметить также отсутствие мобильности и возможности смены набора алгоритмов шифрования для передаваемых данных.

1. 2 Программные реализации VPN

Способы построения защищённых каналов на базе программных реализаций VPN включают в себя:

1. Использовать свободной реализации IPSec (Internet Protocol Security). В качестве таковой могут выступать FreeSWAN или FreeBSD IPSec.

2. Внедрить коммерческого решения. Например, Cisco VPN или Securepoint VPN Server, которые также основаны на IPSec.

3. Взять на вооружение свободные разработки, использующие криптографические алгоритмы собственного изготовления. Список таких приложений довольно велик. Поэтому перечислим только те, что у всех на слуху — cipe, vpnd, tinc, — этот список можно было бы продолжать очень долго.

4. Самостоятельно написать программное обеспечение, реализующее все механизмы VPN.

5. Использовать PPTP (Point to Point Tunneling Protocol).

6. Внедрить программный пакет OpenVPN.

Рассмотрим более подробно достоинства и недостатки каждого из приведённых выше программных средств реализации VPN.

Последние несколько лет при создании VPN, стандартом де-факто считается IPSec. Такая распространенность помогает не слишком беспокоиться о совместимости VPN-серверов и клиентов. Единый стандарт — очень удобен. Подобный способ хорош тем, что не потребует больших материальных затрат и в то же время предлагает стойкую криптографическую защиту передаваемых данных. Но на этом его преимущества заканчиваются. Основным недостатком IPSec является то, что он некорректно работает с межсетевыми экранами, особенно если используется технология NAT. Экраны с контролем состояния соединения (statefull firewall), находящиеся между двумя точками виртуального тоннеля и управляемые провайдером, могут не пропускать те или иные IPSec-пакеты. О кроссплатформенности разных реализаций IPSec пока остается только мечтать в связи с тем, что для реализации функций IPSec приходится вносить в ядро операционной системы и IP-стек довольно много изменений. Как гласит старинная пословица: «Надежность заканчивается там, где начинается сложная механика», это значит, что одна-единственная ошибка в коде, реализующем IPSec, приведет к снижению безопасности. Вдобавок, на данный момент, не существует легко настраиваемого свободного клиента. Также стоит обратить внимание на большую сложность установки и настройки такого комплекса по сравнению с остальными типами VPN. Еще одним из минусов является отсутствие технической поддержки. Если возникнут трудности, то на квалифицированную помощь от производителя рассчитывать нельзя.

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

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

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

Вариант решения, основанный на PPT, большей частью используется приверженцами Microsoft. Данный стандарт реализует довольно стойкое шифрование и аутентификацию соединений. Созданный в недрах большой Редмондской корпорации, он не получил особого распространения в мире UNIX. Хотя свободное программное обеспечение для работы с ним существует и пользуется некоторым спросом, все же решения на основе IPSec практикуют гораздо чаще. Происходит это, видимо, потому, что IPSec имеет более надежные процедуры шифрования.

Ну, а большинству администраторов, не воспользовавшихся вариантами, предлагаемыми выше, видимо, придется обратиться к программе OpenVPN (сайт проекта http: //openvpn. net.).

История разработки OpenVPN выглядит довольно забавно и в то же время является хрестоматийной иллюстрацией принципов, типичных для движения open source проектов. В конце 2001 года Джеймс Йонан (James Yonan) успешно выполнил работу над большим проектом для компании. В качестве благодарности работодатель разрешил ему не ходить каждый день на работу и выполнять свои обязанности удаленно. С этого момента жизнь Джеймса кардинально изменилась. Словно в калейдоскопе мелькали страны и континенты: Египет, Кыргызстан, Монголия, Китай. Как обычно, без русских тут не обошлось. Уж очень автора OpenVPN беспокоил тот парадоксальный факт, что в России есть достаточно большое количество безработных, но очень талантливых хакеров. А судя по его наблюдениям, некоторая часть трафика шла именно через российские сети. Объездив всю центральную Азию, Джеймс попутно продолжал искать решение, которое позволит ему работать с центральным офисом удобно, безопасно, надежно и в то же время не будет стоить бешеных денег. Испробовав на себе все вышеперечисленные способы создания VPN, он понял, что на данный момент идеал, к сожалению, недостижим.

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

Итак, давайте посмотрим поближе на возможности, предоставляемые OpenVPN.

l Официально OpenVPN успешно работает под управлением следующих операционных систем: Linux, Solaris, OpenBSD, FreeBSD, NetBSD, Mac OS X, Windows 2000/XP. Это позволяет создавать сложные кроссплатформенные туннели. Впрочем, не составит никакого труда экспортировать OpenVPN в любую другую систему, для которой существует драйвер tun/tap-устройств. К тому же данная разработка независима от размера и старшинства байтов в машинном слове, что облегчает перенос на новые операционные системы.

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

l Поддерживаются два типа туннелей: IP и Ethernet, соответственно называемые routed и bridged. Таким образом, появляется возможность туннелировать как IP-подсети, так и виртуальные Ethernet-адаптеры.

l Отлично работает в сетях, где адреса распределяются с помощью DHCP. Помогает подключаться к VPN-клиентам, попадающим в Интернет через dial-up.

l Позволяет создать туннели поверх NAT, несмотря на то, что NAT изменяет содержимое заголовков передаваемых пакетов.

l Дает возможность работать с любыми механизмами шифрования, встроенными в OpenSSL для защиты передаваемого трафика. А это, в свою очередь, позволяет каждому клиенту выбрать тип, режим работы (CBC, CFB, OFB) и размер ключа шифра в соответствии с индивидуальными предпочтениями.

l В случае если в передаваемых данных есть повторяющиеся последовательности, для их сокрытия будет использован алгоритм explicit IV.

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

l В качестве дополнительной меры безопасности может быть использован протокол TLS, позволяющий аутентифицировать сессию с помощью динамического обмена сертификатами. Довольно большой оптимизации быстродействия при динамическом обмене SSL/TLS-ключами позволяет добиться использование мультипоточной библиотеки pthread. Таким образом, даже частый обмен между сервером и клиентом ключами размером более чем 2048 байт практически не влияет на скорость передачи туннелируемых данных.

l Для увеличения безопасности OpenVPN позволяет переместить себя в chroot-окружение и снижает свои привилегии после старта так, чтобы отлично работать от имени самого бесправного пользователя системы.

l Еще одним полезным, с точки зрения безопасности, свойством является наличие ключа --mlock. Он позволяет запретить OpenVPN записывать в процессе работы на жесткий диск какую-либо информацию, связанную с секретными ключами и данными, передаваемыми по туннелю.

l В связи с тем, что данная программа является всего лишь обычным пользовательским приложением, а не частью ядра, она может вполне мирно сосуществовать с другими приложениями, использующими tun/tap-туннели.

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

l Позволяет удобно работать через межсетевые экраны с контролем состояния соединения. В случае, если по туннелю не передаются данные, OpenVPN позволяет через определенные промежутки времени посылать ping, для того чтобы не дать межсетевым экранам разорвать соединение из-за неактивности.

Наиболее экономичным и надежным вариантом на сегодняшний день для создания Virtual Private Networks между Windows и Unix системами оптимальным решением является использование OpenVPN. Поэтому для реализации защищенного канала, я буду использовать OpenVPN.

1. 3 Платформы реализации защищенного канала

Из-за высокой совместимости проекта OpenVPN, он может работать в операционных системах Linux, Solaris, OpenBSD, FreeBSD, NetBSD, Mac OS X и Windows 2000/XP.

Для построения корпоративной сети, моделирования и оценки производительности работы защищенного канала, были выбраны в качестве серверных операционных систем:

· Fedora core,

· Windows Server 2003,

для клиентов была выбрана система:

· Windows XP SP2.

Данные операционные системы были выбраны по причине широкой распространённости в корпоративных сетях. Из-за своей стабильности, высокой функциональности и простоты настройки. Так же в качестве серверной операционной системы рассматривалась Unix система FreeBSD, но из-за отсутствия официальной поддержки программного обеспечения, технологической платформы 1С данная операционная система была исключена из дальнейшего тестирования.

ГЛАВА 2 алгоритмы шифрования В ЗАЩИЩЕННЫХ КАНАЛАХ

Алгоритмы шифрования делятся на два больших класса: симметричные (AES, Blowfish, DES) и асимметричные (RSA, El-Gamal). Симметричные алгоритмы шифрования используют один и тот же ключ для зашифровывания информации и для ее расшифровывания, а асимметричные алгоритмы используют два ключа: один для зашифровывания, другой для расшифровывания.

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

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

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

2. 1 Асимметричные алгоритмы шифрования

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

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

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

Начало асимметричным шифрам было положено в 1976 году в работе Уитфилда Диффи и Мартина Хеллмана «Новые направления в современной криптографии». Они предложили систему обмена общим секретным ключом (см. Диффи-Хеллмана криптосистема) на основе проблемы дискретного логарифма. Вообще, в основу известных асимметричных криптосистем кладётся одна из сложных математических проблем, которая позволяет строить односторонние функции и функции-ловушки. Например, криптосистема Ривеста-Шамира-Адельмана использует проблему факторизации больших чисел, а криптосистемы Меркля-Хеллмана и Хора-Ривеста опираются на так называемую задачу об укладке рюкзака [7].

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

RSA

Описание RSA было опубликовано в 1977 году Рональдом Райвестом (Ronald Linn Rivest), Ади Шамиром (Adi Shamir) и Леонардом Адлеманом (Leonard Adleman) из Массачусетского Технологического Института (MIT).

Британский математик Клиффорд Кокс (Clifford Cocks), работавший в центре правительственной связи (GCHQ) Великобритании, описал аналогичную систему в 1973 году во внутренних документах центра, но эта работа не была раскрыта до 1977 года и Райвест, Шамир и Адлеман разработали RSA независимо от работы Кокса.

В 1983 году MIT был выдан патент № 4 405 829 США, срок действия которого истёк 21 сентября 2000 года.

Безопасность алгоритма RSA основана на трудности задачи разложения на множители. Алгоритм использует два ключа -- открытый (public) и секретный (private), вместе открытый и соответствующий ему секретный ключи образуют пару ключей (keypair). Открытый ключ не требуется сохранять в тайне, он используется для шифрования данных. Если сообщение было зашифровано открытым ключом, то расшифровать его можно только соответствующим секретным ключом.

Для того, чтобы сгенерировать пару ключей выполняются следующие действия:

· Выбираются два больших случайных простых числа и

· Вычисляется их произведение

· Вычисляется Функция Эйлера

· Выбирается целое такое, что и взаимно простое с

С помощью расширенного алгоритма Евклида находится число такое, что это значит, что при некотором целом.

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

Для того, чтобы зашифровать сообщение вычисляется.

Число используется в качестве шифртекста. Для расшифровывания нужно вычислить.

Нетрудно убедиться, что при расшифровывании мы восстановим исходное сообщение:

(2. 1)

Из условия следует, что для некоторого целого, следовательно, Согласно теореме Эйлера:, поэтому

На случайные простые числа и накладываются следующие дополнительные ограничения:

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

· Необходимо выбирать «сильные» простые числа, чтобы нельзя было воспользоваться алгоритмом Полларда.

Другие асимметричные алгоритмы шифрования

· Алгоритм открытого распределения ключей Диффи — Хеллмана. Криптографическая стойкость алгоритма Диффи -- Хеллмана основана на предполагаемой сложности проблемы дискретного логарифмирования. Однако, хотя умение решать проблему дискретного логарифмирования позволит взломать алгоритм Диффи -- Хеллмана, обратное утверждение до сих является открытым вопросом (другими словами, эквивалентность этих проблем не доказана).

· Алгоритм асимметричного шифрования Эль Гамаля был предложен в 1984 году. В частности, стандарты электронной цифровой подписи в США и России базируются именно на ней.

· Асимметричная криптосистема ЕСС на эллиптических кривых использует алгебраическую систему, которая описывается в терминах точек эллиптических кривых для реализации асимметричного алгоритма шифрования. Является конкурентом по отношению к другим асимметричным алгоритмам шифрования, так как при эквивалентной стойкости использует ключи меньшей длины и имеет большую производительность. Современные его реализации показывают, что эта система гораздо более эффективна, чем другие системы с открытыми ключами. Его производительность приблизительно на порядок выше, чем производительность RSA, Диффи-Хеллмана и DSA.

2. 2 Симметричные алгоритмы шифрования

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

Достоинства:

· скорость (по данным Applied Cryptography -- на 3 порядка выше)

· простота реализации (за счёт более простых операций)

· меньшая требуемая длина ключа для сопоставимой стойкости

· изученность (за счёт большего возраста)

Недостатки:

· сложность управления ключами в большой сети. Означает квадратичное возрастание числа пар ключей, которые надо генерировать, передавать, хранить и уничтожать в сети. Для сети в 10 абонентов требуется 45 ключей, для 100 уже 4950, для 1000 -- 499 500 и т. д.

· сложность обмена ключами. Для применения необходимо решить проблему надёжной передачи ключей каждому абоненту, так как нужен секретный канал для передачи каждого ключа обеим сторонам.

Data Encryption Standard (DES)

DES (англ. Data Encryption Standard) также известен как алгоритм шифрования данных DEA (англ. Data Encryption Algorithm). Разработан фирмой IBM и утвержден правительством США в 1977 году как официальный стандарт (FIPS-46−3). DES имеет блоки по 64 бит и 16-цикловую структуру сети Фейстеля, для шифрования использует ключ в 56 бит. (На самом деле функция требует ввода 64-битового ключа, но в качестве ключа шифрования используется только 56 бит, остальные 8 бит могут быть битами чётности или содержать любые другие данные). Алгоритм использует комбинирование нелинейного (S-box) и линейного преобразований. Для DES рекомендовано несколько режимов шифрования, например Electronic Code Book (ECB) и Cipher Block Chaining (CBC)

Общая схема шифрования DES представлена на рисунке 2. 1

Рис. 2.1 Схема шифрования DES

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

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

Рис. 2.2 Расширяющая перестановка

Значение на выходе ключевого сумматора получается в результате побитового сложения (исключающее ИЛИ, xor) сформированного 48-разрядного блока и текущего подключа. Результирующий 48-разрядный блок преобразуется в 32-разрядный с помощью S-блоков. Затем выполняется ещё одна битовая перестановка согласно схеме, показанной ниже (числа представляют собой порядковые номера бит).

Рис. 2.3 Битовая перестановка

Шифрование начинается с перестановки бит (IP -- Initial Permutation) в 64-разрядном блоке исходных данных. 58-ой бит становится первым, 50-ый вторым и т. д. Схема перестановки битов показана ниже.

Рис. 2.4 Схема перестановки

Полученный блок делится на две 32-разрядные части L0 и R0. Далее 16 раз повторяются следующие 4 процедуры:

1 Преобразование ключа с учетом номера итерации i (перестановки разрядов с удалением 8 бит, в результате получается 48-разрядный ключ)

2 Пусть A = Li, а J -- преобразованный ключ. С помощью функции генерируется 32-разрядное выходное значение цикловой (раундовой) функции.

3 Выполняется операция, результат обозначается Ri + 1

4 Выполняется операция присвоения Li + 1 = Ri

После выполнения 16 циклов преобразования производится ещё одна битовая перестановка, инверсная начальной. Она предполагает следующее размещение 64 бит зашифрованных данных (первым битом становится 40-ой, вторым 8-ой и т. д.)

Рис. 2.5 Битовая перестановка, инверсная начальной

S-блоки представляют собой таблицы, содержащие 4 строки и 16 столбцов. Первый S-блок S1 представлен ниже.

Рис. 2.6 Первый S-блок

Входной 48-разрядный блок делится на 8 групп по 6 разрядов. Первый и последний разряд в группе используются в качестве адреса строки, а средние 4 разряда -- в качестве адреса столбца. В результате, каждые 6 бит преобразуются в 4 бита, а весь 48-разрядный код в 32-разрядный (для этого нужно 8 S-блоков). Существуют аппаратные реализации стандарта DES, обеспечивающие высокую производительность.

Из-за малой длины ключа (56 бит), имеется всего 256 различных ключей, что при нынешнем развитии техники недопустимо по причине низкого времени взлома атакой типа Brute Force (всего несколько часов). Также вызывает сомнение его надежность, так как в основе алгоритма DES лежат 8 таблиц подстановки (S-boxes), применяемые в каждом раунде.

На сегодняшний день такая длина ключа недостаточна, поскольку допускает успешное применение атак типа Brute Force. Альтернативой DES можно считать тройной DES. Существует опасность, что эти S-boxes конструировались таким образом, что криптоанализ возможен для взломщика, который знает слабые места S-boxes. В течение многих лет обсуждалось как стандартное, так и неожиданное поведение S-boxes, но все-таки никому не удалось обнаружить их фатально слабые места.

Всё это привело к тому, что в У. Тачмен предложил идею шифровать блок открытого текста P три раза с помощью двух ключей K1 и K2

С=ЕK1(DK2(EK2(P))) (2. 2)

То есть блок открытого текста Р сначала шифруется ключом K1, затем расшифровается ключом K2 и окончательно шифруется ключом K1. [1]

Это позволило вывести стойкость алгоритма на современный уровень.

Advanced Encryption Standard (AES)(Rijndael)

Advanced Encryption Standard (AES), также известный, как Rijndael симметричный алгоритм блочного шифрования (размер блока 128 бит, ключ 128/192/256 бит), финалист конкурса AES, принятый в качестве американского стандарта шифрования правительством США. Выбор был сделан с расчётом на повсеместное использование и активный анализ алгоритма, как это было с его предшественником, DES. Государственный институт стандартов и технологий (англ. National Institute of Standards and Technology, NIST) США опубликовал предварительную спецификацию AES 26 ноября 2001 года, после пятилетней подготовки. 26 мая 2002 года AES был объявлен стандартом шифрования. По состоянию на 2006 год AES является одним из самых распространённых алгоритмов симметричного шифрования.

Этот алгоритм представляет собой симметричный блочный шифр, который работает с блоками данных длиной 128 бит и использует ключи длиной 128, 192 и 256 бит (версии AES-28; AES-192 и AES-256). Сам алгоритм может работать и с другими длинами блоков данных и ключей, но эта возможность в стандарт не вошла.

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

Ключ шифрования также представлен в виде прямоугольного массива с четырьмя строками. Число столбцов обозначено как Nk и равно длине ключа, деленной на 32. Это показано на рисунке 1.

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

Рис. 2.7 Пример представления состояния (Nb=6) и ключа шифрования (Nk=4)

Входные данные для шифра («открытый текст», если используется режим шифрования ECB) обозначаются как байты состояния в порядке a0,0, a1,0, a3,0, a0,1, a1,1, a3,1, a4,1 … После завершения действия шифра выходные данные получаются из байтов состояния в том же порядке.

Число циклов обозначено как Nr и зависит от значений Nb и Nk. Оно приведено в Таблице 2.1.

Таблица № 2.1 Число циклов (Nr) как функция от длины ключа и длины блока

Цикловое преобразование состоит из четырех различных преобразований. На псевдо-Си это выглядит следующим образом:

Round (State, RoundKey)

{

ByteSub (State); // замена байт

ShiftRow (State); // сдвиг строк

MixColumn (State); // замешивание столбцов

AddRoundKey (State, RoundKey); // добавление циклового ключа

}

Последний цикл шифра немного отличается. Он выглядит так:

FinalRound (State, RoundKey)

{

ByteSub (State); // замена байт

ShiftRow (State); // сдвиг строк

AddRoundKey (State, RoundKey); // добавление циклового ключа

}

В приведенной записи, «функции» — Round, ByteSub и т. д. выполняют свои действия над массивами, переданными указателями (State, RoundKey).

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

Преобразование ByteSub представляет собой нелинейную замену байт, выполняемую независимо с каждым байтом состояния. Таблицы замены (или S-блоки) являются инвертируемыми и построены из композиции двух преобразований:

1. Первое — получение обратного элемента относительно умножения в поле GF (28), описанного в разделе 2.1. '00' переходит сам в себя.

2. Применение афинного преобразования (над GF (2)), определенного как:

Таблица 2.2 Схема аффинного преобразования

y0

=

1

1

1

1

1

0

0

0

x0

+

0

y1

0

1

1

1

1

1

0

0

x1

1

y2

0

0

1

1

1

1

1

0

x2

1

y3

0

0

0

1

1

1

1

1

x3

0

y4

1

0

0

0

1

1

1

1

x4

0

y5

1

1

0

0

0

1

1

1

x5

0

y6

1

1

1

0

0

0

1

1

x6

1

y7

1

1

1

1

0

0

0

1

x7

1

Применение описанного S-блока ко всем байтам состояния обозначено как ByteSub (State). Рисунок 2.8 иллюстрирует применение преобразования ByteSub к состоянию.

Рис 2.8 ByteSub действует на каждый байт состояния

Преобразование сдвига строк (ShiftRow).

Последние 3 строки состояния циклически сдвигаются на различное число байт. Строка 1 сдвигается на С1 байт, строка 2 — на С2 байт и строка 3 — на С3 байт.

Значения сдвигов С1, С2 и С3 зависят от длины блока Nb. Их величины приведены в таблице 2.3.

Таблица 2.3 Величина сдвига для разной длины блоков

Nb

C1

C2

C3

4

1

2

3

6

1

2

3

8

1

3

4

Операция сдвига последних 3 строк состояния на определенную величину обозначена как ShiftRow (State). Рисунок 2.9 показывает влияние преобразования на состояние.

Рис 2. 9: ShiftRow действует на строки состояния.

Преобразование замешивания столбцов (MixColumn).

В этом преобразовании столбцы состояния рассматриваются как многочлены над GF (28) и умножаются по модулю x4+1 на многочлен c (x), выглядящий следующим образом:

c (x)='03' x3 + '01' x2 + '01' x + '02' (2. 3)

Это может быть представлено в виде матричного умножения. Пусть b (x)=c (x)a (x),

Таблица 2. 4

b0

=

02

03

01

01

a0

b1

01

02

03

01

a1

b2

01

01

02

03

a2

b3

03

01

01

02

a3

Применение этой операции ко всем четырем столбцам состояния обозначено как MixColumn (State). Рисунок 2. 10 демонстрирует применение MixColumn к состоянию.

Рис 2. 10 MixColumn действует на столбцы состояния

Добавление циклового ключа.

В данной операции цикловой ключ добавляется к состоянию посредством простого EXOR. Цикловой ключ вырабатывается из ключа шифрования посредством алгоритма выработки ключей (key schedule). Длина циклового ключа равна длине блока Nb.

Преобразование, содержащее добавление посредством EXOR циклового ключа к состоянию, обозначено как AddRoundKey (State, RoundKey). Оно проиллюстрировано на рисунке 2. 11.

Рис 2. 11 При добавлении ключа цикловой ключ складывается посредством EXOR с состоянием.

Алгоритм выработки ключей (Key Schedule).

Цикловые ключи получаются из ключа шифрования посредством алгоритма выработки ключей. Он содержит два компонента: расширение ключа (Key Expansion) и выбор циклового ключа (Round Key Selection). Основополагающие принципы алгоритма выглядят следующим образом:

· Общее число бит цикловых ключей равно длине блока, умноженной на число циклов плюс 1 (например, для длины блока 128 бит и 10 циклов требуется 1408 бит циклового ключа).

· Ключ шифрования расширяется в Расширенный Ключ (Expanded Key).

· Цикловые ключи берутся из Расширенного ключа следующим образом: первый цикловой ключ содержит первые Nb слов, второй — следующие Nb слов и т. д.

Расширение ключа (Key Expansion).

Расширенный ключ представляет собой линейный массив 4-ех байтовых слов и обозначен как W[Nb*(Nr+1)]. Первые Nk слов содержат ключ шифрования. Все остальные слова определяются рекурсивно из слов с меньшими индексами. Алгоритм выработки ключей зависит от величины Nk: ниже приведена версия для Nk равного или меньшего 6 и версия для Nk большего 6. Для Nk<6 или Nk=6 мы имеем:

KeyExpansion (CipherKey, W

{

for (i = 0; i < Nk; i++) W[i] = CipherKey[i];

for (j = Nk; j < Nb*(Nk+1); j+=Nk)

{

W[j] = W[j-Nk] ^ SubByte (Rotl (W[j-1])) ^ Rcon[j/Nk];

for (i = 1; i < Nk & & i+j < Nb*(Nr+1); i++)

}

}

Как можно заметить, первые Nk слов заполняются ключом шифрования. Каждое последующее слово W[i] получается посредством EXOR предыдущего слова W[i-1] и слова на Nk позиций ранее W[i-Nk]. Для слов, позиция которых кратна Nk, перед EXOR применяется преобразование к W[i-1], а затем еще прибавляется цикловая константа. Преобразование содержит циклический сдвиг байтов в слове, обозначенный как Rotl, затем следует SubByte — применение замены байт. Для Nk>6 мы имеем:

KeyExpansion (CipherKey, W)

{

for (i=0; i< Nk; i++) W[i]=CipherKey[i];

for (j=Nk; j< Nb*(Nk+1); j+=Nk)

{

W[j] = W[j-Nk] ^ SubByte (Rotl (W[j-1])) ^ Rcon[j/Nk];

for (i=1; i< 4; i++) W[i+j] = W[i+j-Nk] ^ W[i+j-1];

W[j+4] = W[j+4-Nk] ^ SubByte (W[j+3]);

for (i=5; i< Nk; i++) W[i+j] = W[i+j-Nk] ^ W[i+j-1];

}

}

Отличие для схемы при Nk>6 состоит в применении SubByte для каждого 4-го байта из Nk. Цикловая константа независит от Nk и определяется следующим образом:

Rcon[i] = (RC[i], '00', '00', '00') (2. 4)

где: RC[0]='01'

RC[i]=xtime (Rcon[i-1])

Выбор циклового ключа.

i-ый цикловой ключ получается из слов массива циклового ключа от W[Nb*i] и доW[Nb (i+1)]. Это показано на рисунке 2. 12.

Рис 2. 12: Расширение ключа и выбор циклового ключа для Nb=6 и Nk=4.

Замечание: Алгоритм выработки ключей можно осуществлять и без использования массива W[Nb*(Nr+1)]. Для реализаций, в которых существенно требование к занимаемой памяти, цикловые ключи могут вычисляться на лету посредством использования буфера из Nk слов.

Шифр Rijndael состоит из:

· начального добавления циклового ключа;

· Nr-1 циклов;

· заключительного цикла.

На псевдо-Си это выглядит следующим образом:

Rijndael (State, CipherKey)

{

KeyExpansion (CipherKey, ExpandedKey); // Расширение ключа

AddRoundKey (State, ExpandedKey); // Добавление циклового ключа

For (i=1; i< Nr; i++) Round (State, ExpandedKey+Nb*i); // циклы

FinalRound (State, ExpandedKey+Nb*Nr); // заключительный цикл

}

Если предварительно выполнена процедура расширения ключа, то Rijndael будет выглядеть следующим образом:

Rijndael (State, CipherKey)

{

AddRoundKey (State, ExpandedKey);

For (i=1; i< Nr; i++) Round (State, ExpandedKey+Nb*i);

FinalRound (State, ExpandedKey+Nb*Nr);

}

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

Blowfish

Алгоритм был разработан в 1993 году Брюсом Шнайером (Bruce Schneier). Этот алгоритм, по заявлению автора, разрабатывался как быстрый, компактный и простой алгоритм с настраиваемой стойкостью (ключ до 448 бит).

Blowfish является сетью Фейштеля, у которой количество итераций равно 16. Длина блока равна 64 битам, ключ может иметь любую длину в пределах 448 бит. Хотя перед началом любого шифрования выполняется сложная фаза инициализации, само шифрование данных выполняется достаточно быстро.

Алгоритм состоит из двух частей: расширение ключа и шифрование данных. Расширение ключа преобразует ключ длиной, по крайней мере, 448 бит в несколько массивов подключей общей длиной 4168 байт.

В основе алгоритма лежит сеть Фейштеля с 16 итерациями. Каждая итерация состоит из перестановки, зависящей от ключа, и подстановки, зависящей от ключа и данных. Операциями являются XOR и сложение 32-битных слов.

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

1. Р — массив, состоящий из восемнадцати 32-битных подключей: Р1, Р2, …, Р18.

2. Четыре 32-битных S-boxes c 256 входами каждый. Первый индекс означает номер S-box, второй индекс — номер входа.

3. S1,0, S1,1, … S1,255;

4. S2,0, S2,1, … S2,255;

5. S3,0, S3,1, … S3,255;

6. S4,0, S4,1, … S4,255;

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

Входом является 64-битный элемент данных X, который делится на две 32-битные половины, X1 и Xr.

Xl = Xl XOR Pi (2. 5)

Xr = F (Xl) XOR Xr (2. 6)

Swap Xl and Xr

Разделить Xl на четыре 8-битных элемента A, B, C, D.

F (Xl) = ((S1,А + S2, B mod 232) XOR S3, C) + S4, D mod 232

Дешифрование отличается от шифрования тем, что Pi используются в обратном порядке.

Генерация подключей: Подключи вычисляются с использованием самого алгоритма Blowfish. Для этого следует:

1 Инициализировать первый Р-массив и четыре S-boxes фиксированной строкой.

2 Выполнить операцию XOR P1 с первыми 32 битами ключа, операцию XOR P2 со вторыми 32 битами ключа и т. д. Повторять цикл до тех пор, пока весь Р-массив не будет побитно сложен со всеми битами ключа. Для коротких ключей выполняется конкатенация ключа с самим собой.

3 Зашифровать нулевую строку алгоритмом Blowfish, используя подключи, описанные в пунктах (1) и (2).

4 Заменить Р1 и Р2 выходом, полученным на шаге (3).

5 Зашифровать выход шага (3), используя алгоритм Blowfish с модифицированными подключами.

6 Заменить Р3 и Р4 выходом, полученным на шаге (5).

7 Продолжить процесс, заменяя все элементы Р-массива, а затем все четыре S-boxes, выходами соответствующим образом модифицированного алгоритма Blowfish.

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

В алгоритме на время написания не было найдено ни одной уязвимости. Максимальная длина ключа (448 бит) и сложность его создания позволяет говорить о том, что атаки простым перебором на современной технике займут много времени. Даже при не больших ключах можно достичь высокой защищённости данных.

RC5

Алгоритм RC5 интересен по многим причинам. Во-первых, он создан известнейшим криптологом Роном Ривестом (Ron Rivest) — одним из разработчиков асимметричной системы RSA и одним из основателей одноименной фирмы (RSA Data Security), которая, несомненно, входит в число мировых лидеров рынка средств криптографической защиты информации. Аббревиатура RC обозначает, согласно разным источникам, либо Rivest Cipher, либо Ron’s Code, т. е. в совокупности «шифр Рона Ривеста».

Во-вторых, аналогично предыдущим алгоритмам шифрования Рона Ривеста RC2 и RC4, алгоритм RC5 получил весьма широкое распространение: по количеству пользователей в мире он стоит в одном ряду с такими известными алгоритмами, как IDEA и Blowfish.

И, наконец, на преобразованиях, используемых в RC5, основана последующая разработка компании RSA — алгоритм RC6, который стал финалистом конкурса AES по выбору нового стандарта шифрования США. RC6 не победил в конкурсе, но, видимо, превзойдет своего предшественника по широте использования.

Алгоритм RC5 имеет переменные длину блока, количество раундов и длину ключа. Для спецификации алгоритма с конкретными параметрами принято обозначение RC5-W/R/K, где W равно половине длины блока в битах, R -- число раундов, K -- длина ключа в байтах.

Для эффективной реализации величину W рекомендуют брать равной машинному слову. Например, для 32-битных платформ оптимальным будет выбор W=32, что соответствует размеру блока 64 бита.

Для стимуляции изучения и применения шифра RC5 RSA Security Inc. 28 января 1997 года предложила взломать серию сообщений, зашифрованных алгоритмом RC5 с разными параметрами, назначив за взлом каждого сообщения приз в $ 10 000. Шифр с самыми слабыми параметрами RC5−32/12/5 был взломан в течение нескольких часов. Тем не менее, последний осуществлённый взлом шифра RC5−32/12/8 потребовал 5 лет. Взлом RC5−32/12/8 был осуществлён в рамках проекта распределённых вычислений RC5−64 (здесь 64=K*8, длина ключа в битах) под руководством distributed. net. По-прежнему неприступными пока остаются RC5−32/12/K для K=9. 16. distributed. net стартовала проект RC5−72 для взлома RC5−32/12/9.

Как пишет автор алгоритма, «RC5 — это несколько различных алгоритмов», поскольку, помимо секретного ключа, в число параметров алгоритма входят следующие:

· размер слова w — RC5 шифрует блоками по два слова, допустимы значения w 16, 32 или 64, причем рекомендуется значение 32;

· количество раундов алгоритма R — в качестве значения допустимо любое целое число от 0 до 255 включительно;

· размер секретного ключа в байтах b — любое целое значение от 0 до 255 включительно.

По мнению автора алгоритма, переменные параметры расширяют сферу использования алгоритма, а также сильно сокращают издержки, если необходим переход на более сильный вариант алгоритма — в отличие от DES (основная проблема которого — короткий 56-битный ключ), в программной или аппаратной реализации RC5, поддерживающей переменные параметры, легко было бы заменить ключ более длинным, таким образом устранив проблему. Вот что пишет об этом Рон Ривест: «Фиксированные параметры могут быть не менее опасны [переменных], поскольку их нельзя улучшить при необходимости. Рассмотрим проблему DES: его ключ слишком короток, и нет простого способа увеличить его».

ПоказатьСвернуть
Заполнить форму текущей работой