Диффи — Хеллмана криптосистема

Диффи — Хеллмана криптосистема

Алгори́тм Ди́ффи — Хе́ллмана (англ. Diffie-Hellman, DH) — алгоритм, позволяющий двум сторонам получить общий секретный ключ, используя незащищенный от прослушивания, но защищённый от подмены, канал связи. Этот ключ может быть использован для шифрования дальнейшего обмена с помощью алгоритма симметричного шифрования.

Алгоритм был впервые опубликован Уитфилдом Диффи (Whitfield Diffie) и Мартином Хеллманом в 1976 году.

В 2002 году Хеллман предложил называть данный алгоритм «Диффи — Хеллмана — Меркле», признавая вклад Меркле в изобретение криптографии с открытым ключом.

Содержание

История

Схема обмена ключами Диффи — Хеллмана, изобретённая в 1976 году при сотрудничестве Уитфилда Диффи и Мартина Хеллмана, под сильным влиянием работы Ральфа Меркле (Ralph Merkle) о системе распространения публичных ключей, стала первым практическим методом для получения общего секретного ключа при общении через незащищенный канал связи. Для обеспечения устойчивости, по совету Джона Гилла (John Gill), была использована проблема дискретного логарифмирования. За несколько лет до этого эта же схема была изобретена Малькольмом Вильямсоном из английского штаба правительственной связи, но оставалась в секрете до 1997 года.

Годом позже был изобретен первый алгоритм асимметричного шифрования

В 2002 году Мартин Хеллман писал:

«Эта система … с тех пор известна под названием алгоритма Диффи — Хеллмана. Однако, когда система была впервые описана на бумаге Диффи и мной, это была система распространения публичных ключей, концепция которой была выработана Меркле, и поэтому она должна называться „алгоритмом Диффи — Хеллмана — Меркле“, если ее связывают с именами. Я надеюсь что это небольшое изменение поможет признанию равного вклада Меркле в изобретение криптографии с открытыми ключами.» [1]

В патенте U.S. Patent 4,200,770 (англ.) (в настоящее время истёкшем), описывающем данный алгоритм, изобретателями значатся Хеллман, Диффи и Меркле.

Описание алгоритма

Предположим, что обоим абонентам известны некоторые два числа g и p (например, они могут быть «зашиты» в программное обеспечение), которые не являются секретными и могут быть известны также другим заинтересованным лицам. Для того, чтобы создать неизвестный более никому секретный ключ, оба абонента генерируют большие случайные числа: первый абонент — число a, второй абонент — число b. Затем первый абонент вычисляет значение A = gamod p и пересылает его второму, а второй вычисляет B = gbmod p и передаёт первому. Предполагается, что злоумышленник может получить оба этих значения, но не модифицировать их (то есть у него нет возможности вмешаться в процесс передачи). На втором этапе первый абонент на основе имеющегося у него a и полученного по сети B вычисляет значение Bamod p = gabmod p, а второй абонент на основе имеющегося у него b и полученного по сети A вычисляет значение Abmod p = gabmod p. Как нетрудно видеть, у обоих абонентов получилось одно и то же число: K = gabmod p. Его они и могут использовать в качестве секретного ключа, поскольку здесь злоумышленник встретится с практически неразрешимой (за разумное время) проблемой вычисления gabmod p по перехваченным gamod p и gbmod p, если числа p,a,b выбраны достаточно большими.

Алгоритм Диффи — Хеллмана, где K — итоговый общий секретный ключ

При работе алгоритма, каждая сторона:

  1. генерирует случайное натуральное число aзакрытый ключ
  2. совместно с удалённой стороной устанавливает открытые параметры p и g (обычно значения p и g генерируются на одной стороне и передаются другой), где
    p является случайным простым числом
    g является первообразным корнем по модулю p
  3. вычисляет открытый ключ A, используя преобразование над закрытым ключом
    A = ga mod p
  4. обменивается открытыми ключами с удалённой стороной
  5. вычисляет общий секретный ключ 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 не обязано быть большим и обычно имеет значение в пределах первого десятка.

Криптографическая стойкость

