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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM