【问题标题】:How to use Diffie Hellman algorithm at the browser?如何在浏览器中使用 Diffie Hellman 算法?
【发布时间】:2020-08-19 07:48:23
【问题描述】:

我想使用 nodeJS 作为服务器端语言。 NodeJS 有加密模块,其中 DiffieHellman 是一个类。所以,我可以使用这种方法来生成密钥和计算密钥。

但是,客户端还需要创建另一个 diffiehellman 类的实例。但是怎么做呢?我可以在客户端使用加密模块吗?如果是,那么如何,任何解决方案? 这是我的客户端代码...

const crypto = require('crypto');
const express = require('express');
const app = express();

// Generate server's keys...
const server = crypto.createDiffieHellman(139);
const serverKey = server.generateKeys();
//send p=prime and g=generator to the client

【问题讨论】:

  • 昨天刚问了一个非常相似的问题:security.stackexchange.com/questions/237260/…
  • 是的,昨天我问了这个问题。但是,在我过去的问题中,我对 p 和 g 是否公开可用感到困惑。但是,今天我问如何在客户端使用 Diffie-hellman 类?
  • 对不起,如果你被 DH 弄糊涂了,你可能不应该使用它。
  • const client = crypto.createDiffieHellman(server.getPrime(), server.getGenerator()); 如何在客户端执行此操作? (-_-)
  • 是的,我知道 p 和 g 需要通过。但是,看这里有一个方法createDiffieHellman。我想说我如何在客户端使用这种方法?

标签: cryptography diffie-hellman node.js


【解决方案1】:

不确定您打算在这里实现什么,但似乎有这样的浏览器端口: https://www.npmjs.com/package/crypto-browserifycreateDiffieHellman 在已移植模块的列表中。特别看一下这个例子:https://github.com/crypto-browserify/crypto-browserify/tree/master/example。而不是createHash,我相信你可以尝试调用createDiffieHellman

【讨论】:

  • 这是正确的答案。但是,我面临一个错误。如何在 ES6 环境中使用 commonJS (require) 语法?
  • 我相信 require 函数在 bundle.js 中。在示例中,bundle.js 作为标准客户端 js 脚本加载:<script src=bundle.js></script>
  • 我相信您需要在您的客户端上以某种方式var crypto = require('diffie-hellman/browser'),正如此示例所暗示的github.com/crypto-browserify/crypto-browserify/blob/master/test/…
  • 但是你应该使用github.com/crypto-browserify/crypto-browserify,而不是github.com/crypto-browserify/diffie-hellman。那么除了“加密”之外,你不需要任何东西。看看那里的 /example。
  • 我会调试 browserify 内部,以检查此 DiffieHellman 是否正确加载。您获得的版本似乎是 2017 年的。也许尝试从 github 克隆它(最后更新于 2018 年)?
【解决方案2】:

请参阅http://www-cs-students.stanford.edu/~tjw/jsbn/ecdh.html 以获取 javascript 中客户端 ECDH 密钥生成和密钥交换的示例。

【讨论】:

  • 非常有用的工具来理解它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多