在node.js Crypto module上是否有用于ECDH的基点(P)?

在node.js Crypto module上是否有用于ECDH的基点(P)?,node.js,cryptography,elliptic-curve,Node.js,Cryptography,Elliptic Curve,我正在尝试在两个对等方之间建立一个椭圆曲线Diffie-Hellman(ECDH)协议,一个运行在Node.js应用程序中,另一个运行在C应用程序中 为了做到这一点,我决定在Node.js端建立初始参数(曲线和基点),然后将它们传递给C应用程序(基本上抽象协议过程) Node.jsCrypto模块正在使用中,但它没有提供在调用ECDG.generateKeys()方法时生成基点的方法(基于猜测,因为本主题中的文档不是很清楚) 规范中是否已经定义了基点 任何关于这方面的想法都会非常有帮助 因此,我

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

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

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

规范中是否已经定义了基点


任何关于这方面的想法都会非常有帮助

因此,我对这个主题做了更多的研究,发现根据规范,每条曲线都已经定义了一个基点作为预定义参数之一。我假设Node.js加密实现遵循此规范,因此不必费心传递此参数。

与其他非对称原语(如RSA和标准DH)相比,ECC加密速度非常快。但是,生成曲线的域参数非常慢;即使对于较小的比特数,也要考虑几个小时。因此,通常曲线参数是从一组已知的命名曲线中选择的。已知的大多数曲线都是由Daniel J.Bernstein和Tanja Lange教授绘制的

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

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


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

我接受了您的答案,因为它比我的答案更完整。是的,我使用的是NIST“安全”曲线列表中的曲线,当时我遇到的问题是Node.js本机实现如何处理基点。感谢您延长澄清时间!
const alice = crypto.createECDH('secp521r1');
const aliceKey = alice.generateKeys();