Подбор параметров по Диффи-Хеллману - PullRequest
3 голосов
/ 08 марта 2010

может быть, не совсем правильно задавать этот вопрос здесь ... во всяком случае, я пытаюсь использовать библиотеку gmp для реализации DH, но проблема, которая у меня возникла:

Однажды, когда я делал тесты для наблюдения за выводом, хотя были выбраны большие значения простых и закрытых ключей:

  • p был длиной более 300 цифр в десятичном виде
  • a, b были длиной около 100 цифр

наконец, я получил общий секретный ключ, который был очень маленьким, возможно, меньше 10 ^ 8 в десятичном виде ...

Эта проблема не появлялась много раз, фактически, за все время наблюдения она появлялась всего один раз ... но, тем не менее, это было не так уж и хорошо.

Так что мне интересно, есть ли методы, которые могут этого избежать ... Спасибо большое

Ответы [ 2 ]

2 голосов
/ 08 марта 2010

Обмен ключами Диффи-Хеллмана предназначен для генерации секретного общего ключа.

Используя большие значения p, a и b, вы гарантируете, что пул потенциальных общих ключей будет очень большим.

Однако фактическое значение общего ключа может быть любым значением в этом пуле. В результате он может варьироваться от нуля до (p - 1) ... потому что ключ равен

G^(ab) mod p

Следовательно, вы не обнаружили здесь проблемы ... вы просто видели случаи, когда G^(ab) близок по значению к кратному p, и, следовательно, mod - это небольшое число.

1 голос
/ 08 марта 2010

Частью точки D-H является то, что секретный ключ может иметь значение любое в пределах диапазона, указанного в p. По крайней мере, теоретически, устранение некоторых из этих возможностей сделало бы его менее безопасным, а не более (реально, если оставить достаточно большой пул ключей, это мало что меняет).

Это правда, что , если злоумышленник решил попробовать атаку с исчерпанием ключа (грубой силой), и начал с 0 и только что подсчитал, он попадет в него относительно скоро. С другой стороны, если вы определились с какой-то другой нижней границей и (например) пересмотрели ключ, если он был ниже этой границы, это не принесло бы никакой пользы - вместо того, чтобы начинать с 0, атакующий начал бы с указали нижнюю границу, и вы ничего не получили бы.

...