Обмен ключами Диффи–Хеллмана ( DH ) [nb 1] — это математический метод безопасной генерации симметричного криптографического ключа по открытому каналу, один из первых протоколов с открытым ключом , задуманный Ральфом Мерклем и названный в честь Уитфилда Диффи и Мартина Хеллмана . [1] [2] DH — один из самых ранних практических примеров обмена открытыми ключами, реализованных в области криптографии. Опубликованная в 1976 году Диффи и Хеллманом, это самая ранняя публично известная работа, в которой была предложена идея закрытого ключа и соответствующего открытого ключа.
Традиционно, для безопасной зашифрованной связи между двумя сторонами требовалось, чтобы они сначала обменялись ключами с помощью некоторых безопасных физических средств, таких как бумажные списки ключей, доставленные доверенным курьером . Метод обмена ключами Диффи-Хеллмана позволяет двум сторонам, которые не имеют никаких предварительных знаний друг о друге, совместно установить общий секретный ключ по незащищенному каналу . Затем этот ключ можно использовать для шифрования последующих сообщений с помощью симметричного шифра .
Алгоритм Диффи-Хеллмана используется для защиты различных интернет- сервисов. Однако исследование, опубликованное в октябре 2015 года, показывает, что параметры, используемые для многих приложений DH Internet в то время, недостаточно сильны, чтобы предотвратить взлом со стороны очень хорошо финансируемых злоумышленников, таких как службы безопасности некоторых стран. [3]
Схема была опубликована Уитфилдом Диффи и Мартином Хеллманом в 1976 году [2] , но в 1997 году выяснилось, что Джеймс Х. Эллис , [4] Клиффорд Кокс и Малкольм Дж. Уильямсон из GCHQ , британского агентства радиотехнической разведки, ранее, в 1969 году [5], показали , как можно реализовать криптографию с открытым ключом. [6]
Хотя обмен ключами Диффи-Хеллмана сам по себе является неаутентифицированным протоколом согласования ключей , он обеспечивает основу для множества аутентифицированных протоколов и используется для обеспечения прямой секретности в эфемерных режимах TLS ( называемых EDH или DHE в зависимости от набора шифров ).
Вскоре за этим методом последовал RSA — реализация криптографии с открытым ключом, использующая асимметричные алгоритмы.
Истекший патент США 4,200,770 [7] от 1977 года описывает алгоритм, который теперь является общественным достоянием . Он приписывает Хеллману, Диффи и Мерклу звание изобретателей.
В 2006 году Хеллман предложил назвать алгоритм обмена ключами Диффи–Хеллмана–Меркла в знак признания вклада Ральфа Меркла в изобретение криптографии с открытым ключом (Хеллман, 2006), написав:
Система... с тех пор стала известна как обмен ключами Диффи–Хеллмана. Хотя эта система была впервые описана в статье Диффи и мной, это система распределения открытых ключей, концепция, разработанная Мерклем, и, следовательно, ее следует называть «обмен ключами Диффи–Хеллмана–Мерклем», если с ней нужно ассоциировать имена. Я надеюсь, что эта небольшая кафедра может помочь в этом стремлении признать равный вклад Мерклемма в изобретение криптографии с открытым ключом. [8]
Обмен ключами Диффи–Хеллмана устанавливает общий секрет между двумя сторонами, который может использоваться для секретной связи для обмена данными через публичную сеть. Аналогия иллюстрирует концепцию обмена открытыми ключами с использованием цветов вместо очень больших чисел:
Процесс начинается с того, что две стороны, Алиса и Боб , публично договариваются о произвольном начальном цвете, который не нужно держать в секрете. В этом примере цвет — желтый. Каждый человек также выбирает секретный цвет, который они держат при себе — в данном случае красный и голубой. Важнейшей частью процесса является то, что Алиса и Боб каждый смешивают свой собственный секретный цвет вместе с их общим цветом, в результате чего получаются оранжево-коричневые и светло-голубые смеси соответственно, а затем публично обмениваются двумя смешанными цветами. Наконец, каждый из них смешивает цвет, полученный от партнера, со своим собственным личным цветом. Результатом является конечная цветовая смесь (в данном случае желто-коричневая), которая идентична конечной цветовой смеси их партнера.
Если бы третья сторона прослушала обмен, она бы знала только общий цвет (желтый) и первые смешанные цвета (оранжево-коричневый и светло-голубой), но ей было бы очень трудно узнать окончательный секретный цвет (желто-коричневый). Возвращаясь к аналогии с реальным обменом, использующим большие числа, а не цвета, это определение является вычислительно дорогим. Это невозможно вычислить за практическое количество времени даже для современных суперкомпьютеров .
Простейшая и оригинальная реализация [2] , позже формализованная как конечное поле Диффи–Хеллмана в RFC 7919 [9] , протокола использует мультипликативную группу целых чисел по модулю p , где p — простое число , а g — примитивный корень по модулю p . Эти два значения выбраны таким образом, чтобы гарантировать, что результирующий общий секрет может принимать любое значение от 1 до p –1. Вот пример протокола, где несекретные значения показаны синим цветом , а секретные — красным .
И Алиса, и Боб пришли к одинаковым значениям, потому что по модулю p,
А точнее,
Только a и b хранятся в секрете. Все остальные значения – p , g , g a mod p и g b mod p – отправляются в открытом виде. Сила схемы заключается в том, что g ab mod p = g ba mod p требует чрезвычайно много времени для вычисления любым известным алгоритмом только на основе знания p , g , g a mod p и g b mod p . Такая функция, которую легко вычислить, но трудно инвертировать, называется односторонней функцией . Как только Алиса и Боб вычислят общий секрет, они могут использовать его в качестве ключа шифрования, известного только им, для отправки сообщений по одному и тому же открытому каналу связи.
Конечно, для того, чтобы сделать этот пример безопасным, понадобятся гораздо большие значения a , b , и p , поскольку существует только 23 возможных результата n mod 23. Однако, если p является простым числом, состоящим по крайней мере из 600 цифр, то даже самые быстрые современные компьютеры, использующие самый быстрый известный алгоритм, не смогут найти заданные только g , p и g a mod p . Такая задача называется задачей дискретного логарифма . [3] Вычисление g a mod p известно как модульное возведение в степень и может быть выполнено эффективно даже для больших чисел. Обратите внимание, что g совсем не обязательно должно быть большим, и на практике обычно является небольшим целым числом (например, 2, 3, ...).
На диаграмме ниже изображено, кто знает что, опять же, несекретные значения синим цветом , а секретные — красным . Здесь Ева — подслушиватель — она наблюдает за тем, что передается между Алисой и Бобом, но она не меняет содержание их сообщений.
Теперь s — это общий секретный ключ, и он известен как Алисе, так и Бобу, но не Еве. Обратите внимание, что Еве не нужно вычислять AB , который равен g a + b mod p .
Примечание: Алисе должно быть сложно найти закрытый ключ Боба, а Бобу — закрытый ключ Алисы. Если Алисе несложно найти закрытый ключ Боба (или наоборот), то подслушиватель, Ева , может просто подставить свою собственную пару закрытый/открытый ключ, вставить открытый ключ Боба в свой закрытый ключ, создать поддельный общий секретный ключ и найти закрытый ключ Боба (и использовать его для поиска общего секретного ключа). Ева может попытаться выбрать пару открытый/закрытый ключ, которая облегчит ей задачу найти закрытый ключ Боба.
Вот более общее описание протокола: [10]
Теперь и Алиса, и Боб владеют элементом группы g ab = g ba , который может служить общим секретным ключом. Группа G удовлетворяет требуемому условию для безопасной связи , пока не существует эффективного алгоритма для определения g ab по данным g , g a и g b .
Например, протокол Диффи–Хеллмана на эллиптической кривой — это вариант, который представляет элемент G как точку на эллиптической кривой, а не как целое число по модулю n. Также были предложены варианты, использующие гиперэллиптические кривые . Обмен ключами суперсингулярной изогении — это вариант Диффи–Хеллмана, который был разработан для защиты от квантовых компьютеров , но был взломан в июле 2022 года. [11]
Используемые ключи могут быть либо эфемерными, либо статическими (долгосрочными), но могут быть даже смешанными, так называемыми полустатическими DH. Эти варианты имеют разные свойства и, следовательно, разные варианты использования. Обзор многих вариантов, а также некоторые обсуждения можно найти, например, в NIST SP 800-56A. [12] Базовый список:
Можно использовать эфемерные и статические ключи в одном соглашении о ключах для обеспечения большей безопасности, как, например, показано в NIST SP 800-56A, но их также можно объединить в одном обмене ключами DH, который тогда называется тройным DH (3-DH).
В 1997 году Саймон Блейк-Уилсон, Дон Джонсон и Альфред Менезес предложили своего рода тройной DH [13] , который был улучшен К. Кудлой и К. Г. Патерсоном в 2005 году [14] и показал свою безопасность.
Долгосрочные секретные ключи Алисы и Боба обозначаются как a и b соответственно, с открытыми ключами A и B , а также парами эфемерных ключей x, X и y, Y. Тогда протокол будет следующим:
Долгосрочные открытые ключи должны быть каким-то образом переданы. Это можно сделать заранее в отдельном, доверенном канале, или открытые ключи можно зашифровать с использованием некоторого частичного соглашения о ключах для сохранения анонимности. Для получения дополнительных подробностей, а также других улучшений, таких как защита сторонних каналов или явное подтверждение ключа , а также ранние сообщения и дополнительная аутентификация пароля, см., например, патент США «Расширенное модульное рукопожатие для соглашения о ключах и необязательной аутентификации». [15]
X3DH изначально был предложен как часть алгоритма Double Ratchet, используемого в Signal Protocol . Протокол обеспечивает прямую секретность и криптографическую отрицаемость. Он работает на эллиптической кривой. [16]
Протокол использует пять открытых ключей. У Алисы есть идентификационный ключ IK A и эфемерный ключ EK A . У Боба есть идентификационный ключ IK B , подписанный предварительный ключ SPK B и одноразовый предварительный ключ OPK B . [16] Боб сначала публикует свои три ключа на сервере, который Алиса загружает и проверяет подпись. Затем Алиса инициирует обмен с Бобом. [16] OPK необязателен. [16]
Соглашение о ключах Диффи–Хеллмана не ограничивается согласованием ключа, совместно используемого только двумя участниками. Любое количество пользователей может принять участие в соглашении, выполняя итерации протокола соглашения и обмениваясь промежуточными данными (которые сами по себе не должны храниться в секрете). Например, Алиса, Боб и Кэрол могут участвовать в соглашении Диффи–Хеллмана следующим образом, при этом все операции считаются по модулю p :
Подслушиватель смог увидеть g a mod p , g b mod p , g c mod p , g ab mod p , g ac mod p и g bc mod p , но не может использовать ни одну из этих комбинаций для эффективного воспроизведения g abc mod p .
Чтобы распространить этот механизм на более крупные группы, необходимо соблюдать два основных принципа:
Эти принципы оставляют открытыми различные варианты выбора порядка, в котором участники вносят вклад в ключи. Самое простое и очевидное решение — расположить N участников по кругу и заставить N ключей вращаться по кругу, пока в конечном итоге каждый ключ не будет внесен всеми N участниками (заканчивающимися его владельцем) и каждый участник не внесет вклад в N ключей (заканчивающимися своим собственным). Однако для этого требуется, чтобы каждый участник выполнил N модульных возведений в степень.
Выбрав более желательный порядок и полагаясь на тот факт, что ключи могут дублироваться, можно сократить количество модульных возведений в степень, выполняемых каждым участником, до log 2 ( N ) + 1 , используя подход в стиле «разделяй и властвуй» , приведенный здесь для восьми участников:
После завершения этой операции все участники будут обладать секретом g abcdefgh , но каждый участник выполнит только четыре модульных возведения в степень, а не восемь, как подразумевает простая круговая структура.
Протокол считается защищенным от подслушивания, если G и g выбраны правильно. В частности, порядок группы G должен быть большим, особенно если одна и та же группа используется для больших объемов трафика. Подслушивающему необходимо решить задачу Диффи–Хеллмана, чтобы получить g ab . В настоящее время это считается сложным для групп, порядок которых достаточно велик. Эффективный алгоритм для решения задачи дискретного логарифма облегчил бы вычисление a или b и решение задачи Диффи–Хеллмана, что делает эту и многие другие криптосистемы с открытым ключом небезопасными. Поля с малой характеристикой могут быть менее защищенными. [17]
Порядок G должен иметь большой простой множитель , чтобы предотвратить использование алгоритма Полига–Хеллмана для получения a или b . По этой причине простое число Софи Жермен q иногда используется для вычисления p = 2 q + 1 , называемое безопасным простым числом , поскольку тогда порядок G делится только на 2 и q . Иногда для генерации подгруппы порядка q группы G выбирается g , а не G , так что символ Лежандра g a никогда не раскрывает младший бит a . Протокол, использующий такой выбор, — это, например, IKEv2 . [ 18]
Генератор g часто представляет собой небольшое целое число, например 2. Из-за случайной самоприводимости задачи дискретного логарифмирования небольшое число g столь же безопасно, как и любой другой генератор той же группы.
Если Алиса и Боб используют генераторы случайных чисел , выходные данные которых не являются полностью случайными и могут быть в некоторой степени предсказаны, то подслушать их становится гораздо проще.
В оригинальном описании обмен Диффи-Хеллмана сам по себе не обеспечивает аутентификацию взаимодействующих сторон и может быть уязвим для атаки «человек посередине» . Мэллори (активный злоумышленник, выполняющий атаку «человек посередине») может установить два отдельных обмена ключами, один с Алисой, а другой с Бобом, эффективно маскируясь под Алису для Боба, и наоборот, что позволяет ей расшифровывать, а затем повторно шифровать сообщения, передаваемые между ними. Обратите внимание, что Мэллори должна быть в середине с самого начала и продолжать быть таковой, активно расшифровывая и повторно шифруя сообщения каждый раз, когда Алиса и Боб общаются. Если она прибудет после того, как ключи были сгенерированы, а зашифрованный разговор между Алисой и Бобом уже начался, атака не будет успешной. Если она когда-либо отсутствует, ее предыдущее присутствие тогда раскрывается Алисе и Бобу. Они будут знать, что все их личные разговоры были перехвачены и декодированы кем-то в канале. В большинстве случаев это не поможет им получить закрытый ключ Мэллори, даже если она использовала один и тот же ключ для обоих обменов.
Метод аутентификации общающихся сторон друг с другом обычно необходим для предотвращения этого типа атак. Варианты протокола Диффи-Хеллмана, такие как протокол STS , могут использоваться вместо этого, чтобы избежать этих типов атак.
В CVE , выпущенном в 2021 году ( CVE-2002-20001 ), раскрыта атака типа «отказ в обслуживании» (DoS) против вариантов протокола, использующих эфемерные ключи, называемая атакой D(HE)at. [19] Атака использует то, что обмен ключами Диффи–Хеллмана позволяет злоумышленникам отправлять произвольные числа, которые на самом деле не являются открытыми ключами, что запускает дорогостоящие вычисления модульного возведения в степень на стороне жертвы. В другом выпущенном CVE раскрыто, что реализации обмена ключами Диффи–Хеллмана могут использовать длинные закрытые экспоненты ( CVE-2022-40735 ), которые, как утверждается, делают вычисления модульного возведения в степень неоправданно дорогими [20] или могут излишне проверять открытый ключ партнера ( CVE-2024-41996 ), что имеет такие же требования к ресурсам, как и вычисление ключа с использованием длинной экспоненты. [21] Злоумышленник может использовать обе уязвимости одновременно.
Алгоритм решета числового поля , который, как правило, является наиболее эффективным при решении задачи дискретного логарифма , состоит из четырех вычислительных шагов. Первые три шага зависят только от порядка группы G, а не от конкретного числа, конечный логарифм которого требуется. [22] Оказывается, что большая часть интернет-трафика использует одну из нескольких групп, имеющих порядок 1024 бит или меньше. [3] Предварительно вычисляя первые три шага решета числового поля для наиболее распространенных групп, злоумышленнику нужно выполнить только последний шаг, который намного менее затратен в вычислительном отношении, чем первые три шага, чтобы получить определенный логарифм. Атака Logjam использовала эту уязвимость для компрометации различных интернет-сервисов, которые позволяли использовать группы, порядок которых был 512-битным простым числом, так называемым экспортным классом . Авторам потребовалось несколько тысяч ядер ЦП в течение недели для предварительного вычисления данных для одного 512-битного простого числа. После этого отдельные логарифмы можно было решать примерно за минуту, используя два 18-ядерных процессора Intel Xeon. [3]
По оценкам авторов атаки Logjam, гораздо более сложные предварительные вычисления, необходимые для решения задачи дискретного логарифма для 1024-битного простого числа, обойдутся примерно в 100 миллионов долларов, что вполне соответствует бюджету крупного национального разведывательного агентства, такого как Агентство национальной безопасности США (АНБ). Авторы Logjam предполагают, что предварительные вычисления для широко используемых 1024-битных простых чисел DH стоят за утверждениями в просочившихся документах АНБ о том, что АНБ способно взломать большую часть современной криптографии. [3]
Чтобы избежать этих уязвимостей, авторы Logjam рекомендуют использовать криптографию на основе эллиптических кривых , для которой не известно ни одной похожей атаки. В противном случае они рекомендуют, чтобы порядок p группы Диффи–Хеллмана был не менее 2048 бит. Они оценивают, что предварительные вычисления, необходимые для 2048-битного простого числа, в 10 9 раз сложнее, чем для 1024-битных простых чисел. [3]
Были предложены схемы шифрования с открытым ключом, основанные на обмене ключами Диффи–Хеллмана. Первой такой схемой является шифрование Эль-Гамаля . Более современный вариант — Интегрированная схема шифрования .
Протоколы, которые достигают прямой секретности, генерируют новые пары ключей для каждого сеанса и отбрасывают их в конце сеанса. Обмен ключами Диффи-Хеллмана часто используется для таких протоколов из-за его быстрой генерации ключей.
Когда Алиса и Боб делятся паролем, они могут использовать форму соглашения о ключах с аутентификацией паролем (PK) Диффи-Хеллмана для предотвращения атак типа «человек посередине». Одна из простых схем заключается в сравнении хеша s, объединенного с паролем, вычисленным независимо на обоих концах канала. Особенностью этих схем является то, что злоумышленник может проверить только один конкретный пароль на каждой итерации с другой стороной, и поэтому система обеспечивает хорошую безопасность с относительно слабыми паролями. Этот подход описан в Рекомендации МСЭ-Т X.1035 , которая используется стандартом домашних сетей G.hn.
Примером такого протокола является протокол Secure Remote Password .
Также возможно использовать Диффи-Хеллмана как часть инфраструктуры открытого ключа , позволяя Бобу шифровать сообщение так, что только Алиса сможет его расшифровать, без какой-либо предварительной коммуникации между ними, кроме как Боб, имеющий доверенное знание открытого ключа Алисы. Открытый ключ Алисы — . Чтобы отправить ей сообщение, Боб выбирает случайное b , а затем отправляет Алисе (незашифрованное) вместе с сообщением, зашифрованным симметричным ключом . Только Алиса может определить симметричный ключ и, следовательно, расшифровать сообщение, поскольку только у нее есть a (закрытый ключ). Предварительно общий открытый ключ также предотвращает атаки типа «человек посередине».
На практике Диффи-Хеллмана таким образом не используется, поскольку RSA является доминирующим алгоритмом открытого ключа. Это в значительной степени обусловлено историческими и коммерческими причинами, [ требуется ссылка ] а именно тем, что RSA Security создала центр сертификации для подписи ключей, который стал Verisign . Диффи-Хеллмана, как было подробно описано выше, нельзя напрямую использовать для подписи сертификатов. Однако алгоритмы подписи Эль-Гамаля и DSA математически связаны с ним, как и MQV , STS и компонент IKE набора протоколов IPsec для защиты коммуникаций по протоколу Интернета .
Получено в августе 1975 г.; пересмотрено в сентябре 1977 г.
{{cite web}}
: CS1 maint: url-status (link)