詳細描述什么是比特幣私鑰、賬戶與錢包

比特幣私鑰、賬戶與錢包公鑰密碼體制(Public-key cryptography)公鑰密碼體制分為三部分:公鑰、私鑰、加密解密算法 。 公鑰密碼體制的公鑰和算法都是公開的(這也是公鑰密碼體制名稱的來源) , 私鑰是保密的 。 針對不同的用途 , 可選擇采用公鑰還是私鑰進行加密 , 再用對應的私鑰或者公鑰進行解密 。 公鑰密碼體制主要功能有以下三點:

    加解密功能
    簽名驗證功能
    密鑰協商功能

詳細描述什么是比特幣私鑰、賬戶與錢包

文章插圖

在比特幣系統中 , 我們?公鑰加密創建?個密鑰對 , 用于控制比特幣的獲取 。 密鑰對包括?個私鑰 , 和由其衍生出的唯?的公鑰 。 公鑰?于接收比特幣 , ?私鑰?于比特幣支付時的交易簽名 。 公鑰和私鑰之間的數學關系 , 使得私鑰可?于生成特定消息的簽名 。 此簽名可以在不泄露私鑰的同時對公鑰進?驗證 。 支付比特幣時 , 比特幣的當前所有者需要在交易中提交其公鑰和簽名(每次交易的簽名都不同 , 但均從同?個私鑰?成) 。 比特幣?絡中的所有人都可以通過所提交的公鑰和簽名進?驗證 , 并確認該交易是否有效 , 即確認支付者在該時刻對所交易的比特幣擁有所有權 。
詳細描述什么是比特幣私鑰、賬戶與錢包

文章插圖

私鑰私鑰其實就是一個隨機選出的數字而已 。 一個比特幣地址中的所有資金的控制取決于相應私鑰的所有權和控制權 。 在比特幣交易中 , 私鑰用于生成支付比特幣所必需的簽名以證明對資金的所有權 。 私鑰必須始終保持機密 , 因為一旦被泄露給第三 方 , 相當于該私鑰保護之下的比特幣也拱手相讓了 。 私鑰還必須進行備份 , 以防意外丟失 , 因為私鑰一旦丟失就難以復原 , 其所保護的比特幣也將永遠丟失 。
這個隨機數字怎么選出來的呢?一般是通過隨機函數生成器來實現的 , 這里不再細述 。
比特幣賬戶上圖中 , 我們已經看到比特幣賬戶(地址)的大致生成過程(私鑰–>公鑰–>比特幣地址) , 這里詳細的描述其生成細節 。 在比特幣賬戶生成過程中應用了兩個密碼學哈希函數 , 一個是SHA256 , 另一個是RIPEMD160 。 下圖為比特幣地址(賬戶)的生成流程:
詳細描述什么是比特幣私鑰、賬戶與錢包

文章插圖

通過隨機數發生器生成一個256bit的隨機數 , 并使用該隨機數作為賬戶的私鑰 。
比特幣采用橢圓曲線簽名算法(ECDSA)來對數據進行簽名和驗證 , 具體使用的是secp256k1曲線 。 通過ECC乘法可以計算出對應的公鑰 。
對公鑰進行兩次哈希運算 , 得到公鑰的哈希值 。
對<比特幣地址前綴0x00 | 公鑰哈希值>做雙哈希運算 , 取前4字節作為校驗碼 。
對<比特幣地址前綴0x00 | 公鑰哈希 | 校驗碼>進行base58編碼得到地址 。
其他前綴的含義如下表:
種類版本前綴(hex)Base58格式Bitcoin Address0x001Pay-to-Script-Hash Address0x053Bitcoin Testnet Address0x6Fm or nPrivate Key WIF(錢包導入格式)0x805(沒有壓縮), K or L (壓縮格式)BIP38 Encrypted Private Key0x01426PBIP32 Extended Public Key0x0488B21Expub采用base58編碼格式對地址進行編碼 , 主要是為了方便使用和識別 。
比特幣錢包錢包是一個應用程序 , 為用戶提供交互界面 。 錢包控制用戶訪問權限 , 管理密鑰和地址 , 跟蹤余額以及創建和簽名交易 。 其中 , 最核心的功能是保管私鑰 , 一旦私鑰泄露或者忘了 , 就會造成比特幣被盜走或丟失 。
錢包里有比特幣嗎?錢包里只有密鑰 , 并沒有比特幣 。
【詳細描述什么是比特幣私鑰、賬戶與錢包】那我的比特幣在哪里?你擁有的比特幣實際上是所有你賬戶地址的未花費交易輸出 。 錢包會監控到輸出到你的公鑰地址的輸出 , 比如A轉給你1個比特幣 , B轉給你9個比特幣 , 而你目前沒有將它們轉給其他人 , 則錢包計算出目前你有10個比特幣 。 當你需要花費比特幣轉賬給其他人時 , 你構造一筆交易 , 用你的未花費交易輸出作為輸入 , 輸出為接收方賬戶地址 , 并設置轉賬金額 , 自己的公鑰信息等 , 對再交易簽名(私鑰簽名)確認后 , 發送到比特幣網絡等待確認后 , 轉賬完成 。

    推薦閱讀