请看下面的代码:
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之后,所有东西也开始在云中工作。
1条答案
按热度按时间kuuvgm7e1#
我将云上的节点版本降级到了与MacBook Pro相同的16. 15. 1版本,它解决了这个问题。
我的直觉是prime_length现在被认为太小了,因此很容易受到攻击。但是,我没有任何有效的参考资料来支持这个理论。如果有人知道确切的原因,请用参考资料发表评论。