Алгоритм Диффи — Хеллмана
Алгори́тм Ди́ффи — Хе́ллмана (англ. Diffie-Hellman, DH) позволяет двум или более пользователям обменяться без посредников ключом, который может быть использован затем для симметричного шифрования. [1]
Данный алгоритм не применяется для шифрования сообщений или формирования электронной подписи. Его назначение – в распределении ключей.
Это была первая криптосистема, которая позволяла защищать информацию без использования секретных ключей, передаваемых по защищенным каналам.
Схема открытого распределения ключей, предложенная Диффи и Хеллманом, произвела настоящую революцию в мире шифрования, так как снимала основную проблему классической криптографии – проблему распределения ключей.
Содержание |
Предисловие [править]
Проблема передачи ключа по открытым каналам была большой проблемой криптографии прошлого века. Но эту проблему удалось решить после появления алгоритма Диффи-Хеллмана. Данный алгоритм позволил дать ответ на главный вопрос: "Как при обмене зашифрованными посланиями уйти от необходимости передачи секретного кода расшифровки, который, как правило, не меньше самого послания?" Открытое распространение ключей Диффи-Хеллмана позволяет паре пользователей системы выработать общий секретный ключ, не обмениваясь секретными данными.
История [править]
Основы криптографии с открытыми ключами были выдвинуты Уитфилдом Диффи(Whitfield Diffie) и Мартином Хеллманом(Martin Hellman), и независимо Ральфом Мерклом(Ralph Merkle). Их вкладом в криптографию было убеждение, что ключи можно использовать парами - ключ шифрования и ключ дешифрирования - и что может быть невозможно, получить один ключ из другого. Диффи и Хеллман впервые представили эту идею на Национальной компьютерной конференции 1976г., через несколько месяцев была опубликована их основополагающая работа "New Directions in Cryptography" [2] ("Новые направления в криптографии").
Годом позже был изобретен первый алгоритм асимметричного шифрования RSA, который позволил решить проблему общения через незащищённый канал.
В 2002 году Мартин Хеллман писал:
- «Эта система … с тех пор известна под названием алгоритма Диффи — Хеллмана. Однако, когда система была впервые описана на бумаге Диффи и мной, это была система распространения публичных ключей, концепция которой была выработана Мерклем, и поэтому она должна называться „алгоритмом Диффи — Хеллмана — Меркля“, если её связывают с именами. Я надеюсь что это небольшое изменение поможет признанию равного вклада Меркля в изобретение криптографии с открытыми ключами.»[3]
Следуя данной трактовке, журнале U.S. Patent 4 200 770, некогда описывающем данный алгоритм, отметил его создателями уже три автора - Хеллман, Диффи и Меркль.
Только в декабре 1997 года появилась обновленная информация о том что в Малькольм Вильямсон уже в 1974 году изобрел математический алгоритм, основанный на коммутативности показателей при последовательном возведении в степень ( (bx)y = (by)x = bxy). Данный метод можно назвать аналогом алгоритма Диффи-Хеллмана.[4]
Описание алгоритма [5] [править]
Предположим, существует два абонента: Алиса и Боб. Обоим абонентам известны некоторые два числа g и p, которые не являются секретными и могут быть известны также другим заинтересованным лицам. Для того, чтобы создать неизвестный более никому секретный ключ, оба абонента генерируют большие случайные числа: Алиса — число a, Боб— число b. Затем Алиса вычисляет значение[6] (1):
(1)и пересылает его Бобу, а Боб вычисляет (2):
(2)и передаёт Алисе. Предполагается, что злоумышленник может получить оба этих значения, но не модифицировать их (то есть у него нет возможности вмешаться в процесс передачи).
На втором этапе Алиса на основе имеющегося у нее a и полученного по сети B вычисляет значение (3):
(3)Боб на основе имеющегося у него b и полученного по сети A вычисляет значение (4):
(4)Как нетрудно видеть, у Алисы и Боба получилось одно и то же число (5):
(5)Его они и могут использовать в качестве секретного ключа, поскольку здесь злоумышленник встретится с практически неразрешимой (за разумное время) проблемой вычисления (3) или (4) по перехваченным
и
, если числа p, a, b выбраны достаточно большими. Наглядная работа алгоритма показана на рисунке[7].
При работе алгоритма, каждая сторона:
- генерирует случайное натуральное число a — закрытый ключ
- совместно с удалённой стороной устанавливает открытые параметры p и g (обычно значения p и g генерируются на одной стороне и передаются другой), где
- p является случайным простым числом
- (p-1)/2 также должно быть случайным простым числом (для повышения безопасности)[8]
- g является первообразным корнем по модулю p
- вычисляет открытый ключ A, используя преобразование над закрытым ключом
- A = ga mod p
- обменивается открытыми ключами с удалённой стороной
- вычисляет общий секретный ключ K, используя открытый ключ удаленной стороны B и свой закрытый ключ a
- K = Ba mod p
- К получается равным с обеих сторон, потому что:
- Ba mod p = (gb mod p)a mod p = gab mod p = (ga mod p)b mod p = Ab mod p
В практических реализациях, для a и b используются числа порядка 10100 и p порядка 10300. Число g не обязано быть большим и обычно имеет значение в пределах первого десятка.
Пример [править]
Ева — криптоаналитик. Она читает пересылку Боба и Алисы, но не изменяет содержимого их сообщений[9].
- s = секретный ключ. s = 2
- g = открытое простое число. g = 5
- p = открытое простое число. p = 23
- a = секретный ключ Алисы. a = 6
- A = открытый ключ Алисы. A = ga mod p = 8
- b = секретный ключ Боба. b = 15
- B = открытый ключ Боба. B = gb mod p = 19
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Алгоритм Диффи-Хеллмана с тремя и более участниками [править]
Использование алгоритма Диффи-Хеллмана не ограничивается двумя участниками. Он может быть применен на неограниченное количество пользователей. Рассмотрим ситуацию, когда Алиса, Боб и Кэрол вместе генерируют исходный ключ. В данном случае последовательность действий будет следующая[10]:
- Стороны договариваются о параметрах алгоритма p и g
- Стороны генерируют свои ключи — a, b и c
- Алиса вычисляет
и посылает его Бобу - Боб вычисляет
=
и посылает его Кэрол - Боб вычисляет
и посылает его Кэрол - Кэрол вычисляет
и посылает его Алисе. - Алиса вычисляет
и использует его как свою тайну. - Кэрол вычисляет
и посылает его Алисе - Алиса вычисляет
и посылает его Бобу - Боб вычисляет
и использует его как свою тайну
В данной ситуации любой участник может видеть
,
,
,
,
,
, но при этом не может видеть любую комбинацию
.
Для того чтобы данный алгоритм был эффективно применен для большой группы людей, необходимо соблюдение двух основных принципов:
- Передача ключа должна начинаться с «пустого» ключа g. Весь секрет состоит в повышении текущего значения показателя каждого участника один раз;
- Любое промежуточное значение может быть раскрыто публично, но окончательное значение представляет из себя секретный ключ, который никогда не должен быть публично раскрыт. Таким образом, каждый пользователь получает свою копию тайного ключа и передает его последующему.
Шифрование с открытым ключом [править]
Алгоритм Диффи-Хеллмана также может быть использован при шифровании с открытым ключом. В этом случае общая схема остаётся аналогичной приведённой выше, но с небольшими отличиями. Алиса не передаёт значения p, g и A Бобу напрямую, а публикует их заранее в качестве своего открытого ключа. Боб выполняет свою часть вычислений, после чего шифрует сообщение симметричным алгоритмом, используя K в качестве ключа, и передает шифротекст Алисе вместе со значением B.
На практике, алгоритм Диффи-Хеллмана не используется таким образом. В данной области доминирующим алгоритм с открытым ключом является RSA. Это больше обусловлено в силу коммерческих выгод, так как именно компанией RSA Data Security был создан центр сертификации. К тому же алгоритм Диффи-Хеллмана не может быть использован при подписании сертификатов[7].
Обмен ключом без обмена ключом [править]
Если имеется сообщество пользователей, каждый из пользователей может опубликовать открытый ключ X=
mod n, в общей базе данных. Если Алиса хочет установить связь с Бобом, ей надо получить открытый ключ Боба и сгенерировать их общий секретный ключ. Алиса может зашифровать сообщение открытым ключом и послать его Бобу. Боб извлечет открытый ключ Алисы и найдет общий секретный ключ. Каждая пара пользователей может использовать свой уникальный секретный ключ, не требуя обмена данными между пользователями. При этом все открытые ключи должны пройти проверку подлинности для того чтобы исключить "человека в середине"[7].
Криптографическая стойкость [править]
Криптографическая стойкость алгоритма Диффи — Хеллмана (то есть сложность вычисления
по известным p, g,
и
), основана на предполагаемой сложности проблемы дискретного логарифмирования.
Протокол Диффи — Хеллмана отлично противостоит пассивному нападению, но в случае реализации атаки «человек посередине» он не устоит. В самом деле, в протоколе ни Алиса, ни Боб не могут достоверно определить, кем является их собеседник, поэтому вполне возможно представить следующую ситуацию, при которой Боб и Алиса установили связь с Меллори, который Алисе выдает себя за Боба, а Бобу представляется Алисой. И тогда вместо протокола Диффи — Хеллмана получаем, что-то похожее на следующее:
| Шаг | Алиса | Меллори | Боб |
|---|---|---|---|
| 1 | ga→ | ga | |
| 2 | gn← | gn | |
| gam | gan | ||
| 3 | gm→ | gm | |
| 4 | gb | gb | |
| gmb← | gmb |
То есть, Меллори получает один ключ общий с Алисой (которая считает, что это Боб), и один ключ общий с Бобом (который считает, что это Алиса). А, следовательно, он может получать от Алисы любое сообщение для Боба расшифровать его ключом, прочитать, зашифровать ключом и передать Бобу. Таким образом, подлог может оставаться незамеченным очень долгое время[6].
Задача Диффи-Хеллмана и задача дискретного логарифмирования [править]
Стойкость разделенного ключа в протоколе Диффи-Хеллмана обеспечивается вычислением значенияе
по заданным числам
и
. Эта задача называется вычислительной проблемой Диффи-Хеллмана (CDH problem —Diffie-Hellman problem)[11].
Вычислительная проблема Диффи-Хеллмана(в конечном поле) [править]
ИСХОДНЫЕ ДАННЫЕ: desq: описание конечного поля
; g∈
— порождающий элемент группы
;
,
∈
, где 0 < a, b < q. РЕЗУЛЬТАТ:
![]()
Такая формулировка представляет собой общую постановку задачи в конечном поле
представляет общий случай, для Диффи-Хеллмана используется специальный случай. Если бы проблему Диффи-Хеллмана было легко решить, то значение
можно было бы найти, зная числа
,
,
и
, которые являются частью протокола. Предполагая, что противник обладает возможностями перехвата информации, следует предположить, что эти числа не являются для него секретом. Проблема Диффи-Хеллмана опирается на сложность вычисления дискретного логарифма (discrete logarithm problem)[2].
Задача дискретного логарифмирования (в конечном поле) [править]
ИСХОДНЫЕ ДАННЫЕ: desq: описание конечного поля
; g∈
— порождающий элемент группы
; h ∈
РЕЗУЛЬТАТ: Уникальное число a < q, удовлетворяющее условию h =
. Целое число a обозначается как
h.
Дискретное логарифмирование аналогично обычному логарифмированию в поле действительных чисел. Однако в отличие от последней задачи, в которой решение является приближенным, задача о вычислении дискретного логарифма имеет точное решение. Как уже стало понятным, в основе современной криптографии лежит теория вычислительной сложности. Это значит, что стойкость криптосистем с открытым ключом является условной и зависит от сложности решения некоторых задач. Все это приводит к тому, что проблема Диффи–Хеллмана и задача дискретного логарифмирования считаются трудноразрешимыми.
Интуитивно ясно, что сложность решения этих задач зависит как от размера поля Fq, так и от выбора параметров (открытого параметра g и секретных чисел a и b). Очевидно, что небольшие варианты этих задач являются разрешимыми. Полученные сведения позволяют сформулировать точные предположения о неразрешимости проблемы Диффи–Хеллмана и задачи дискретного логарифмирования.
Предположение 1 - Условия неразрешимости проблемы Диффи-Хеллмана
Алгоритмом решения проблемы Диффи-Хеллмана называется вероятностный полиномиальный алгоритм A с преимуществом ε > 0:

A(desc(
), g,
,
)].
где входные данные А указанны в определение (Вычислительная проблема Диффи-Хеллмана) (в конечном поле).
Пусть IG — генератор вариантов, получающий на вход число
время работы которого является полиномом от параметра k, а результатом — 1) desq(
), где |q| = k, и 2) порождающий элемент g ∈
.
Будем говорить, что генератор IG удовлетворяет условиям неразрешимости проблемы Диффи-Хеллмана, если для вариантов IG(
) не существует алгоритма решения с преимуществом ε> 0, которое не является пренебрежимо малым по сравнению со всеми достаточно большими числами k.
Предположение 2 - Условия неразрешимости задачи дискретного логарифмирования
Алгоритмом решения задачи дискретного логарифмирования называется вероятностный полиномиальный алгоритмA с преимуществом ε > 0:

A(desc(
), g, h)]где входные данные А указанны в определение (Вычислительная проблема Диффи-Хеллмана) (в конечном поле).
Пусть IG — генератор вариантов, получающий на вход число
время работы которого является полиномом от параметра k, а результатом — 1) desq(
), где |q| = k, и 2) порождающий элемент g ∈
и 3) элемент h ∈
Будем говорить, что генератор IG удовлетворяет условиям неразрешимости проблемы Диффи-Хеллмана, если для вариантов IG(
) не существует алгоритма решения с преимуществом ε> 0, которое не является пренебрежимо малым по сравнению со всеми достаточно большими числами k.
Иначе говоря, здесь предполагается, что почти все достаточно большие варианты указанных задач в конечных полях не имеют эффективного алгоритма решения. Доля слабых вариантов этих задач, поддающихся решению, пренебрежимо мала.
Источники [править]
- Брюс Шнаер "Прикладная Криптография"
- Шифрование-асимметричные методы Глава 8 ("Шифрование с открытым ключом", "Обмен ключом без обмена ключем", "Криптографическая стойкость", "Задача Диффи-Хеллмана и задача дискретного логарифмирования")
- Dieter Gollmann (2006). Computer Security Second Edition West Sussex, England: John Wiley & Sons, Ltd.
- The possibility of Non-Secret digital encryption J. H. Ellis, January 1970.
- Non-Secret Encryption Using a Finite Field MJ Williamson, January 21, 1974.
- Thoughts on Cheaper Non-Secret Encryption MJ Williamson, August 10, 1976.
- New Directions in Cryptography W. Diffie and M. E. Hellman, IEEE Transactions on Information Theory, vol. IT-22, Nov. 1976, pp: 644–654.
- Cryptographic apparatus and method Martin E. Hellman, Bailey W. Diffie, and Ralph C. Merkle, U.S. Patent #4,200,770, 29 April 1980
- The History of Non-Secret Encryption[dead link] JH Ellis 1987 (28K PDF file) (HTML version[dead link])
- The First Ten Years of Public-Key Cryptography Whitfield Diffie, Proceedings of the IEEE, vol. 76, no. 5, May 1988, pp: 560–577 (1.9MB PDF file)
- Menezes, Alfred; van Oorschot, Paul; Vanstone, Scott (1997). Handbook of Applied Cryptography Boca Raton, Florida: CRC Press. ISBN 0-8493-8523-7. (Available online)
- Singh, Simon (1999) The Code Book: the evolution of secrecy from Mary Queen of Scots to quantum cryptography New York: Doubleday ISBN 0-385-49531-5
- An Overview of Public Key Cryptography Martin E. Hellman, IEEE Communications Magazine, May 2002, pp:42–49. (123kB PDF file)
- Diffie-Hellman key exchange explained in 5 minutes
- Oral history interview with Martin Hellman, Charles Babbage Institute, University of Minnesota. Leading cryptography scholar *Martin Hellman discusses the circumstances and fundamental insights of his invention of public key cryptography with collaborators Whitfield Diffie and Ralph Merkle at Stanford University in the mid-1970s.
- RFC 2631 – Diffie–Hellman Key Agreement Method E. Rescorla June 1999.
- Summary of ANSI X9.42: Agreement of Symmetric Keys Using Discrete Logarithm Cryptography[dead link] (64K PDF file) (Description of ANSI 9 Standards)
- Diffie–Hellman Key Exchange – A Non-Mathematician’s Explanation by Keith Palmgren
- Crypt::DH Perl module from CPAN
- Hands-on Diffie–Hellman demonstration
- C implementation using GNU Multiple Precision Arithmetic Library[dead link]
- Diffie Hellman in 2 lines of Perl (using dc)
- Smart Account Management (SAcct) (using DH key exchange to derive session key)
- Talk by Martin Hellman in 2007, Google video
См. также [править]
- Zebedee
- Обмен ключами
- Эллиптическая кривая Диффи-Хеллмана
- Пароль проверки подлинности ключевого соглашения
- CDH problem —Diffie-Hellman problem
Примечания [править]
- ↑ Diffie-Hellman key exchange explained in 5 minutes
- ↑ 1 2 New Directions in Cryptography W. Diffie and M. E. Hellman, IEEE Transactions on Information Theory, vol. IT-22, Nov. 1976, pp: 644–654.
- ↑ Martin E. Hellman An overview of public key cryptography
- ↑ M. J. Williamson. Non-secret encryption using a finite field. 21 января 1974.
- ↑ Intellect. Как работает асимметричное шифрование понятным языком. 20 мая 2012.
- ↑ 1 2 Брюс Шнаер «Прикладная Криптография»
- ↑ 1 2 3 Шифрование-асимметричные методы Глава 8 («Шифрование с открытым ключом», «Обмен ключом без обмена ключем», «Криптографическая стойкость», «Задача Диффи-Хеллмана и задача дискретного логарифмирования»)
- ↑ Брюс Шнаер «Прикладная криптография» Глава 22 пункт 22.1
- ↑ Cryptographic apparatus and method Martin E. Hellman, Bailey W. Diffie, and Ralph C. Merkle, U.S. Patent #4,200,770, 29 April 1980)
- ↑ Summary of ANSI X9.42: Agreement of Symmetric Keys Using Discrete Logarithm Cryptography[dead link] (64K PDF file) (Description of ANSI 9 Standards)
- ↑ Diffie–Hellman Key Exchange – A Non-Mathematician’s Explanation by Keith Palmgren


=
и посылает его Алисе.
и использует его как свою тайну.
и посылает его Бобу
и использует его как свою тайну
,
∈
h.