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

问题描述 投票:0回答:1

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

据我了解,公钥可以从scep256k1私钥派生,但是我不确定如何在浏览器中执行此操作,或者不确定是否可以使用现有库来实现,但是我有一个预感它是。我目前正在尝试查看是否可以使用Web3js,SJCL或CryptoJS,但可以使用其他选项。

为了对这里的流程有所了解。第3步是我当前要执行的操作:

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

任何朝着正确方向的指针都会受到赞赏!

javascript cryptography cryptojs web3js sjcl
1个回答
0
投票

是的,这很简单。

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

ETH地址独立地来自底层的secp256k1公钥,该公钥本身实际上是曲线上的一个点。

您正在寻找的方法调用是曲线标量乘法。

生成器是:

Gx = 
0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798

Gy = 
0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8

简单地将此点加到自身n次,其中n是私钥顺序。即g*k,其中k是私钥,瞧,您已经导出了公钥。

© www.soinside.com 2019 - 2024. All rights reserved.