Изменения

Перейти к: навигация, поиск

SSL/TLS

4453 байта добавлено, 02:06, 12 декабря 2016
Основа TLS готова.
=Протоколы SSL и TLS=
'''SSL (Secure Sockets Layer)''' и '''TLS (Transport Level Security)''' {{---}} криптографические протоколы, обеспечивающие защищенную передачу данных в компьютерной сети. Они широко используются в веб-браузерах, а также при работе с электронной почтой, обмене мгновенными сообщениями и в IP-телефонии.
Соединение, защищенное протоколом TLS, обладает одним или несколькими следующими свойствами:
* ''Целостность'': каждое сообщение содержит код ('''Message Authentication Code, MAC'''), с помощью которого можно проверить, что данные не были изменены или потеряны в процессе передачи.
Протокол Так как большинство протоколов связи могут быть использованы как с TLS делится /SSL, так и без него, при установке соединения необходимо явно указать серверу, хочет ли клиент устанавливать TLS. Один способ добиться этого {{---}} использовать порт, по которому соединение всегда устанавливается с использованием TLS (например, 443 для HTTPS). Другой способ {{---}} использовать специальную команду серверу от клиента переключить соединение на два слоя: TLS Record и TLS Handshake(например, STARTTLS для протоколов электронной почты).
==Механизм работы протокола== Протокол TLS делится на два слоя: '''TLS Record''' и '''TLS Handshake'''. ====Подтверждение связи (handshake)====[[Файл:Handshake.png|border|right|Схема подтверждения связи]]
# Клиент посылает сообщение '''ClientHello''', указывающее версию SSL или TLS и поддерживаемые клиентом методы шифрования (англ. ''CipherSuite''). Это сообщение также содержит случайное число (набор байт), которое используется в последующих вычислениях. Протокол также позволяет указать поддерживаемые клиентом методы сжатия данных.
# Сервер отвечает сообщением '''ServerHello''', которое содержит метод шифрования, выбранный сервером из списка, предложенного клиентом, а также идентификатор сессии и еще одно случайное число. Также сервер посылает свой цифровой сертификат. Если серверу нужен сертификат для аутентификации клиента, на этом шаге он может послать клиенту запрос такого сертификата.
# На протяжении данной сессии клиент и сервер могут обмениваться сообщениями, зашифрованными секретным ключом.
=====Возобновление сессии=====
# Клиент посылает сообщение '''ClientHello''', используя ID сессии, которую нужно возобновить.
# Сервер проверяет, есть ли у него в кэше соответствующий идентификатор. Если есть и сервер способен возобновить сессию, он отсылает клиенту сообщение '''ServerHello''' с этим же ID сессии. Если нет, сервер генерирует новый ID сессии и выполняет процедуру handshake с клиентом.
# Передача данных по защищенному каналу возобновляется.
====Протокол записи====
Этот слой защищает данные с помощью ключей, полученных при подтверждении связи, и проверяет целостность и источник входящих сообщений. Он выполняет следующие функции:
* Разбиение исходящих сообщений на блоки нужного размера и "склеивание" входящих сообщений.
После обработки протоколом TLS Record зашифрованные данные передаются на слой TCP для передачи.
 
==Меры безопасности в TLS==
* Защита от downgrade-атаки {{---}} понижения версии протокола к предыдущей (менее защищённой) версии или менее надёжному алгоритму шифрования;
* Нумерация последовательных записей приложения и использование порядкового номера в коде аутентификации сообщения (MAC);
* Использование ключа в идентификаторе сообщения (только владелец ключа может сгенерировать код аутентификации сообщения).
* Сообщение, которым заканчивается подтверждение связи («Finished»), содержит хэш всех handshake-сообщений, отправленных обеими сторонами, что позволяет проверить подлинность выбранных параметров TLS-соединения.
* Псевдослучайная функция делит подаваемые ей на вход данные пополам, применяет к половинкам разные хэш-алгоритмы (MD5 и SHA-1), а затем XOR'ит результаты для получения MAC. Это повышает безопасность в случае, если в одном из алгоритмов обнаружится уязвимость.
 
==Ключевые отличия SSL и TLS==
* ''Аутентификация сообщений'': в TLS используется HMAC, работающий с любой хэш-функцией (а не только с MD5 или SHA, как в SSL).
* ''Генерация ключа'': в TLS при создании ключа используется псевдослучайная функция стандарта HMAC; в SSL {{---}} RSA, Diffie-Hellman или Fortezza/DMS.
* ''Проверка сертификата'': в SSL проверка требует передачи сложной последовательности сообщений; в TLS информация о проверке полностью передается в сообщениях во время handshake.
* ''Методы шифрования'': SSL поддерживает только алгоритмы RSA, Diffie-Hellman и Fortezza/DMS. В TLS отказались от поддержки Fortezza/DMS, но возможно добавление новых методов шифрования в последующих версиях.
 
== Источники информации ==
* [https://www.sans.org/reading-room/whitepapers/protocols/ssl-tls-beginners-guide-1029 SSL and TLS: A Beginner's Guide]
* [https://en.wikipedia.org/wiki/Transport_Layer_Security Wikipedia: Transport Layer Security]
* [https://msdn.microsoft.com/en-us/library/windows/desktop/aa380516(v=vs.85).aspx Microsoft Developer Resources: Transport Layer Security Protocol]
* [http://www.ibm.com/support/knowledgecenter/en/SSFKSJ_7.1.0/com.ibm.mq.doc/sy10630_.htm IBM Knowledge Center: Cryptographic security protocols: SSL and TLS]
74
правки

Навигация