區塊鏈之加密原理總結(一)

????先放一張以太坊的架構圖:

區塊鏈架構圖


? ??在學習的過程中主要是采用單個模塊了學習了解的,包括P2P,密碼學,網絡,協議等。直接開始總結:

一、非對稱加密基礎知識

(一)非對稱加密解決的問題

? ??????????????秘鑰分配問題也就是秘鑰的傳輸問題,如果對稱秘鑰,那么只能在線下進行秘鑰的交換。如果在線上傳輸秘鑰,那就有可能被攔截。所以采用非對稱加密,兩把鑰匙,一把私鑰自留,一把公鑰公開。公鑰可以在網上傳輸。不用線下交易。保證數據的安全性。

(二)非對稱加密過程演示與相關問題

????1、公鑰加密演示


????????如上圖,A節點發送數據到B節點,此時采用公鑰加密。A節點從自己的公鑰中獲取到B節點的公鑰對明文數據加密,得到密文發送給B節點。而B節點采用自己的私鑰解密。

????問題:

????????1、無法驗證消息來源:由于B的公鑰是公開的,那么B節點怎么確定數據是A節點傳輸過來的呢?黑客模擬A節點發送消息也是有可能啊。

????????2、無法解決消息篡改。

2、私鑰加密公鑰解密演示


????如上圖,A節點采用B的公鑰進行加密,然后將密文傳輸給B節點。B節點拿A節點的公鑰將密文解密。

????問題:

????????1、由于A的公鑰是公開的,一旦網上黑客攔截消息,密文形同虛設。說白了,這種加密方式,只要攔截消息,就都能解開。

????????2、同樣存在無法確定消息來源的問題,和消息篡改的問題。

3、雙重加密演示--先公鑰加密,后私鑰簽名


????????如上圖,A節點在發送數據前,先用B的公鑰加密,得到密文1,再用A的私鑰對密文1加密得到密文2。而B節點得到密文后,先用A的公鑰解密,得到密文1,之后用B的私鑰解密得到明文。

????問題:

????????1、當網絡上攔截到數據密文2時, 由于A的公鑰是公開的,故可以用A的公鑰對密文2解密,就得到了密文1。所以這樣看起來是雙重加密,其實最后一層的私鑰簽名是無效的。一般來講,我們都希望簽名是簽在最原始的數據上。如果簽名放在后面,由于公鑰是公開的,簽名就缺乏安全性。

????????2、存在性能問題,非對稱加密本身效率就很低下,還進行了兩次加密過程。

4、雙重加密演示--先私鑰簽名,后公鑰加密


????????如上圖,A節點先用A的私鑰加密,之后用B的公鑰加密。B節點收到消息后,先采用B的私鑰解密,然后再利用A的公鑰解密。

????????1、當密文數據2被黑客攔截后,由于密文2只能采用B的私鑰解密,而B的私鑰只有B節點有,其他人無法機密。故安全性最高。

????????2、當B節點解密得到密文1后, 只能采用A的公鑰來解密。而只有經過A的私鑰加密的數據才能用A的公鑰解密成功,A的私鑰只有A節點有,所以可以確定數據是由A節點傳輸過來的。

????問題:

????????經兩次非對稱加密,性能問題比較嚴重。

(三)、消息認證

????????基于以上篡改數據的問題,我們引入了消息認證。經過消息認證后的加密流程如下:

????????當A節點發送消息前,先對明文數據做一次散列計算。得到一個摘要, 之后將照耀與原始數據同時發送給B節點。當B節點接收到消息后,對消息解密。解析出其中的散列摘要和原始數據,然后再對原始數據進行一次同樣的散列計算得到摘要1, 比較摘要與摘要1。如果相同則未被篡改,如果不同則表示已經被篡改。

????????在傳輸過程中,密文2只要被篡改,最后導致的hash與hash1就會產生不同。

????問題:

????????無法解決簽名問題,也就是雙方相互攻擊。A對于自己發送的消息始終不承認。比如A對B發送了一條錯誤消息,導致B有損失。但A抵賴不是自己發送的。

(四)、消息簽名

????????在(三)的過程中,沒有辦法解決交互雙方相互攻擊。什么意思呢? 有可能是因為A發送的消息,對A節點不利,后來A就抵賴這消息不是它發送的。

????????為了解決這個問題,故引入了簽名。這里我們將(二)-4中的加密方式,與消息簽名合并設計在一起。

? ? ? ?在上圖中,我們利用A節點的私鑰對其發送的摘要信息進行簽名,然后將簽名+原文,再利用B的公鑰進行加密。而B得到密文后,先用B的私鑰解密,然后 對摘要再用A的公鑰解密,只有比較兩次摘要的內容是否相同。這既避免了防篡改問題,有規避了雙方攻擊問題。因為A對信息進行了簽名,故是無法抵賴的。

(五)、混合加密--不變的共享對稱秘鑰

????????為了解決非對稱加密數據時的性能問題,故往往采用混合加密。這里就需要引入對稱加密,如下圖:


????????在對數據加密時,我們采用了雙方共享的對稱秘鑰來加密。而對稱秘鑰盡量不要在網絡上傳輸,以免丟失。這里的共享對稱秘鑰是根據自己的私鑰和對方的公鑰計算出的,然后適用對稱秘鑰對數據加密。而對方接收到數據時,也計算出對稱秘鑰然后對密文解密。

????問題:

????????以上這種對稱秘鑰是不安全的,因為A的私鑰和B的公鑰一般短期內固定,所以共享對稱秘鑰也是固定不變的。為了增強安全性,最好的方式是每次交互都生成一個臨時的共享對稱秘鑰。那么如何才能在每次交互過程中生成一個隨機的對稱秘鑰,且不需要傳輸呢?

(六)、混合加密--隨機的共享對稱秘鑰

????????那么如何生成隨機的共享秘鑰進行加密呢?

????????對于發送方A節點,在每次發送時,都生成一個臨時非對稱秘鑰對,然后根據B節點的公鑰 和 臨時的非對稱私鑰 可以計算出一個對稱秘鑰(KA算法-Key Agreement)。然后利用該對稱秘鑰對數據進行加密,針對共享秘鑰這里的流程如下:


????????對于B節點,當接收到傳輸過來的數據時,解析出其中A節點的隨機公鑰,之后利用A節點的隨機公鑰 與 B節點自身的私鑰 計算出對稱秘鑰(KA算法)。之后利用對稱秘鑰機密數據。



(七)、其他

????????對于以上加密方式,其實仍然存在很多問題,比如如何避免重放攻擊(在消息中加入Nonce),再比如彩虹表(參考KDF機制解決)之類的問題。由于時間及能力有限,故暫時忽略。

????????那么究竟應該采用何種加密呢?

????????主要還是基于要傳輸的數據的安全等級來考量。不重要的數據其實做好認證和簽名就可以,但是很重要的數據就需要采用安全等級比較高的加密方案了。




二、基于ECC的加密套件


(一)、加密套件概念

????????密碼套件 是一個網絡協議的概念。其中主要包括身份認證、加密、消息認證(MAC)、秘鑰交換的算法組成。

????????在整個網絡的傳輸過程中,根據密碼套件主要分如下幾大類算法:

????????秘鑰交換算法:比如ECDHE、RSA。主要用于客戶端和服務端握手時如何進行身份驗證。

????????消息認證算法:比如SHA1、SHA2、SHA3。主要用于消息摘要。

????????批量加密算法:比如AES, 主要用于加密信息流。

????????偽隨機數算法:例如TLS 1.2的偽隨機函數使用MAC算法的散列函數來創建一個主密鑰——連接雙方共享的一個48字節的私鑰。主密鑰在創建會話密鑰(例如創建MAC)時作為一個熵來源。

(二)、在網絡中都涉及哪些加密呢?

????????在網絡中,一次消息的傳輸一般需要在如下4個階段分別進行加密,才能保證消息安全、可靠的傳輸。

????????握手/網絡協商階段:

????????在雙方進行握手階段,需要進行鏈接的協商。主要的加密算法包括RSA、DH、ECDH等

? ????? 身份認證階段:

????????身份認證階段,需要確定發送的消息的來源來源。主要采用的加密方式包括RSA、DSA、ECDSA(ECC加密,DSA簽名)等。

????????消息加密階段:

????????消息加密指對發送的信息流進行加密。主要采用的加密方式包括DES、RC4、AES等。

????????消息身份認證階段/防篡改階段:

????????主要是保證消息在傳輸過程中確保沒有被篡改過。主要的加密方式包括MD5、SHA1、SHA2、SHA3等。

(三)、ECC、ECDSA、ECDHE、ECIES

? ??????ECC:Elliptic Curves Cryptography,橢圓曲線密碼編碼學。是一種根據橢圓上點倍積生成 公鑰、私鑰的算法。用于生成公私秘鑰。

? ??????ECDSA:用于數字簽名,是一種數字簽名算法。一種有效的數字簽名使接收者有理由相信消息是由已知的發送者創建的,從而發送者不能否認已經發送了消息(身份驗證和不可否認),并且消息在運輸過程中沒有改變。ECDSA簽名算法是ECC與DSA的結合,整個簽名過程與DSA類似,所不一樣的是簽名中采取的算法為ECC,最后簽名出來的值也是分為r,s。主要用于身份認證階段

