錢包是必不可少的工具,使用者可以管理他們的區塊鏈帳戶,安全地存儲他們的資產,並簽署交易以對區塊鏈狀態進行更改。
在這篇文章中,我們將介紹錢包是什麼,錢包是如何製作的,以及它們如何使用橢圓曲線加密生成和保護私鑰-公鑰對、推導種子短語並促進安全的區塊鏈交互。
錢包是一個應用程式,讓您查看和與您的區塊鏈帳戶進行互動;這些帳戶使您能夠提交交易,執行操作,例如發送代幣或與智能合約進行互動。
區塊鏈上的每個帳戶都由一對加密密鑰組成;這是一組相互關聯的2個密鑰。在區塊鏈的上下文中,這種帳戶通常被稱為外部所有帳戶(EOA),由公鑰和私鑰組成:
這個金鑰對有一個強大的功能,稱為陷阱函數; 這意味著它是:
錢包用於使用錢包的私鑰簽署消息或交易,以發送到區塊鏈。
錢包提供了一種方式來知道錢包同意了哪些消息或交易;因為可以從交易簽名中恢復交易發送者的公鑰。這對於防止區塊鏈上被接受的假/惡意交易是必不可少的。
例如,Jarrod 可以提交一筆交易,聲稱 Abril 向他發送了 5 ETH,即使她從未同意這筆交易。但是,由於區塊鏈會驗證每筆交易的簽名,因此它將很快拒絕交易,因為從簽名中恢復的位址與交易的“發送者”(即Abril)不匹配。
像以太坊這樣的區塊鏈使用ECDSA(椭圆曲线数字签名算法)來檢查從交易簽名中恢復的公鑰是否與將交易發送到網絡的人的公鑰相匹配。
要创建钱包,您需要创建公私钥对。但是,此密钥对的值需要遵循一些规则,以便在区块链上正常工作。
這個三步驟的過程是在區塊鏈上生成帳戶的核心流程。
接下來,我們將深入探討使用橢圓曲線和私鑰來衍生公鑰的過程。但在此之前,我們將回答您可能對錢包有的其他幾個問題,例如:
雖然我們剛才展示了如何生成一個隨機的64位十六進制值,但通常私鑰是使用源自比特幣的特定標準生成的。這些標準使用者能夠記住種子短語,種子短語是一個包含12到24個單詞的短語,可以用來創建與其關聯的任意數量的新帳戶。
這允許使用者記住一組單詞來訪問他們的所有帳戶;每個都有單獨的公鑰-私鑰對。可以使用特定的金鑰派生函數 (KDF) 從單個種子短語派生任意數量的新私鑰。
首先,讓我們先介紹一下種子短語是如何通過隨機熵生成的,以及如何從種子短語中派生私鑰,最後再回顧一下如何從私鑰派生公鑰。
當您首次安裝錢包應用程式時,通常會要求您寫下並安全地存儲種子短語的地方;通常是12或24個單詞的組合。您可以看到一個可能的英文單詞列表的示例這裡,你會注意到這篇文章長達2048個字(我們稍後會再提到這個數字)。
這個存儲助記詞種子的理念是在2013年通過比特幣改進提案(BIP-39)引入的。該提案提供了一種標準化的方法來生成隨機熵並將其轉化為一系列易於記憶的單詞。
首先,我們需要確保我們的種子短語是隨機生成的,畢竟,我們不希望其他人意外進入我們的錢包並存取我們的資金。
為此,在瀏覽器中使用CSPRNG(加密安全偽隨機數生成器)生成一個隨機數,您可以這樣做:
這個隨機數被稱為熵。這種熵用於創建形成種子詞組的一組單詞。在我們的情況下,128位對應於12個單詞,但也可以使用其他長度,例如:
那麼,我們如何使用這些位來創建助記詞呢?比特和單詞之間有什麼關係?首先,創建熵的校驗和並將其附加到128位;這是為確保其完整性而創建的熵的 4 位哈希。
因此,現在我們有128位的熵+4位的檢查和,總共132位。接下來,132位被轉換成二進制;具體來說,它們被分成11位的塊。
我們現在有一組由12個二進制數字組成,每個數字長度為11位。提示:我們有12個數字,我們的種子密語將是12個單詞!
請回想一下,我們的列表中有 2048 個單詞,而 2048 是 2^11,因為使用 11 個位元組,你可以製造出 2048 種不同的二進制數字。
現在我們只需要將這些二進制數轉換為我們單詞列表中的單詞。這是通過使用二進制數作為索引來查找單詞列表中的單詞來執行的。即如果二進制數是10,我們使用列表中的第9個單詞(因為我們從索引0開始),例如:
重複此操作 12 次,每個 11 位數位一個,以形成包含 12 個單詞的種子短語。
通過生成隨機熵值,將其分成二進制塊,並將這些二進制值用作在詞表中查找單詞的索引,我們最終得到一個隨機種子短語。
對此,您可能會立即反應:“如果只有 2048 個可能的單詞,是否有人可以猜到我的種子短語?” 嗯,技術上是的,但實際上...真的非常不太可能。您問多不可能?
想像一下,我們忘記了隨機的 128 位生成步驟,只需從清單中手動選擇 12 個單詞。每次選擇一個單詞時,我們都會在 2048 個單詞池中選擇一個選項。
所以,我們可以說,對於其他人來說,要猜出這個相同的詞序列,他們需要連續12次正確猜中和我們相同的單詞,機會是1/2048。現在,你可能在想,“好吧,這聽起來並不那麼困難...”對吧?但是,讓我們玩這個吧:
這是 2048 x 2048 x 2048 ...12次。或者,2048^12。這是...一個大得離譜的數位。粗略地說,5個七分之一,或5千萬億億。這對我們來說是深不可測的,但讓我們試試......
想像一下,你現在開始猜測,使用一台功能強大的計算機,每秒可以猜測1萬億個種子短語。這台機器需要159萬億年才能猜出一個種子短語。或者,(取決於你的信仰),大約比當前宇宙年齡長11,000倍。
24個單字的種子密碼比12個更好嗎?
一些錢包選擇了128位元(12個單詞),但現代化的錢包要求您記住24個單詞作為種子密語!這真是太長了。
現在我們有一個12個單詞的種子短語,它如何用於創建帳戶的私鑰?為了做到這一點,我們需要將我們的種子短語轉換為可以用於生成錢包的二進制種子。該過程涉及以下步驟:
此過程(稱為密鑰派生函數)使用另一種稱為HMAC-SHA512的算法作為偽隨機函數,輸出一個64字節的哈希值,稱為二進制種子。
輸出的 64 位元組雜湊值可用於使用其他比特幣標準起源的邏輯生成帳戶;即 BIP-32 和可選擇的 BIP-32 擴展,BIP-44。
BIP-32引入了分層確定性(HD)錢包;從單個種子可以派生出許多錢包,從這些錢包可以派生出更多的錢包,從而創建了一個“樹”錢包。
BIP-44 提供了一種標準化的方式,通過實現特定的衍生路徑,從單一的二進制種子創建錢包結構的層次結構:m / purpose’ / coin_type’ / account’ / change / address_index:
並非所有錢包都使用BIP-44,但這是標準化帳戶如何從二進位種子派生的常用方法。
如前所述,私鑰是 64 個十六進位字元,即 32 個字節。而且,我們剛剛通過 PBKDF2 進程生成了一個 64 位元組的二進位種子 - 那麼我們如何使用這個 64 位元組的哈希值來創建私鑰呢?
首先,哈希被分成兩半,每半大小為32位元組:
現在我們了解私鑰的外觀,它們如何隨機生成,以及如何從單個種子短語派生多個鍵。接下來,讓我們探索如何從私鑰派生公鑰。
使用橢圓曲線加密(ECC),我們可以根據給定的私鑰找到公鑰。有不同種類的橢圓曲線,但比特幣和以太坊都使用的是稱為secp256k1的曲線。
此橢圓曲線的規格包括一個基點 G,該基點用作我們在曲線上創建其他點的起點。從這個起點開始,我們根據我們的私鑰以特定方式在曲線上“移動”了若干次(由我們的私鑰確定)。當我們停止此過程時,我們最終停在曲線上的點將是我們的公鑰。
我们在曲线上的“移动方式”称为标量乘法。在使用椭圆曲线时,标量是指用于缩放曲线上的点的数字。我们取基点G并将标量数应用于它,通过“拉伸”该点来到达曲线上的新点。
我們將標量數應用於基點,這就是我們的私鑰;簡單來說,我們將起始點 G 乘以私鑰的標量,得到我們的公鑰。
實際上,由於該曲線定義於素域ℤp上,它看起來更像一堆散點...但仍具有橢圓曲線的相同特性。
在這個純量乘法過程的結尾(跳來跳去了
公鑰,正如其名,可以與任何人公開分享。它們對以下方面非常有用:
錢包是使用橢圓曲線加密的區塊鏈的重要組成部分,它允許用戶從其帳戶提交交易並簽署消息。
然而,像Abstract這樣的一些區塊鏈也支援新型錢包,稱為智慧合約帳戶,提供更多功能並實現更強的安全性、恢復機制等。
本文轉載自[https://abs.xyz/blog],轉發原標題“什麼是錢包?”,所有版權歸原作者所有[Jarrod Watts]。如果對此轉載有異議,請聯繫Gate Learn團隊,他們將迅速處理。
責任聲明:本文所表達的觀點及意見僅屬作者個人之見,並不構成任何投資建議。
文章的翻譯由 Gate Learn 團隊完成。未經註明,禁止複製、分發或剽竊翻譯的文章。
錢包是必不可少的工具,使用者可以管理他們的區塊鏈帳戶,安全地存儲他們的資產,並簽署交易以對區塊鏈狀態進行更改。
在這篇文章中,我們將介紹錢包是什麼,錢包是如何製作的,以及它們如何使用橢圓曲線加密生成和保護私鑰-公鑰對、推導種子短語並促進安全的區塊鏈交互。
錢包是一個應用程式,讓您查看和與您的區塊鏈帳戶進行互動;這些帳戶使您能夠提交交易,執行操作,例如發送代幣或與智能合約進行互動。
區塊鏈上的每個帳戶都由一對加密密鑰組成;這是一組相互關聯的2個密鑰。在區塊鏈的上下文中,這種帳戶通常被稱為外部所有帳戶(EOA),由公鑰和私鑰組成:
這個金鑰對有一個強大的功能,稱為陷阱函數; 這意味著它是:
錢包用於使用錢包的私鑰簽署消息或交易,以發送到區塊鏈。
錢包提供了一種方式來知道錢包同意了哪些消息或交易;因為可以從交易簽名中恢復交易發送者的公鑰。這對於防止區塊鏈上被接受的假/惡意交易是必不可少的。
例如,Jarrod 可以提交一筆交易,聲稱 Abril 向他發送了 5 ETH,即使她從未同意這筆交易。但是,由於區塊鏈會驗證每筆交易的簽名,因此它將很快拒絕交易,因為從簽名中恢復的位址與交易的“發送者”(即Abril)不匹配。
像以太坊這樣的區塊鏈使用ECDSA(椭圆曲线数字签名算法)來檢查從交易簽名中恢復的公鑰是否與將交易發送到網絡的人的公鑰相匹配。
要创建钱包,您需要创建公私钥对。但是,此密钥对的值需要遵循一些规则,以便在区块链上正常工作。
這個三步驟的過程是在區塊鏈上生成帳戶的核心流程。
接下來,我們將深入探討使用橢圓曲線和私鑰來衍生公鑰的過程。但在此之前,我們將回答您可能對錢包有的其他幾個問題,例如:
雖然我們剛才展示了如何生成一個隨機的64位十六進制值,但通常私鑰是使用源自比特幣的特定標準生成的。這些標準使用者能夠記住種子短語,種子短語是一個包含12到24個單詞的短語,可以用來創建與其關聯的任意數量的新帳戶。
這允許使用者記住一組單詞來訪問他們的所有帳戶;每個都有單獨的公鑰-私鑰對。可以使用特定的金鑰派生函數 (KDF) 從單個種子短語派生任意數量的新私鑰。
首先,讓我們先介紹一下種子短語是如何通過隨機熵生成的,以及如何從種子短語中派生私鑰,最後再回顧一下如何從私鑰派生公鑰。
當您首次安裝錢包應用程式時,通常會要求您寫下並安全地存儲種子短語的地方;通常是12或24個單詞的組合。您可以看到一個可能的英文單詞列表的示例這裡,你會注意到這篇文章長達2048個字(我們稍後會再提到這個數字)。
這個存儲助記詞種子的理念是在2013年通過比特幣改進提案(BIP-39)引入的。該提案提供了一種標準化的方法來生成隨機熵並將其轉化為一系列易於記憶的單詞。
首先,我們需要確保我們的種子短語是隨機生成的,畢竟,我們不希望其他人意外進入我們的錢包並存取我們的資金。
為此,在瀏覽器中使用CSPRNG(加密安全偽隨機數生成器)生成一個隨機數,您可以這樣做:
這個隨機數被稱為熵。這種熵用於創建形成種子詞組的一組單詞。在我們的情況下,128位對應於12個單詞,但也可以使用其他長度,例如:
那麼,我們如何使用這些位來創建助記詞呢?比特和單詞之間有什麼關係?首先,創建熵的校驗和並將其附加到128位;這是為確保其完整性而創建的熵的 4 位哈希。
因此,現在我們有128位的熵+4位的檢查和,總共132位。接下來,132位被轉換成二進制;具體來說,它們被分成11位的塊。
我們現在有一組由12個二進制數字組成,每個數字長度為11位。提示:我們有12個數字,我們的種子密語將是12個單詞!
請回想一下,我們的列表中有 2048 個單詞,而 2048 是 2^11,因為使用 11 個位元組,你可以製造出 2048 種不同的二進制數字。
現在我們只需要將這些二進制數轉換為我們單詞列表中的單詞。這是通過使用二進制數作為索引來查找單詞列表中的單詞來執行的。即如果二進制數是10,我們使用列表中的第9個單詞(因為我們從索引0開始),例如:
重複此操作 12 次,每個 11 位數位一個,以形成包含 12 個單詞的種子短語。
通過生成隨機熵值,將其分成二進制塊,並將這些二進制值用作在詞表中查找單詞的索引,我們最終得到一個隨機種子短語。
對此,您可能會立即反應:“如果只有 2048 個可能的單詞,是否有人可以猜到我的種子短語?” 嗯,技術上是的,但實際上...真的非常不太可能。您問多不可能?
想像一下,我們忘記了隨機的 128 位生成步驟,只需從清單中手動選擇 12 個單詞。每次選擇一個單詞時,我們都會在 2048 個單詞池中選擇一個選項。
所以,我們可以說,對於其他人來說,要猜出這個相同的詞序列,他們需要連續12次正確猜中和我們相同的單詞,機會是1/2048。現在,你可能在想,“好吧,這聽起來並不那麼困難...”對吧?但是,讓我們玩這個吧:
這是 2048 x 2048 x 2048 ...12次。或者,2048^12。這是...一個大得離譜的數位。粗略地說,5個七分之一,或5千萬億億。這對我們來說是深不可測的,但讓我們試試......
想像一下,你現在開始猜測,使用一台功能強大的計算機,每秒可以猜測1萬億個種子短語。這台機器需要159萬億年才能猜出一個種子短語。或者,(取決於你的信仰),大約比當前宇宙年齡長11,000倍。
24個單字的種子密碼比12個更好嗎?
一些錢包選擇了128位元(12個單詞),但現代化的錢包要求您記住24個單詞作為種子密語!這真是太長了。
現在我們有一個12個單詞的種子短語,它如何用於創建帳戶的私鑰?為了做到這一點,我們需要將我們的種子短語轉換為可以用於生成錢包的二進制種子。該過程涉及以下步驟:
此過程(稱為密鑰派生函數)使用另一種稱為HMAC-SHA512的算法作為偽隨機函數,輸出一個64字節的哈希值,稱為二進制種子。
輸出的 64 位元組雜湊值可用於使用其他比特幣標準起源的邏輯生成帳戶;即 BIP-32 和可選擇的 BIP-32 擴展,BIP-44。
BIP-32引入了分層確定性(HD)錢包;從單個種子可以派生出許多錢包,從這些錢包可以派生出更多的錢包,從而創建了一個“樹”錢包。
BIP-44 提供了一種標準化的方式,通過實現特定的衍生路徑,從單一的二進制種子創建錢包結構的層次結構:m / purpose’ / coin_type’ / account’ / change / address_index:
並非所有錢包都使用BIP-44,但這是標準化帳戶如何從二進位種子派生的常用方法。
如前所述,私鑰是 64 個十六進位字元,即 32 個字節。而且,我們剛剛通過 PBKDF2 進程生成了一個 64 位元組的二進位種子 - 那麼我們如何使用這個 64 位元組的哈希值來創建私鑰呢?
首先,哈希被分成兩半,每半大小為32位元組:
現在我們了解私鑰的外觀,它們如何隨機生成,以及如何從單個種子短語派生多個鍵。接下來,讓我們探索如何從私鑰派生公鑰。
使用橢圓曲線加密(ECC),我們可以根據給定的私鑰找到公鑰。有不同種類的橢圓曲線,但比特幣和以太坊都使用的是稱為secp256k1的曲線。
此橢圓曲線的規格包括一個基點 G,該基點用作我們在曲線上創建其他點的起點。從這個起點開始,我們根據我們的私鑰以特定方式在曲線上“移動”了若干次(由我們的私鑰確定)。當我們停止此過程時,我們最終停在曲線上的點將是我們的公鑰。
我们在曲线上的“移动方式”称为标量乘法。在使用椭圆曲线时,标量是指用于缩放曲线上的点的数字。我们取基点G并将标量数应用于它,通过“拉伸”该点来到达曲线上的新点。
我們將標量數應用於基點,這就是我們的私鑰;簡單來說,我們將起始點 G 乘以私鑰的標量,得到我們的公鑰。
實際上,由於該曲線定義於素域ℤp上,它看起來更像一堆散點...但仍具有橢圓曲線的相同特性。
在這個純量乘法過程的結尾(跳來跳去了
公鑰,正如其名,可以與任何人公開分享。它們對以下方面非常有用:
錢包是使用橢圓曲線加密的區塊鏈的重要組成部分,它允許用戶從其帳戶提交交易並簽署消息。
然而,像Abstract這樣的一些區塊鏈也支援新型錢包,稱為智慧合約帳戶,提供更多功能並實現更強的安全性、恢復機制等。
本文轉載自[https://abs.xyz/blog],轉發原標題“什麼是錢包?”,所有版權歸原作者所有[Jarrod Watts]。如果對此轉載有異議,請聯繫Gate Learn團隊,他們將迅速處理。
責任聲明:本文所表達的觀點及意見僅屬作者個人之見,並不構成任何投資建議。
文章的翻譯由 Gate Learn 團隊完成。未經註明,禁止複製、分發或剽竊翻譯的文章。