比特币原理-ECDSA交易签名及签名验证

1. 签名序列号(DER)

DER (Distinguished encoding rules,可辨别编码规则)
椭圆曲线加密算法对数据签名可以产生两个组成的签名Sig,通常称为R和S
计算出R和S后,需要使用DER国家标准编码方案,将其序列化为16进制字节码格式
椭圆曲线的数字签名其实是R和S值得序列化字节码

2.签名各个数字的含义

  1. Ox30 表示DER序列的开始
  2. Ox45 序列的长度(10进制就是69字节)
  3. 0x02 表示接下来为一个整数值
  4. 0x21 整数的长度 (10进制就是32字节)
  5. R 32字节的R
  6. Ox02 表示接下来为一个整数值
  7. S 32字节的S
  8. 后缀(Ox01) 指示使用的哈希的类型 (sighash_all)

通过以下地址:查看具体某个交易的签名
https://www.blockchain.com/zh/btc/tx/32b0f0d04f0e5eef454d94489081c7ff9faa5c1fbe89135eddd436b9da738559?show_adv=true

avatar

Input Scripts
ScriptSig:PUSHDATA(71)[3044022054c7e4b0d50da0f9964ee881a9ee8f35a5e5532a2fd7cb41b7ed919c67aa1904022066bad005f4076e5b13199676436648ea9a934778ae6c82f553e4e56af9814ec701]
PUSHDATA(33)[02b1344441f90de9ee5cabeb4b265d9dc947855816117d5405bc5640dc2502f8c1]
Output Scripts
HASH160 PUSHDATA(20)[0e3f675d1d9efac6d590e662dc5f6d96c5e526cf]
EQUAL
DUP HASH160 PUSHDATA(20)[d5c7c9940467fe8a319f89b22254a8b6d9f1f219] EQUALVERIFY CHECKSIG

EXAMPLE
30
44
02
20
54c7e4b0d50da0f9964ee881a9ee8f35a5e5532a2fd7cb41b7ed919c67aa1904
02
20
66bad005f4076e5b13199676436648ea9a934778ae6c82f553e4e56af9814ec7
01

3. Secp256k1实现交易签名及签名验证

实现交易签名
根据私钥和要签名的数据得到签名

签名验证
根据私钥的签名推算出对应的公钥
public static byte[] recoverPublicKey(byte[] sigR,byte[] sigS,byte[] message)

判读推算出的公钥和对应公钥是否一样,一样则返回true
(注明:资源来自千峰教育课程内容)

你可能感兴趣的:(区块链)