? ??????ECDH:也是基于ECC算法的霍夫曼樹秘鑰,通過ECDH,雙方可以在不共享任何秘密的前提下協商出一個共享秘密,并且是這種共享秘鑰是為當前的通信暫時性的隨機生成的,通信一旦中斷秘鑰就消失。主要用于握手磋商階段。

? ??????ECIES:是一種集成加密方案,也可稱為一種混合加密方案,它提供了對所選擇的明文和選擇的密碼文本攻擊的語義安全性。ECIES可以使用不同類型的函數:秘鑰協商函數(KA),秘鑰推導函數(KDF),對稱加密方案(ENC),哈希函數(HASH), H-MAC函數(MAC)。

? ??????ECC是橢圓加密算法,主要講述了按照公私鑰怎么在橢圓上產生,并且不可逆。ECDSA則主要是采用ECC算法怎么來做簽名,ECDH則是采用ECC算法怎么生成對稱秘鑰。以上三者都是對ECC加密算法的應用。而現實場景中,我們往往會采用混合加密(對稱加密,非對稱加密結合使用,簽名技術等一起使用)。ECIES就是底層利用ECC算法提供的一套集成(混合)加密方案。其中包括了非對稱加密,對稱加密和簽名的功能。

(三)、ECC算法

1、ECC定義:

????????ECC 是?Elliptic Curve Cryptography的簡稱。那么什么是橢圓加密曲線呢?Wolfram MathWorld 給出了很標準的定義:一條橢圓曲線就是一組被?y^2=x^3+ax+b??定義的且滿足?? 4a^3+27b^2 \neq 0?的點集。?

4a^3+27b^2\neq 0這個先訂條件是為了保證曲線不包含奇點。

所以,隨著曲線參數a和b的不斷變化,曲線也呈現出了不同的形狀。比如:

2、ECC算法的理解

????????所有的非對稱加密的基本原理基本都是基于一個公式 K = k*G。其中K代表公鑰,k代表私鑰,G代表某一個選取的基點。非對稱加密的算法 就是要保證 該公式?不可進行逆運算(也就是說G/K是無法計算的)。

????????ECC是如何計算出公私鑰呢?這里我按照我自己的理解來描述。

? ??????我理解,ECC的核心思想就是:選擇曲線上的一個基點G,之后隨機在ECC曲線上取一個點k(作為私鑰),然后根據k*G計算出我們的公鑰K。并且保證公鑰K也要在曲線上。

????????那么k*G怎么計算呢?如何計算k*G才能保證最后的結果不可逆呢?這就是ECC算法要解決的。

????????首先,我們先隨便選擇一條ECC曲線,a = -3, b = 7 得到如下曲線:

?????????在這個曲線上,我隨機選取兩個點,這兩個點的乘法怎么算呢?我們可以簡化下問題,乘法是都可以用加法表示的,比如2*2 = 2+2,3*5 = 5+5+5。 那么我們只要能在曲線上計算出加法,理論上就能算乘法。所以,只要能在這個曲線上進行加法計算,理論上就可以來計算乘法,理論上也就可以計算k*G這種表達式的值。

3、ECC加法體系

????????曲線上兩點的加法又怎么算呢?這里ECC為了保證不可逆性,在曲線上自定義了加法體系。

????????現實中,1+1=2,2+2=4,但在ECC算法里,我們理解的這種加法體系是不可能。故需要自定義一套適用于該曲線的加法體系。

? ??????ECC定義,在圖形中隨機找一條直線,與ECC曲線相交于三個點(也有可能是兩個點),這三點分別是P、Q、R。

? ??????那么P+Q+R = 0。其中0 不是坐標軸上的0點,而是ECC中的無窮遠點。也就是說定義了無窮遠點為0點。

????????同樣,我們就能得出 P+Q = -R。 由于R 與-R是關于X軸對稱的,所以我們就能在曲線上找到其坐標。

????????P+R+Q = 0, 故P+R = -Q , 如上圖。

以上就描述了ECC曲線的世界里是如何進行加法運算的。

4、ECC的乘法計算與點倍積的推導?


????????從上圖可看出,直線與曲線只有兩個交點,也就是說 直線是曲線的切線。此時P,R 重合了。

????????也就是P = R, 根據上述ECC的加法體系,P+R+Q = 0, 就可以得出 P+R+Q = 2P+Q = 2R+Q=0

????????于是乎得到 2*P = -Q (是不是與我們非對稱算法的公式 K = k*G 越來越近了)。

????????于是我們得出一個結論,可以算乘法,不過只有在切點的時候才能算乘法,而且只能算2的乘法。

