monero门罗币stealthaddress匿名地址算法浅解:(1)Diffie-Hellman密钥交换协议
发布于 4 个月前 作者 xibiren 368 次浏览 来自 比特币

本文来自:http://blog.sina.com.cn/s/blog_18804e3000102xme6.html

门罗币(monero)是一种着重隐私保护的加密货币。相对于其他主流加密货币,它具有以下功能:

  1. 即使拿到全部交易数据,第三方也无法解析收款人是谁——Stealth Address算法
  2. 即使拿到全部交易数据,第三方也无法解析付款人是谁——Ring Signatures算法
  3. 即使拿到全部交易数据,第三方也无法解析付款金额——RingCT算法
  4. 参与交易的人的ip地址不可见——kovri技术(还未开发完成)

本文既不讨论挖矿,也不讨论算法证明。目标是从没有密码学背景的程序员的角度来理解这些算法的实现。

就先讲讲Stealth address,这一部分内容来自:CryptoNote v2.0 White Paper: https://cryptonote.org/whitepaper.pdf

Monero使用的是Ed25519加密算法,是一种基于ECC椭圆线的算法。然而这个算法太不intuitive,它的前身Diffie–Hellman key exchange要好懂得多。所以我们就先说说Diffie–Hellman key exchange。

该算法的定义: https://baike.baidu.com/item/Diffie-Hellman/9827194?fromtitle=Diffie–Hellman&fromid=6611182&fr=aladdin 百度有很好的解释,我就不累述了。

举个例子: 比如我在银行里排队开账户,掏出手机给老婆打了一个电话:

我:“老婆啊,新账户账户密设神吗啊?” 老婆:“银行里人多耳杂,为了保密我们用Diffie–Hellman key exchange吧,我选两个数,p=23,和g=5“ 我:"好。" 老婆:“我们各自在心里再想一个数,不要告诉对方”。 我:“好。” 老婆:“假设我的数是a,那么5amod 23等于4。” 我:”假设我的数是b,那么5b5mod 23等于10。“ 老婆:”密码就设成10amod 23。“ 我:”好,就设成4bmod 23。“

事实上,老婆选的数是4,我选的数是3.我们选的密码是18。如果我们选别的数,那么就会得出另一个账户密码。但无论如何我们得出的密码是相等的。因为以下等式恒成立:

Untitled3.png 而其他人即使听到我们全部的谈话内容并知道这个算法,也很难算出这个密码是什么。我和老婆也不需要知道对方选的数是什么。在s和p选的足够大的时候,这个密码用现在的计算机算力是不可暴力破解的。

设我老婆选的数是a,称之为私钥。她给我的数A=ga是称之为公钥。 设我选的数是b,称之为私钥。我给老婆的数B=gb是称之为公钥。 设f(x, y)是上述定义的求次方取模操作。

则有f(A,b) = f(B,a)。

ECC椭圆线虽然比这个要复杂,它只是破解难度更高而已,所利用的原理始终都是 f(A,b) = f(B,a)。搞懂了这个,读懂monero加密算法就不难。

回到顶部