Что такое набор шифров
Набор шифров TLS — это именованный пакет криптографических решений, о которых клиент и сервер договариваются во время рукопожатия. Одно имя вроде TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 упаковывает несколько независимых решений в один идентификатор: как обе стороны согласуют общий секрет, как сервер доказывает, кто он, какой алгоритм шифрует данные приложения и как эти данные защищены от подмены.
У каждого зарегистрированного набора есть также двухбайтовая кодовая точка, назначенная . Имя выше — это 0xC02F на линии. Рукопожатие никогда не отправляет текстовое имя; оно отправляет два байта. Имена существуют для людей, и соглашений об именах больше одного — частый источник путаницы.
Задачи, которые описывает набор
Для TLS 1.2 и более ранних версий набор обозначает до пяти вещей:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
| | | | | |
| | | | | +-- MAC / PRF hash: SHA-256
| | | | +------ mode of operation: GCM (an AEAD mode)
| | | +---------- cipher key size: 128-bit
| | +-------------- bulk cipher: AES
| +----------------------- authentication: RSA
+----------------------------- key exchange: ECDHE
Обмен ключами — это то, как обе стороны устанавливают общий секрет. ECDHE — это эфемерный эллиптический Диффи-Хеллман, дающий прямую секретность. Другие значения, которые вы увидите, — DHE (эфемерный Диффи-Хеллман над конечным полем), RSA (статический транспорт ключа , без прямой секретности) и PSK (предварительно разделённый ключ).
Аутентификация — это то, как сервер (а иногда и клиент) доказывает свою личность, почти всегда закрытым ключом, стоящим за его сертификатом. RSA и ECDSA — обычные значения. Когда набор использует статический RSA для обмена ключами, тот же ключ RSA выполняет обе задачи, поэтому имя указывает RSA лишь один раз.
Блочный шифр и длина ключа — это симметричный алгоритм, который шифрует реальный трафик после завершения рукопожатия. Преобладают AES_128 и AES_256; CHACHA20 — обычная альтернатива на устройствах без аппаратного .
Режим превращает блочный шифр в нечто, способное шифровать поток записей. GCM, CCM и CHACHA20_POLY1305 — это режимы , которые сами заботятся о целостности. CBC — более старый режим, которому нужен отдельный MAC.
Хеш MAC или — это последний токен. В наборе это хеш , аутентифицирующий каждую запись. В наборе AEAD шифр уже обеспечивает целостность, поэтому завершающий хеш вместо этого обозначает PRF, которую рукопожатие использует для вывода ключей (SHA256 или SHA384).
Чтение в обратном порядке
Зная грамматику, вы сможете прочитать любой набор TLS 1.2 задом наперёд с одного взгляда. TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 — это эфемерный Диффи-Хеллман над конечным полем для обмена ключами, RSA для аутентификации, AES с 256-битным ключом в режиме и -384 в качестве PRF рукопожатия. Поскольку GCM — это AEAD, отдельного MAC нет.
TLS_RSA_WITH_AES_128_CBC_SHA — предостерегающая противоположность: статический транспорт ключа RSA без прямой секретности, AES-128 в режиме CBC и MAC на HMAC-SHA1. Всё в нём — наследие прошлого, и поэтому IANA теперь помечает его как не советуемый.
Один набор, три имени
То же 0xC02F появляется под тремя соглашениями:
IANA: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
OpenSSL: ECDHE-RSA-AES128-GCM-SHA256
GnuTLS: TLS_ECDHE_RSA_AES_128_GCM_SHA256
Имя IANA — это стандарт реестра. OpenSSL использует дефисы, отбрасывает WITH и пишет AES128 одним токеном, и поэтому конфигурация OpenSSL и захват пакетов могут казаться противоречивыми, хотя называют один и тот же набор. Декодер принимает все три формы, а также сырую кодовую точку, и показывает остальные.
Декодировать — не значит одобрять
Чтение набора говорит, что он сделал бы, а не то, стоит ли вам его использовать. Имя может быть совершенно правильно построенным и всё же описывать RC4, анонимный обмен ключами или ключи экспортного класса. Декодер сочетает структурный разбор с оценкой безопасности и независимой рекомендацией IANA, чтобы здорового вида имя с фатальным изъяном не проскользнуло. Сопутствующие статьи рассматривают, что делает набор современным: AEAD вместо CBC и прямую секретность в обмене ключами.
Чтобы увидеть, куда на проводе на самом деле попадает каждая часть набора, The Illustrated TLS 1.2 Connection и The Illustrated TLS 1.3 Connection разбирают настоящие handshake байт за байтом — один для длинных составных имён, другой для коротких современных.