在區塊鏈中使用了很多加密學算法,包括哈希算法、默克樹、數字簽名等。在這一節將逐個學習這些知識。
哈希算法
哈希算法是一種常見的單向加密算法,它將一串數據加密生成一串二進制,但不能由二進制還原為原來的數據。該算法有一下特點:
相同的輸入得到相同的二進制串
不同對輸入得到不同的二進制串,即有強對抗性,不同的數據不會產生相同的哈希值
輸出的二進制長度是一致的
import hashlibdata1 = "Test1"msg = hashlib.sha256()msg.update(data1.encode("utf-8"))output1 = msg.hexdigest()print(output1)
# 再次計算msg = hashlib.sha256()msg.update(data1.encode("utf-8"))output2 = msg.hexdigest()print(output1 == output2)
True
# 使用不同的數據data2 = "Test2"msg = hashlib.sha256()msg.update(data2.encode("utf-8"))output3 = msg.hexdigest()print(output3)print(output3 == output1)
32e6e1e134f9cc8f14b05925667c118d19244aebce442d6fecd2ac38cdc97649False
print(len(output1))print(len(output3))
6464
長度都為64,即256長度的比特位
在區塊鏈中很多地方用了哈希算法,比如對區塊計算哈希值。在“區塊鏈基礎”部分中實現了一個簡化版的區塊鏈。在實際區塊鏈中區塊包含元數據的區塊頭和緊跟其后的構成區塊主體的一長串交易,結構如下:
大小字段描述4字節區塊大小用字節表示的該字段之后的區塊大小80字節區塊頭組成區塊頭的幾個字段1-9(可變整數)交易計數器交易的數量可變的交易記錄在區塊里的交易信息
其中哈希值和nonce等都放在區塊頭中,其結構如下:
大小字段描述4字節版本版本號,用于跟蹤軟件/協議的更新32字節父區塊哈希值引用區塊鏈中父區塊的哈希值32字節Merkle根該區塊中交易的merkle樹根的哈希值4字節時間戳該區塊產生的近似時間(精確到秒的Unix時間戳)4字節難度目標該區塊工作量證明算法的難度目標4字節Nonce用于工作量證明算法的計數器
這里涉及到另一個概念——默克(Merkle)樹
默克樹
默克爾樹,又叫哈希樹,是一種樹的數據結構,由一個根節點、一組中間節點和一組葉節點組成。最下面的葉節點包含存儲數據或其哈希值,其上的節點是它的子節點內容的哈希值。一個默克樹的生成過程如下:
1.由數據生成一系列哈希值
2.從上述哈希值再生成哈希值
3.然后再生成根節點
默克樹有如下特點:
一般是二叉樹,也可以多叉樹,具有樹結構的所有特點;
樹的根節點只取決于數據,和其中的更新順序無關。換個順序進行更新,甚至重新從頭計算樹,并不會改變根節點;
當兩個默克爾樹根節點相同時,則意味著所代表的數據必然相同,用根節點校驗可以大大減少數據的傳輸量以及計算的復雜度;
默克樹的一個分支也是默克樹,可以作為獨立進行校驗;
當區塊鏈中的交易數據過多時,可以通過只保留默克樹的根節點,刪除其下的節點有效的節約存儲空間。
數字簽名
在區塊鏈中還有一個重要的技術,那就是數字簽名。類似在手寫簽名來確認直至內容,數字簽名用于證實某數字內容的完整性和來源,保證簽名的有效性和不可抵賴性。數字簽名使用了公鑰密碼學。公鑰密碼學是非對稱加密技術,其相對于對稱加密技術。在對稱加密技術中加密使用相同的密鑰加解密數據,為了讓對方能夠解密,需要同時將密文和密鑰發給對方。
如果有人在傳輸過程中截取了密文和密鑰,就一樣能解密出明文,這就導致了安全性問題。
在非對稱加密中有公鑰和私鑰兩個,公鑰用來加密,私鑰用來解密,公鑰可以發給任意的人。
在這個過程中只有私鑰才可以解密,而加密用的是公鑰,故不需要傳輸私鑰,只要保證私鑰放在安全的地方,被盜取后其他人還是無法破解密文。
而數字簽名就是基于上述非對稱加密技術,不同點在于數字簽名使用私鑰生成一個簽名,接收方使用公鑰進行校驗。比如上面用私鑰解密得到明文后,用私鑰進行簽名進行回復,收到回復后用公鑰解密得到的內容與數據相同即可證明簽名正確。
因為公鑰和私鑰是成對的,唯一對應的,私鑰只有對方擁有,所以對方也不能對簽名進行抵賴。
在區塊鏈技術中常見的簽名算法是橢圓簽名算法。其算法用對橢圓曲線上的點進行加法或乘法運算來表達。區塊鏈中私鑰是一個隨機數,通過橢圓曲線簽名算法生成公鑰。但反向從公鑰計算出私鑰幾乎是不可能的。橢圓曲線簽名算法還具有安全性高和存儲空間占用小的特點。
-
二進制
+關注
關注
2文章
795瀏覽量
41643 -
區塊鏈
+關注
關注
111文章
15562瀏覽量
105923 -
哈希算法
+關注
關注
1文章
56瀏覽量
10744
原文標題:從零開始學區塊鏈(4)--深入淺出區塊鏈(五)-加密學
文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論