以中本聰創(chuàng)立的比特幣為代表的數(shù)字貨幣近期發(fā)展迅猛,支撐比特幣實現(xiàn)去中心化的底層技術(shù)區(qū)塊鏈技術(shù)也在近兩年逐步走進大眾視野银室。區(qū)塊鏈技術(shù)以其安全性、去中心性以及算法保證的可信性吸引了包括金融機構(gòu)梢为、供應鏈莺奸、能源等多領域的關(guān)注。
在正式進入解析區(qū)塊鏈技術(shù)內(nèi)幕之前统抬,本文將就區(qū)塊鏈中與隱私保護火本、安全相關(guān)的基礎算法進行相應介紹
1.哈希算法
1.1. 簡介
計算機行業(yè)從業(yè)者對哈希這個詞應該非常熟悉,哈希能夠?qū)崿F(xiàn)數(shù)據(jù)從一個維度向另一個維度的映射聪建,通常使用哈希函數(shù)實現(xiàn)這種映射发侵。通常業(yè)界使用y = hash(x)
的方式進行表示,該哈希函數(shù)實現(xiàn)對x進行運算計算出一個哈希值y妆偏。
區(qū)塊鏈中哈希函數(shù)特性:
- 函數(shù)參數(shù)為string類型刃鳄;
- 固定大小輸出;
- 計算高效钱骂;
優(yōu)點:
- collision-free 即沖突概率小:
x != y => hash(x) != hash(y)
- 能夠隱藏原始信息:
例如區(qū)塊鏈中各個節(jié)點之間對交易的驗證只需要驗證交易的信息熵叔锐,而不需要對原始信息進行比對,節(jié)點間不需要傳輸交易的原始數(shù)據(jù)只傳輸交易的哈希即可见秽,常見算法有SHA
系列和MD5
等算法
1.2. 哈希的用法
哈希在區(qū)塊鏈中用處廣泛愉烙,其一我們稱之為哈希指針(Hash Pointer
)
哈希指針是指該變量的值是通過實際數(shù)據(jù)計算出來的且指向?qū)嶋H的數(shù)據(jù)所在位置,即其既可以表示實際數(shù)據(jù)內(nèi)容又可以表示實際數(shù)據(jù)的存儲位置解取。下圖為Hash Pointe
r的示意圖
HashPointer
在區(qū)塊鏈中主要有兩處使用步责,第一個就是構(gòu)建區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)。了解區(qū)塊鏈的讀者應該知道區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)由創(chuàng)世區(qū)塊向后通過區(qū)塊之間的指針進行連接,這個指針使用的就是圖示的HashPointer
.每個區(qū)塊中都存儲了前一個區(qū)塊的HashPointer
蔓肯。這樣的數(shù)據(jù)結(jié)構(gòu)的好處在于后面區(qū)塊可以查找前面所有區(qū)塊中的信息且區(qū)塊的HashPointer
的計算包含了前面區(qū)塊的信息從而一定程度上保證了區(qū)塊鏈的不易篡改的特性遂鹊。第二個用處在于構(gòu)建Merkle Tree
. Merkle Tree
的各個節(jié)點使用HashPointer
進行構(gòu)建,關(guān)于區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)以及MerkleTree
的內(nèi)容我們在后續(xù)文章中進行進一步介紹蔗包。
哈希還在其他技術(shù)中有所應用例如:交易驗證以及數(shù)字簽名等等秉扑。
2.加密算法
2.1簡述
加密簡單而言就是通過一種算法手段將對原始信息進行轉(zhuǎn)換,信息的接收者能夠通過秘鑰對密文進行解密從而得到原文的過程调限。按照加密方和解密方秘鑰相同與否可以將加密算法大致分為三種子類型:
-
對稱加密
對稱加密的加密解密方使用相同的秘鑰舟陆,這種方式的好處在于加解密的速度快但是秘鑰的安全分發(fā)比較困難,常見對稱加密算法有DES
,AES
,... -
非對稱加密
非對稱加密體系也稱為公鑰體系耻矮,加解密時加密方擁有公鑰和私鑰秦躯,加密方可以將公鑰發(fā)送給其他相關(guān)方,私鑰嚴格自己保留裆装。例如銀行的頒發(fā)給個人用戶的私鑰就存儲在個人的U盾里踱承;非對稱加密中可以通過私鑰加密,他人能夠使用公鑰進行解密米母,反之亦然勾扭;非對稱加密算法一般比較復雜執(zhí)行時間相對對稱加密較長;好處在于無秘鑰分發(fā)問題铁瞒。常見的其他非對稱加密算法有RSA
,ECC
,區(qū)塊鏈中主要使用ECC
橢圓曲線算法妙色。
3.對稱加密與非對稱加密的結(jié)合
這種方式將加密過程分為兩個階段,階段一使用非對稱加密進行秘鑰的分發(fā)使得對方安全地得到對稱加密的秘鑰慧耍,階段二使用對稱加密對原文進行加解密身辨。
2.2 數(shù)字簽名
數(shù)字簽名又稱之為公鑰數(shù)字簽名,是一種類似于寫在紙上的物理簽名芍碧。數(shù)字簽名主要用于數(shù)據(jù)更改的簽名者身份識別以及抗抵賴煌珊。數(shù)字簽名包含三個重要特性:
- 只有自己可以簽署自己的數(shù)字簽名,但是他人可以驗證簽名是否是你簽發(fā)泌豆;
- 數(shù)字簽名需要和具體的數(shù)字文檔綁定定庵,就好比現(xiàn)實中你的簽名應該和紙質(zhì)媒介綁定;
- 數(shù)字簽名不可偽造踪危;
依賴非對稱加密機制可以較容易實現(xiàn)上述三種特性蔬浙。首先,需要生成個人的公私鑰對:
(sk, pk) := generateKeys(keysize)
贞远,sk私鑰用戶自己保留畴博,pk公鑰可以分發(fā)給其他人
其次,可以通過sk對一個具體的message進行簽名:
sig := sign(sk, message)
這樣就得到了具體的簽名sig
最后蓝仲,擁有該簽名公鑰的一方能夠進行簽名的驗證:
isValid := verify(pk, message, sig)
在區(qū)塊鏈體系中每一條數(shù)據(jù)交易都需要簽名俱病,在比特幣的設計過程中直接將用戶的公鑰來表征用戶的比特幣地址官疲。這樣在用戶發(fā)起轉(zhuǎn)賬等比特幣交易時可以方便的進行用戶交易的合法性驗證。
2.3 數(shù)字證書和認證中心
2.3.1 數(shù)字證書(Digital Certificate)
數(shù)字證書又稱“數(shù)字身份證”亮隙、“網(wǎng)絡身份證”是經(jīng)認證中心授權(quán)頒發(fā)并經(jīng)認證中心數(shù)字簽名的包含公開秘鑰擁有者及公開秘鑰相關(guān)信息的電子文件途凫,可以用來判別數(shù)字證書擁有者身份。
數(shù)字證書包含:公鑰咱揍、證書名稱信息颖榜、簽發(fā)機構(gòu)對證書的數(shù)字簽名以及匹配的私鑰
證書可以存儲在網(wǎng)絡中的數(shù)據(jù)庫中棚饵。用戶可以利用網(wǎng)絡彼此交換證書煤裙。當證書撤銷后,簽發(fā)此證書的CA仍保留此證書的副本噪漾,以備日后解 決可能引起的糾紛硼砰。
2.3.2 認證中心(Certificate Authority)
認證中心 一般簡稱CA, CA一般是一個公認可信的第三方機構(gòu),其作用主要是為每個用戶頒發(fā)一個獨一無二的包含名稱和公鑰的數(shù)字證書欣硼。