在區塊鏈的整個體系中大量使用了密碼學算法,好比用於 PoW 的哈希算法,用於完整性驗證的 Merkle Tree,用於交易簽名與驗證的數字簽名算法,用於隱私保護的零知識證實等等。能夠說密碼學是保證區塊鏈安全的基石,而區塊鏈的普遍應用也推動了密碼學的發展。在區塊鏈內核 CITA 的 v0.18 中,新增了「基於 Rust 語言的國密算法庫」新特性。此次更新,使用戶在尊重版權的前提下,便可自由調用 Rust 實現的國密算法庫,來匹配業務場景所需的國密簽名算法,大幅下降企業用戶及開發者得到高性能區塊鏈底層設計服務的成本,方便用戶打造最貼近業務需求的區塊鏈。 閱讀本文將帶領你走進密碼學的世界,初探這個神祕之境的風景。
算法
密碼學的英語單詞是 Cryptograghy,是由希臘單詞 kryptos(隱藏)和 graphin(寫)派生出來的,最初表明的意思的用來隱祕的傳遞信息。隱藏和寫就是隱寫,在古典密碼學的發展中就有一門關於隱寫術的技術,好比說藏頭詩就是一種隱寫術,你們是否有看過《巨人的隕落》,艾瑟爾和弟弟比利就是經過每隔兩個單詞就會加一個單詞來做爲加密後的密文。隱寫術發展到今天被稱爲數字水印技術,通常在文件中加一個標識信息(即數字水印),能夠起到追蹤溯源,防僞和版權保護的做用。
密碼學一開始是在有惡意攻擊者存在的環境下,保護雙方安全通訊的功能,如今是用來保護信息安全的核心技術。
現代信息安全的基本要求:
安全
以時間劃分,1976年之前的都是古典密碼學,基本使用在軍事機密和外交領域,它的特色就是加解密過程簡單,通常用手工或機械就能夠完成。
古典密碼學如今已經不多采用了,然而,研究古典密碼的原理對於理解構造和分析現代密碼都是十分有益的。尤爲是對稱加密技術,它就是從古典密碼學中演化進來的。
古典密碼學中最經典的兩種算法:
ide
典型的置換密碼的例子,公元前500年的古希臘斯巴達邦城,存在一種叫作「棍子加密」的加密方法。找一個腰帶,將信息橫着寫在腰帶上,可是這個信息是徹底打亂的,須要一個能夠解密的棍子,將腰帶纏繞在棍子上,就能夠恢復出明文。這也是最簡單的置換密碼的方式。
後來隨着抽象代數的出現,有了矩陣以後,就能夠作一個複雜的置換加密,對運算作一個置換,解密的話,用置換矩陣來解密,恢復出明文。性能
代換密碼中最簡單的是凱撒密碼,它是一種單表代換密碼,加密方式就是對字母經過位移進行加密,好比把字母表右移三位,上面是明文表,下面是對應的密文表。以下圖所示:
區塊鏈
每個都有相應表明的位置,像 a 表明着 d,b 表明這 e。
單表代換密碼就很容易被破解,只要用頻率分析表就能夠破解,這是根據人類天然語言中字母出現的頻率不同的特色來進行破解,好比英文 E 使用的就很頻繁,T\R\RN\I\O\A\S 等也不少;有些字母就出現的不多,例如 Z\J\K\Q\X,這樣據能夠得到英文字母使用頻率分佈表,這個表是根據幾本書得到的頻率分析來得到的,同時,統計雙字母組合和三字母組合的使用頻率也很是有用。
有了破解的方法後,密碼學中也會相對應的出現防止破解的方法。
雲計算
多表代替密碼,這個能夠說是古典密碼學的巔峯之做。
以一系列以上的代換表依次對明文消息的字母進行代換的加密操做。先把明文分紅多份,代換表有不少個,根據序列依次更換代換序列,對每一個序列進行加密。典型的代換密碼:vigenere cipher,博福特密碼,enigma密碼機(這個密碼機能夠說是古典密碼學中最厲害的一種,可是在1940年的時候被圖靈給破解了)。
古典密碼中還有比較偏的,好比二戰時期,在太平洋戰場上,日本總能用各類方法破譯美軍的密電碼,這令美軍在戰場上吃盡了苦頭,爲了改變這種局面,1942年,29名印第安那瓦霍族人被徵召入伍,由於他們的語言沒有外族人可以聽懂,因此美軍將他們訓練成專門的譯電員,人稱「風語者」,他們的語言到如今都尚未人可以破解。
總結古典密碼學的特色:
加密
現代密碼學有三個表明事件:
翻譯
現代密碼學的意義是讓密碼學成爲了一門科學,研究方向從軍事和外交走向了民用和公開。古典密碼學更像一門藝術,爲何是藝術?由於古典密碼學是須要用一種比較精妙的方式對明文加密;現代密碼學能夠經過形式化驗證來證實它的安全性。
現代密碼學主要有三個方向:私鑰密碼(對稱密碼)、公鑰密碼(非對稱密碼),安全協議。
設計
私鑰密碼也稱對稱密碼,是將文字加密轉換成對比特序列的加密,用同一個祕鑰進行加密和解密操做,這個祕鑰發送方和接收方都是要保密的,因此稱爲私鑰密碼。它的兩個基本操做就是代換和置換,來源於古典密碼,先對比特序列進行計算,能夠看下DES\AES的短髮都是對比特位進行異或操做。
對稱密碼有兩個設計原則,一個是擴散(diffusion):明文的統計結構被擴散小時到密文的長程統計特性,使得明文和祕文之間的統計關係儘可能複雜。
另外一個是混亂(confusion):使得密文的統計特性與祕鑰的取值之間的關係儘可能複雜。
對稱密碼的表明有DES算法和AES算法,DES算法就一個算法,有15個對稱加密短髮進行競爭,我國的SM4算法是咱們如今使用的算法。
在講解公鑰密碼學以前,先說明下公鑰密碼學的數學基礎。
先簡單介紹下費馬,來自法國的業餘數學家之王。他有個有趣的故事,在1637年,他在看一本書的時候,在書的邊沿空白處寫下來一個看起來相似勾股定理的公式:
cdn
而後他又在旁邊寫了個結論「當N大於2的時候,這個方程式沒有整數解」,而且自稱知道怎麼證實可是空白處的地方不夠,寫不下證實過程。這個數學公式後來成爲了數學界的三大猜測之一的費馬猜測,其他兩個猜測分別是哥德巴赫猜測和四色猜測。費馬纔想在1994年被數學家安德魯 懷爾斯和他的學生理查泰勒證實,所以也得到了數學界的諾貝爾獎——Fields Medal。
這個是費馬大定理和密碼學的關係不大,主要和密碼學關係比較緊密的是費馬小定理,費馬小定理中隱約有了「羣」的雛形。
費馬小定理和歐拉定理:
羣論由法國數學家伽羅瓦提出來的,很年輕就去世的一位數學家,後世稱他脾氣暴躁才致使本身早亡。在1830年法國七月革命爆發,他批評校長將他們困在學校的保守作法,所以被校長勸退,勸退後,在社會上發表過一些比較激烈的政治言論,兩次入獄。
第二次入獄後,在獄中認識一位醫生的女兒,兩人陷入熱戀,出獄後不久,醫生的女兒的另外一位追求者要求和他進行決鬥。在決鬥前一晚,他還在瘋狂的記錄他的數學成果。有多是認爲本身活不下來,在紙上記錄下來本身快沒時間了,要趕快記錄下來,果真次日就離開世間,固然這個是比較富有浪漫色彩的說法,也是被普遍流傳的。
伽羅瓦能夠說是絕對的天才,只學了5年的數學,就發明了羣論。他離世後,他的朋友將伽羅瓦寫過兩片論文寄給卡爾·弗里德里希·高斯與雅各比(又翻譯做:雅可比),可是都石沉大海,要一直到1843年,才由劉維爾確定伽羅瓦結果之正確、首創與深邃,並在1846年將它發表。
伽瓦羅能夠說是過早離開的天才。
後來他的羣論就成爲來密碼學的基礎,如今來研究下羣論是什麼?
羣論是一種代數結構,代數結構就是有若干集合,好比羣:(G,*)。
而後須要有如下四個性質
這個就是在1976年Diffie 和Hellman提出的密碼學新方向中提出的協議,它主要解決的是祕鑰分發問題,是公鑰密碼學的開端,而後它的安全性是基於計算Diffie -Hellman問題的困難性。
計算Diffie -Hellman的困難性:
看下這個協議的具體描述:
RSA算法是第一個公鑰密碼算法,也是第一個數字簽名算法。具備乘法同態性,也能夠稱爲第一個乘法同態特性的算法,它提出來的最先,也研究的最爲普遍,所以也是理論上最成熟的密碼學算法。
算法以下:
同態加密主要用於雲計算中保護用戶的隱私。
RSA簽名算法(第一個數字簽名算法)
用處滿多的,例如數字貨幣交易的時候,須要用到私鑰簽名。
算法以下:
除了RSA數字簽名以外,現代密碼學中還包含不少的數字簽名,例如盲簽名(簽名者不知道簽名的消息就能夠對這個信息進行簽名,出如今電子銀行和電子現金的交易中比較多,當不想讓銀行知道資金流向的時候,如今不少公平交易是用盲簽名來作的)、羣簽名、環簽名(是一種特殊的羣簽名方式,通常羣簽名就是,在一個簽名羣體中,任意某我的的簽名會隱匿在這個羣體當中,外人只能看到這個羣體裏的成員對這個信息進行簽名,可是具體是哪一個成員是不知道的,RingCT和門羅幣中就是運用環簽名技術來保護用戶隱私,inter的SGX也使用了羣簽名技術)、聚合簽名(好多個簽名方式和多個私鑰來對不一樣的信息進行簽名,最後集合成一個簽名,這樣的好處是加快驗證,減小存儲空間)、多重簽名(多個簽名者對同一條消息進行簽名,最終生成一個簽名)、門限簽名(在一個簽名羣體中,超過門限門檻的簽名者對消息進行簽名後,會公佈出表明這個羣體的一個簽名,dfinity的VRF就是運用來門限簽名)和一次性簽名(這對公私鑰只能對消息進行一次簽名,若是第二次籤的話,私鑰就會暴露,計算快速,通常使用於傳感器之類的計算資源有限的場景中)。
除了上面介紹的算法外,經典的公鑰密碼算法還有elgamal、rabin密碼算法和橢圓曲線算法。
介紹下目前密碼學的研究熱點有哪些。
量子密碼學:當量子計算機理論逐漸成熟,好多像基於離散對數問題、大數分解困難問題正在用的公鑰密碼學算法的安全性條件都由於量子計算機的出現而被攻破,爲了應對這種狀況的發生,就出現了量子密碼學。如今通常是基於格或hash、超奇異橢圓曲線的同源問題。
生物密碼學:生物密碼是一個RSA裏的A,阿德爾曼在1994年提出的利用生物的生化特性來作DNA計算,能夠破解DES加密,有人利用生物的加密特性來進行一次性密碼本的加密技術。
同態加密:基本上都是inter在研究,全同態加密如今已經有算法出來了,效率比較低,可是同態加密在雲計算中仍是頗有用的。
區塊鏈:今年歐密會就有5篇關於區塊鏈的論文。這能夠說是打破了往年的慣例,畢竟之前1年有1篇已是一個不錯的表現了。代表了許多密碼學者開始研究密碼學在區塊鏈中的應用,區塊鏈爲密碼學的發展帶來新的活力,密碼學也爲區塊鏈的發展提供了有力保障。
安全協議:零知識證實,多方簽名協議。
基於雙線性對的密碼學:這個是近年研究的一個熱點。像屬性基加密,配合祕密分享方案也能夠設計門限簽名算法。
這是密碼學系列文章的第一期。下期咱們會給出一個基於 BLS 簽名的門限簽名算法,而且有白板推演的完整視頻哦,敬請期待哦~