Diff ie Hellman Key Exhange не работает (Javascript) - PullRequest
0 голосов
/ 09 июля 2020

Я пытался создать систему обмена ключами Diff ie Hellman в javascript без плагинов . К сожалению, мой код не работает и часто создает 2 разных секретных ключей.

Код:

var g = next_Prime_num(Math.ceil(Math.random() * 50));
var n = next_Prime_num(Math.ceil(Math.random() * 50) + 50);
    
var a = Math.ceil(Math.random() * (n - 1));
var b = Math.ceil(Math.random() * (n - 1));

var A = mod(Math.pow(g, a), n);
var B = mod(Math.pow(g, b), n);
    
var Ka = mod(Math.pow(B, a), n);
var Kb = mod(Math.pow(A, b), n);
    
    

function next_Prime_num(num) {
    for (var i = num + 1;; i++) {
        var isPrime = true;
        for (var d = 2; d * d <= i; d++) {
            if (i % d === 0) {
                isPrime = false;
                break;
            }
        }
        if (isPrime) {
            return i;
        }
    }
}
    
function mod(n, m) {
    return n%m;
}

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

У Math.pow () время от времени будут целочисленные переполнения. В javascript максимальное целое число, которое вы можете иметь без потери точности, или максимальное безопасное целое число - (2<sup>53</sup> - 1) или 9007199254740991. Что вы можете сделать, так это создать функцию мощности, которая использует модульное возведение в степень .

Проверьте этот аналогичный вопрос - Diff ie -Hellman Key Exchange с Javascript иногда неправильно

0 голосов
/ 10 июля 2020

n: должно быть простым числом да, но g: должно быть примитивом root n, а не просто простым числом, это ваша ошибка, вам нужно добавить еще одну функцию, чтобы получить примитив root из номер гивина

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...