Оглавление
20. Протокол SSH, SSL. 1
Многослойная среда 4
Цифровые сертификаты 4
Механизмы образования ключа для текущей сессии в SSL/TLS 5
Особенности шифрования 5
Хеширование 6
Уровень записи 6
56.Методы защиты информации в сетях GSM, алгоритмы A3, A5, A8 7
48. VLAN, определения, методы организации 8
51. XML. 10
SSH (англ. Secure Shell — «безопасная оболочка»[1]) — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов). Схож по функциональности с протоколами Telnet и rlogin, но, в отличие от них, шифрует весь трафик, включая и передаваемые пароли. SSH допускает выбор различных алгоритмов шифрования. SSH-клиенты и SSH-серверы доступны для большинства сетевых операционных систем.
SSH позволяет безопасно передавать в незащищённой среде практически любой другой сетевой протокол. Таким образом, можно не только удалённо работать на компьютере через командную оболочку, но и передавать по шифрованному каналу звуковой поток или видео (например, с веб-камеры)[2]. Также SSH может использовать сжатие передаваемых данных для последующего их шифрования, что удобно, например, для удалённого запуска клиентов X Window System.
Большинство хостинг-провайдеров за определённую плату предоставляет клиентам доступ к их домашнему каталогу по SSH. Это может быть удобно как для работы в командной строке, так и для удалённого запуска программ (в том числе графических приложений).
SSH — это протокол прикладного уровня. SSH-сервер обычно прослушивает соединения на TCP-порту 22. Спецификация протокола SSH-2 содержится в RFC 4251. Для аутентификации сервера в SSH используется протокол аутентификации сторон на основе алгоритмов электронно-цифровой подписи RSA или DSA, но допускается также аутентификация при помощи пароля (режим обратной совместимости с Telnet) и даже ip-адреса хоста (режим обратной совместимости с rlogin).
Аутентификация по паролю наиболее распространена. При каждом подключении подобно https вырабатывается общий секретный ключ для шифрования трафика.
При аутентификации по ключевой паре предварительно генерируется пара открытого и закрытого ключей для определённого пользователя. На машине, с которой требуется произвести подключение, хранится закрытый ключ, а на удалённой машине — открытый. Эти файлы не передаются при аутентификации, система лишь проверяет, что владелец открытого ключа также владеет и закрытым. При данном подходе, как правило, настраивается автоматический вход от имени конкретного пользователя в ОС.
Аутентификация по ip-адресу небезопасна, эту возможность чаще всего отключают.
Для создания общего секрета (сеансового ключа) используется алгоритм Диффи — Хеллмана (DH). Для шифрования передаваемых данных используется симметричное шифрование, алгоритмы AES, Blowfish или 3DES. Целостность передачи данных проверяется с помощью CRC32 в SSH1 или HMAC-SHA1/HMAC-MD5 в SSH2.
Для сжатия шифруемых данных может использоваться алгоритм LempelZiv (LZ77), который обеспечивает такой же уровень сжатия, что и архиватор ZIP. Сжатие SSH включается лишь по запросу клиента, и на практике используется редко.
Первая версия протокола, SSH-1, была разработана в 1995 году исследователем Тату Улёненом из Технологического университета Хельсинки (Финляндия). SSH-1 был написан для обеспечения большей конфиденциальности, чем протоколы rlogin, telnet и rsh. В 1996 году была разработана более безопасная версия протокола, SSH-2, несовместимая с SSH-1. Протокол приобрел ещё большую популярность, и к 2000 году у него было около двух миллионов пользователей. В настоящее время под термином «SSH» обычно подразумевается именно SSH-2, так как первая версия протокола ввиду существенных недостатков сейчас практически не применяется.
В 2006 году протокол был утвержден рабочей группой IETF в качестве Интернет‐стандарта.
Распространены две реализации SSH: частная коммерческая и бесплатная свободная. Свободная реализация называется OpenSSH. К 2006 году 80 % компьютеров сети Интернет использовало именно OpenSSH. Частная реализация разрабатывается организацией SSH Communications Security, которая является стопроцентным подразделением корпорации Tectia[3], она бесплатна для некоммерческого использования. Эти реализации содержат практически одинаковый набор команд.
Протокол SSH-1, в отличие от протокола telnet, устойчив к атакам прослушивания трафика («снифинг»), но неустойчив к атакам «человек посередине». Протокол SSH-2 также устойчив к атакам путём присоединения посередине (англ. session hijacking), так как невозможно включиться в уже установленную сессию или перехватить её.
Для предотвращения атак «человек посередине» при подключении к хосту, ключ которого ещё не известен клиенту, клиентское ПО показывает пользователю «слепок ключа» (англ. key fingerprint). Рекомендуется тщательно сверять показываемый клиентским ПО «слепок ключа» со слепком ключа сервера, желательно полученным по надёжным каналам связи или лично.
Поддержка SSH реализована во всех UNIX‑подобных системах, и на большинстве из них в числе стандартных утилит присутствуют клиент и сервер ssh. Существует множество реализаций SSH-клиентов и для не-UNIX ОС. Большую популярность протокол получил после широкого развития анализаторов трафика и способов нарушения работы локальных сетей, как альтернативное небезопасному протоколу Telnet решение для управления важными узлами.
Для работы по SSH нужен SSH-сервер и SSH-клиент. Сервер прослушивает соединения от клиентских машин и при установлении связи производит аутентификацию, после чего начинает обслуживание клиента. Клиент используется для входа на удалённую машину и выполнения команд.
Для соединения сервер и клиент должны создать пары ключей — открытых и закрытых — и обменяться открытыми ключами. Обычно используется также и пароль.
SSL (англ. Secure Sockets Layer — слой защищённых сокетов) — криптографический протокол, который подразумевает более безопасную связь. Он использует асимметричную криптографию для аутентификации ключей обмена, симметричное шифрование для сохранения конфиденциальности, коды аутентификации сообщений для целостности сообщений. Протокол широко использовался для обмена мгновенными сообщениями и передачи голоса через IP (англ. Voice over IP — VoIP) в таких приложениях, как электронная почта, интернет-факс и др. В 2014 году правительство США сообщило об уязвимости в текущей версии протокола[1]. SSL должен быть исключён из работы в пользу TLS (см. CVE-2014-3566).
Протокол SSL обеспечивает защищённый обмен данными за счёт двух следующих элементов:
Аутентификация
Шифрование
SSL использует асимметричную криптографию для аутентификации ключей обмена, симметричный шифр для сохранения конфиденциальности, коды аутентификации сообщений для целостности сообщений.
Протокол SSL предоставляет «безопасный канал», который имеет три основных свойства:
Канал является частным. Шифрование используется для всех сообщений после простого диалога, который служит для определения секретного ключа.
Канал аутентифицирован. Серверная сторона диалога всегда аутентифицируется, а клиентская делает это опционально.
Канал надёжен. Транспортировка сообщений включает в себя проверку целостности.
Преимуществом SSL является то, что он независим от прикладного протокола. Протоколы приложений (HTTP, FTP, TELNET и т. д.) могут работать поверх протокола SSL совершенно прозрачно, то есть SSL может согласовывать алгоритм шифрования и ключ сессии, а также аутентифицировать сервер до того, как приложение примет или передаст первый байт сообщения.
SSL использует среду с несколькими слоями, что обеспечивает безопасность обмена информацией. Конфиденциальность общения присутствует за счет того, что безопасное соединение открыто только целевым пользователям.
Протокол SSL размещается между двумя протоколами: протоколом, который использует программа-клиент (HTTP, FTP, LDAP, TELNET и т.д.) и транспортным протоколом TCP/IP. SSL защищает данные, выступая в роли фильтра для обеих сторон и передаёт их далее на транспортный уровень[4][5].
Работу протокола можно разделить на два уровня:
Слой протокола подтверждения подключения (Handshake Protocol Layer)
Слой протокола записи
Первый слой, в свою очередь, состоит из трёх подпротоколов:
Протокол подтверждения подключения (Handshake Protocol)
Протокол изменения параметров шифра (Cipher Spec Protocol)
Предупредительный протокол (Alert Protocol)
Протокол подтверждения подключения используется для согласования данных сессии между клиентом и сервером. К данным сессии относятся:
Идентификационный номер сессии
Сертификаты обеих сторон
Параметры алгоритма шифрования
Алгоритм сжатия информации
«Общий секрет» применён для создания ключей; открытый ключ
Протокол подтверждения подключения производит цепочку обмена данными, что в свою очередь начинает аутентификацию сторон и согласовывает шифрование, хеширование и сжатие. Следующий этап — аутентификация участников, которая осуществляется также протоколом подтверждения подключения.
Протокол изменения параметров шифра используется для изменения данных ключа (keyingmaterial) — информации, которая используется для создания ключей шифрования. Протокол состоит всего из одного сообщения, в котором сервер говорит, что отправитель хочет изменить набор ключей.
Предупредительный протокол содержит сообщение, которое показывает сторонам изменение статуса или сообщает о возможной ошибке. Обычно предупреждение отсылается тогда, когда подключение закрыто и получено неправильное сообщение, сообщение невозможно расшифровать или пользователь отменяет операцию.
Основная статья: Сертификат открытого ключа
Протокол SSL использует сертификаты для проверки принадлежности открытого ключа его реальному владельцу. Способы получения SSL-сертификата:
Использовать сертификат, выданный CA
Использовать самоподписанный сертификат
Использовать «пустой» сертификат
Самоподписанный сертификат — сертификат, созданный самим пользователем — в этом случае издатель сертификата совпадает с владельцем сертификата. «Пустой» сертификат — сертификат, содержащий фиктивную информацию, используемую в качестве временной для настройки SSL и проверки его функциональности в данной среде.
Среди сертификатов SSL выделяют сертификаты, подтверждающие домен (англ. Domain-validated certificate) и расширенной проверки. Последний связывает доменное имя с реальным физическим или юридическим лицом.
Существует 4 основных алгоритма для образования ключей: RSA, Fixed Diffie-Hellman, Ephemeral Diffie-Hellman, Anonymous Diffie-Hellman
RSA
Основная статья: RSA
При «утере» приватного ключа RSA криптоаналитик, получивший его, получает возможность расшифровать все записанные прошлые сообщения и будущие сообщения. Реализация обмена ключей в RSA является односторонней: вся необходимая информация для образования симметричного ключа, который создается на этапе рукопожатия, пересылается на сервер и шифруется публичным ключом сервера. Раскрытие приватного ключа даёт возможность узнать симметричный ключ данной сессии.
Diffie-Hellman
Основная статья: Протокол Диффи — Хеллмана
Механизм Fixed Diffie-Hellman использует постоянный публичный ключ, который прописан в сертификате сервера. Это также означает, что при каждом новом соединении клиент предоставляет свою часть ключа. После обмена ключами образуется новый симметричный ключ для обмена информацией для текущей сессии. При раскрытии приватного ключа сервера криптоаналитик может расшифровать ранее записанные сообщения, а также все будущие сообщения. Это становится возможным из-за самого механизма. Так как криптоаналитик знает приватный ключ сервера, он сможет узнать симметричный ключ каждой сессии, и даже тот факт, что механизм образования ключа является двусторонним, не поможет. Механизм Anonymous Diffie-Hellman не предоставляет гарантий секретности, ибо данные передаются незашифрованными. Единственный вариант, при котором гарантируется безопасность прошлых и будущих сообщений — Ephemeral Diffie-Hellman. Разница по сравнению с ранее рассмотренными методами заключается в том, что при каждом новом соединении сервером и клиентом создается одноразовый ключ. Таким образом, даже если криптоаналитику достанется текущий приватный ключ, он сможет расшифровать только текущую сессию, но не предыдущие или будущие сессии.
Существует два основных способа шифрования данных: симметричное шифрование (общий секретный ключ) и асимметричное шифрование (пара открытый/приватный ключ).
SSL использует как асимметричную, так и симметричную криптографию.
Суть асимметричного шифрования заключается в том, что используется пара ключей. Один из ключей называется открытым (как правило, он публикуется в самом сертификате владельца), а второй ключ называется приватным — он держится в тайне. Оба ключа используются в паре: открытый ключ используется для того, чтобы зашифровать данные, а приватный — для того, чтобы расшифровать их. Такая взаимосвязь позволяет делать две важные вещи.
Любой пользователь может получить открытый ключ и использовать его для шифрования данных, расшифровать которые сможет только пользователь, владеющий приватным ключом.
Если владелец ключевой пары "зашифрует" (подпишет) данные своим приватным ключом, то каждый сможет убедиться в том, что данные были отправлены именно владельцем приватного ключа и не были изменены третьей стороной. Именно это является основой цифровых подписей.
RSA — один из самых распространённых алгоритмов асимметричного шифрования.
При использовании симметричного шифрования один и тот же ключ используется как для шифрования, так и для расшифровывания данных. Если стороны хотят обменяться зашифрованными сообщениями в безопасном режиме, то у обеих сторон должны быть одинаковые симметричные ключи. Такой тип шифрования используется для большого объёма данных (так как симметричное шифрование является более быстрым). Обычно используются алгоритмы DES, 3-DES, RC2, RC4 и AES.
Протокол SSL использует шифрование с открытым ключом для взаимной аутентификации клиента и сервера (с помощью технологии цифровых подписей), а также для выработки сессионного ключа, который, в свою очередь, используется более быстрыми алгоритмами симметричной криптографии для шифрования большого объёма данных.
Основная статья: Хеширование
Хеш-значение является идентификатором сообщения, его размер меньше размера оригинального сообщения. Самыми известными хеш-алгоритмами являются MD5 (Message Digest 5), который создаёт 128-битное хеш-значение, SHA-1 (Secure Hash Algorithm), создающий 160-битное хеш-значение, SHA-2 и SHA-3. Результат работы алгоритма хеширования — значение, которое используется для проверки целостности передачи данных.
Протокол на уровне слоя записи получает зашифрованные данные от программы-клиента и передаёт их на транспортный слой. Протокол записи берёт данные, разбивает их на блоки и выполняет шифрование (расшифровывание) данных. При этом активно используется информация, которая была согласована во время подтверждения данных.
Протокол SSL позволяет использовать шифрование симметричным ключом, используя либо блочные, либо потоковые шифры. Обычно на практике применяются блочные шифры. Принцип работы блочного шифра заключается в отображении блока открытого текста в такой же блок шифрованного текста. Этот шифр можно представить в виде таблицы, содержащей 2128 строк, каждая строка содержит блок открытого текста M и соответствующий ему блок шифрованного текста C. Подобная таблица существует для каждого ключа.
Шифрование можно обозначить в виде функции
C = E(Key, M), где M — исходные данные, Key — ключ шифрования, С — зашифрованные данные.
Как правило, блоки имеют небольшой размер (обычно 16 байт), поэтому возникает вопрос: как зашифровать длинное сообщение? Первый режим для подобного шифрования называется ECB (Electronic Codebook) или режим простой замены. Его суть состоит в том, что мы разбиваем исходное сообщение на блоки (по те же 16 байт) и шифруем каждый блок отдельно. Однако данный режим применяет редко из-за проблемы сохранения статистических особенностей исходного текста: 2 одинаковых блока открытого текста после шифрования превратятся в два одинаковых блока зашифрованного текста. Для решения этой проблемы был разработан второй режим — CBC (Cipher-block chaining). В этом случае каждый новый блок шифротекста XOR’ится с предыдущим результатом шифрования. Первый блок XOR’ится c некоторым вектором инициализации (Initialization Vector, IV). Однако вся вышеизложенная теория разработана для одного большого объекта, в то время как SSL, являясь криптографическим протоколом, должен шифровать серию пакетов. В такой ситуации существует два способа применения CBC:
Обрабатывать каждое сообщение как отдельный объект, генерируя для него каждый раз новый вектор инициализации
Обрабатывать все сообщения как один большой объект, сохраняя режим CBC между ними. В таком случае в качестве вектора инициализации для сообщения n будет использоваться последний блок шифрования предыдущего сообщения (n-1)