這個過程看起來很簡單方便,和我們現在的銀行卡轉賬沒什麽區別,但是妳知道這個過程在比特幣系統中是怎麽實現的嗎?它隱藏了什麽原則?或者說,它如何保證交易能夠在安全的環境下進行?
今天就來說說吧。
對於發送者和接收者,即伊壹和我(我是發送者,伊壹是接收者),我們需要發布兩件事情:錢包地址和私鑰。
先說錢包地址。比特幣錢包地址其實相當於銀行卡、支付寶賬戶、微信錢包賬戶。它是比特幣支付和轉賬的“憑證”,記錄了平臺、錢包和錢包之間的轉賬信息。
我們使用銀行卡、支付寶、微信轉賬都需要密碼,才能支付成功。那麽在比特幣轉賬中,也有這樣壹種“密碼”,叫做“私鑰”。當妳掌握了私鑰,妳就掌握了其對應的比特幣地址上的生殺大權。
“私鑰”屬於“非對稱加密算法”的概念,與之相對應的還有另壹個概念,叫做“公鑰”。
公鑰和私鑰可以從字面上理解:公鑰可以公開;然而,私鑰是私有的,由您自己擁有,需要絕對保密。
公鑰是根據私鑰計算的,比特幣系統使用橢圓曲線加密算法根據私鑰計算公鑰。這就使得公鑰和私鑰形成了唯壹的對應關系:當妳用其中壹個密鑰加密信息時,只有另壹個密鑰可以解密。因此,基於這種唯壹的對應關系,它們可以用來驗證信息發送者的身份,也可以絕對保密。
讓我們舉例說明公鑰和私鑰在非對稱加密算法中是如何工作的。
我們知道公鑰是可以公開的,所以大家都知道我們的公鑰。在轉移資金的過程中,我不僅要確保比特幣被轉移到伊壹,而且不能轉移到其他人。我還必須讓伊壹知道,這些比特幣是我轉給她的,而不是鹿或九哥。
比特幣系統可以滿足我的上述訴求:比特幣系統會把我的交易信息縮短成壹個定長的字符串,也就是壹個摘要,然後把我的私鑰附加在這個摘要上,形成數字簽名。因為數字簽名包含了我的私鑰信息,所以數字簽名可以證明我的身份。
完成後,完整的交易信息和數字簽名將壹起廣播給礦工。礦工將使用我的公鑰來驗證我的公鑰和我的數字簽名是否匹配。如果驗證成功,就沒有問題。那麽,就可以說明交易確實是我發的,信息沒有被更改。
接下來,礦工需要驗證在這次交易中花費的比特幣是否是“未使用”的交易。如果驗證成功,放入“未確認交易”等待打包;如果驗證失敗,該交易將被標記為“無效交易”,不會被打包。
其實對公鑰和私鑰的簡單理解就是:既然加密了,他們肯定不希望別人知道我的消息,所以只有我能解密,所以可以得出結論,公鑰負責加密,私鑰負責解密;同理,既然是簽名,我肯定不希望有人冒充我。只有我可以發布這個數字簽名,所以可以得出結論,私鑰負責簽名,公鑰負責驗證。
在此,我們簡單總結壹下以上內容。以上我們主要講以下幾個詞:私鑰,公鑰,錢包地址,數字簽名。讓我們來看看它們之間的關系:
(1)私鑰由系統隨機生成,公鑰由私鑰計算,錢包地址由公鑰計算,即私鑰-公鑰-錢包地址的過程;
(2)數字簽名由交易信息+私鑰信息計算得出。因為數字簽名包含私鑰信息,所以可以證明其身份。
私鑰和公鑰都屬於密碼學領域,屬於“非對稱加密”算法中的“橢圓加密算法”。之所以采用這種算法,是為了保證交易的安全性。他們的職能如下:
(1)公鑰加密,私鑰解密:公鑰在全網公開,我用伊壹的公鑰加密信息,伊壹可以用她自己的私鑰解密;
(2)私鑰簽名,公鑰驗證:我給伊壹發消息,我添加自己的私鑰信息形成數字簽名,伊壹用我的公鑰驗證。驗證成功證明確實是我發的消息。
但在比特幣交易中,加密、解密、驗證都交給礦工。
至於我們現在經常使用的錢包APP,它只是壹個管理私鑰、錢包地址等區塊鏈數據的工具。錢包分為冷錢包和熱錢包。冷錢包離線,從不聯網。壹般以壹些實體的形式出現,比如小筆記本。熱錢包是聯網的,我們用的錢包APP屬於熱錢包。