【问题标题】:Understanding Diffie-Hellman with NodeJS用 NodeJS 理解 Diffie-Hellman
【发布时间】:2020-07-06 13:50:31
【问题描述】:
// node.js 0.5 Diffie-Hellman example
var crypto = require("crypto");

// the prime is shared by everyone                                              
var server = crypto.createDiffieHellman(512);
var prime = server.getPrime();

// sharing secret key on a pair                                                 
var alice = crypto.createDiffieHellman(prime);
alice.generateKeys();
var alicePub = alice.getPublicKey();

var bob = crypto.createDiffieHellman(prime);
bob.generateKeys();
var bobPub = bob.getPublicKey();

var bobAliceSecret = bob.computeSecret(alicePub);
var aliceBobSecret = alice.computeSecret(bobPub); 

我正在尝试了解如何将 NodeJS 加密库用于 diffie-hellman 实现,并获得上述代码来计算共享密钥。问题是 Alice 和 Bob 在获得共享素数后都生成了他们的密钥。我需要他们生成各自的密钥对,而不必使用任何共享信息,然后才能使用共享信息来计算共享秘密。我无法看到如何使用 NodeJS 加密库来完成。

【问题讨论】:

  • 嗯?在您的代码中,密钥对在共享密钥之前创建的,对吧?
  • 是的,它们是在计算共享密钥之前创建的,只是为了生成它们的密钥,我必须生成一个共享素数。在现实世界中,我希望首先生成密钥对,然后再使用任何共享变量来计算共享密钥。
  • var alice = crypto.createDiffieHellman(1024); alice.generateKeys(); var alicePub = alice.getPublicKey(); var bob = crypto.createDiffieHellman(1024); bob.generateKeys(); var bobPub = bob.getPublicKey(); var bobAliceSecret = bob.computeSecret(alicePub); var aliceBobSecret = alice.computeSecret(bobPub); 以上不允许 alice 和 bob 计算相同的共享密钥。

标签: node.js cryptography diffie-hellman


【解决方案1】:

我明白你的困惑。

Diffie-Hellman 素数表示您在其中执行 DH 功能的一组数字(循环组),但它不是为每个人随机生成的。

看看我的回答here

素数/组在密钥生成和静态之前是已知的。

只使用了几个组,请参阅here 了解更多信息。

需要明确的是,为了生成相同的密钥,您只需要确保两个 ppl 都在同一个组内使用相同的 DH 参数进行操作。

【讨论】:

  • 原则上可以生成新参数并与公钥一起共享。不过,这可能很快就会变得很麻烦,而且效率不高。使用较大的 named DH 组之一(4096 位),您指向的 RFC 最有意义。
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 2012-02-06
  • 2011-08-27
  • 1970-01-01
相关资源
最近更新 更多