Криптографическая стойкость алгоритма Диффи — Хеллмана (то есть сложность вычисления K=gab mod p по известным p, g, A=ga mod p и B=gb mod p), основана на предполагаемой сложности проблемы дискретного логарифмирования. Однако, хотя умение решать проблему дискретного логарифмирования позволит взломать алгоритм Диффи — Хеллмана, обратное утверждение до сих является открытым вопросом (другими словами, эквивалентность этих проблем не доказана).

Необходимо отметить, что алгоритм Диффи — Хеллмана работает только на линиях связи, надёжно защищённых от модификации. Если бы он был применим на любых открытых каналах, то давно снял бы проблему распространения ключей и, возможно, заменил собой всю асимметричную криптографию. Однако, в тех случаях, когда в канале возможна модификация данных, появляется очевидная возможность вклинивания в процесс генерации ключей «злоумышленника-посредника» по той же самой схеме, что и для асимметричной криптографии.

См. также


Wikimedia Foundation. 2010.

Нужно сделать НИР?

Полезное


Смотреть что такое "Диффи — Хеллмана криптосистема" в других словарях:

  • Криптосистема с открытым ключом — Криптографическая система с открытым ключом (или асимметричное шифрование, асимметричный шифр)  система шифрования и/или электронной цифровой подписи (ЭЦП), при которой открытый ключ передаётся по открытому (то есть незащищённому, доступному …   Википедия

  • Криптосистема Диффи — Хеллмана — Алгоритм Диффи Хеллмана (англ. Diffie Hellman, DH) алгоритм, позволяющий двум сторонам получить общий секретный ключ, используя незащищенный от прослушивания, но защищённый от подмены, канал связи. Этот ключ может быть использован для шифрования… …   Википедия

  • Криптосистема Ривеста-Шамира-Адельмана — RSA (буквенная аббревиатура от фамилий Rivest, Shamir и Adleman)  криптографический алгоритм с открытым ключом. RSA стал первым алгоритмом такого типа, пригодным и для шифрования, и для цифровой подписи. Алгоритм используется в большом числе… …   Википедия

  • Криптосистема Ривеста — Шамира — Адельмана — RSA (буквенная аббревиатура от фамилий Rivest, Shamir и Adleman)  криптографический алгоритм с открытым ключом. RSA стал первым алгоритмом такого типа, пригодным и для шифрования, и для цифровой подписи. Алгоритм используется в большом числе… …   Википедия

  • Гибридная криптосистема — Гибридная (или комбинированная) криптосистема это система шифрования, совмещающая преимущества криптосистемы с открытым ключом с производительностью симметричных криптосистем. Симметричный ключ используется для шифрования данных, а асимметричный… …   Википедия

  • Мартин Хеллман — (Martin E. Hellman; род. 2 октября 1945)  американский криптограф, один из основоположников теории асимметричных криптосистем. Получил степень бакалавра в Нью Йоркском университете (1966), степень магистра (1967) и доктора философии (1969) в… …   Википедия

  • Хеллман М. — Мартин Хеллман Мартин Хеллман (Martin E. Hellman; род. 2 октября 1945)  американский криптограф, один из основоположников теории асимметричных криптосистем. Получил степень бакалавра в Нью Йоркском университете (1966), степень магистра (1967) и… …   Википедия

  • Хеллман Мартин — Мартин Хеллман Мартин Хеллман (Martin E. Hellman; род. 2 октября 1945)  американский криптограф, один из основоположников теории асимметричных криптосистем. Получил степень бакалавра в Нью Йоркском университете (1966), степень магистра (1967) и… …   Википедия

  • Задача о ранце в криптографии — (англ. Knapsack problem)  это задача, на основе которой американские криптографы Ральф Меркл (англ.) и Мартин Хеллман разработали первый алгоритм шифрования с открытым ключом. Он носит название криптосистема Меркла Хеллмана. Для… …   Википедия

  • Схема Эль-Гамаля — Данные в этой статье приведены по состоянию на ГОСТ Р 34.10 94. Вы можете помочь, обновив информацию в статье …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»