Протоколы Диффи -- Хеллмана
Оригинальный протокол Диффи -- Хеллмана 
Исторически первый и наиболее известный протокол распределения ключей был предложен Диффи и Хеллманом в 1976 г. Пусть обоим участникам A и B известны некоторое большое простое число и некоторый порождающий группы (хорошо известно, что мультипликативная группа произвольного конечного поля циклическая). Параметры и могут быть выбраны, например, центром доверия. В роли параметра безопасности здесь выступает длина , а в роли пространства ключей -- группа . Протокол заключается в следующем: 
    1. A выбирает , вычисляет и посылает его B, сохраняя в секрете. 
    2. B выбирает , вычисляет и посылает его A, сохраняя в секрете. 
    3. A вычисляет . 
    4. B вычисляет . 
Ясно, что , так как и . Поэтому является искомым общим секретным ключом. 
Однако этот протокол в чистом виде абсолютно непригоден для практического применения. В самом деле, поскольку у участников протокола изначально нет никакой общей секретной информации, все сообщения, посылаемые в процессе выполнения протокола, не аутентифицированы. Это означает, что всякий злоумышленник, подключившийся к сети связи, может выполнить протокол с любым из ее абонентов от имени любого другого абонента и тем самым получить доступ к секретной информации. 
Решение обозначенной проблемы заключается в том, что протокол распределения ключей рассматривается как составная часть более общего протокола, обеспечивающего в том или ином виде аутентификацию участников. Известны два метода; оба основаны на наличии в сети связи центра доверия. Первый из них для протокола Диффи -- Хеллмана заключается в том, что шаги 1 и 2 не выполняются при каждом сеансе выполнения протокола, а заменяются следующей процедурой. При регистрации в центре доверия каждый абонент (скажем, A) выбирает (называемый секретным ключом A), вычисляет (открытый ключ A) и сообщает его центру доверия, сохраняя в секрете. После этого центр доверия помещает вместе с идентификатором A в некоторый сертифицированный справочник, доступный всем абонентам сети для чтения, но недоступный для записи. Теперь, если абоненты A и B желают выработать общий секретный ключ, они берут из этого справочника соответственно и и выполняют соответственно шаги 3 и 4 вышеуказанного протокола. Этот метод не позволяет противнику активно вмешиваться в выполнение протокола, но затрудняет обновление секретных ключей в случае их компрометации или разглашения общих секретных ключей, выработанных на прошлых сеансах выполнения протокола. Эта проблема может быть решена с помощью протоколов выработки сеансовых ключей, которые рассматриваются в следующем пункте. Второй метод аутентификации абонентов (основанный на идентификационной информации) будет рассмотрен ниже. 
Существует предположение, что для противника, знающего , , и , единственная возможность вычислить заключается в вычислении некоторого такого, что или (т. е. дискретном логарифмировании или по основанию ) и последующем возведении соответственно или в степень по модулю . Однако стойкость вышеуказанного протокола в предположении сложности дискретного логарифмирования доказана лишь при некоторых дополнительных условиях. Очевидно, что это предположение необходимо для стойкости данного протокола, так как если противник умеет вычислять дискретные логарифмы, то он сможет найти по , , и . 
Протоколы выработки сеансовых ключей 
Если каждый абонент помещает в сертифицированный справочник свою "заготовку" для выработки общих секретных ключей, как это было описано в предыдущем пункте, то секретный ключ, который может быть выработан двумя данными абонентами, определен однозначно. Но это означает, что в случае утери или компрометации секретного ключа оба абонента должны заменить свои заготовки в справочнике, что весьма неудобно, так как затрагивает их общие секретные ключи с любыми другими абонентами. Решение этой проблемы видится в использовании протоколов выработки сеансовых ключей. В таком протоколе абоненты записывают в справочник свои открытые ключи, которые используются для выработки сеансовых ключей. При этом утеря или компрометация сеансового ключа не должна компрометировать открытые ключи или требовать их замены. 
Предположим, что противнику известны, кроме транскрипции диалога законных участников в текущем сеансе выполнения протокола выработки сеансовых ключей, транскрипция диалога этих участников и соответствующий общий секретный ключ в некотором прошлом сеансе. В этом случае он может провести атаку, названную в работе Якоби  атакой с известным ключом (known key attack). Атаку с использованием только транскрипции диалога законных участников в текущем сеансе мы назовем атакой с известным шифртекстом. Приведен пример протокола типа Диффи -- Хеллмана, (гипотетически) стойкого против атаки с известным шифртекстом, но нестойкого против атаки с известным ключом (в случае пассивного противника). Существование таких протоколов названо в этой статье "парадоксом распределения ключей". 
В той же работе  предлагается модификация протокола типа Диффи -- Хеллмана по составному модулю, стойкость которой против атаки с известным ключом даже в случае активного противника такая же, как и стойкость исходного протокола против атаки с известным шифртекстом в случае пассивного противника. Пусть , где и  -- различные простые числа, -- модуль исходного протокола, а  -- его база. Считается, что и секретны (они могут быть выбраны центром доверия и храниться им в секрете), а и общедоступны. Предполагается также, что участники A и B имеют секретные ключи и соответственно и открытые ключи и соответственно. Модифицированный протокол заключается в следующем: 
    1. A выбирает , вычисляет и посылает его B, сохраняя в секрете. 
    2. B выбирает , вычисляет и посылает его A, сохраняя в секрете. 
    3. A вычисляет . 
    4. B вычисляет . 
