Задать вопрос
@PRIYD

Почему получаются разные ключи в Диффи-Хеллмане?

Здравствуйте.

Проблема: Пишу чат на сокетах и при создании общего секретного ключа с помощью протокола Диффи-Хеллмана не получается этот самый общий секретный. Функции ниже.

Вопрос: как сделать так, чтобы корректно генерировался общий секретный ключ.

function computePartial(base, module, secret) {
    return Math.pow(base, secret) % module;
}

function computeCommon(module, partial, secret) {
    return Math.pow(partial, secret) % module;
}


module - простое трёхзначное число(719)
base - трехзначное число(736)
secret - любое двухзначное число

P.S. возможно, я где-то ошибся с пониманием протокола и приведённые выше цифры должны быть иными
  • Вопрос задан
  • 140 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
1. Все вычисления должны быть в целых числах. У вас Math.pow выдаёт вещественное значение большее Number.MAX_SAFE_INTEGER, что делает вычисление бессмысленным.
2. base (или g в стандартном обозначении) должна быть первообразным корнем по модулю module (или m в стандартном обозначении). Значит должны выполняться условия:
gi % m ≠ 1, 1 ≤ i < m-1
gm-1 % m = 1
Ответ написан
@PRIYD Автор вопроса
Использовать тип BigInt для вычислений оказалось невозможным, ведь при возведении двухзначных(всего-то) чисел в двухзначную степень получается большое число(у меня высчитовало ~1.200.000-значное число, дальше я дропал, т.к. это была только 18 из n кол-ва итераций). В Интернете нарыл вот какое решение
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы