Протокол TLS/SSL
Введение
Основная функция протокола TLS состоит в обеспечении защиты и
целостности данных между двумя взаимодействующими приложениями, одно
из которых является клиентом, а другое – сервером.
Протокол TLS (Transport Layer Security) разрабатывался на основе
спецификации протокола SSL 3.0 (Secure Socket Layer), опубликованного
корпорацией Netscape. Различия между данным протоколом и SSL 3.0
несущественны, но важно заметить, что TLS 1.0 и SSL 3.0 несовместимы,
хотя в TLS 1.0 предусмотрен механизм, который позволяет реализациям TLS иметь обратную совместимость с SSL 3.0.
Перечислим задачи протокола TLS в порядке их приоритета:
- Криптографическая безопасность: TLS должен использоваться для
установления безопасного соединения между двумя участниками.
- Интероперабельность: независимые разработчики могут создавать
приложения, которые будут взаимодействовать по протоколу TLS, что
позволит устанавливать безопасные соединения.
- Расширяемость: TLS формирует общий каркас, в который могут быть
встроены новые алгоритмы открытого ключа и симметричного шифрования.
Это также избавляет от необходимости создавать новый протокол, что
сопряжено с опасностью появления новых слабых мест, и предотвращает
необходимость полностью реализовывать новую библиотеку безопасности.
- Относительная эффективность: криптографические операции
интенсивно используют ЦП, особенно операции с открытым ключом. Для
этого вводится понятие сессии, для которой определяются алгоритмы и
их параметры. В рамках одной сессии может быть создано несколько
соединений (например, ТСР). TLS позволяет кэшировать сессии для
уменьшения количества выполняемых действий при установлении
соединения. Это снижает нагрузку как на ЦП, так и на трафик.
Протокол состоит из двух уровней. Нижним уровнем, расположенным выше
некоторого надежного протокола (а именно, протокола ТСР) является протокол Записи. Протокол Записи обеспечивает безопасность
соединения, которая основана на следующих двух свойствах:
- Конфиденциальность соединения. Для защиты данных используется
один из алгоритмов симметричного шифрования. Ключ для этого алгоритма
создается для каждой сессии и основан на секрете, о котором
договариваются в протоколе Рукопожатия. Протокол Записи также может
использоваться без шифрования.
- Целостность соединения. Обеспечивается проверка целостности
сообщения с помощью МАС с ключом. Для вычисления МАС используются
безопасные хэш-функции SHA-1 и MD5. Протокол Записи может выполняться
без вычисления МАС, но обычно функционирует в этом режиме.
Протокол Записи используется для инкапсуляции различных протоколов
более высокого уровня. Одним из протоколов более высокого уровня
является протокол Рукопожатия, который использует протокол Записи в
качестве транспорта для ведения переговоров о параметрах
безопасности. Протокол Рукопожатия позволяет серверу и клиенту
аутентифицировать друг друга и договориться об алгоритмах шифрования
и криптографических ключах до того, как прикладной протокол,
выполняющийся на том же уровне, начнет передавать или принимать
первые байты данных.
Протокол Рукопожатия обеспечивает безопасность соединения, которая
основана на следующих свойствах:
- Участники аутентифицированы с использованием криптографии с
открытым ключом (т.е. с использованием алгоритмов RSA, DSS и т.д.).
Эта аутентификация может быть необязательной, но обычно требуется по
крайней мере для сервера.
- Переговоры о разделяемом секрете безопасны, т.е. этот общий
секрет невозможно подсмотреть.
- Переговоры о разделяемом секрете надежны, если выполнена
аутентификация хотя бы одной из сторон. В таком случае атакующий,
расположенный в середине соединения, не может модифицировать
передаваемый секрет незаметно для участников соединения.
Одно из преимуществ TLS состоит в том, что он независим от
прикладного протокола. Протоколы более высокого уровня могут
прозрачно располагаться выше протокола TLS.