@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. возможно, я где-то ошибся с пониманием протокола и приведённые выше цифры должны быть иными
  • Вопрос задан
  • 130 просмотров
Решения вопроса 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 кол-ва итераций). В Интернете нарыл вот какое решение
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Sportrecs Москва
от 150 000 до 200 000 ₽