????????假若 2 可以變成任意個數進行想乘,那么就能代表在ECC曲線里可以進行乘法運算,那么ECC算法就能滿足非對稱加密算法的要求了。

????????那么我們是不是可以隨機任何一個數的乘法都可以算呢? 答案是肯定的。也就是點倍積 計算方式。

????????選一個隨機數 k, 那么k * P等于多少呢?

????????我們知道在計算機的世界里,所有的都是二進制的,ECC既然能算2的乘法,那么我們可以將隨機數k描 述成二進制然后計算。假若k = 151 = 10010111



????????由于2*P = -Q 所以 這樣就計算出了k*P。這就是點倍積算法。所以在ECC的曲線體系下是可以來計算乘法,那么以為這非對稱加密的方式是可行的。

????????至于為什么這樣計算 是不可逆的。這需要大量的推演,我也不了解。但是我覺得可以這樣理解:

????????我們的手表上,一般都有時間刻度。現在如果把1990年01月01日0點0分0秒作為起始點,如果告訴你至起始點為止時間流逝了 整1年,那么我們是可以計算出現在的時間的,也就是能在手表上將時分秒指針應該指向00:00:00。但是反過來,我說現在手表上的時分秒指針指向了00:00:00,你能告訴我至起始點算過了有幾年了么?

5、ECDSA 簽名

????????ECDSA簽名算法和其他DSA、RSA基本相似,都是采用私鑰簽名,公鑰驗證。只不過算法體系采用的是ECC的算法。交互的雙方要采用同一套參數體系。簽名原理如下:

????????在曲線上選取一個無窮遠點為基點?G = (x,y)。隨機在曲線上取一點k 作為私鑰, K = k*G 計算出公鑰。

? ??????簽名過程:

????????生成隨機數R, 計算出RG.

????????根據隨機數R,消息M的HASH值H,以及私鑰k, 計算出簽名S = (H+kx)/R.

????????將消息M,RG,S發送給接收方。

? ??????簽名驗證過程:

????????接收到消息M, RG,S

????????根據消息計算出HASH值H

????????根據發送方的公鑰K,計算 HG/S + xK/S, 將計算的結果與 RG比較。如果相等則驗證成功。

? ??????公式推論:

????????HG/S + xK/S = HG/S + x(kG)/S = (H+xk)/GS = RG

6、ECDH原理

????????在介紹原理前,說明一下ECC是滿足結合律和交換律的,也就是說A+B+C = A+C+B = (A+C)+B。

????????這里舉一個WIKI上的例子說明如何生成共享秘鑰,也可以參考?Alice And Bob?的例子。

????????Alice 與Bob 要進行通信,雙方前提都是基于 同一參數體系的ECC生成的 公鑰和私鑰。所以有ECC有共同的基點G。

? ??????生成秘鑰階段:

????????Alice 采用公鑰算法 KA = ka * G ,生成了公鑰KA和私鑰ka, 并公開公鑰KA。

????????Bob 采用公鑰算法 KB = kb * G ,生成了公鑰KB和私鑰 kb, 并公開公鑰KB。

? ??????計算ECDH階段:

????????Alice 利用計算公式 Q = ka * KB ?計算出一個秘鑰Q。

????????Bob 利用計算公式 Q' = kb * KA 計算出一個秘鑰Q'。

? ??????共享秘鑰驗證:

????????Q = ka?KB = ka * kb * G = ka * G * kb = KA * kb = kb * KA = Q'

????????故 雙方分別計算出的共享秘鑰不需要進行公開就可采用Q進行加密。我們將Q稱為共享秘鑰。

7、其他

????????在以太坊中,采用的ECIEC的加密套件中的其他內容:

????????1、其中HASH算法采用的是最安全的SHA3算法Keccak

????????2、簽名算法采用的是ECDSA

????????3、認證方式采用的是?H-MAC

????????4、ECC的參數體系采用了secp256k1,? 其他參數體系參考這里




三、以太坊中 UDP通信的加密方案


(一)、H-MAC的加密認證簽名模型:


1、H-MAC基本模型:

????????H-MAC全程叫做 Hash-based Message Authentication Code. 其模型如下:



2、以太坊中UDP的加密,認證,簽名模型:

以太坊的 UDP通信時(RPC通信加密方式不同),則采用了以上的實現方式,并擴展化了。

首先,以太坊的UDP通信的結構如下:


????????其中,sig是 經過 私鑰加密的簽名信息。mac是可以理解為整個消息的摘要, ptype是消息的事件類型,data則是經過RLP編碼后的傳輸數據。

????????其UDP的整個的加密,認證,簽名模型如下:

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容