【區塊鏈技術】區塊鏈的一些相關演算法

qq_36821448發表於2018-03-29

        筆者16年開始關注區塊鏈技術,區塊鏈的典型代表,也是大家最熟悉的就是比特幣,比特幣從開始無人知曉到火爆全球,中國全民挖礦,zf禁止交易,到現在在國外還是風生水起,比特幣從開始交易到現在應該是長得最多的"期貨"吧,很多程式設計師都感慨,錯過了一個成為億萬富翁的機會。

       比特幣和區塊鏈相關文件可以參考一下:

    《C%23區塊鏈程式設計.pdf》 

    《精通比特幣.pdf》

     《區塊鏈++從數字貨幣到信用社會.pdf》

    《區塊鏈++技術驅動金融.pdf》

    《區塊鏈++新經濟藍圖及導讀.pdf》

    《區塊鏈+將如何重新定義世界.pdf》

    《區塊鏈技術指南.pdf》

    《區塊鏈社會.pdf》

下載地址:

        連結: https://pan.baidu.com/s/14Mnhf6ZuLigW4KW-nUqHbg  密碼: tkdn

        本文主要講一下或者是複習一下大學的一些基礎演算法吧。

        1、hash 演算法

    

定義
hash (雜湊或雜湊)演算法是資訊科技領域非常基礎也非常重要的技術。它能任意長度的二進
制值(明文)對映為較短的固定長度的二進位制值(hash 值),並且不同的明文很難對映為相
同的 hash 值。
例如計算一段話“hello blockchain world, this is yeasy@github”的 md5 hash 值為
89242549883a2ef85dc81b90fb606046 。
$ echo "hello blockchain world, this is yeasy@github"|md5
89242549883a2ef85dc81b90fb606046
這意味著我們只要對某檔案進行 md5 hash 計算,得到結果為
89242549883a2ef85dc81b90fb606046 ,這就說明檔案內容極大概率上就是 “hello blockchain
world, this is yeasy@github”。可見,hash 的核心思想十分類似於基於內容的編址或命名。
注:md5 是一個經典的 hash 演算法,其和 SHA-1 演算法都已被 證明 安全性不足應用於商業場
景。
一個優秀的 hash 演算法,將能實現:
正向快速:給定明文和 hash 演算法,在有限時間和有限資源內能計算出 hash 值。
逆向困難:給定(若干) hash 值,在有限時間內很難(基本不可能)逆推出明文。
輸入敏感:原始輸入資訊修改一點資訊,產生的 hash 值看起來應該都有很大不同。
衝突避免:很難找到兩段內容不同的明文,使得它們的 hash 值一致(發生衝突)。
衝突避免有時候又被稱為“抗碰撞性”。如果給定一個明文前提下,無法找到碰撞的另一個明
文,稱為“抗弱碰撞性”;如果無法找到任意兩個明文,發生碰撞,則稱演算法具有“抗強碰撞
性”。
流行的演算法
目前流行的 hash 演算法包括 MD5(已被證明不夠安全)和 SHA-1,兩者均以 MD4 為基礎設
計的。
MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年設計的,MD 是 Message Digest
的縮寫。其輸出為 128 位。MD4 並不足夠安全。
hash 演算法
59
MD5(RFC 1321)是 Rivest 於1991年對 MD4 的改進版本。它對輸入仍以 512 位分組,其
輸出是 128 位。MD5 比 MD4 複雜,並且計算速度要慢一點,但更安全一些。MD5 並不足夠
安全。
SHA1 (Secure Hash Algorithm)是由 NIST NSA 設計,它的輸出為長度 160 位的 hash
值,因此抗窮舉性更好。SHA-1 設計時基於和 MD4 相同原理,並且模仿了該演算法。
為了提高安全性,NIST NSA 還設計出了 SHA-224、SHA-256、SHA-384,和 SHA-512 演算法
(統稱為 SHA-2),跟 SHA-1 演算法原理類似。
效能
一般的,hash 演算法都是算力敏感型,意味著計算資源是瓶頸,主頻越高的 CPU 進行 hash 的
速度也越快。
也有一些 hash 演算法不是算力敏感的,例如 scrypt,需要大量的記憶體資源,節點不能通過簡單
的增加更多 CPU 來獲得 hash 效能的提升。
2、數字摘要
顧名思義,數字摘要是對數字內容進行 hash 運算,獲取唯一的摘要值來指代原始數字內容。
數字摘要是解決確保內容沒被篡改過的問題(利用 hash 函式的抗碰撞性特點)。
數字摘要是 hash 演算法最重要的一個用途。
在網路上下載軟體或檔案時,往往同時會提供一個數字摘要值,使用者下載下來原始檔案可以
自行進行計算,並同提供的摘要值進行比對,以確保內容沒有被修改過。
數字摘要
61

3、加密演算法

公鑰私鑰體系
現代加密演算法的典型元件包括:加解密演算法、公鑰、私鑰。
加密過程中,通過加密演算法和公鑰,對明文進行加密,獲得密文。
解密過程中,通過解密演算法和私鑰,對密文進行解密,獲得明文。
根據公鑰和私鑰是否相同,演算法可以分為對稱加密和非對稱加密。兩種模式適用於不同的需
求,恰好形成互補,很多時候也可以組合使用,形成組合機制。
對稱加密
顧名思義,公鑰和私鑰是相同的。
優點是加解密速度快,空間佔用小,保密強度高。
缺點是參與多方都需要持有金鑰,一旦有人洩露則安全性被破壞;另外如何其它分發金鑰也
是個問題。
代表演算法包括 DES、3DES、AES、IDEA 等。
適用於大量資料的加解密,不能用於簽名場景。
非對稱加密
顧名思義,公鑰和私鑰是不同的。
公鑰一般是公開的,人人可獲取的,私鑰一般是個人自己持有,不能被他人獲取。
優點是公私鑰分開,容易管理,並且容易完成金鑰分發。
缺點是加解密速度慢。
代表演算法包括:RSA、ElGamal、橢圓曲線系列演算法。
一般適用於簽名場景或金鑰協商,不適於大量資料的加解密。
組合機制
即先用計算複雜度高的非對稱加密協商一個臨時的對稱加密金鑰(會話金鑰),然後雙方再
通過對稱加密對傳遞的大量資料進行加解密處理。

4、數字簽名和數字證書

數字簽名
類似在紙質合同上簽名確認合同內容,數字簽名用於證實某數字內容的完整性和來源。
A 發給 B 一個檔案。A 先對檔案進行摘要,然後用自己的私鑰進行加密,將檔案和加密串都
發給 B。B 收到後檔案和加密串,用 A 的公鑰來解密加密串,得到原始的數字摘要,跟對文
件進行摘要後的結果進行比對。如果一致,說明該檔案確實是 A 發過來的,並且檔案內容沒
有被修改過。
多重簽名
n 個持有人中,收集到至少 m 個( )的簽名,即認為合法,這種簽名被稱為多重簽名。
其中,n 是提供的公鑰個數,m 是需要匹配公鑰的最少的簽名個數,
群簽名
環簽名
環簽名由 Rivest,shamir 和 Tauman 三位密碼學家在 2001 年首次提出。環簽名屬於一種簡化
的群簽名。
簽名者首先選定一個臨時的簽名者集合,集合中包括簽名者自身。然後簽名者利用自己的私鑰
和簽名集合中其他人的公鑰就可以獨立的產生簽名,而無需他人的幫助。簽名者集合中的其他
成員可能並不知道自己被包含在其中。
數字證書
數字證書用來證明某個公鑰是誰的。
對於數字簽名應用來說,很重要的一點就是公鑰的分發。一旦公鑰被人替換,則整個安全體
系將被破壞掉。
怎麼確保一個公鑰確實是某個人的原始公鑰?
這就需要數字證書機制。
顧名思義,數字證書就是像一個證書一樣,證明資訊和合法性。由證書認證機構
(Certification Authority,CA)來簽發。
數字簽名和數字證書
64
數字證書內容可能包括版本、序列號、簽名演算法型別、簽發者資訊、有效期、被簽發人、籤
發的公開金鑰、CA 數字簽名、其它資訊等等。
其中,最重要的包括 簽發的公開金鑰 、 CA 數字簽名 兩個資訊。因此,只要通過這個證書就能
證明某個公鑰是合法的,因為帶有 CA 的數字簽名。
更進一步地,怎麼證明 CA 的簽名合法不合法呢?
類似的,CA 的數字簽名合法不合法也是通過 CA 的證書來證明的。主流作業系統和瀏覽器裡
面會提前預置一些 CA 的證書(承認這些是合法的證書),然後所有基於他們認證的簽名都會
自然被認為合法。

