時間:2018年10月18日?
講師:Ulord技術團隊/優得學院 楊博士?
主題:區塊鏈與密碼學
一、區塊鏈和密碼學的關系
在《中國區塊鏈技術和應用發展白皮書2016》中關于區塊鏈的定義,“通過密碼學的機制來確保交易無法被抵押和破壞,并盡量保護用戶信息和記錄的隱私性。”也就是說密碼學的功能在區塊鏈領域中體現在以下三個方面:
1、怎么防止交易記錄被篡改?
2、怎么證明交易雙方的身份?
3、怎么保護交易雙方的隱私?
簡單的說,就是如何確保交易信息的「完整性」、「真實性」和「隱私性」。
現代密碼學的發展為解決以上幾個問題提供了不少手段,包括了哈希函數,加解密算法,數字證書與數字簽名,公鑰體系,Merkle樹等,在這一講中,我們一一解說密碼學的相關知識,為后續學習奠定好基礎!
二、哈希函數
什么是哈希函數?哈希函數是密碼學的一個重要分支,是一個非常基礎,也非常重要的計算機算法。哈希函數是一種將「任意長度的輸入」轉換為「固定長度的輸出」,而且是不可逆的單向密碼機制。
? ? ? 例如下面的例子,以哈希函數計算下列綠色顏色標出的一段話,將會得出一段固定長度字符串的哈希值。
哈希函數的主要用途非常的廣泛,常見的一個是在數字簽名,另外一類是消息認證。數字簽名指的是驗證信息來源的真實性,消息驗證是驗證消息的完整性,在區塊鏈中,有兩個常用的密碼學哈希函數,一個是SHA256,另一個是RIPEMD160。
? (一)RIPEMD160、SHA256主要用于生成錢包地址,用這兩個哈希函數生成兩個錢包地址主要是用來識別不同的用戶;
? (二)SHA256是區塊鏈技術中的主要使用的哈希函數,包括區塊的頭部信息及交易數據,用來確保數據的完整性;
? (三)SHA256的另一個主要用途是提供共識算法的計算,典型的共識算法,例如工作量證明(POW;proof of work)的計算。
? ? ??進行共識算法的計算就是我們俗稱的「挖礦」。一個好的哈希函數,應該具有以下四個特點:
第一個特點是正向快速:指的是給定一明文和哈希算法,在有限的時間和有限的資源內,能夠快速的計算出哈希值。
第二個特點是逆向困難:指的是給定若干哈希值,在有限的時間和有限的資源內,在現有的算力內基本上不可能反推出明文。
第三個特點是輸入敏感:指的是只要在原始輸入信息中修改一點點,將會產生不同且差異極大的哈希值。
第四個特點是沖突避免:如果兩個內容不同的明文,產生出一樣的哈希值,稱作發生沖突或碰撞。沖突避免又稱為「抗碰撞性」,分成兩類,一類是抗弱碰撞性,指如果給定一個明文的前提下,無法找到碰撞的另一個的明文;另外一類抗強碰撞性,是指無法找到任意的兩個明文發生碰撞,也就是不發生兩個明文的哈希值一致的情況。
再者,哈希函數另外一個非常重要的用途:數字摘要(又稱作指紋)。它是指對數字內容進行哈希運算,獲取唯一的摘要值,來代表原始的數字內容。數字摘要可以利用哈希函數的抗碰撞性特點,來確保內容沒有被篡改過。例如在網絡上面下載一個軟件或文件時,有些網站同時會提供一個數字摘要值,我們將下載的原始文件,以哈希函數進行計算后得到它的摘要值,再與網站提供的摘要值進行比對。如果一致,就可以確認這個內容沒有被修改過;如果不一致,表示在下載文件的過程中間有被篡改的可能。
三、加解密算法
加解密算法是密碼學的核心技術,分為兩大基本類型:(一)對稱加密、(二)非對稱加密。區分「對稱加密」和「非對稱加密」重要的區分點,在於加解密秘鑰是否相同。
以下依據加解密算法的特點,優勢,缺陷和代表算法對兩類加解密算法進行對比:
現代加解密系統,包括三個典型組建:(一)加解密算法、(二)加密密鑰、(三)解密密鑰。
? ? ? 其中加解密算法是固定不變的,并且是公開可見。但是密鑰則是最關鍵的信息,需要安全的保存起來,甚至通過一些特殊的硬件來進行保護。
? ? ? 一般來說,在同一種算法下,密鑰在每次加密前隨機生成,長度越長,則加密強度越大。在加密的過程中,通過加密算法和加密密鑰對明文進行加密獲得密文;在解密的過程中,通過解密算法和解密密鑰對密文進行解密獲取明文。
根據加解密過程中間所使用的密鑰是否相同,區分為對稱加密算法和非對稱加密算法兩種。這兩種模式適用不同的需求,可以形成一個互補,也可以組合使用,形成一種混合的加密機制。
(一)對稱加密算法
? ? ??是指加密密鑰和解密密鑰是相同的,也就是在加密的過程中間使用的加密密鑰,跟在解密的過程中使用的解密密鑰是同一個密鑰。
對稱加密的優點是加解密的速度很快、空間占用小、保密強度很高。但缺點是參與的多方需要持有密鑰,容易泄露,安全性易破壞。如同諜戰片中,持有密碼本(就是密鑰)的情報人員,一旦被抓獲的話,是一個非常危險的事情。另外一個缺點是,密鑰如何分發跟如何傳遞是一個大的難題。對稱加密算法主要適用于大量數據的加解密,但不太能應用于簽名場景。
(二)非對稱加密算法
1976年,美國學者Diffie和Hellman發表了著名論文《密碼學的新方向》,提出了非對稱密碼算法的思想,也就是「公開密鑰密碼體制」。
1978年,Rivest、Shamir和Adleman提出的RSA算法,也就是以他們三個人的名字的首字母命名的算法,這個算法體現了公鑰算法思想,并具有實用性。
公鑰密碼體制是密碼學史上最大也是唯一真正的革命,在信息安全的應用中,廣泛的應用公鑰密碼技術,可以說「沒有公鑰密碼體制,就沒有現代密碼學」。
公鑰密碼體制,也就是非對稱加密算法,公鑰和私鑰是不同的,公鑰一般是公開的,每個人都可以獲取,私鑰是個人自己持有不能被他人獲取。非對稱加密算法的優點是公鑰私鑰兩者是分開的,容易管理,并且容易完成密鑰的分發,因為公鑰可以分發出去,只要自己管理好私鑰就可。但缺點就在於,它的加解密速度比較慢。
? ? ? 因此,非對稱加密算法適用于簽名場景,或者密鑰協商。所謂密鑰協商,就是在對稱加密中如何去傳遞密鑰。非對稱加密算法有效的解決密鑰傳輸和密鑰管理的問題 。但是,公認的高強度的加密算法和實現往往都是要經過長時間充分的實踐認證以后才被大家所認可,同時,也不代表其絕對不存在漏洞。因此自行設計和發明未經過大規模驗證的加密算法,是一種不太明智的行為,因為即便不公開算法的加密過程也很容易被攻破 ,而無法在安全性上得到保障。
四、數字簽名和數字證書
(一)數字簽名
? ? ? 數字簽名類似于在紙質合同上面來確認合同的內容,它是用來證實某數字內容的完整性和來源。 簽名過程就是簽名者首先對這消息進行處理,生成一無法被偽造的數字串,同時此數字串也是對消息的真實性的有效證明。因此,利用數字簽名技術,能夠確保消息傳輸的完整性,發送者的身份認證,以及防止交易中的抵賴發生。
例如:A要發送給B一個文件
1.首先,A先利用哈希函數先對原始文件生成一個數字摘要,然后用自己的私鑰對這個摘要進行加密,再將文件和加密串一起都發給B。
2.B收到原始文件和加密串,先用A的公鑰來解密加密串,得到原始的數字摘要。 然后再利用哈希函數對原始文件得到摘要,再把解密后的摘要和這個摘要進行比對,如果一致,說明該文件確實是A發過來的,并且內容沒有被修改過。
? ? ? 數字簽名是一個非常重要的應用,在比特幣系統里面,比特幣的擁有者就是利用私鑰給交易消息簽名,來證明消息的發布者就是相應比特幣地址的所有者。
圖示如下:
Step1. 原始文件通過哈希函數得到一個摘要。
Step2. 利用私鑰對摘要進行加密,得到一個加密串。
Step3.原始文件和加密串一起打包傳遞給接收者
Step4.接收者利用發送者的公鑰對加密串進行解密,得到解密后的字符串。再利用同樣的哈希函數對對原始文件獲取摘要,對兩者進行一個比對。如果兩者一致,表示這個消息確實是由正確的發送者發送過來的,同時內容在傳輸的過程中沒有被篡改,這就是數字簽名的過程。
數字簽名包括單簽名、多重簽名、群簽名和環簽名。重點介紹多重簽名,所謂多重簽名就是多個用戶對同一個訊息進行簽名。以比特幣交易為例,就是多個密鑰來授權一個比特幣的交易,它通常用來界定對加密貨幣的所有權。
? ? ? 在傳統的比特幣賬戶中,用戶的比特幣地址中,每一個地址都有一個對應的私鑰,這一類稱為單簽名交易。 因為轉賬只需要一個比特幣地址相關的私鑰擁有者簽名就可以,因此安全性比較低。所以實務上經常會采用多重簽名,比如用三個相關的私鑰,通常需要其中的兩個以上才能完成一筆轉賬,由于需要通過多方的地址確認,這就需要這多方同時合作,這種參與方可以是人,機構或者程序腳本。
(二)數字證書
在數字簽名的過程中,必須以用戶的公鑰來解密它用私鑰加密的密文,數字證書機制就是用來確保該公鑰確實是原始公鑰,也就是說數字證書是用來證明某個公鑰是誰的。公鑰的分發是很重要的,因為一旦公鑰被人替換,則整個安全體系將會被破壞掉。
? ? ? 數字證書是用來證明信息的準確性和合法性,是由證書的認證機構(Certification Authority;CA)來簽發。在整個密碼體制中,CA是一個非常重要的環節。數字證書是經過證書的認證機構, 具體上,數字證書內容包括了版本序列號、簽名算法類型、簽發者的信息、公開密鑰、CA的數字簽名以及其他信息等等。
其中最重要的兩類信息,包括簽發的「公開密鑰」與「CA數字簽名」。因此只要通過此證書就能證明某一個公鑰是合法的。因為它帶有一個CA的數字簽名,相當于CA為這個密鑰來背書。
? ? ? 證明CA的簽名合法或者不合法的方式,主要是在主流的操作系統或者瀏覽器里面提前預制一些CA的證書,相當于承認這些證書是合法的,然后所有基于它們認證的簽名自然認為是合法的,這樣子就確保通過認證機構簽名的證書都是合法的。
五、PKI體系(公鑰密碼體系)
?PKI體系,公鑰密碼體系,是指公鑰基礎設施。並非指一種技術而是綜合多種密碼學手段,來實現安全可靠傳遞消息、身份確認的框架和規范,包括如何登記、審核,簽發、銷毀證書的一系列組建和規范。
? ? ? 一般包含幾個組建:
(一)證書的認證機構(Certification Authority;CA):負責證書的頒發和作廢,同時接收登記機構(RA)的請求。
(二)登記機構(RA):對對用戶身份進行驗證、校驗數據的合法性、負責登記,審核后就發給CA。
(三)證書數據庫:主要是存放證書,一般采用LDAP目錄服務,標準格式采用X.500系列。
? ? ? 以上三個組建里,CA是最核心的組建,主要完成對公鑰的管理。
? ? ? 用戶基于PKI體系,申請一個證書,一般有兩種方式:
(一)由CA來生成證書和私鑰;
(二)由用戶生成公鑰和私鑰,然后由CA公鑰對和私鑰進行背書簽發。
六、Merkle Tree(默克爾樹)
Merkle Tree(默克爾樹),通常也被稱作Hash Tree(哈希樹),顧名思義,就是存儲哈希值(Hash)的一棵樹,大多數是二叉樹,也可以多叉樹。是由一個根節點、一組中間節點和一組葉節點所組成。最下面的葉節點包含了存儲數據或其哈希值,每個中間節點是由兩個子節點內容的哈希值所組成,根節點也是由兩個子節點內容的哈希值來組成,進一步Merkle樹可以推廣到多叉樹的型態。
從默克爾樹的構成中,可以發現一個很重要的特點,就是底層數據的任何變動,例如葉子節點或者中間節點有任何的變動都會向上傳遞,一直傳遞到根節點。這一個特點產生了很多應用。例如:
七、回顧及反思
最后總結本課主要內容,由區塊鏈的定義出發,引出了密碼學是確保區塊鏈交易信息機密性,完整性,認證性,不可抵賴性的重要手段。包括了哈希算法、加解密算法(包含對稱加密和非對稱加密)、數字簽名和數字證書、公鑰密碼體系(即PKI體系),以及默克爾樹(Merkle Tree)。