Private-Key

交易後公鑰和私鑰會發生什麼?具體來說,付款後它們如何(以及為什麼)發生變化?

  • February 26, 2022

隨意回答/解決盡可能多的這些主題:

特別是,我對比特幣如何被盜感興趣,例如 2016 年的 Bitfinex 黑客。如果我沒記錯的話,竊取比特幣的唯一方法就是獲取個人的私鑰。我不明白每次付款後公鑰和私鑰如何以及為什麼會發生變化。這是因為需要私鑰來驗證支付,因此,一旦驗證,就必須生成一個新的,因為前一個現在已經被其他人知道了?新密鑰是如何生成的——由礦工還是其他什麼?它們是否與以前的鍵有任何關係?

TL;DR:私鑰和公鑰永遠不會自行更改。選擇輪換它們的是錢包軟體。

每個私鑰都會產生一個公鑰,對應一個(*)地址。流程一般是:

  • 收貨人 Roy 創建了一個地址:

    • 生成私鑰d
    • 計算d的公鑰P
    • 計算P的地址A
    • 將地址A提供給發件人 Sue
  • 發件人 Sue 向 Roy 匯款

    • 使用她的私鑰構造一個發送給A的交易 T1
  • 羅伊想用寄給A的錢來支付商人瑪麗:

    • Roy 構造了一筆交易 T2,指的是 T1 向A支付的款項,並發送到從 Mary 那裡收到的地址,並用私鑰d對其進行簽名。

Roy 可以選擇多次使用私鑰d,方法是為多個預期的收款提供地址 A。花費從這些付款中收到的錢將涉及使用相同的私鑰d簽署多個交易。

雖然沒有技術原因阻止這種做法(稱為地址重用),但出於隱私原因強烈建議不要這樣做。地址A在鏈上是可見的,因此重用將幫助那些 Roy 交易將不同的付款相互關聯起來。因此,大多數(但不是全部)錢包軟體只會顯示每個接收者地址一次。

這純粹是接收方錢包的決定。由於比特幣的交易和地址是如何工作的,每次交易都使用一個新地址而不是每次都重複使用相同的地址並沒有經濟利益。費用不取決於地址是否被重用。

大多數現代錢包軟體使用密鑰派生算法從單個種子或主密鑰派生不同的私鑰d 1、*d 2 ……。*這意味著錢包只需要(安全地)儲存一條資訊,所有密鑰都可以從中派生。然而,雖然所有密鑰都來自同一個種子,但公眾無法再從相應的地址推斷出這一點。這種推導的通用標準包括BIP32BIP39

(*) 由於比特幣的腳本系統,可以從同一個公鑰生成多個地址,儘管對於這個答案並不重要,因為這些地址仍然可以相互關聯。例如,可以從一個密鑰構造P2PKH、P2WPKH 或P2TR 地址,對應不同的腳本技術。但是,通常錢包只會使用其中之一。

免責聲明:我是 BIP32 的作者。

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