比特幣非對稱加密詳解


先來理論概念上的簡單總結

 

交易准備:

  • 我的地址A(公鑰)和配對的私鑰(保存在錢包)
  • 對方的地址B(公鑰)

交易過程:

  1. 兩個賬戶轉賬時,比如我(A)給對方(B)轉賬,我發送一條信息“A給B轉賬10個BTC”
  2. 先用B公開的公鑰加密,再用我的私鑰加密(兩層加密)
  3. 然后把雙層加密信息廣播到比特幣網絡節點,所有節點收到后他們會用我的公鑰(A)來校驗是不是我(第一層加密,確認是我的身份的東西后會進行記錄
  4. 因為我做了兩層加密,所以里面的數據只有B用他的私鑰能解開,B也一樣先檢驗第一層我的公鑰確認是我,再用自己的私鑰匙來解密第二層從而拿到數據
  5. B收到錢后也會類似我發數據的方式進行全網廣播

 

done!!

 

下面詳細記錄流程

首先我作為發送方,我擁有:

  • 付款地址(公鑰):“1FKDZ3s2H787sa”
  • 私鑰:“2SYFs2SU89H8YH”

Hash ( Hash ( func ( 私鑰“2SY...” ) ) ) -> 付款地址"1FKDZ..."  (第一次哈希)

公鑰和私鑰是一對非對稱關系,可以理解為用戶名和密碼的關系。

 

比特幣交易流程

比特幣的賬戶是用地址來表示,賬本上不顯示個人信息,轉賬是把比特幣從一個地址轉移到另一個地址。

例如一段交易信息記錄:

{
"付款地址":"1FKDZ3s2H787sa"
"收款地址":"3SKC9CBa239aFcc"
"金額":"0.5btc"
}
只有擁有該付款地址的私鑰的我才能支付該筆交易。


對交易信息簽名

1.對交易信息哈系(第二次哈系)
hash('
{
"付款地址":"1FKDZ3s2H787sa"
"收款地址":"3SKC9CBa239aFcc"
"金額":"0.5btc"
}') -> 摘要信息(Hash值):4ZYzha97zhya8

2.簽名
sign("摘要信息4ZY...",“私鑰2SY...”) -> “簽名“:5QMy6gF567F


驗證

廣播付款地址和簽名后,驗證返回交易摘要
verify("簽名5QM...",”付款地址1FKDZ...”) -> "摘要信息"4ZY...
這是一次逆向算出交易信息的運算,把得出的摘要信息結果和第一次哈希的結果對比,獲得驗證結果:
if(verify("3cdferdadgadg", "2A39CBa2390FDe") ==
hash('{
"付款地址":"2A39CBa2390FDe",
"收款地址":"AAC9CBa239aFcc",
"金額":"0.2btc"}')) :

# 寫入賬本
# 廣播

else:
# 不干活


補充:
  • 比特幣加密算法:SHA256
  • 比特幣系統使用了橢圓曲線簽名算法(ECC),算法的私鑰由32個字節隨機數組成,通過私鑰可以計算出公鑰,公鑰經過一序列哈希算法和編碼算法得到比特幣地址,地址也可以理解為公鑰的摘要


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM