這個過程看似很簡單也很便捷,跟我們現在的銀行卡轉賬沒什麼區別,但是,你知道這個過程是怎樣在比特幣係統裏麵實現的嗎?它隱藏了哪些原理呢?又或者,它是如何保證交易能夠在一個安全的環境下進行呢?
我們今天就來講一講。
對於轉出方和接收方來講,也就是我和依依(我是轉出方,依依是接收方)我們都需要出具兩個東西:錢包地址、私鑰。
我們先說錢包地址。比特幣錢包地址其實就相當於銀行卡、支付寶賬號、微信錢包賬號,是比特幣支付轉賬的“憑證”,記錄著平台與平台、錢包與錢包、錢包與平台之間的轉賬信息。
我們在使用銀行卡、支付寶、微信轉賬時都需要密碼,才能夠支付成功。那麼,在比特幣轉賬中,同樣也有這麼一個“密碼”,這個“密碼“被稱作“私鑰”。掌握了私鑰,就掌握了其對應比特幣地址上的生殺大權。
“私鑰”是屬於“非對稱加密算法”裏麵的概念,與之對應的還有另一個概念,名叫:“公鑰”。
公鑰和私鑰,從字麵意思我們就可以理解:公鑰,是可以公開的;而私鑰,是私人的、你自己擁有的、需要絕對保密的。
公鑰是根據私鑰計算形成的,比特幣係統使用的是橢圓曲線加密算法,來根據私鑰計算出公鑰。這就使得,公鑰和私鑰形成了唯一對應的關係:當你用了其中一把鑰匙加密信息時,隻有配對的另一把鑰匙才能解密。所以,正是基於這種唯一對應的關係,它們可以用來驗證信息發送方的身份,還可以做到絕對的保野渣密。
我們舉個例子講一下,在非對稱加密算法中,公鑰和私鑰是怎麼運作的。
我們知道,公鑰是可以對外公開的,那麼,所有人都知道我們的公鑰。在轉賬過頌帶悄程中,我不僅要確保比特幣轉給依依,而不會轉給別人,還得讓依依知道,這些比特幣是我轉給她的,不是鹿鹿,也不是韭哥。
比特幣係統可以滿足我的上述訴求:比特幣係統會把我的交易信息縮短成固定長度的字符串,也就是一段摘要,然後把我的私鑰附在這個摘要上,形成一個數字簽名。因為數字簽名裏麵隱含了我的私鑰信息,所以,數字簽名可以證明我的身份。
完成之後,完整的交易信息和數字簽名會一起廣播給礦工,礦工用我的公鑰進行驗證、看看我的公鑰和我的數字簽名能不能匹配上,如果驗證成功,都沒問題,那麼,就能夠說明這個交易確實是我發出的,而且信息沒有被更改。
接下來,礦工需要驗證,這筆交易花費的比特幣是否是“未被花費”的交易。如果驗證成功,則將其放入“未確認交易”,等待被打包;如果驗證失敗,則該交易會被標記為“無效交易”,不會被打包。
其實,公鑰和私鑰,簡單理解就是:既然是加密,那肯定是不希望別人知道我的消息,所以隻能我才能解密,所以可得出:公鑰負責加密,私鑰負責解密;同理,既然是簽名,那肯定是不希望有人冒充我的身份,隻有我才能發布這個數字簽名,所以可得出:私鑰負責簽名,公鑰負責驗證。
到這裏,我們簡單概括一下上麵的內容。上麵我們主要講到這麼幾個詞:私鑰、公鑰、錢包地址、數字簽名,它們之間的關係我們理一下:
(1)私鑰是係統隨機生成的,公鑰是由私鑰計算得出的,錢包地址是由公鑰計算得出的,也就是:私鑰——公鑰——錢包地址,這樣一個過程;
(2)數字簽名,是由交易信息+私鑰信息計算得出的,因為數字簽名隱含私鑰信息,所以可以證明自己的身份。
私鑰、公鑰都是密碼學範疇的,屬於“非對稱加密”算法中的“橢圓加密算法”,之所以采用這種算法,是為了保障交易的安全,二者的作用在於:
(1)公鑰加密,私鑰解密:公鑰全網公開,我用依依的公鑰給信息加密,依依用自己的私鑰可以解密;
(2)私鑰簽名,公鑰驗證:我給依依發信息,我加上我自己的私鑰信息形成數字簽名,依依用我的公鑰來驗證,驗證成功就證明的確是我發送的信息。
隻不過,在比特幣交易中,加密解密啦、驗證啦這些都交給礦工了。
至於我們現在經常用的錢包APP,隻不過是私鑰、錢包地址和其他區塊鏈數據的管理工具而已。錢包又分冷錢包和熱錢包,冷錢包是離線的,永遠不聯網的,一般是以一些實體的形式出現,比如小本子什麼的;熱錢包是聯網的,我們用的錢包APP就屬於熱錢包。