如果我只有现有的私钥,则在浏览器中生成 public 密钥

Generate public key in browser if I only have the existing private key

我正在使用 scep256k1 曲线生成新的以太坊地址。由于存储和硬件限制,我只能存储私钥。我正在寻找在浏览器中为非对称加密(不是以太坊 public 地址)生成 public 密钥的方法。

据我了解,public 密钥可以从 scep256k1 私钥派生出来,但我不确定如何在浏览器中执行此操作,或者这是否可以通过现有库实现,但我有预感它是。我目前正在尝试查看是否可以使用 Web3js、SJCL 或 CryptoJS,但我对其他选项持开放态度。

提供对此处流程的一些理解。第 3 步是我目前正在尝试做的事情:

  1. 使用 openSSL 生成 scep256k1 密钥对
  2. 将私钥上传到硬件设备并将其提供给用户
  3. Web 界面中的用户:使用硬件私钥访问其 public 密钥,并重建以太坊地址。

如有任何正确方向的指点,我们将不胜感激!

是的,这很简单。

您只需使用私钥字节数组(实际上是一个 256-bit 标量),然后将其乘以 secp256k1 曲线生成点 g,它本身就是一个生成曲线循环群的曲线上的点。

ETH 地址独立于基础 secp256k1 public 密钥,它本身就是曲线上的一个点。

您要查找的方法调用是曲线标量乘法。

生成器是:

Gx = 
0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798

Gy = 
0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8

只需将此点与自身相加n次,其中n为私钥顺序。即 g*k 其中 k 是私钥,瞧,你已经导出了 public 密钥。