Шифрование с открытым ключом




Алгоритм Диффи-Хеллмана

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

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

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

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

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


Алгоритм Диффи — Хеллмана,

где K — итоговый общий секретный ключ

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

1. генерирует случайное натуральное число aзакрытый ключ

2. совместно с удалённой стороной устанавливает открытые параметры p и g (обычно значения p и g генерируются на одной стороне и передаются другой), где

p является случайным простым числом

g является первообразным корнем по модулю p

3. вычисляет открытый ключ A, используя преобразование над закрытым ключом

4. обменивается открытыми ключами с удалённой стороной

5. вычисляет общий секретный ключ K, используя открытый ключ удаленной стороны B и свой закрытый ключ a

К получается равным с обеих сторон, потому что:

В практических реализациях, для a и b используются числа порядка 10100 и p порядка 10300. Число g не обязано быть большим и обычно имеет значение в пределах первого десятка.

Пример

Рома - криптоаналитик. Она читает пересылку Боба и Алисы, но не изменяет содержимого их сообщений.

  • s = секретный ключ. s = 2
  • g = открытое простое число. g = 5
  • p = открытое простое число. p = 23
  • a = секретный ключ Алисы. a = 6
  • A = открытый ключ Алисы. A = gamod p = 8
  • b = секретный ключ Боба. b = 15
  • B = открытый ключ Боба. B = gbmod p = 19

 

 

Алиса Боб Ева
Знает Не знает Знает Не знает Знает Не знает
p=23 g=5 a=6 s=2 b=? p=23 g=5 b=15 s=2 a=? p=23 g=5 a=? b=? s=?

Шифрование с открытым ключом

Данный алгоритм может также использоваться в качестве алгоритма шифрования с открытым ключом. В этом случае общая схема остаётся аналогичной приведённой выше, но с небольшими отличиями. Алиса не передаёт значения p, g и A Бобу напрямую, а публикует их заранее в качестве своего открытого ключа. Боб выполняет свою часть вычислений, после чего шифрует сообщение симметричным алгоритмом, используя K в качестве ключа, и передаёт шифротекст Алисе вместе со значением B. Однако такой подход не получил распространения, в этой области доминирует алгоритм RSA.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-06-05 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: