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

时间:2020-04-04 18:18:21

标签: javascript cryptography cryptojs web3js sjcl

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

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

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

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

任何朝着正确方向的指针都值得赞赏!

1 个答案:

答案 0 :(得分:0)

是的,这很简单。

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

ETH地址是从基础secp256k1公钥中独立获得的,该公钥本身实际上是曲线上的一个点。

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

生成器是:

Gx = 
0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798

Gy = 
0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8

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

相关问题