比特币之stealth address

stealth address基本原理:

公私钥对(A,a)和(B,b)

Ab = aB

其中公钥相当于椭圆曲线乘法上的一个点ECPoint,私钥相当于一个系数BigInteger

stealth address地址格式:

[version:1=0x2a] [options:1] [scan_pubkey:33] [N:1] [spend_pubkey_1:33] ...

[spend_pubkey_N:33] [number_sigs:1] [prefix_length:1] [prefix:prefix_length/8, round up]

其中:

Mainnet version = 0x2a (42), testnet version = 0x2b (43)

options bitfield = 0 or 1 (reuse scan_pubkey for spends)

交易产生过程描述如下

先做如下说明

(A,a):表示公私钥对,A为公钥,a为私钥

G:代表椭圆曲线乘法(ECDSA,secp256k1)中的G点。A=aG;

H:信息摘要算法HMac

具体过程如下

step 1

接收者receipt:拥有两对公私钥scan(A,a),payload(B,b)

A,B可以相互推导出stealth address

接收者把自己的stealth address公布出去

step 2

发送者sender:拥有自己一对公私钥(R,r)

拿到stealth address,相当于拿到了receipt的两个公钥A,B

然后通过以下算法来生成一个接收币的公钥P,从而生成一个P address(也就是说sender真正的打币地址是P,但是P所对应的私钥,sender是计算不出来的,所以sender发送币之后就失去了币的使用权)

P = H(rA)G+B;

sender在发送交易的时候,同时把R公布出去

step 3

receipt扫描到自己stealth address上的交易,拿到了R

通过以下公式可以计算出P所对应的私钥   H(aR)+b

从而拥有P的使用权

具体推导公式如下

P = H(rA)G+B = H(raG)G+bG = H(arG)G+bG = H(aR)G+bG=(H(aR)+b)G

所以P对应的私钥为H(aR)+b

你可能感兴趣的:(比特币之stealth address)