Описание алгоритма
Предположим, что обоим абонентам известны некоторые два числа g и p (например, они могут быть «зашиты» в программное обеспечение), которые не являются секретными и могут быть известны также другим заинтересованным лицам. Для того, чтобы создать неизвестный более никому секретный ключ, оба абонента генерируют большие случайные числа: первый абонент — число a, второй абонент — число b. Затем первый абонент вычисляет значение A = ga mod p и пересылает его второму, а второй вычисляет B = gb mod p и передаёт первому. Предполагается, что злоумышленник может получить оба этих значения, но не модифицировать их (то есть у него нет возможности вмешаться в процесс передачи). На втором этапе первый абонент на основе имеющегося у него a и полученного по сети B вычисляет значение Ba mod p = gab mod p, а второй абонент на основе имеющегося у него b и полученного по сети A вычисляет значение Ab mod p = gab mod p. Как нетрудно видеть, у обоих абонентов получилось одно и то же число: K = gab mod p. Его они и могут использовать в качестве секретного ключа, поскольку здесь злоумышленник встретится с практически неразрешимой (за разумное время) проблемой вычисления gab mod p по перехваченным ga mod p и gb mod p, если числа p, a, b выбраны достаточно большими.
Алгоритм Диффи — Хеллмана, где K — итоговый общий секретный ключ При работе алгоритма, каждая сторона: 1. генерирует случайное натуральное число a — закрытый ключ 2. совместно с удалённой стороной устанавливает открытые параметрыp и g (обычно значения p и g генерируются на одной стороне и передаются другой), где p является случайным простым числом g является первообразным корнемпо модулю p 3. вычисляет открытый ключA, используя преобразование над закрытым ключом A = gamod p 4. обменивается открытыми ключами с удалённой стороной 5. вычисляет общий секретный ключK, используя открытый ключ удаленной стороны B и свой закрытый ключ a K = Bamod 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 не обязано быть большим и обычно имеет значение в пределах первого десятка.
|