來聊聊Monero (門羅幣) 的隱匿性地址產生方法吧 要知道隱匿性地址的原理,首先要瞭解橢圓曲線密碼學(ECC)的一些特性 ( https://zh.wikipedia.org/wiki/%E6%A4%AD%E5%9C%86%E6%9B%B2%E7%BA%BF%E5%AF%86%E7%A0%81%E5%AD%A6 ) 其中最重要的是橢圓曲線DH金鑰交換(ECDH) ( https://zh.wikipedia.org/wiki/%E6%A9%A2%E5%9C%93%E6%9B%B2%E7%B7%9A%E8%BF%AA%E8%8F%B2-%E8%B5%AB%E7%88%BE%E6%9B%BC%E9%87%91%E9%91%B0%E4%BA%A4%E6%8F%9B ) ECDH簡單來講就是 我的私鑰乘以你的公鑰 會等於 你的私鑰乘以我的公鑰 ; a*B = b*A。 雙方都只要有對方的公鑰就可以算出共享金鑰的值,但外人無法算出共享金鑰,所以可以利用這把共享金鑰做秘密通訊。 舉例來說,甲想轉錢給乙,甲知道乙的公鑰,於是甲產生一個一次性的隨機私鑰r和對應的一次性公鑰R,將r乘上乙的公鑰B得到一把共享金鑰D。 有了D之後就好辦事了,接下來用D當種子產生一把私鑰h (私鑰就是一個256bit整數,所以對D取hash就可以產生一個私鑰) 以及對應的公鑰H,而公鑰就是地址。 然後甲就可以把錢轉到H地址,並且在交易中附帶一次性公鑰R的資訊,也就是向網路廣播:「給某人,我把錢轉到R乘上你的私鑰所對應的地址H了」,於是每個收到廣播的人就開始(在鏈下)拿自己的私鑰乘上R然後轉換成地址看是不是H。 其中乙算出了b*R = r*B = D; hash(D) = h ; Pubkey(h) = H。於是乙就知道這筆錢是轉給他的,他也可以拿私鑰h去動用這筆錢。而其他人還是不知道收款者是誰,(甚至乙把錢轉走後,其他人還是不知道是乙轉走的,因為H和B之間沒有公開的連結。) 這是ECDH的基本原理,還需要其他的流程,因為可以看到以上的做法,甲是算得出h的,也就代表他可以動用H地址的資產,這樣乙是沒辦法安心的,所以還要再用乙的公鑰再加一道鎖。這就牽涉到橢圓曲線密碼學的另一個特性 分配律。下次再說吧。
Log in to join in Reading is open to everyone. Replying needs an account.
5 comments
哈 我之前寫到 BCH 可以盡量做到鏈上隱私 而要從本地端就開始耍神秘就是想敲碗 XMR XD 公開祕鑰交換我過去只知道質數為底的那個 沒想到 EC 也能拿來用
ECDH密鑰交換和DH密鑰交換應該幾乎是一樣的,ECC做了域轉換後就有Mod乘法群特性,然後就可以做DH密鑰交換。 所以ECC有些時候(尤其是使用Mod乘法群特性的時候) 公式裡頭的橢圓曲線加法及乘法會寫成乘法和指數運算,來和RSA做對應。 aG + bG = (a+b)G 會寫成 G^a * G^b = G^(a+b) 然後ECDH就和RSA為底的DH一樣。
不要這麼專業好不好XD
太專業惹推!
推原理解釋 這樣大家是不是就會覺得我看的懂