secp256k1如何使用
https://npm.taobao.org/package/secp256k1
这个即椭圆曲线加密算法算法,随机生成一个私钥然后通过椭圆曲线加密算法算法(ECC)得到一个公钥,且无法反向
然后再使用椭圆曲线签名算法(ECDSA)和私钥结合进行签名
Secp256k1是指比特币中使用的ECDSA(椭圆曲线数字签名算法)曲线的参数,并且在高效密码学标准(Certicom Research,http://www.secg.org/sec2-v2.pdf)中进行了定义。
Secp256k1为基于Fp有限域上的椭圆曲线,由于其特殊构造的特殊性,其优化后的实现比其他曲线性能上可以特高30%,有明显以下两个优点:
1)占用很少的带宽和存储资源,密钥的长度很短。
2)让所有的用户都可以使用同样的操作完成域运算。
即为一类比较安全的椭圆曲线
以太坊账户
要创建以太坊账户,只需要一个非对称加密密钥对——由不同的算法(例如RSA、ECC等)生成。以太坊使用椭圆曲线加密算法(ECC),ECC有多个参数用来调节速度和安全性,以太坊使用 secp256k1参数。
每个账户用一个地址表示。有了密钥之后,就需要生成地址。
从公钥生成地址的过程如下:
(1)生成公钥的keccak-256哈希。它将给出一个256位的数字。
(2)丢弃前面的96位,即12字节。现在得到160位二进制数据,即20字节。
(3)把地址编译成十六进制的字符串。最后将得到一个40字符的字
节串,就是账户地址。
交易
交易是一个签名数据包,用于从一个账户向另一个账户或者向一个合约转以太币、调用合约方法或者部署一个新合约。
交易使用椭圆曲线数字签名算法(ECDSA)签名,ECDSA是一种基于ECC的数字签名算法。
交易包含:
- 信息接收者
- 识别发起人及其意愿的签名
- 要转账的以太币数量
- 交易执行允许进行的计算资源最大值(叫作gas上限)
- 交易发起人愿意为单位计算资源支付的费用(叫作gas价格)
如果交易目的是调用合约方法,则还包含输入数据。
如果其目的是部署合约,则可以包含初始化代码。 用交易所消耗的gas乘以gas价格计算得到交易费
安装:
npm install secp256k1 --save
使用:
const { randomBytes } = require('crypto'); const secp256k1 = require('secp256k1'); // or require('secp256k1/elliptic') // if you want to use pure js implementation in node // generate message to sign const msg = randomBytes(32);//随机生成一个数据 console.log(msg); // generate privKey let privKey do { privKey = randomBytes(32);//随机生成一个私钥 console.log(privKey); } while (!secp256k1.privateKeyVerify(privKey)); // get the public key in a compressed format const pubKey = secp256k1.publicKeyCreate(privKey);//根据私钥生成公钥 console.log(pubKey); // sign the message const sigObj = secp256k1.sign(msg, privKey);//然后进行签名 console.log(sigObj); // verify the signature console.log(secp256k1.verify(msg, sigObj.signature, pubKey));//核查签名是否正确 // => true
返回:
<Buffer 42 4a 01 ae 6a 63 87 5b 7a 4a 8b 07 68 9e 57 c0 64 93 79 78 aa 75 3c 98 79 37 05 f9 a4 f3 1f bb> <Buffer 23 a0 32 43 4b 2b 2f b8 ee d3 d3 8f ea 6c fd 5a 76 1a 94 c0 91 a2 c2 0c 39 3a e6 59 bf 06 c1 96> <Buffer 02 d1 f9 d6 7b b8 6e 6e 4e c9 73 e6 46 6c 66 c5 68 85 0b ca 43 5e 3c cb 1a 82 e4 0c 34 28 21 17 21> { signature: <Buffer 09 f9 01 86 25 29 f3 ff 0c a7 ea 4c 16 8d ed 49 a1 2e 9a 03 d4 09 39 cc b0 a6 74 e9 7f d6 26 dc 28 5a 81 4a 6b 6a 1b 74 73 20 89 34 73 17 b6 e1 8a 7e ... >, recovery: 0 } true