NodeJS Diffie-Hellman例程::模数太小

14ifxucb  于 2023-03-12  发布在  Node.js
关注(0)|答案(1)|浏览(138)

请看下面的代码:

const crypto = require("crypto");

function checksum(str, algorithm, encoding) {
return crypto
   .createHash(algorithm || 'md5')
   .update(str, 'utf8')
   .digest(encoding || 'hex');
}

然后我创建了一个简单的函数:

function executeCPUWorkload(workloadSize) {
    console.log("Workload size: " + workloadSize);
    for (let $i = 0; $i < workloadSize; $i++) {
        const prime_length = 100;
        console.log("Before calling createDiffieHellman with prime_length= " + prime_length);
        const diffHell = crypto.createDiffieHellman(prime_length);
        console.log("Before calling generateKeys - diffHell= " + diffHell);
        const key = diffHell.generateKeys('base64');
        console.log("Before calling checksum - key= " + key);
        const chksum = checksum(key);
        console.log("After calling checksum - checksum= " + chksum);
    }

    return true;
}

我试着在两种不同的设置中将其命名为console.log(executeCPUWorkload(1));
1.在我的本地MacBook M1 Pro计算机上(节点版本为16.15.1)
1.在云中,在基于GCP的Kubernetes群集上,在[e2-standard-2][1]计算机上(节点版本v18.14.2)
在第一个示例中,一切都按预期运行:

Workload size: 1
Before calling createDiffieHellman with prime_length= 100
Before calling generateKeys - diffHell= [object Object]
Before calling checksum - key= CoWyfgoPj76HC/9hQA==
After calling checksum - checksum= 9244c71b78d3b8b61a36adb9b8e1b190
true

在云中,我得到了以下输出:

Workload size: 1
Before calling createDiffieHellman with prime_length= 100

连接然后被关闭,在响应中我收到这个错误:

Error: error:0280007E:Diffie-Hellman routines::modulus too small

我不知道为什么,但是在将prime_length增加到1024之后,所有东西也开始在云中工作。

kuuvgm7e

kuuvgm7e1#

我将云上的节点版本降级到了与MacBook Pro相同的16. 15. 1版本,它解决了这个问题。
我的直觉是prime_length现在被认为太小了,因此很容易受到攻击。但是,我没有任何有效的参考资料来支持这个理论。如果有人知道确切的原因,请用参考资料发表评论。

相关问题