- 區塊鏈應用開發指南:業務場景剖析與實戰
- 熊麗兵 董一凡等
- 1782字
- 2022-07-28 20:17:57
第2章 密碼學基礎
2.1 密碼學發展歷史
2.1.1 密碼學發展的三個階段
密碼學的發展,經歷了主要的三個階段:第一階段指1949年之前,當時的密碼學主要表現為滿足少數人的特殊用途為主;第二階段指1949—1975年,在這個階段,密碼學逐漸發展成為一門獨立的學科;第三階段一般指1975年之后,密碼學的新方向——公鑰密碼學得到了長足的發展與進步。這三個階段,如果按照密碼學的發展進程來分,可以分為“古典密碼”“對稱密鑰密碼”和“公開密鑰密碼”三個階段。不同時期,人們對信息的存儲、處理、傳輸和計算能力是不同的。信息的利用方式也不同,相應使用的密碼技術也不相同,密碼學的發展經歷了從藝術到科學的發展過程,其中的協議和算法設計、分析以及加解密應用,皆發展成為獨立的藝術和學問,同時也發展成為一門高度綜合的學科,涵蓋了數學、統計、網絡、計算機等學科內容。那么,在開始介紹區塊鏈中的密碼學之前,先讓我們來簡單回顧一下這三個階段。
1.“古典密碼”階段
這個階段的密碼學還不是科學,而是一門小眾的藝術。這個階段出現了一些密碼算法和加密工具。在這個階段中,密碼算法的基本手段——置換排列網絡(Substitution-Permutation Network)出現了,它主要是針對字符進行加密;同一階段,簡單的密碼分析手段也出現了。
舉例來說,這個階段出現過“Scytale密碼”:據說公元前5世紀古希臘的斯巴達人,有意識地使用一些技術方法來加密信息。他們使用的是一根叫“scytale”的棍子。送信人先繞棍子卷一張紙條,然后把要寫的信息縱向寫在上面,接著單獨把紙送給收信人。對方如果不知道棍子的粗細是不可能解密紙上內容的,如圖2-1所示。

圖2-1 斯巴達人使用的“Scytale密碼”
此外,公元前1世紀,著名的愷撒大帝發明了一種密碼——“愷撒密碼”。在愷撒密碼中,每個字母都與其后第三位的字母對應,然后進行替換。據說當時羅馬的軍隊就是使用愷撒密碼進行通信。舉例如下(字母索引偏移量為3):
愷撒密碼明文字母表:A B C D E F G …… X Y Z
愷撒密碼密文字母表:D E F G H I J …… A B C
例如:明文為“veni,vidi,vici”,密文就是“YHAL,YLGL,YLFL”。
26個字符代表字母表的26個字母,從一般意義上說,也可以使用其他字符表,對應的數字也不一定要選擇“3”,可以選其他任意數字。
那個階段還曾經出現過最早的幾何圖形密碼,例如以一種形式寫下消息,以另一種形式讀取消息,舉例來說(見圖2-2),將“I came I saw I conquered”編碼為“IONQC CAIUE WMEAR DESI”:

圖2-2 幾何編碼加密示意
2.“對稱密鑰密碼”階段
對稱密鑰密碼,又稱為“單鑰密碼體制”,即使用相同的密鑰(加解密密鑰)對消息進行加密/解密,系統的保密性主要由密鑰的安全性決定,而與算法是否保密無關。它的設計和實現的中心思想聚焦在:使用哪一種方法,可以產生滿足保密要求的密鑰,以及用什么方法可以將密鑰安全又可靠地分配給通信雙方。對稱密碼體制可以通過分組密碼或流密碼來實現,它既可以用于“數據加密”,又可以用于“消息認證”。其所謂“對稱”,其實就是使用同一把密鑰進行加密,使用同一把密鑰進行解密。對稱加密由于加密和解密使用的是同一個密鑰算法,因此在加解密的過程中速度比較快,適用于對數據量比較大的內容進行加解密。它的主要優點就是算法公開、計算量小、加密速度快、加密效率高,但也存在著顯而易見的缺點,就是在密鑰協商過程中,一旦密鑰泄露,別人就可以用獲取到密鑰對密文進行解密。另外,每一對用戶(通信雙方),每次使用對稱加密算法時,都需要使用其他人不知道的獨一密鑰(互相隔離),這會使得收、發雙方所擁有的密鑰數量巨大,密鑰管理成為雙方的共同負擔。常用的對稱加密算法有DES、3DES、AES、TDEA、Blowfish、RC2、RC4和RC5等。
3.“公開密鑰密碼”階段
相對于“對稱密鑰密碼”階段,這個階段進行了公、私鑰分離的設計,公鑰密碼采用了“非對稱加密”機制——針對私鑰密碼體制(對稱密鑰密碼)的缺陷而被提出。非對稱加密會產生兩把密鑰,分別為公鑰(Public Key)和私鑰(Private Key),其中一把密鑰用于加密,另一把密鑰用于解密。非對稱加密的特征是算法強度復雜、安全性依賴于算法與密鑰,但是由于其算法過于復雜,從而使得速度沒有對稱加密解密的速度快。對稱密碼體制中只有一把密鑰,并且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼機制那樣傳輸對方的密鑰,安全性就提高了很多。常用的非對稱加密算法有RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)等。