文章目錄
- 區塊鏈的目的
- 理解加密貨幣的本質
- 去中心化
- 作業量證明
- 問題
- 附錄
- 參考鏈接
對區塊鏈和加密貨幣做了下簡單研究,這里記錄下,
區塊鏈的目的
公共賬本,降低交易中的信任成本
-
公共賬本中,如何驗證一筆交易是否是交易雙方的真實意愿,而非偽造的交易?
電子簽名,
電子簽名的生成原理
幾個要素:
- 私鑰 s k sk sk
- 公鑰 p k pk pk
- 加密函式 S i g n Sign Sign
- 驗證函式 V e r i f y Verify Verify
- 資訊本身 M e s s a g e Message Message
- 簽名 S i g n a t u r e Signature Signature
S i g n ( M e s s a g e , s k ) = S i g n a t u r e Sign(Message,sk)=Signature Sign(Message,sk)=Signature
為什么要使用私鑰和資訊本身生成簽名?
-
使用私鑰可以保證只有私鑰持有人能夠生成該簽名
-
使用資訊保證了其他人不能把簽名簡單地復制到另一條資訊里,來偽造簽名
V e r i f y ( M e s s a g e , S i g n a t u r e , p k ) = T r u e / F a l s e Verify(Message,Signature,pk)=True/False Verify(Message,Signature,pk)=True/False
用來驗證簽名是否是由 p k pk pk所對應的 s k sk sk生成的,
由于生成假簽名(只能借助 V e r i f y Verify Verify函式和公鑰暴力破解)難度極大,因此如果 V e r i f y Verify Verify函式回傳true,就可以認為該簽名是由私鑰的擁有者生成的,
-
如何防止有人在公共賬本上使用正確的資訊和簽名,重復記賬?
每筆交易資訊中都包含獨一無二的id即可,
理解加密貨幣的本質
Tips
-
每種加密貨幣都是一個公共賬本
-
貨幣的本質是交易的歷史
去中心化
公共賬本保存在哪里? 添加新交易記錄的規則是什么?
公共賬本保存在所有用戶手里,當一筆交易發生,必須廣播給所有用戶,并在所有賬本中添加記錄,
那么問題來了,如何保證所有用戶的賬本記錄的交易是一樣的,并且順序也相同呢? 這是區塊鏈技術的核心問題,中本聰關于位元幣的論文解決的就是這個問題,他的解決方案是作業量證明,
位元幣的公共賬本結構大致如下:

由串起來的區塊組成(所以又被稱為區塊鏈),每個區塊包含了前一塊的哈希,多條交易記錄,和一個作業量證明,只有計算出作業量證明的人,才能打包區塊并向全網廣播該區塊,
作業量證明
作業量證明是接在一段交易記錄后的一個數,記為 w w w, w w w需要滿足以下條件:可以使得交易記錄+ w w w這段資訊的 H a s h Hash Hash值的前 n n n位值為0,(對于位元幣來說, n n n是變化的,以保持平均約10分鐘產生一個區塊,以太坊約15秒)
作業量證明的特點
- 計算 w w w所需算力很大,但驗證 w w w的正確性很簡單,
這就使得如果篡改了交易記錄,則需要花費大量的算力去計算新的 w w w
由于每個區塊都加入前一塊的Hash值,因此更改了任一歷史區塊,或者互換了兩個區塊,后續區塊的作業量證明均需重新計算,
總結下打包一個區塊的流程:
-
一筆交易發生,并向全網廣播了這筆交易
-
所有節點(俗稱“礦工”)開始計算 w w w
-
某一個節點計算出了 w w w,則打包區塊并向全網廣播該區塊
在位元幣協議中,打包成功的節點可以在該區塊的末尾添加一筆特殊交易,即給自己的獎勵,該筆交易無需簽名,因此每打包成功一個區塊,系統中的位元幣都會增加,
問題
-
收到不同的區塊鏈廣播,選擇相信哪個?
選擇相信最長的那一個,如果區塊鏈長度相同,則等待新的區塊產生,使得其中的某一條鏈最長,(假設有人想偽造一個區塊,則后續區塊的作業量證明均需要重新計算,構成一條“偽造鏈”,除非偽造者擁有超過全網50%的算力,否則“偽造鏈”的長度遲早被其他礦工計算得到的鏈超過)
附錄
密碼哈希函式(比如SHA256)的特點
-
輸入任意長度,輸出是固定長度
-
計算hash值的速度比較快
-
防碰撞特性
任意兩個不同的輸入值 x 、 y x、y x、y,使得 H a s h ( x ) = H a s h ( y ) Hash(x)= Hash(y) Hash(x)=Hash(y)是困難的, 注意這里強調是“困難”的,而非“不可能“的,完全沒有哈希碰撞,在理論上不可能
-
單向性
難以從 H a s h ( x ) Hash(x) Hash(x)反推 x x x
-
puzzlefriendly
無法從輸入資料,判斷輸出到底是什么樣子,這意味著你無法通過控制輸入值x來獲得想要的輸出值 H ( x ) H(x) H(x),比如無法預先判斷哪些輸入會使得一個hash值前K位是0,
參考鏈接
-
https://www.bilibili.com/video/BV11x411i72w?spm_id_from=333.999.0.0
-
https://zhuanlan.zhihu.com/p/139310385
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/297899.html
標籤:區塊鏈
