????先放一張以太坊的架構(gòu)圖:
? ??在學(xué)習(xí)的過程中主要是采用單個(gè)模塊了學(xué)習(xí)了解的躬柬,包括P2P,密碼學(xué),網(wǎng)絡(luò)印颤,協(xié)議等请祖。直接開始總結(jié):
一订歪、非對(duì)稱加密基礎(chǔ)知識(shí)
(一)非對(duì)稱加密解決的問題
? ??????????????秘鑰分配問題也就是秘鑰的傳輸問題,如果對(duì)稱秘鑰肆捕,那么只能在線下進(jìn)行秘鑰的交換刷晋。如果在線上傳輸秘鑰,那就有可能被攔截慎陵。所以采用非對(duì)稱加密眼虱,兩把鑰匙,一把私鑰自留席纽,一把公鑰公開捏悬。公鑰可以在網(wǎng)上傳輸。不用線下交易润梯。保證數(shù)據(jù)的安全性过牙。
(二)非對(duì)稱加密過程演示與相關(guān)問題
????1、公鑰加密演示
????????如上圖纺铭,A節(jié)點(diǎn)發(fā)送數(shù)據(jù)到B節(jié)點(diǎn)寇钉,此時(shí)采用公鑰加密。A節(jié)點(diǎn)從自己的公鑰中獲取到B節(jié)點(diǎn)的公鑰對(duì)明文數(shù)據(jù)加密舶赔,得到密文發(fā)送給B節(jié)點(diǎn)摧莽。而B節(jié)點(diǎn)采用自己的私鑰解密。
????問題:
????????1顿痪、無法驗(yàn)證消息來源:由于B的公鑰是公開的,那么B節(jié)點(diǎn)怎么確定數(shù)據(jù)是A節(jié)點(diǎn)傳輸過來的呢油够?黑客模擬A節(jié)點(diǎn)發(fā)送消息也是有可能啊蚁袭。
????????2、無法解決消息篡改石咬。
2揩悄、私鑰加密公鑰解密演示
????如上圖,A節(jié)點(diǎn)采用B的公鑰進(jìn)行加密鬼悠,然后將密文傳輸給B節(jié)點(diǎn)删性。B節(jié)點(diǎn)拿A節(jié)點(diǎn)的公鑰將密文解密亏娜。
????問題:
????????1、由于A的公鑰是公開的蹬挺,一旦網(wǎng)上黑客攔截消息维贺,密文形同虛設(shè)。說白了巴帮,這種加密方式溯泣,只要攔截消息,就都能解開榕茧。
????????2垃沦、同樣存在無法確定消息來源的問題,和消息篡改的問題用押。
3肢簿、雙重加密演示--先公鑰加密,后私鑰簽名
????????如上圖蜻拨,A節(jié)點(diǎn)在發(fā)送數(shù)據(jù)前池充,先用B的公鑰加密,得到密文1官觅,再用A的私鑰對(duì)密文1加密得到密文2纵菌。而B節(jié)點(diǎn)得到密文后,先用A的公鑰解密休涤,得到密文1咱圆,之后用B的私鑰解密得到明文。
????問題:
????????1功氨、當(dāng)網(wǎng)絡(luò)上攔截到數(shù)據(jù)密文2時(shí)序苏, 由于A的公鑰是公開的,故可以用A的公鑰對(duì)密文2解密捷凄,就得到了密文1忱详。所以這樣看起來是雙重加密,其實(shí)最后一層的私鑰簽名是無效的跺涤。一般來講匈睁,我們都希望簽名是簽在最原始的數(shù)據(jù)上。如果簽名放在后面桶错,由于公鑰是公開的航唆,簽名就缺乏安全性。
????????2院刁、存在性能問題糯钙,非對(duì)稱加密本身效率就很低下,還進(jìn)行了兩次加密過程。
4任岸、雙重加密演示--先私鑰簽名再榄,后公鑰加密
????????如上圖,A節(jié)點(diǎn)先用A的私鑰加密享潜,之后用B的公鑰加密困鸥。B節(jié)點(diǎn)收到消息后,先采用B的私鑰解密米碰,然后再利用A的公鑰解密窝革。
????????1、當(dāng)密文數(shù)據(jù)2被黑客攔截后吕座,由于密文2只能采用B的私鑰解密虐译,而B的私鑰只有B節(jié)點(diǎn)有,其他人無法機(jī)密吴趴。故安全性最高漆诽。
????????2、當(dāng)B節(jié)點(diǎn)解密得到密文1后锣枝, 只能采用A的公鑰來解密厢拭。而只有經(jīng)過A的私鑰加密的數(shù)據(jù)才能用A的公鑰解密成功,A的私鑰只有A節(jié)點(diǎn)有撇叁,所以可以確定數(shù)據(jù)是由A節(jié)點(diǎn)傳輸過來的供鸠。
????問題:
????????經(jīng)兩次非對(duì)稱加密,性能問題比較嚴(yán)重陨闹。
(三)楞捂、消息認(rèn)證
????????基于以上篡改數(shù)據(jù)的問題,我們引入了消息認(rèn)證趋厉。經(jīng)過消息認(rèn)證后的加密流程如下:
????????當(dāng)A節(jié)點(diǎn)發(fā)送消息前寨闹,先對(duì)明文數(shù)據(jù)做一次散列計(jì)算。得到一個(gè)摘要, 之后將照耀與原始數(shù)據(jù)同時(shí)發(fā)送給B節(jié)點(diǎn)君账。當(dāng)B節(jié)點(diǎn)接收到消息后繁堡,對(duì)消息解密。解析出其中的散列摘要和原始數(shù)據(jù)乡数,然后再對(duì)原始數(shù)據(jù)進(jìn)行一次同樣的散列計(jì)算得到摘要1, 比較摘要與摘要1椭蹄。如果相同則未被篡改,如果不同則表示已經(jīng)被篡改净赴。
????????在傳輸過程中塑娇,密文2只要被篡改,最后導(dǎo)致的hash與hash1就會(huì)產(chǎn)生不同劫侧。
????問題:
????????無法解決簽名問題,也就是雙方相互攻擊。A對(duì)于自己發(fā)送的消息始終不承認(rèn)烧栋。比如A對(duì)B發(fā)送了一條錯(cuò)誤消息写妥,導(dǎo)致B有損失。但A抵賴不是自己發(fā)送的审姓。
(四)珍特、消息簽名
????????在(三)的過程中,沒有辦法解決交互雙方相互攻擊魔吐。什么意思呢扎筒? 有可能是因?yàn)锳發(fā)送的消息,對(duì)A節(jié)點(diǎn)不利酬姆,后來A就抵賴這消息不是它發(fā)送的嗜桌。
????????為了解決這個(gè)問題,故引入了簽名辞色。這里我們將(二)-4中的加密方式骨宠,與消息簽名合并設(shè)計(jì)在一起。
? ? ? ?在上圖中相满,我們利用A節(jié)點(diǎn)的私鑰對(duì)其發(fā)送的摘要信息進(jìn)行簽名层亿,然后將簽名+原文,再利用B的公鑰進(jìn)行加密立美。而B得到密文后匿又,先用B的私鑰解密,然后 對(duì)摘要再用A的公鑰解密建蹄,只有比較兩次摘要的內(nèi)容是否相同碌更。這既避免了防篡改問題,有規(guī)避了雙方攻擊問題躲撰。因?yàn)锳對(duì)信息進(jìn)行了簽名针贬,故是無法抵賴的。
(五)拢蛋、混合加密--不變的共享對(duì)稱秘鑰
????????為了解決非對(duì)稱加密數(shù)據(jù)時(shí)的性能問題桦他,故往往采用混合加密。這里就需要引入對(duì)稱加密谆棱,如下圖:
????????在對(duì)數(shù)據(jù)加密時(shí)快压,我們采用了雙方共享的對(duì)稱秘鑰來加密。而對(duì)稱秘鑰盡量不要在網(wǎng)絡(luò)上傳輸垃瞧,以免丟失蔫劣。這里的共享對(duì)稱秘鑰是根據(jù)自己的私鑰和對(duì)方的公鑰計(jì)算出的,然后適用對(duì)稱秘鑰對(duì)數(shù)據(jù)加密个从。而對(duì)方接收到數(shù)據(jù)時(shí)脉幢,也計(jì)算出對(duì)稱秘鑰然后對(duì)密文解密歪沃。
????問題:
????????以上這種對(duì)稱秘鑰是不安全的,因?yàn)锳的私鑰和B的公鑰一般短期內(nèi)固定嫌松,所以共享對(duì)稱秘鑰也是固定不變的沪曙。為了增強(qiáng)安全性,最好的方式是每次交互都生成一個(gè)臨時(shí)的共享對(duì)稱秘鑰萎羔。那么如何才能在每次交互過程中生成一個(gè)隨機(jī)的對(duì)稱秘鑰液走,且不需要傳輸呢?
(六)贾陷、混合加密--隨機(jī)的共享對(duì)稱秘鑰
????????那么如何生成隨機(jī)的共享秘鑰進(jìn)行加密呢缘眶?
????????對(duì)于發(fā)送方A節(jié)點(diǎn),在每次發(fā)送時(shí)髓废,都生成一個(gè)臨時(shí)非對(duì)稱秘鑰對(duì)巷懈,然后根據(jù)B節(jié)點(diǎn)的公鑰 和 臨時(shí)的非對(duì)稱私鑰 可以計(jì)算出一個(gè)對(duì)稱秘鑰(KA算法-Key Agreement)。然后利用該對(duì)稱秘鑰對(duì)數(shù)據(jù)進(jìn)行加密瓦哎,針對(duì)共享秘鑰這里的流程如下:
????????對(duì)于B節(jié)點(diǎn)砸喻,當(dāng)接收到傳輸過來的數(shù)據(jù)時(shí),解析出其中A節(jié)點(diǎn)的隨機(jī)公鑰蒋譬,之后利用A節(jié)點(diǎn)的隨機(jī)公鑰 與 B節(jié)點(diǎn)自身的私鑰 計(jì)算出對(duì)稱秘鑰(KA算法)割岛。之后利用對(duì)稱秘鑰機(jī)密數(shù)據(jù)。
(七)犯助、其他
????????對(duì)于以上加密方式癣漆,其實(shí)仍然存在很多問題,比如如何避免重放攻擊(在消息中加入Nonce)剂买,再比如彩虹表(參考KDF機(jī)制解決)之類的問題惠爽。由于時(shí)間及能力有限,故暫時(shí)忽略瞬哼。
????????那么究竟應(yīng)該采用何種加密呢婚肆?
????????主要還是基于要傳輸?shù)臄?shù)據(jù)的安全等級(jí)來考量。不重要的數(shù)據(jù)其實(shí)做好認(rèn)證和簽名就可以坐慰,但是很重要的數(shù)據(jù)就需要采用安全等級(jí)比較高的加密方案了较性。
二、基于ECC的加密套件
(一)结胀、加密套件概念
????????密碼套件 是一個(gè)網(wǎng)絡(luò)協(xié)議的概念赞咙。其中主要包括身份認(rèn)證、加密糟港、消息認(rèn)證(MAC)攀操、秘鑰交換的算法組成。
????????在整個(gè)網(wǎng)絡(luò)的傳輸過程中秸抚,根據(jù)密碼套件主要分如下幾大類算法:
????????秘鑰交換算法:比如ECDHE速和、RSA歹垫。主要用于客戶端和服務(wù)端握手時(shí)如何進(jìn)行身份驗(yàn)證。
????????消息認(rèn)證算法:比如SHA1颠放、SHA2县钥、SHA3。主要用于消息摘要慈迈。
????????批量加密算法:比如AES, 主要用于加密信息流。
????????偽隨機(jī)數(shù)算法:例如TLS 1.2的偽隨機(jī)函數(shù)使用MAC算法的散列函數(shù)來創(chuàng)建一個(gè)主密鑰——連接雙方共享的一個(gè)48字節(jié)的私鑰省有。主密鑰在創(chuàng)建會(huì)話密鑰(例如創(chuàng)建MAC)時(shí)作為一個(gè)熵來源痒留。
(二)、在網(wǎng)絡(luò)中都涉及哪些加密呢蠢沿?
????????在網(wǎng)絡(luò)中伸头,一次消息的傳輸一般需要在如下4個(gè)階段分別進(jìn)行加密,才能保證消息安全舷蟀、可靠的傳輸恤磷。
????????握手/網(wǎng)絡(luò)協(xié)商階段:
????????在雙方進(jìn)行握手階段,需要進(jìn)行鏈接的協(xié)商野宜。主要的加密算法包括RSA扫步、DH、ECDH等
????????身份認(rèn)證階段匈子,需要確定發(fā)送的消息的來源來源河胎。主要采用的加密方式包括RSA、DSA虎敦、ECDSA(ECC加密游岳,DSA簽名)等。
????????消息加密指對(duì)發(fā)送的信息流進(jìn)行加密其徙。主要采用的加密方式包括DES胚迫、RC4、AES等唾那。
????????主要是保證消息在傳輸過程中確保沒有被篡改過访锻。主要的加密方式包括MD5、SHA1通贞、SHA2朗若、SHA3等。
(三)昌罩、ECC哭懈、ECDSA、ECDHE茎用、ECIES
? ??????ECC:Elliptic Curves Cryptography遣总,橢圓曲線密碼編碼學(xué)睬罗。是一種根據(jù)橢圓上點(diǎn)倍積生成 公鑰、私鑰的算法旭斥。用于生成公私秘鑰容达。
? ??????ECDSA:用于數(shù)字簽名,是一種數(shù)字簽名算法。一種有效的數(shù)字簽名使接收者有理由相信消息是由已知的發(fā)送者創(chuàng)建的垂券,從而發(fā)送者不能否認(rèn)已經(jīng)發(fā)送了消息(身份驗(yàn)證和不可否認(rèn))花盐,并且消息在運(yùn)輸過程中沒有改變。ECDSA簽名算法是ECC與DSA的結(jié)合菇爪,整個(gè)簽名過程與DSA類似算芯,所不一樣的是簽名中采取的算法為ECC,最后簽名出來的值也是分為r,s凳宙。主要用于身份認(rèn)證階段熙揍。
? ??????ECDH:也是基于ECC算法的霍夫曼樹秘鑰,通過ECDH氏涩,雙方可以在不共享任何秘密的前提下協(xié)商出一個(gè)共享秘密届囚,并且是這種共享秘鑰是為當(dāng)前的通信暫時(shí)性的隨機(jī)生成的,通信一旦中斷秘鑰就消失是尖。主要用于握手磋商階段意系。
? ??????ECIES:是一種集成加密方案,也可稱為一種混合加密方案,它提供了對(duì)所選擇的明文和選擇的密碼文本攻擊的語義安全性析砸。ECIES可以使用不同類型的函數(shù):秘鑰協(xié)商函數(shù)(KA)昔字,秘鑰推導(dǎo)函數(shù)(KDF),對(duì)稱加密方案(ENC)首繁,哈希函數(shù)(HASH), H-MAC函數(shù)(MAC)作郭。
? ??????ECC是橢圓加密算法,主要講述了按照公私鑰怎么在橢圓上產(chǎn)生弦疮,并且不可逆夹攒。ECDSA則主要是采用ECC算法怎么來做簽名,ECDH則是采用ECC算法怎么生成對(duì)稱秘鑰胁塞。以上三者都是對(duì)ECC加密算法的應(yīng)用咏尝。而現(xiàn)實(shí)場(chǎng)景中,我們往往會(huì)采用混合加密(對(duì)稱加密啸罢,非對(duì)稱加密結(jié)合使用编检,簽名技術(shù)等一起使用)。ECIES就是底層利用ECC算法提供的一套集成(混合)加密方案扰才。其中包括了非對(duì)稱加密允懂,對(duì)稱加密和簽名的功能。
(三)衩匣、ECC算法
1蕾总、ECC定義:
????????ECC 是?Elliptic Curve Cryptography的簡(jiǎn)稱粥航。那么什么是橢圓加密曲線呢?Wolfram MathWorld 給出了很標(biāo)準(zhǔn)的定義:一條橢圓曲線就是一組被???定義的且滿足?? ?的點(diǎn)集生百。?
這個(gè)先訂條件是為了保證曲線不包含奇點(diǎn)递雀。
所以,隨著曲線參數(shù)a和b的不斷變化蚀浆,曲線也呈現(xiàn)出了不同的形狀缀程。比如:
2、ECC算法的理解
????????所有的非對(duì)稱加密的基本原理基本都是基于一個(gè)公式 K = k*G市俊。其中K代表公鑰杠输,k代表私鑰,G代表某一個(gè)選取的基點(diǎn)秕衙。非對(duì)稱加密的算法 就是要保證 該公式?不可進(jìn)行逆運(yùn)算(也就是說G/K是無法計(jì)算的)。
????????ECC是如何計(jì)算出公私鑰呢僵刮?這里我按照我自己的理解來描述据忘。
? ??????我理解,ECC的核心思想就是:選擇曲線上的一個(gè)基點(diǎn)G搞糕,之后隨機(jī)在ECC曲線上取一個(gè)點(diǎn)k(作為私鑰)勇吊,然后根據(jù)k*G計(jì)算出我們的公鑰K。并且保證公鑰K也要在曲線上窍仰。
????????那么k*G怎么計(jì)算呢汉规?如何計(jì)算k*G才能保證最后的結(jié)果不可逆呢?這就是ECC算法要解決的驹吮。
????????首先针史,我們先隨便選擇一條ECC曲線,a = -3, b = 7 得到如下曲線:
?????????在這個(gè)曲線上碟狞,我隨機(jī)選取兩個(gè)點(diǎn)啄枕,這兩個(gè)點(diǎn)的乘法怎么算呢?我們可以簡(jiǎn)化下問題族沃,乘法是都可以用加法表示的频祝,比如2*2 = 2+2,3*5 = 5+5+5脆淹。 那么我們只要能在曲線上計(jì)算出加法常空,理論上就能算乘法。所以盖溺,只要能在這個(gè)曲線上進(jìn)行加法計(jì)算漓糙,理論上就可以來計(jì)算乘法,理論上也就可以計(jì)算k*G這種表達(dá)式的值咐柜。
3兼蜈、ECC加法體系
????????曲線上兩點(diǎn)的加法又怎么算呢攘残?這里ECC為了保證不可逆性,在曲線上自定義了加法體系为狸。
????????現(xiàn)實(shí)中歼郭,1+1=2,2+2=4辐棒,但在ECC算法里病曾,我們理解的這種加法體系是不可能。故需要自定義一套適用于該曲線的加法體系漾根。
? ??????ECC定義泰涂,在圖形中隨機(jī)找一條直線,與ECC曲線相交于三個(gè)點(diǎn)(也有可能是兩個(gè)點(diǎn))辐怕,這三點(diǎn)分別是P逼蒙、Q、R寄疏。
? ??????那么P+Q+R = 0是牢。其中0 不是坐標(biāo)軸上的0點(diǎn),而是ECC中的無窮遠(yuǎn)點(diǎn)陕截。也就是說定義了無窮遠(yuǎn)點(diǎn)為0點(diǎn)驳棱。
????????同樣,我們就能得出 P+Q = -R农曲。 由于R 與-R是關(guān)于X軸對(duì)稱的社搅,所以我們就能在曲線上找到其坐標(biāo)。
????????P+R+Q = 0, 故P+R = -Q , 如上圖乳规。
以上就描述了ECC曲線的世界里是如何進(jìn)行加法運(yùn)算的形葬。
4、ECC的乘法計(jì)算與點(diǎn)倍積的推導(dǎo)?
????????從上圖可看出暮的,直線與曲線只有兩個(gè)交點(diǎn)荷并,也就是說 直線是曲線的切線。此時(shí)P,R 重合了青扔。
????????也就是P = R, 根據(jù)上述ECC的加法體系源织,P+R+Q = 0, 就可以得出 P+R+Q = 2P+Q = 2R+Q=0
????????于是乎得到 2*P = -Q (是不是與我們非對(duì)稱算法的公式 K = k*G 越來越近了)。
????????于是我們得出一個(gè)結(jié)論微猖,可以算乘法谈息,不過只有在切點(diǎn)的時(shí)候才能算乘法,而且只能算2的乘法凛剥。
????????假若 2 可以變成任意個(gè)數(shù)進(jìn)行想乘侠仇,那么就能代表在ECC曲線里可以進(jìn)行乘法運(yùn)算,那么ECC算法就能滿足非對(duì)稱加密算法的要求了。
????????那么我們是不是可以隨機(jī)任何一個(gè)數(shù)的乘法都可以算呢逻炊? 答案是肯定的互亮。也就是點(diǎn)倍積 計(jì)算方式。
????????選一個(gè)隨機(jī)數(shù) k, 那么k * P等于多少呢余素?
????????我們知道在計(jì)算機(jī)的世界里豹休,所有的都是二進(jìn)制的,ECC既然能算2的乘法桨吊,那么我們可以將隨機(jī)數(shù)k描 述成二進(jìn)制然后計(jì)算威根。假若k = 151 = 10010111
????????由于2*P = -Q 所以 這樣就計(jì)算出了k*P。這就是點(diǎn)倍積算法视乐。所以在ECC的曲線體系下是可以來計(jì)算乘法洛搀,那么以為這非對(duì)稱加密的方式是可行的。
????????至于為什么這樣計(jì)算 是不可逆的佑淀。這需要大量的推演留美,我也不了解。但是我覺得可以這樣理解:
????????我們的手表上伸刃,一般都有時(shí)間刻度《懒瘢現(xiàn)在如果把1990年01月01日0點(diǎn)0分0秒作為起始點(diǎn),如果告訴你至起始點(diǎn)為止時(shí)間流逝了 整1年奕枝,那么我們是可以計(jì)算出現(xiàn)在的時(shí)間的,也就是能在手表上將時(shí)分秒指針應(yīng)該指向00:00:00瓶堕。但是反過來隘道,我說現(xiàn)在手表上的時(shí)分秒指針指向了00:00:00,你能告訴我至起始點(diǎn)算過了有幾年了么?
5郎笆、ECDSA 簽名
????????ECDSA簽名算法和其他DSA谭梗、RSA基本相似,都是采用私鑰簽名宛蚓,公鑰驗(yàn)證激捏。只不過算法體系采用的是ECC的算法娱局。交互的雙方要采用同一套參數(shù)體系修赞。簽名原理如下:
????????在曲線上選取一個(gè)無窮遠(yuǎn)點(diǎn)為基點(diǎn)?G = (x,y)。隨機(jī)在曲線上取一點(diǎn)k 作為私鑰僵控, K = k*G 計(jì)算出公鑰痕钢。
? ??????簽名過程:
????????生成隨機(jī)數(shù)R, 計(jì)算出RG.
????????根據(jù)隨機(jī)數(shù)R,消息M的HASH值H,以及私鑰k, 計(jì)算出簽名S = (H+kx)/R.
????????將消息M,RG,S發(fā)送給接收方图柏。
? ??????簽名驗(yàn)證過程:
????????接收到消息M, RG,S
????????根據(jù)消息計(jì)算出HASH值H
????????根據(jù)發(fā)送方的公鑰K,計(jì)算 HG/S + xK/S, 將計(jì)算的結(jié)果與 RG比較。如果相等則驗(yàn)證成功任连。
? ??????公式推論:
????????HG/S + xK/S = HG/S + x(kG)/S = (H+xk)/GS = RG
6蚤吹、ECDH原理
????????在介紹原理前,說明一下ECC是滿足結(jié)合律和交換律的,也就是說A+B+C = A+C+B = (A+C)+B裁着。
????????這里舉一個(gè)WIKI上的例子說明如何生成共享秘鑰繁涂,也可以參考?Alice And Bob?的例子。
????????Alice 與Bob 要進(jìn)行通信二驰,雙方前提都是基于 同一參數(shù)體系的ECC生成的 公鑰和私鑰扔罪。所以有ECC有共同的基點(diǎn)G。
? ??????生成秘鑰階段:
????????Alice 采用公鑰算法 KA = ka * G 诸蚕,生成了公鑰KA和私鑰ka, 并公開公鑰KA步势。
????????Bob 采用公鑰算法 KB = kb * G ,生成了公鑰KB和私鑰 kb, 并公開公鑰KB背犯。
? ??????計(jì)算ECDH階段:
????????Alice 利用計(jì)算公式 Q = ka * KB ?計(jì)算出一個(gè)秘鑰Q坏瘩。
????????Bob 利用計(jì)算公式 Q' = kb * KA 計(jì)算出一個(gè)秘鑰Q'。
? ??????共享秘鑰驗(yàn)證:
????????Q = ka?KB = ka * kb * G = ka * G * kb = KA * kb = kb * KA = Q'
????????故 雙方分別計(jì)算出的共享秘鑰不需要進(jìn)行公開就可采用Q進(jìn)行加密漠魏。我們將Q稱為共享秘鑰倔矾。
7、其他
????????在以太坊中柱锹,采用的ECIEC的加密套件中的其他內(nèi)容:
????????1哪自、其中HASH算法采用的是最安全的SHA3算法Keccak。
????????2禁熏、簽名算法采用的是ECDSA
????????3壤巷、認(rèn)證方式采用的是?H-MAC
????????4、ECC的參數(shù)體系采用了secp256k1,? 其他參數(shù)體系參考這里
三瞧毙、以太坊中 UDP通信的加密方案
(一)胧华、H-MAC的加密認(rèn)證簽名模型:
1、H-MAC基本模型:
????????H-MAC全程叫做 Hash-based Message Authentication Code. 其模型如下:
2宙彪、以太坊中UDP的加密矩动,認(rèn)證,簽名模型:
在以太坊的 UDP通信時(shí)(RPC通信加密方式不同)释漆,則采用了以上的實(shí)現(xiàn)方式悲没,并擴(kuò)展化了。
首先男图,以太坊的UDP通信的結(jié)構(gòu)如下:
????????其中示姿,sig是 經(jīng)過 私鑰加密的簽名信息。mac是可以理解為整個(gè)消息的摘要逊笆, ptype是消息的事件類型峻凫,data則是經(jīng)過RLP編碼后的傳輸數(shù)據(jù)。
????????其UDP的整個(gè)的加密览露,認(rèn)證荧琼,簽名模型如下: