權益證明以太坊中的金鑰
最後編輯: @queenie0815(opens in a new tab), 2024年4月11日
以太坊使用公私金鑰密碼學來保護使用者資產。 公鑰是以太坊地址的基礎,可被大眾看見並用作一個獨特的身分識別。 私鑰(或「密鑰」)則永遠只能由帳戶擁有者存取。 私鑰被用來「簽署」交易和資料,以便密碼學可以驗證私鑰持有者核准特定私鑰的某些動作。
以太坊的金鑰透過橢圓曲線密碼學(opens in a new tab)產生。
然而,當以太坊從工作量證明轉換為權益證明後,一種新型態的金鑰加入到以太坊中。 原始的金鑰仍維持相同的運作 — 使用基於橢圓曲線密碼學的金鑰來保障帳戶安全沒有變化。 然而,使用者需要一種新型態的金鑰,透過質押以太幣和運作驗證者來參與權益證明。 這個需求源於擴容帶來的挑戰,許多訊息需要在眾多的驗證者間傳遞,過程中需要一種可以輕鬆彙總的密碼學方法,以減少網路達成共識所需的通訊量。
這種新型態的金鑰使用 Boneh-Lynn-Shacham (BLS) 簽章方案(opens in a new tab)。 BLS 能高效率地彙總簽名,同時允許對彙總的單獨驗證者金鑰進行逆向工程,非常適合管理驗證者之間的動作。
兩種類型的驗證者金鑰
在以太坊過渡到權益證明之前,使用者只有一個基於橢圓曲線密碼學的私密金鑰來存取他們的資金。 隨著權益證明的引入,希望成為單獨質押者的使用者還需要驗證者金鑰和提款金鑰。
驗證者金鑰
驗證者的簽章金鑰包含兩個元素:
- 驗證者私鑰
- 驗證者公鑰
驗證者私鑰的作用是簽署鏈上作業,像是區塊提議和證明區塊。 因此,這些私鑰必須存放在熱錢包中。
這種彈性的優勢是可以快速地在不同裝置間移轉驗證者簽章金鑰,然而,如果這些金鑰遺失或被偷,那竊盜者便可透過以下方式進行惡意行為:
- 使驗證者遭受罰沒:
- 做為提議者,在同一個時隙簽署兩個不同的信標區塊
- 做為證明者,簽署一個「包圍」另一個證明的證明
- 做為證明者,簽署兩個具有相同目標的不同證明
- 強制執行自願退出,使驗證者停止質押並授權提款金鑰擁有者存取其以太幣餘額。
當使用者將以太幣存入質押存款合約時,驗證者公鑰會被包含在交易資料中。 這被稱為存款資料,讓以太坊能夠辨識驗證者。
提款憑證
每個驗證者都會有一個稱為提款憑證的屬性。 這是一個 32 位元組的欄位,以 0x00
開頭,代表 Boneh-Lynn-Shacham 提款憑證,或是以 0x01
開頭,代表指向一個執行地址的憑證。
持有 0x00
Boneh-Lynn-Shacham 金鑰的驗證者,必須更新這些憑證,將其指向執行地址以啟用超額獎勵發放或全額質押提款。 驗證者可以在初始金鑰產生的階段,就將執行地址包含在存款資料中,或後續透過使用提款金鑰來簽署和廣播一則 BLSToExecutionChange
訊息。
提款金鑰
如果在初始存款階段沒有設定,則需要提款金鑰來更新提款憑證,將其指向執行地址。 此設定使超額獎勵發放能夠開始處理,也讓使用者能將他們質押的以太幣全額提款。
如同驗證者金鑰,提款金鑰也由兩個元件組成:
- 提款私鑰
- 提款公鑰
如果在更新提款憑證為 0x01
類型前遺失金鑰,則意味著喪失對驗證者餘額的存取權限。 驗證者依舊可以簽署證明和區塊,因為這些動作只需要驗證者私鑰,然而遺失了提款私鑰就幾乎沒有激勵。
將驗證者金鑰與以太坊帳戶金鑰分離,可以讓一個使用者運行多個驗證者。
從種子助記詞派生金鑰
如果每質押 32 個以太幣都需要一組新的 2 個完全獨立的金鑰,那金鑰管理很快就會變得無效率,尤其對那些運行多個驗證者的使用者而言。 相反,多個驗證者金鑰可以從一個共同的秘鑰派生,並且儲存這個秘鑰就允許存取多個驗證者金鑰。
助記詞(opens in a new tab)和路徑通常是使用者存取(opens in a new tab)自己的錢包時最重要的工具。 助記詞是一連串的文字,做為私密金鑰的初始種子。 當助記詞和額外的資料結合,即可產生一個稱為「主密鑰」的雜湊值。 這可以視為一個樹的根部。 然後從這個根部開始,使用階層路徑來派生分支,使子節點可以作為其父節點的雜湊值及其在樹中的索引之組合而存在。 閱讀 BIP-32(opens in a new tab) 及 BIP-19(opens in a new tab),瞭解基於助記詞生成金鑰的標準。
這些路徑具有以下結構,與硬體錢包有過互動的使用者會相對熟悉:
1m/44'/60'/0'/0`
這些路徑中的斜線將私鑰的組成部分區分如下:
1master_key / purpose / coin_type / account / change / address_index
因為樹根是相同的,變化發生在分支,所以這個邏輯讓使用者能將盡可能多的驗證者附加到一個助記詞上。 使用者可以從助記詞中派生任意數量的金鑰。
1 [m / 0]2 /3 /4[m] - [m / 1]5 \6 \7 [m / 2]
每一個分支由 /
來區分,因此 m/2
代表從主金鑰開始並遵循分支 2。 下圖顯示,一個助記詞用來儲存三個提款金鑰,每一個金鑰有兩個關聯的驗證者。