Очевидно, что 

и 

Поэтому является искомым общим секретным ключом. 
Доказательство стойкости против атаки с известным ключом для этого протокола использует тот факт, что противник, не знающий секретных ключей, может сам генерировать информацию, имеющую то же самое распределение, что и возможные транскрипции диалога участников и соответствующие общие секретные ключи. 
Аналогичный протокол (использующий простой модуль и побитовое сложение по модулю 2 при вычислении и ) был предложен Госсом в работе. 
Протоколы, основанные на идентификационной информации 
Наряду с использованием сертифицированного справочника для аутентификации абонентов в протоколах распределения ключей используется также метод, основанный на идентификационной информации (identity-based). Каждый абонент A при регистрации в сети связи получает идентификатор и соответствующее ему значение , для вычисления которого по требуется инвертировать некоторую (предположительно одностороннюю) функцию. Идентификатор публикуется в общедоступном сертифицированном справочнике, а значение хранится абонентом A в секрете. В протоколе распределения ключей, основанном на идентификационной информации, абонент A использует при вычислении своего сообщения, а любой другой абонент, зная , может убедиться, что сообщение действительно пришло от A. 
Приведем описания двух протоколов, основанных на идентификационной информации. В них является подписью согласно некоторым схемам электронной подписи (см. гл. 4). 

Протокол Гюнтера
Пусть  -- большое простое число, а  -- некоторый порождающий группы , известные как центру доверия, так и всем абонентам сети связи. Центр доверия выбирает свой секретный ключ и сообщает абонентам открытый ключ . При регистрации абонента (скажем, A) центр доверия вычисляет подпись его идентификатора по схеме Эль Гамаля , т. е. и , где секретно, а  -- некоторая хэш-функция. После этого центр доверия передает (секретный ключ A) только абоненту A, а (открытый ключ A) помещает в общедоступный сертифицированный справочник. Теперь если абоненты A и B хотят выработать общий секретный ключ, они выполняют следующие действия: 
    1. A выбирает , вычисляет и посылает его вместе с участнику B, сохраняя в секрете. 
    2. B выбирает , вычисляет и посылает его вместе с участнику A, сохраняя в секрете. 
    3. A вычисляет . 
    4. B вычисляет . 
Из сравнений 

и 

следует, что является искомым общим секретным ключом. 

Протокол типа Диффи -- Хеллмана,
основанный на идентификационной информации
Описание этого протокола, предложенного в работе Окамото и Танаки , взято из работы Л. М. Ухлинова . Этот протокол разработан (и реализован) для интеллектуальных карточек. Пусть центром доверия выбраны различные большие простые числа и , числа и такие, что , и элемент достаточно большого порядка, где . Для каждого абонента A центр доверия вычисляет , где  -- идентификатор A, и сообщает , , и этому абоненту, сохраняя , и в секрете. Отметим, что является подписью по схеме RSA (см. главу 4, а также [RSA]). Считается также, что всем абонентам известна некоторая трехместная хэш-функция . Протокол заключается в следующем: 
    1. A выбирает , вычисляет , , , где  -- текущее время, и посылает , , , абоненту B, сохраняя в секрете. 
    2. B вычисляет и проверяет истинность сравнения . Если оно истинно, то сообщение, пришедшее от A, признается подлинным. В этом случае B выбирает , вычисляет , , , где  -- текущее время, и посылает , , , абоненту A, сохраняя в секрете. 
    3. A вычисляет и проверяет истинность сравнения . Если оно истинно, то сообщение, пришедшее от B, признается подлинным. В этом случае A вычисляет . 
    4. B вычисляет . 
Ясно, что . Поэтому является искомым общим секретным ключом