對於比特幣用戶來說,與它們最直接相關的就是比特幣中私鑰、帳戶及錢包了,這裏講述一下這三個概念及相關細節。在這以前,先簡單的敘述一下相關的公鑰密碼學知識。算法
公鑰密碼體制分爲三部分:公鑰、私鑰、加密解密算法。公鑰密碼體制的公鑰和算法都是公開的(這也是公鑰密碼體制名稱的來源),私鑰是保密的。針對不一樣的用途,可選擇採用公鑰仍是私鑰進行加密,再用對應的私鑰或者公鑰進行解密。公鑰密碼體制主要功能有如下三點:微信
在⽐特幣系統中,咱們⽤公鑰加密建立⼀個密鑰對,⽤於控制⽐特幣的獲取。密鑰對包括⼀個私鑰,和由其衍⽣出的惟⼀的公鑰。公鑰⽤於接收⽐特幣,⽽私鑰⽤於⽐特幣⽀付時的交易簽名。公鑰和私鑰之間的數學關係,使得私鑰可⽤於⽣成特定消息的簽名。此簽名能夠在不泄露私鑰的同時對公鑰進⾏驗證。⽀付⽐特幣時,⽐特幣的當前全部者須要在交易中提交其公鑰和簽名(每次交易的簽名都不一樣,但均從同⼀個私鑰⽣成)。⽐特幣⽹絡中的全部⼈均可以經過所提交的公鑰和簽名進⾏驗證,並確認該交易是否有效,即確認⽀付者在該時刻對所交易的⽐特幣擁有全部權。 網絡
私鑰其實就是一個隨機選出的數字而已。一個比特幣地址中的全部資金的控制取決於相應私鑰的全部權和控制權。在比特幣交易中,私鑰用於生成支付比特幣所必需的簽名以證實對資金的全部權。私鑰必須始終保持機密,由於一旦被泄露給第三 方,至關於該私鑰保護之下的比特幣也拱手相讓了。私鑰還必須進行備份,以防意外丟失,由於私鑰一旦丟失就難以復原,其所保護的比特幣也將永遠丟失。函數
這個隨機數字怎麼選出來的呢?通常是經過隨機函數生成器來實現的,這裏再也不細述。學習
上圖中,咱們已經看到比特幣帳戶(地址)的大體生成過程(私鑰-->公鑰-->比特幣地址),這裏詳細的描述其生成細節。在比特幣帳戶生成過程當中應用了兩個密碼學哈希函數,一個是SHA256,另外一個是RIPEMD160。下圖爲比特幣地址(帳戶)的生成流程: 區塊鏈
<比特幣地址前綴0x00 | 公鑰哈希值>
作雙哈希運算,取前4字節做爲校驗碼。<比特幣地址前綴0x00 | 公鑰哈希 | 校驗碼>
進行base58編碼獲得地址。其餘前綴的含義以下表:編碼
種類 | 版本前綴(hex) | Base58格式 |
---|---|---|
Bitcoin Address | 0x00 | 1 |
Pay-to-Script-Hash Address | 0x05 | 3 |
Bitcoin Testnet Address | 0x6F | m or n |
Private Key WIF(錢包導入格式) | 0x80 | 5(沒有壓縮), K or L (壓縮格式) |
BIP38 Encrypted Private Key | 0x0142 | 6P |
BIP32 Extended Public Key | 0x0488B21E | xpub |
採用base58編碼格式對地址進行編碼,主要是爲了方便使用和識別。加密
錢包是一個應用程序,爲用戶提供交互界面。錢包控制用戶訪問權限,管理密鑰和地址,跟蹤餘額以及建立和簽名交易。其中,最核心的功能是保管私鑰,一旦私鑰泄露或者忘了,就會形成比特幣被盜走或丟失。code
錢包裏有比特幣嗎?錢包裏只有密鑰,並無比特幣。cdn
那個人比特幣在哪裏?你擁有的比特幣其實是全部你帳戶地址的未花費交易輸出。錢包會監控到輸出到你的公鑰地址的輸出,好比A轉給你1個比特幣,B轉給你9個比特幣,而你目前沒有將它們轉給其餘人,則錢包計算出目前你有10個比特幣。當你須要花費比特幣轉帳給其餘人時,你構造一筆交易,用你的未花費交易輸出做爲輸入,輸出爲接收方帳戶地址,並設置轉帳金額,本身的公鑰信息等,對再交易簽名(私鑰簽名)確認後,發送到比特幣網絡等待確認後,轉帳完成。
歡迎關注微信公衆號,一塊兒學習區塊鏈相關技術!
![]()