monero门罗币stealthaddress匿名地址算法浅解:(3)CryptoNote2.0的算法
发布于 4 个月前 作者 xibiren 30248 次浏览 来自 比特币

CryptoNote2.0白皮书(https://cryptonote.org/whitepaper.pdf)对stealth address算法的描述如下:

1.png

2.png

有了前面的知识做铺垫,这个描述就很容易懂了。我再把上述公式用简单的语言翻译一下。

第一步:Bob选取两个数,a和b用来作为私钥。并在ECC椭圆曲线(monero用的是代号为Ed25519的这条曲线)上计算出对应的公钥A=aG和B=bG。G是曲线上一个公用的基点。Bob把这两个公钥对全网公布。

第二步:Alice选取随机整数r作为另一个私钥,计算:P=Hs(rA)G+B。 这里解释一下,Hs是一个哈希函数。当马工的都用过哈希表,对这个不陌生。哈希函数保证了相同的输入总能得到相同的输出,然而从输出却不能反推输入。一个哈希函数的例子就是SHA-256

有的人不理解了,哈希函数的输入应该是一个数,而根据ECC算法,rA是一个点,怎么作为哈希函数输入呢?你把x坐标y坐标拼在一起它不就是个数了吗?反正经过哈希得到的结果是随机的。

Hs(rA)得到一个整数,用G做为基点走Hs(rA)步,得到某数,再加上B,得到P。

第三步:Alice计算R=rG。

第四步:Alice把转账记录,连同算好的P和R公布到区块链上。因为使用了哈希函数,根据这两个公开的数字,第三方无法逆推A和B是多少,既无法知道收款人是Bob。

第五步:Bob扫描区块链,计算P’=Hs(aR)G+B。如果这笔钱是给Bob的,那么因为Alice用的R=rA生成的R。根据ECC算法,有aR=rA。所以 P’=Hs(aR)G+B = Hs(rA)G+B = P. 所以Bob就知道这笔钱是他自己的。r仍然是只有Alice知道的秘密,日后Alice可以通过公开r来证明自己付过这笔钱(因为采用了ring signatures和stealth address仅从区块链上无法查到付款人是Alice)。

第六步:Bob计算x=Hs(aR)+b,得到一个整数。因为有:xG = Hs(aR)G+bG = Hs(aR)G+B = P,这符合ECC算法的定义,x就是针对公钥P的密钥——这个密钥连给钱的Alice也无法推出。日后Bob就可以使用这个密钥来花这笔钱了。

回到顶部