5、PKI 體系

PKI (Public Key Infrastructure)體系不代表某一種技術,而是綜合多種密碼學手段來實現安
全可靠傳遞訊息和身份確認的一個框架和規範。
一般情況下,包括如下元件:
CA(Certification Authority):負責證書的頒發和作廢,接收來自 RA 的請求;
RA(Registration Authority):對使用者身份進行驗證,校驗資料合法性,負責登記,審
核過了就發給 CA;
證書資料庫:存放證書,一般採用 LDAP 目錄服務,標準格式採用 X.500 系列。
CA 是最核心的元件,主要完成對公鑰的管理。從之前章節內容中,我們介紹過,金鑰有兩種
型別:用於簽名和用於加解密,對應稱為 簽名金鑰對 和 加密金鑰對 。
使用者基於 PKI 體系要申請一個證書,一般可以由 CA 來生成證書和私鑰,也可以自己生成公
鑰和私鑰,然後由 CA 來對公鑰進行簽發。

6、Merkle 樹

默克爾樹(又叫雜湊樹)是一種二叉樹,由一個根節點、一組中間節點和一組葉節點組成。
最下面的葉節點包含儲存資料或其雜湊值,每個中間節點是它的兩個孩子節點內容的雜湊
值,根節點也是由它的兩個子節點內容的雜湊值組成。
進一步的,默克爾樹可以推廣到多叉樹的情形。
默克爾樹的特點是,底層資料的任何變動,都會傳遞到其父親節點,一直到樹根。
默克爾樹的典型應用場景包括:
快速比較大量資料:當兩個默克爾樹根相同時,則意味著所代表的資料必然相同。
快速定位修改:例如上例中,如果 D1 中資料被修改,會影響到 N1,N4 和 Root。因
此,沿著 Root --> N4 --> N1,可以快速定位到發生改變的 D1;
零知識證明:例如如何證明某個資料(D0……D3)中包括給定內容 D0,很簡單,構造
一個默克爾樹,公佈 N0,N1,N4,Root,D0 擁有者可以很容易檢測 D0 存在,但不知
道其它內容

7、同態加密

定義
同態加密(Homomorphic Encryption)是一種特殊的加密方法,允許對密文進行處理得到仍
然是加密的結果,即對密文直接進行處理,跟對明文進行處理再加密,得到的結果相同。從
代數的角度講,即同態性。
如果定義一個運算子 ,對加密演算法 E 和 解密演算法 D ,滿足:
則意味著對於該運算滿足同態性。
同態性在代數上包括:加法同態、乘法同態、減法同態和除法同態。同時滿足加法同態和乘
法同態,則意味著是 代數同態 ,即 全同態 。同時滿足四種同態性,則被稱為 算數同態 。
歷史
同態加密的問題最早是由 Ron Rivest、Leonard Adleman 和 Michael L. Dertouzos 在 1978
年提出,但 第一個“全同態”的演算法 到 2009 年才被克雷格·金特里(Craig Gentry)證明。
僅滿足加法同態的演算法包括 Paillier 和 Benaloh 演算法;僅滿足乘法同態的演算法包括 RSA 和
ElGamal 演算法。
同態加密在雲時代的意義十分重大。目前,從安全形度講,使用者還不敢將敏感資訊直接放到
第三方雲上進行處理。如果有了比較實用的同態加密技術,則大家就可以放心的使用各種雲
服務了。
遺憾的是,目前已知的同態加密技術需要消耗大量的計算時間,還遠達不到實用的水平。
函式加密
與同態加密相關的一個問題是函式加密。
同態加密保護的是資料本身,而函式加密顧名思義保護的是處理函式本身,即讓第三方看不
到處理過程的前提下,對資料進行處理。
該問題已被證明是不存在對多個通用函式的任意多 key 的方案,目前僅能做到對某個特定函
數的一個 key 的方案。

相關文章