16.4.3 Пример. Transport Layer Security - TLS - это криптографический протокол, который позволяет двум компьютерам безопасно общаться - то есть, каждый может ограничить отправителя и получателя сообщений друг от друга. На сегодняшний день это, пожалуй, наиболее часто используемый криптографический протокол в Интернете, поскольку он является стандартным протоколом, с помощью которого веб-браузеры надежно взаимодействуют с веб-серверами. Для полноты следует отметить, что TLS произошел от SSL (Secure Sockets Layer), который был разработан Netscape. Он подробно описано в https://tools.ietf.org/html/rfc5246.
TLS представляет собой сложный протокол с множеством опций. Здесь мы представляем только одну вариацию. Еще раз мы описываем его упрощенную и абстрактную форму, с тем чтобы сосредоточить внимание на ее использовании криптографических примитивов. То, что мы собираемся увидеть, - это сложный танец, в котором используется асимметричная криптография, так что клиент может противостоять ключу безопасности, который может использоваться для симметричного шифрования в течение двух лет - все это позволяет избежать атак «человек посередине» и повторных атак. Для дополнительной криптографической стойкости сеансовые ключи забываются, как только сеанс завершается. Другая связь между ними потребует генерации новых сеансовых ключей. Протокол TLS инициируется клиентом для безопасной связи с сервером. Предполагается, что до использования протокола сервер s получил сертификат, обозначаемый как certs, от центра сертификации CA. Этот сертификат представляет собой структуру, содержащую следующее:
Различные атрибуты (attrs) сервера, такие как его уникальное различающееся имя и его общее (DNS) имя
Идентификатор алгоритма асимметричного шифрования E () для сервера
Открытый ключ ke этого сервера
Интервал действия (интервал), в течение которого сертификат должен считаться действительным
Цифровая подпись a на вышеуказанной информации, сделанная CA - то есть a = SkCA (⟨attrs, Eke, interval⟩)
Кроме того, предполагается, что до использования протокола клиент получил общедоступный алгоритм проверки VkCA для CA. В случае Интернета браузер пользователя поставляется от его поставщика, содержащего алгоритмы проверки и открытый ключ, а также определенные центры сертификации. Пользователь может удалить их или добавить другие. Когда c подключается к s, он отправляет на сервер 28-байтовое случайное значение nc, которое отвечает собственным случайным значением ns плюс свои сертификаты (certs). Клиент проверяет, что VkCA (⟨attrs, Eke, interval⟩, a) = true и текущее время находится в интервале интервала действия. Если оба эти теста выполнены, сервер подтвердил свою личность. Затем клиент генерирует случайный 46-байтовый секретный pms премастера и отправляет cpms = Eke (pms) на сервер. Сервер восстанавливает pms = Dkd (cpms). Теперь и клиент, и сервер владеют nc, ns и pms, и каждый из них может вычислить общий 48-байтовый мастер-секрет (master secret) ms = H (nc, ns, pms). Только сервер и клиент могут вычислить mс, так как только они знают pms. Кроме того, зависимость ms от nc и ns гарантирует, что ms является новым значением, то есть ключом сеанса, который не использовался в предыдущем сеансе связи. На этом этапе клиент и сервер оба вычисляют следующие ключи из ms:
Асимметричный ключ шифрования k𝖼𝗋𝗒𝗉𝗍cs для шифрования сообщений от клиента к серверу
Асимметричный ключ шифрования k𝖼𝗋𝗒𝗉𝗍sc для шифрования сообщений от сервера к клиенту
AMAC ключ генерации k𝗆𝖺𝖼cs для генерации аутентификаторов сообщений от клиента к серверу
ключ генерации AMAC k𝗆𝖺𝖼sc для генерации аутентификаторов на сообщениях от сервера к клиенту.
Чтобы отправить сообщение m на сервер, клиент отправляет c = Ek𝖼𝗋𝗒𝗉𝗍s (⟨m, Sk𝗆𝖺𝖼ss (m)⟩). После получения c сервер восстанавливается
⟨m,a ⟩= Dk𝖼𝗋𝗒𝗉𝗍cs(c)
и принимает m, если Vk𝗆𝖺𝖼cs
(м, а) = правда.
Аналогично, чтобы отправить сообщение m клиенту, сервер отправляет
c = Ek𝖼𝗋𝗒𝗉𝗍sc (⟨m, Sk𝗆𝖺𝖼sc(М)⟩)
и клиент восстанавливается
⟨м, а⟩ = Dk𝖼𝗋𝗒𝗉𝗍sc(c)
и принимает m, если
Vk𝗆𝖺𝖼sc(м, а) = true.
Этот протокол может быть отменен в отношении получателей сообщений, полученных от клиента, которые генерируют pms, и тем, кто отправляет сообщения, принимаемые тем же клиентом. Точно так же клиент может ограничить получателей сообщений, которые он отправляет, и отправителей сообщений, которые он принимает, стороне, которая знает kd (то есть стороне, которая может расшифровать cpms). Во многих приложениях, таких как веб-транзакции, клиент должен проверить личность стороны, которая знает kd. Это одна из целей сертификатов certs. В частности, поле attrs содержит информацию о том, что клиент может использовать для определения личности - например, имя домена - сервера, с которым связывается. Для приложений, в которых серверу также требуется информация о клиенте, TLS поддерживает опцию, с помощью которой клиент может отправлять сертификат серверу. В дополнение к использованию Интернета, TLS предназначен для широкого спектра задач. Например, мы упомянем ранее, что IPSec широко используется для создания виртуальных частных сетей или VPS. IPSec хорош для двухточечного шифрования трафика, скажем, между двумя офисами компании. TLS VPN являются более гибкими, но не такими эффективными, поэтому их можно использовать между отдельными сотрудниками, работающими в удаленном режиме и корпоративным офисом.
Достарыңызбен бөлісу: |