Повышению доверия в интернете способствовало появление в 1995 году протокола SSL (Secure Socket Layer) от Netscape для защищённого обмена информацией. Его первая версия, SSL 1.0, осталась на компьютерах Netscape и никогда не была публично выпущена. SSL 2.0 просуществовал менее года, после чего был взломан и заброшен. Netscape разработали SSL 3.0, но параллельно компания Microsoft создала свою версию для Internet Explorer.
К 1999 году браузерные войны достигли апогея, и ситуация начала напоминать проприетарный кошмар. Тогда протокол решили сделать открытым и передать управление над ним IETF (Internet Engineering Task Force), переименовав его.
Возникновение TLS
Так появился TLS (Transport Layer Security), часто путаемый с SSL. Версии TLS 1.0 и 1.1 признаны устаревшими, сейчас используют только 1.2 и 1.3.
TLS обеспечивает три вещи при обмене данными:
- Конфиденциальность: никто не сможет прочитать перехваченные данные. Например, перехваченный рецепт крабсбургера будет выглядеть как набор нечитаемых символов.
- Целостность: никто не сможет изменить данные. Например, количество съеденных хинкалей останется неизменным.
- Аутентификация: сайт, с которым вы общаетесь, действительно тот, за кого себя выдаёт. Это обеспечивается сертификатом и центром сертификации. Любой надёжный сайт должен иметь сертификат, гарантирующий безопасность данных.
Для обеспечения этих условий в TLS используются механизмы шифрования: симметричное и ассиметричное.
- Симметричное шифрование: для шифрования и расшифровки используется один ключ. Это как сундучок на замке: ключ нужен как для закрытия, так и для открытия. Проблема в сложности безопасного обмена ключами.
- Ассиметричное шифрование: используются два ключа – публичный и приватный. Публичный ключ можно распространять свободно, а приватный нужно хранить в секрете. Данные шифруются публичным ключом получателя, а расшифровываются его приватным ключом.
Процесс шифрования в TLS
Рассмотрим процесс обмена данными между клиентом (браузером) и сервером (сайтом):
- Client Hello: Браузер отправляет запрос на установление безопасного соединения, указывая поддерживаемые версии TLS и алгоритмы шифрования.
- Server Hello: Сайт отвечает, выбирая версию TLS и алгоритм, отправляет свой сертификат и публичный ключ.
- Client Key Exchange: Браузер проверяет сертификат и генерирует общий секретный ключ (pre-master key), шифруя его публичным ключом сайта.
- Обмен ключами: Сайт расшифровывает pre-master key своим приватным ключом и генерирует сеансовый ключ (shared secret), которым будет шифроваться дальнейшее общение.
- Change Cipher Spec & Finished: Браузер шифрует тестовое сообщение сеансовым ключом, и сайт отвечает, подтверждая работу шифрования.
Весь процесс происходит за миллисекунды. Сеансовый ключ (симметричное шифрование) обменивается с помощью ассиметричного шифрования.
Центры сертификации
Сертификаты, которыми хвастаются сайты, выдаются центрами сертификации (Certificate Authority). Эти организации:
- Выпускают сертификаты.
- Подтверждают личность владельца сертификата.
- Подтверждают валидность сертификата.
Важна цепочка доверия. Сертификаты могут выпускать многие, но замочек в адресной строке вы увидите только если сертификат связан с доверенным центром сертификации или корневым центром (Root Certificate Authority). Браузер проверяет цепочку доверия, начиная с сертификата сайта и заканчивая корневым центром.