node.js - 有没有办法在node.js加密模块上获取用于ECDH的基点(P)?

标签 node.js cryptography elliptic-curve

我正在尝试在 2 个对等点之间建立椭圆曲线 Diffie-Hellman (ECDH) 协议(protocol),其中一个在 Node.js 应用程序中运行,另一个在 C 应用程序中运行。

为了做到这一点,我决定在 Node.js 端建立初始参数(曲线和基点),然后将它们传递给 C 应用程序(基本上抽象了协议(protocol)过程)。

Node.js Crypto 模块正在使用,但它没有提供在调用 ECDG.generateKeys() 方法时生成基点的方法(基于猜测,因为该主题的文档不是很清楚)。

规范中是否已定义基点?

对此的任何想法都会非常有帮助!

最佳答案

与 RSA 和标准 DH 等其他非对称原语相比,ECC 加密技术确实非常快。然而,生成曲线的域参数非常慢;即使对于较小的位,也要考虑几个小时。因此,通常曲线参数是从一组已知的、命名曲线中选择的。大多数已知的曲线都在the safe curves website上Daniel J. Bernstein 教授和 Tanja Lange 教授。

通常,协议(protocol)中使用的曲线始终是特定类型,例如F(p) 上的曲线称为素曲线。然后选择一组域参数,例如NIST 标准化曲线。最后建立域参数集。通常,这是通过名称(例如 NIST P-256)或 ID(例如 1.2.840.10045.3.1.7 或 {iso(1) member-body(2) us(840) ansi-x962(10045) curve( 3) prime(1) prime256v1(7)} 完整)。

对于 Node.JS,您在为这些参数生成 key 对之前选择了参数(包括曲线和基点):

const alice = crypto.createECDH('secp521r1');
const aliceKey = alice.generateKeys();

第一个已经设置了所有 6/7 域参数。然后, key 生成只是为私钥生成一个随机 secret 值s。与基点 G 相乘后,您将得到公共(public)点 W,它完成了执行基于 EC 的加密的参数集。

关于node.js - 有没有办法在node.js加密模块上获取用于ECDH的基点(P)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50839136/

相关文章:

javascript - 如何在没有冲突的 Node 中创建 tmp 目录

php - PHP伪随机有多随机,4个字节

node.js - 为什么给定相同的输入, Node scrypt 哈希值相同?

cryptography - 使用 "node-forge"、 "exponent"和 "modulus"在 "maxdigits"中生成 key 对

java - 椭圆曲线ElGamal Java实现

javascript - nodejs xhr POST

node.js - Chocolatey 可以识别手动安装的 nodejs 吗?

cryptography - 如何从 OpenSSL 中的 ECDSA 私钥获取公钥?

ios - iOS 中的椭圆曲线加密

sql - 匹配值,但 SQL Server 中的新值出错