webew
Войти » Регистрация
 
Протоколы

Безопасность передачи данных в сети Интернет

24 августа 2008, 19:19

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

Часть 1. Алгоритмы шифрования информации

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

1.1. Симметричные алгоритмы

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

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

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

В качестве примеров алгоритмов с симметричным ключом можно привести AES, DES и BlowFish.

1.2. Алгоритмы с открытым ключом

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

Ключи называются «открытый» и «закрытый» из-за их применения. Закрытый ключ, известен только одной стороне, в то время как открытый ключ доступен вообще всему миру.

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

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

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

Длина ключей алгоритмов с открытым ключом гораздо больше, чем длина ключей симметричных алгоритмов. В современном мире наиболее часто встречаются ключи длиной в 1024 бита и 2048 бит (128 и 256 байт, соответственно).

В качестве примеров алгоритмов с открытым ключом, можно привести DSA и RSA.

Часть 2. Обеспечение шифрованного канала

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

  1. Сторона А подключается к стороне Б;
  2. Сторона Б создает пару ключей (открытый и закрытый) и передает стороне А открытый ключ в незашифрованном виде (открытый ключ доступен всему миру);
  3. Сторона А создает симметричный ключ, шифрует его с помощью открытого ключа стороны Б и передает его стороне Б в зашифрованном виде (и, как Вы помните, информация, зашифрованная открытым ключом, может быть расшифрована только закрытым, который по сети не передавался);
  4. Теперь у обе стороны знают симметричный ключ и могут обмениваться зашифрованной информацией.

Часть 3. Аутентификация

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

Пусть так же, как в нашем примере, сторона А собирается передать информацию стороне Б, но соединение перехватывает злоумышленник З. Тогда общение может происходить приблизительно так:

  1. Сторона А пытается подключиться к Б, но соединение перехватывает З и А подключается к З;
  2. Сторона З создает пару ключей, передает открытый ключ А и инициализирует шифрованный канал к стороне А;
  3. Сторона З создает второе шифрованное соединение к стороне Б с помощью другого набора ключей;
  4. Когда одна из сторон А или Б передает информацию, З расшифровывает ее, зашифровывает другими ключами и передает второй стороне. В результате А и Б считают, что общаются по шифрованному каналу, но на самом деле злоумышленник имеет доступ к информации.

3.1. Третья сторона

Для того, чтобы избежать описанной атаки «человек посередине», стороне А всего лишь достаточно удостовериться в том, сторона Б — это действительно сторона Б, а не злоумышленник, который пытается выдать себя за сторону Б, то есть аутентифицировать сторону Б.

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

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

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

Часть 4. Проигрывание данных

Казалось бы, в схеме с аутентификацией есть всё, чтобы злоумышленник не получил доступа к зашифрованной информации. Часто, однако, злоумышленнику не нужна информация в открытом виде, чтобы устроить атаку на сервис. Самый простой способ атаковать сервис не зная данных — записать общение сторон в зашифрованном виде, а затем изобразить из себя сторону А, проигрывая зашифрованные данные. Очень часто такая атака (особенно проведенная во много потоков) может вызвать отказ в обслуживании.

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

Часть 5. Итоговый протокол и замечания

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

Как и раньше, сторона А — это подключающийся к серверу Б клиент.

  1. Клиент А соединяется с сервером Б;
  2. Сервер Б посылает клиенту А подписанный центром сертификации открытый ключ;
  3. Клиент А проверяет подпись;
  4. Клиент А создает симметричный ключ, шифрует его с помощью открытого ключа сервера Б и отправляет серверу Б;
  5. Сервер Б расшифровывает этот симметричный ключ своим закрытым ключом, создает новый сеансовый симметричный ключ и шифрует его с помощью ключа, полученного от клиента А;
  6. Полученный шифрованный ключ отсылается клиенту А, с этого момента устанавливается шифрованный канал с помощью симметричного ключа, созданного сервером Б.

© Все права на данную статью принадлежат порталу webew.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.
Другие статьи сходной тематики:
Highload++ 2011. Репортаж с места событий.
Добавить комментарий
NO USERPIC

AlexLov

Спасибо за статью.
Теперь мне стал значительно понятнее этот механизм, и то, почему фаерфокс каждый раз спрашивает принимать ли неизвестный сертификат или нет.
24.09.2008, 01:38
Ответить
NO USERPIC

Sergey_a

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

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

Очень хорошая многофункциональная программа, воплотившая в себе все достоинства аналогов.
07.03.2013, 18:01
Ответить

paulus

Смысл статьи состоит в том, чтобы добиться понимания, а не предложить реализацию протокола шифрования. Кроме того, CyberSafe шифрует файлы, а тут обсуждается сетевое шифрование.
08.03.2013, 01:18
Ответить
© 2007—2016 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100