Stealth-Address

技術層面的隱形地址

  • May 7, 2015

假設使用者A想要將比特幣發送到使用者B隱身地址。

  1. B使用者的隱身地址到底是什麼?是他的公鑰嗎?由於使用者需要根據橢圓曲線 Diffie-HellmanA將他的私鑰與使用者的公鑰相乘,所以我假設使用者正在接收完整的點,即使用者的公鑰。B``A``B
  2. 使用者A應計算PrivA * PublicB出座標。據我所知,這一點將通過將其乘以publicB和一個隨機數來使用,然後將發送到網路。如果我說的是正確的,我怎麼能乘以這個座標,PublicB因為它們都是點。我們是否只能從 diffie hellman 的計算中得到這一點的一個軸?

使用者 B 的隱身地址究竟是什麼?是他的公鑰嗎?

在最簡單的隱身地址方案中,是的。確切的編碼取決於實現;DarkWallet 的描述在他們的 wiki中。

我如何將此座標與 PublicB 相乘,因為它們都是點?

正確,S = PrivA * PublicB = PrivB * PublicA是一個點。我們想要一個完整的共享秘密。ECDH 告訴你使用 x 座標S作為共享密鑰,但在比特幣中它的做法不同。而是int(sha256(compress(S)))使用:

  1. 根據SEC 1 的 Elliptic-Curve-Point-to-Octet-String 轉換以壓縮形式序列化 S
  2. 獲取它的 SHA-256 摘要
  3. 將結果解釋為 256 位大端整數

c然後,A 使用這個整數來計算 A 花費的公鑰,並由 B 計算B 可以從中贖回PublicB + c*G的私鑰(基點生成器在哪裡)。(PrivB + c) * G``G

請注意,這種“最簡單”的方案存在問題。B 的錢包軟體可以查看 B 是否可以贖回 UTXO(以跟踪錢包的餘額)的唯一方法是進行上述數學運算,這需要PrivB. 換句話說,它使只看錢包成為不可能(冷錢包不切實際)。

對此的一種解決方案是使用一對PublicB/PrivB對 ECDH,但使用不同的PublicB2/PrivB2對來導出支出/兌換密鑰。現在,您可以將其保存PrivB在僅用於觀看的錢包和PrivB2冷錢包中。不利的一面是,B 的隱身地址現在是原來的兩倍,同時包含PublicBPublicB2

引用自:https://bitcoin.stackexchange.com/questions/37278