[轉] 比特幣『私鑰』『公鑰』『錢包地址』間的關係

本文轉自:http://blog.csdn.net/pony_maggie/article/details/54837674算法

轉自:http://www.bikeji.com/t/110#reply25安全

比特幣交易涉及到不少密碼學知識:公鑰、私鑰、哈希、對稱加密、非對稱加密、簽名等等。那麼哪些是須要用戶認真保管不能對外泄露的,那些是須要用戶公開的呢?先從錢包地址的生成提及。網絡


錢包地址生成

這裏寫圖片描述

  1. 首先使用隨機數發生器生成一個『私鑰』。通常來講這是一個256bits的數,擁有了這串數字就能夠對相應『錢包地址』中的比特幣進行操做,因此必須被安全地保存起來。
  2. 『私鑰』通過SECP256K1算法處理生成了『公鑰』。SECP256K1是一種橢圓曲線算法,經過一個已知『私鑰』時能夠算得『公鑰』,而『公鑰』已知時卻沒法反向計算出『私鑰』。這是保障比特幣安全的算法基礎。
  3. 同SHA256同樣,RIPEMD160也是一種Hash算法,由『公鑰』能夠計算獲得『公鑰哈希』,而反過來是行不通的。
  4. 將一個字節的地址版本號鏈接到『公鑰哈希』頭部(對於比特幣網絡的pubkey地址,這一字節爲「0」),而後對其進行兩次SHA256運算,將結果的前4字節做爲『公鑰哈希』的校驗值,鏈接在其尾部。
  5. 將上一步結果使用BASE58進行編碼(比特幣定製版本),就獲得了『錢包地址』。 
    好比, 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

『私鑰』『公鑰』『錢包地址』間的關係

在上述的五個步驟裏只有「BASE58編碼」有相應的可逆算法(「BASE58解碼」),其餘算法都是不可逆的,因此這些數據之間的關係能夠表示爲:編碼

這裏寫圖片描述

能夠看到:加密

經過『私鑰』能夠獲得上述計算過程當中全部的值。 
『公鑰哈希』和『錢包地址』能夠經過互逆運算進行轉換,因此它們是等價的。spa

使用『私鑰』對交易進行簽名

比特幣錢包間的轉帳是經過交易(Transaction)實現的。交易數據是由轉出錢包『私鑰』的全部者生成,也就是說有了『私鑰』就能夠花費該錢包的比特幣餘額。生成交易的過程以下:.net

這裏寫圖片描述

  1. 交易的原始數據包括「轉帳數額」和「轉入錢包地址」,可是僅有這些是不夠的,由於沒法證實交易的生成者對「轉出錢包地址」餘額有動用的權利。因此須要用『私鑰』對原始數據進行簽名。
  2. 生成「轉出錢包公鑰」,這一過程與生成『錢包地址』的第2步是同樣的。
  3. 將「轉出簽名」和「轉出公鑰」添加到原始交易數據中,生成了正式的交易數據,這樣它就能夠被廣播到比特幣網絡進行轉帳了。

使用『公鑰』對簽名進行驗證

這裏寫圖片描述

交易數據被廣播到比特幣網絡後,節點會對這個交易數據進行檢驗,其中就包括對簽名的校驗。若是校驗正確,那麼這筆餘額就成功地從「轉出錢包」轉移到「轉入錢包」了。blog

小結

若是一個『錢包地址』從不曾發送餘額到其餘『錢包地址』,那麼它的『公鑰』是不會暴露在比特幣網絡上的。而公鑰生成算法(SECP256K1)是不可逆的,即便『公鑰』暴露,也很難對『私鑰』的安全性形成影響(難易取決於『私鑰』的生成算法)。 
『私鑰』用來生成『公鑰』和『錢包地址』,也用來對交易進行簽名。擁有了『私鑰』就是擁有了對這個錢包餘額的一切操做權力。因此,保護『私鑰』是全部比特幣錢包應用最基本也是最重要的功能。 
圖片

本文僅討論標準P2PKH交易方式,P2SH不在討論範圍內。 
歷史上發生過校驗錯誤的交易被打入到blockchain中的事情,這種交易中的比特幣永遠地消失在Cyberspace中了。get

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息