我如何使用 nodejs 中的 Diffie-Hellman api 实际加密某些内容?

How do I actually encrypt something with the Diffie-Hellman apis in nodejs?

我在这里查看 nodejs 加密文档中的非常简单的演示: https://nodejs.org/api/crypto.html#crypto_crypto_getdiffiehellman_group_name

他们非常轻松地演示了如何获取共享密钥...现在怎么办?

如何使用上述共享密钥加密和解密数据?

Diffie-Hellman 是一种密钥交换算法。它本身不提供加密。

双方通过D-H建立共同的秘密后,就可以将其作为AES等对称加密算法的密钥。

密码可以用作例如 https://nodejs.org/api/crypto.html#crypto_crypto_createcipher_algorithm_password

注意最后的安全提示。

虽然问题是如何用DH api加密。我想解决整个问题。

虽然接受的答案很好,但问题是如果您不知道 e2e 是如何工作的,那么该教程将无法帮助您实现您真正想要的,我想这就是如何端到-使用 DH 密钥交换作为过程的一部分结束加密。所以我把它分解成可以理解的部分。

它是这样的:

按照这个概念,Alice 和 Bob 都应该就 a generator 和一个 prime number 给 bob 达成一致,这样 key 就可以生成他的密钥。 完成后,他们都需要彼此共享 public 密钥。

所以首先,让爱丽丝生成密钥并将它们发送给鲍勃:

JSON.stringify({ type: 'keyxchange_alice', from: from, to: to, prime: alice.sharedPrime, generator: alice.generator, key: alice.getPublicKey() })

然后鲍勃需要生成他的 public 密钥并将其发送给爱丽丝

  const bob = new DeffMan(Buffer.from(msg.prime), Buffer.from(msg.generator))
  const bob_key = bob.getPublicKey()
  JSON.stringify({ type: 'keyxchange_bob', key: bob_key })

你还需要存储这些对应用户的密钥,这可以通过存储它来完成(在这种情况下,在 javascript hash/object 中),就像爱丽丝可以存储: { bob: bobMessage.key }.

现在假设他们有彼此的 public 密钥,alice 可以 bob 可以生成一个共享密钥, 共享秘密,对于鲍勃,广义时是 alicePublicKey ^ bobPrivateKey。 (从 Wikipedia and a Plain English version here 阅读更多关于 DiffeHelman 密钥交换的信息)

然后,此共享机密将用作密码,使用 aes-256-cbc 加密将通过 tcp 发送的消息。

上面的东西可以修改更多,通过每次重新生成秘密,这将涉及每条消息的更多往返 或者可以使用双棘轮方案。

我的原创文章在this link as a gist