Во-первых, пункт терминологии: то, что вы описываете, - это симметричное шифрование , а ключ, которым делятся участники, обычно называют секретным ключом; «Закрытый ключ» обычно означает ту часть ключа в криптографии с открытым ключом, которую знает только один участник.
Существует два способа распространения секретного ключа: его можно транспортировать физически безопасным способом или с использованием другой формы шифрования, обычно криптографии с открытым ключом.
Существуют способы обмена секретным ключом, которые не требуют секретного канала связи. Наиболее популярным является протокол обмена ключами Диффи-Хеллмана, Принцип Диффи-Хеллмана заключается в том, что каждый участник генерирует свою собственную пару ключей, и существует математическая операция, которая создает большое число из одного открытого ключа и одного закрытого ключа. Эта математическая операция обладает очень интересным свойством: большое число может быть создано из личного ключа Алисы и открытого ключа Боба или из личного ключа Боба и открытого ключа Алисы; вы получаете тот же номер в любом случае. Таким образом, Алиса и Боб обмениваются своими открытыми ключами, и обе стороны знают большое количество, которое затем можно использовать в качестве секретного ключа. Подслушиватель может обнаружить оба открытых ключа, но это невозможно… найти большое количество только из открытых ключей.
Обмен ключами Диффи-Хеллмана позволяет двум сторонам обмениваться секретами независимо от того, кто их слушает. Тем не менее, он не аутентифицирует Алису Бобу или наоборот. Поэтому он поддается атаке «человек посередине» : Мэллори выполняет обмен ключами с Алисой (которая считает, что она разговаривает с Бобом) и отдельно с Бобом (который считает, что он разговаривает с Алисой), и, таким образом, принимает решение или принимает решение. хотя бы знать секрет.
Когда злоумышленник может перехватывать и вводить сообщения, участникам требуется дополнительная криптография для аутентификации друг друга. (Пассивный злоумышленник фактически означает, что базовый транспортный протокол обеспечивает аутентификацию.) Каждый участник может легко узнать открытый ключ друг друга. Если Алиса знает открытый ключ Боба:
- Алиса может аутентифицировать Боба, отправив ему запрос: случайное значение ( одноразовый номер ), зашифрованное открытым ключом Боба. Если Боб сможет расшифровать это значение и отправить его обратно, Алиса знает, что она действительно разговаривает с Бобом.
- Боб может аутентифицироваться с Алисой, отправив ей сообщение, подписанное его открытым ключом. Алиса проверяет подпись, чтобы убедиться, что она действительно разговаривает с Бобом.
Существует много вариантов, в которых используется один из этих методов (или еще один вариант) в одном направлении и тот же или другой метод в другом направлении, или которые аутентифицируются только в одном направлении. Например, SSL / TLS (уровень криптографии для многих протоколов, таких как HTTPS, SMTPS, IMAPS и т. Д.), Может использовать несколько различных комбинаций шифров и обычно аутентифицирует сервер на клиенте, но может также дополнительно аутентифицировать клиента. Диффи-Хеллман медлителен и громоздок для этого приложения; самый распространенный алгоритм с открытым ключом - это RSA .
Конечно, Алиса и Боб могут не знать открытый ключ друг друга заранее. Таким образом, они вместо этого полагаются на цепочку доверия: Боб отправляет Алисе свой открытый ключ вместе с подписанным заявлением третьей стороны, подтверждающим, что этот ключ действительно является открытым ключом Боба. Это подписанное заявление называется сертификатом, а третья сторона является центром сертификации . Третья сторона может быть известна Бобу, или ее личность может быть подтверждена четвертой стороной, и так далее. В конце концов, эта цепочка доверия (… ваучеры для Доминика, ваучеры для Чарли, который поручается за Боба) должна достигнуть некоторой стороны Рона, которой Боб уже доверяет, то есть Боб имеет открытый ключ Рона и доверяет Рону только подписывать действительные сертификаты.
Существуют протоколы, которые не основаны на криптографии с открытым ключом. В частности, протокол Kerberos используется как в сетях на основе Unix, так и на основе Windows для установления соединений между клиентом и сервером. Kerberos использует центральный сервер аутентификации, называемый центром распространения ключей (KDC). KDC должен хранить пароль пользователя в базе данных, и клиент обычно запрашивает пароль у пользователя. Чтобы избежать раскрытия пароля, протокол не использует пароль напрямую, а использует криптографический хеш или, в более общем случае, функцию получения ключа, применяемую к паролю.
С помощью этого общего секрета клиент и KDC устанавливают безопасный канал, и KDC отправляет клиенту «билет». Билет содержит сеансовый ключ (то есть вновь сгенерированный секретный ключ), а также копию ключа, зашифрованного другим симметричным ключом, совместно используемым между KDC и сервером, с которым клиент хочет связаться. Затем клиент пересылает эту зашифрованную копию на сервер. Сервер расшифровывает это сообщение, чтобы получить ключ сеанса, и генерирует одноразовый номер, который он шифрует с помощью ключа сеанса и отправляет обратно клиенту. Затем клиент инициирует безопасный канал с сервером, зашифрованный с помощью ключа сеанса, и начинает с показа, что он может расшифровать одноразовый номер: это аутентифицирует клиента на сервере. Установление сеанса Kerberos является вариантом протокола Нидхэма-Шредера .
¹ В том смысле, что криптографы очень старались, но лучший способ, который они нашли, - это недостижимая вычислительная мощность.