【问题标题】:Diffie Hellman Key Exhange not working (Javascript)Diffie Hellman 密钥交换不起作用(Javascript)
【发布时间】:2020-07-10 13:15:40
【问题描述】:

我尝试在 不使用插件的 javascript 中创建 Diffie Hellman 密钥交换系统。不幸的是,我的代码不起作用,并且经常创建 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;
}

【问题讨论】:

    标签: javascript cryptography diffie-hellman


    【解决方案1】:

    n: 必须是质数是的,但是 g: 必须是 n 的原根,而不是纯素数 这是您的错误,您必须添加另一个函数才能从 givin prim 编号中获取原始根

    【讨论】:

      【解决方案2】:

      里面的 Math.pow() 肯定会时不时地发生整数溢出。在 javascript 中,您可以在不丢失精度或最大安全整数的情况下拥有的最大整数是 (2<sup>53</sup> - 1)9007199254740991 。 你可以做的是创建一个使用modular exponentiation的幂函数。

      看看这个类似的问题 - Diffie-Hellman Key Exchange with Javascript sometimes wrong

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-19
        • 2023-03-03
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 2010-09-29
        • 2018-06-10
        相关资源
        最近更新 更多