對稱加密和非對稱加密

木姜子科技
非對稱密鑰加密技術(shù),由公鑰和私鑰形成一個(gè)密鑰對,其中公鑰向公眾公開,私鑰歸密鑰持有人單獨(dú)保管。通訊雙方使用非對稱密鑰對數(shù)據(jù)進(jìn)行加密和解密時(shí),必須使用相互匹配的公鑰和私鑰。

密碼學(xué)中的加密方式從密鑰的數(shù)量方向可以分為對稱加密和非對稱加密,對稱加密只使用一把密鑰來對數(shù)據(jù)進(jìn)行加解密,而非對稱加密使用兩把密鑰來進(jìn)行加密,分別為公鑰和私鑰。對稱加密和非對稱加密有很多非常出名的算法,例如:對稱加密比較有名的算法有DES和AES,非對稱加密有RSA和ECC。對稱加密和非對稱加密各有優(yōu)缺點(diǎn),那么咱們怎么去利用他們的優(yōu)缺點(diǎn)呢?本章我們將分別從理論和實(shí)踐的角度分析對稱加密和非對稱加密,讓更加容易地理解對稱加密和非對稱加密。

1.關(guān)于對稱加密和非對稱加密

我們都知道,密碼體制有兩種:對稱密碼體制(又稱為單鑰密碼體制)和非對稱密碼體制(又稱為雙鑰密碼體制或公鑰密碼體制)。對稱密碼體制使用相同的密鑰(秘密密鑰)對消息進(jìn)行加密/解密,系統(tǒng)的保密性主要由密鑰的安全性決定,而與算法是否保密無關(guān)。

對稱密碼體制設(shè)計(jì)和實(shí)現(xiàn)的中心是:用何種方法產(chǎn)生滿足保密要求的密鑰以及用何種方法將密鑰安全又可靠地分配給通信雙方。對稱密碼體制可以通過分組密碼或流密碼來實(shí)現(xiàn),它既可以用于數(shù)據(jù)加密,又可以用于消息認(rèn)證。非對稱密碼體制使用公鑰加密消息,使用私鑰來解密。使用非對稱密碼體制可增強(qiáng)通信的安全性。

在密碼學(xué)體系中,對稱加密、非對稱加密、單向散列函數(shù)、消息認(rèn)證碼、數(shù)字簽名和偽隨機(jī)數(shù)生成器被統(tǒng)稱為密碼學(xué)家的工具箱。其中,對稱加密和非對稱加密主要是用來保證機(jī)密性;單向散列函數(shù)用來保證消息的完整性;消息認(rèn)證碼的功能主要是認(rèn)證;數(shù)字簽名保證消息的不可抵賴性。這篇文章所要講訴的就是保證消息的機(jī)密性的對稱密碼和非對稱密碼。

對稱加密

對稱加密又稱但密鑰加密,整個(gè)加密過程中只使用一個(gè)密鑰。所謂對稱其實(shí)就是使用一把密鑰加密,使用同一把密鑰解密。對稱加密由于加解和解密使用的是同一個(gè)密鑰算法,故而在加解密的過程中速度比較快,適合于數(shù)據(jù)量比較大的加解密。

對稱加密的主要有優(yōu)點(diǎn)就是算法公開、計(jì)算量小、加密速度快、加密效率高;但是它也存在強(qiáng)大的缺點(diǎn),缺點(diǎn)就是密鑰協(xié)商過程中,一旦密鑰泄露,別人可以獲取到密鑰,這樣也能對密文進(jìn)行解密。另外,每對用戶每次使用對稱加密算法時(shí),都需要使用其他人不知道的獨(dú)一密鑰,這會使得收、發(fā)雙方所擁有的鑰匙數(shù)量巨大,密鑰管理成為雙方的負(fù)擔(dān)。

常用的對稱加密算法有DES、3DES、AES、TDEA、Blowfish、RC2、RC4和RC5等。

兩種經(jīng)典的對稱加密算法

DES

DES加密解密算法最初由美國IBM公司研究人員所設(shè)計(jì)發(fā)明,且為第一個(gè)公開的商用密碼算法標(biāo)準(zhǔn),自誕生以來便得到了ISO的一致認(rèn)可。DES是分組密碼算法的典型代表,它的明文分組長度為64bits,密鑰長度為64bits,其中包括有8bits的奇偶校驗(yàn),因此有效密鑰長度為56bits。DES加密解密算法使用的過程相同,且可以隨時(shí)均都可以進(jìn)行變動(dòng)。它們其中有極少數(shù)被認(rèn)為是易破解的弱密鑰,但是很容易拋開它們不使用,因此其自身安全性主要依賴于有效密鑰。

DES算法加密過程首先先對明文分組進(jìn)行操作,需要加密的明文分為每塊64bits的固定大小。下圖所示左右兩部分分別為64bits的明文分組加密過程和其16個(gè)子密鑰生成的過程。

DES核心算法模塊

IP初始置換IP初始置換,在第一輪運(yùn)算之前執(zhí)行,對輸入的分組采用下面的數(shù)字進(jìn)行IP初始變換,按照從左向右、從上向下進(jìn)行置換。58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7

子密鑰獲取流程子密鑰的獲取流程如下圖

此處,用戶輸入64位的密鑰。根據(jù)密鑰置換表PC-1,將64位變成56位密鑰(此處去掉了奇偶校驗(yàn)位)。PC-1置換得到的56位密鑰。此處密鑰被分為前28位C0和后28位D0。分別對它們進(jìn)行循環(huán)左移,C0左移得到C1,D0左移得到D1。將C1和D1合并變成56位。然后通過PC-2表進(jìn)行壓縮置換,得到此輪的48位子密鑰K1。再對C1和D1進(jìn)行相同的左移和壓縮置換,獲取下一輪的子密鑰……一共進(jìn)行16輪,于是可以得到16個(gè)48 bits的子密鑰。

E和擴(kuò)展E盒擴(kuò)展置換,則是將右半部分32bits按照8行4列方式依次排列,得到一個(gè)8*4的二維矩陣,然后根據(jù)如表2所示的E盒擴(kuò)展置換表擴(kuò)展為8*6的二維矩陣。32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1

異或運(yùn)算將P盒置換的結(jié)果與最初的64bits分組的左半部分異或,然后左、右半部分交換,接著開始另一輪。

S盒擴(kuò)展當(dāng)產(chǎn)生了48bits密鑰后就可以和明文進(jìn)行異或運(yùn)算,便可得到48bits的密文。再開始下輪的S盒迭代運(yùn)算,其功能是把6bit數(shù)據(jù)變?yōu)?bits數(shù)據(jù),每個(gè)S盒是一個(gè)4行、16列的表。每個(gè)S盒的使用方法為:S盒收到6bits的輸入,6bits的第1個(gè)bit和最后1個(gè)bits構(gòu)成的2位二進(jìn)制為該S盒行號,中間的4bits二進(jìn)制為該S盒的列號,然后根據(jù)行號和列號查S盒定義表得到對應(yīng)的值(通常為十進(jìn)制),該值就是S盒變換的輸出,并轉(zhuǎn)化為二進(jìn)制。

P盒置換S盒代替運(yùn)算之后,輸出32bits,作為F函數(shù)最后一個(gè)變換P盒置換的輸入。將該32bits位數(shù)據(jù)進(jìn)行P盒置換,置換后得到一個(gè)仍然是32 bits的結(jié)果,此處可得F函數(shù)的輸出值。

逆初始置換DES完成16輪變換后,得到64bits數(shù)據(jù)作為IP-1逆初始置換的輸入,經(jīng)過IP-1逆初始置換表(如表3所示),64bits輸入數(shù)據(jù)位置重新編排,就得到64bits的密文。40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25

AES

AES加密算法為分組密碼,分組長度為128位即16個(gè)字節(jié),密匙長度有128、192或256位,根據(jù)密匙長度的不同,加密的輪數(shù)也不同,本文采用長度為128位的密匙,加密輪數(shù)為10輪。AES加密算法不僅編碼緊湊、設(shè)計(jì)簡單而且可抵抗多種類型的攻擊,其基本結(jié)構(gòu)包括4個(gè)部分。這四個(gè)部分分別為字節(jié)替換、行位移、列混合和輪密匙加。

字節(jié)替換(SubBytes)

字節(jié)替換也就是通過S-BOX對字節(jié)元素進(jìn)行非線性的變換,S-BOX由有限域GF(2的8次方)上的乘法求逆運(yùn)算和仿射變換運(yùn)算而來,通過查表的方式即可直接得到變換前后的字節(jié)元素,替換后字節(jié)元素至少有兩位發(fā)生變換,能充分打亂原來的字節(jié)元素,本文所介紹的AES加密算法就是對S-BOX進(jìn)行改進(jìn)而來。具體替換規(guī)則為假設(shè)一字節(jié)為xy,則S-BOX中第x行第y列所對應(yīng)的元素就是替換后的元素。

行位移(ShiftRows)

行位移是AES加密算法中的一個(gè)簡單線性運(yùn)算,即在4 x 4的狀態(tài)矩陣中,把第i行循環(huán)左移i個(gè)字節(jié)(i=0,1,2,3)。

列混合(MixColumns)

列混合是將狀態(tài)矩陣中的每一列看成一個(gè)多項(xiàng)式,讓其與一個(gè)固定的多項(xiàng)式a(x)相乘,再做模多項(xiàng)式m(x)=x4(x的四次方)+1的運(yùn)算,其中a(x)=’03‘x3(x的3次方)+’01‘x2(x的平方)+'01'x+‘02’。

輪密匙加(AddRoundKey)

輪密匙加變換就是讓狀態(tài)矩陣與經(jīng)過密匙擴(kuò)展得到的子密匙做異或運(yùn)算,因此輪密匙加變換的逆變換就是其本身,其中子密匙是原始密匙通過密匙擴(kuò)展算法得到的。

AES算法流程

下圖是整個(gè)算法的流程圖

AES加密算法先將128位的明文進(jìn)行分組,得到一個(gè)4x4的明文狀態(tài)矩陣作為算法的輸入,然后選取密匙矩陣先對明文狀態(tài)矩陣做一次輪密匙加變換,再經(jīng)過10輪的輪函數(shù)加密,輪函數(shù)操作依次為字節(jié)替換、行位移、列混合和輪密匙加,其中由于最后一輪的列混合不僅不會提高安全性,反而會拉低算法運(yùn)算速度,故該輪丟棄列混合變換。解密算法仍為10輪,由于算法的4個(gè)輪操作均為可逆變換,因此解密過程就是用與加密過程同樣的密匙對每一輪的加密操作進(jìn)行逆運(yùn)算。

非對稱加密

非對稱加密又稱為公鑰密碼,該技術(shù)是針對私鑰密碼體制(對稱加密算法)的缺陷被提出來的,非對稱加密會產(chǎn)生兩把密鑰,分別為公鑰(Public Key)和私鑰(Private Key),其中一把密鑰用于加密,另一把密鑰用于解密。非對稱加密的特征是算法強(qiáng)度復(fù)雜、安全性依賴于算法與密鑰但是由于其算法復(fù)雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中只有一種密鑰,并且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個(gè)是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了。這樣安全性就高了很多。

常用的非對稱加密算發(fā)有RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)等。

兩種經(jīng)典的非對稱加密算法

RSA

RSA算法是一種迄今為止理論上比較成熟和完善的公鑰密碼體制,是非對稱密碼體制的典型代表。在網(wǎng)絡(luò)、信息安全等許多方面都使用RSA算法,特別是RSA算法典型應(yīng)用在通信中的數(shù)字簽名,可實(shí)現(xiàn)對手的身份、不可抵賴性驗(yàn)證。在身份認(rèn)證、信息安全、電子商務(wù)中有著廣泛的應(yīng)用前景。

RSA的算法流程

RSA算法由密鑰的產(chǎn)生、加密算法和解密算法3個(gè)部分組成。

密鑰的產(chǎn)生過程如下:

產(chǎn)生兩個(gè)大素?cái)?shù)p和q;

計(jì)算n=p×q,歐拉函數(shù)φ(n)=(p-1)(q-1)

選擇整數(shù)e,使其滿足條件:1<e<φ(n),且gcd(e,φ(n))=1(注:gcd()函數(shù)計(jì)算兩個(gè)數(shù)的最大公約數(shù));

計(jì)算e的逆元d:d?e≡1 modφ(n)(注:由于gcd(e,φ(n))=1,則d一定存在);

取序?qū)?e,n)為公鑰,可公開;(d,n)為私鑰,對外保密。

加密算法過程如下

將要發(fā)送的字符串分割為長度為m<n的分組,然后對分組mi執(zhí)行加密運(yùn)算,得到密文ci:ci≡(mi)e mod n

解密算法過程如下

收到密文ci后,接收者使用自己的私鑰執(zhí)行解密運(yùn)算,得到明文mi:mi≡(ci)d mod n

RSA詳細(xì)的算法設(shè)計(jì)流程

大素?cái)?shù)的產(chǎn)生和測試

Miller-Rabin算法是一種基于概率的素?cái)?shù)測試方法,在密碼學(xué)的素?cái)?shù)產(chǎn)生中,由于該算法的速度快、原理簡單、易于實(shí)現(xiàn),成為進(jìn)行素?cái)?shù)檢測的最佳選擇。

Miller-Rabin算法是對費(fèi)馬算法改進(jìn),它的操作步驟如下:

計(jì)算m,滿足n=(2r 2的r次方)m+1;

選擇隨機(jī)數(shù)a∈[1,n];

若am mod n=1,或滿足aim mod n=n-1,則n通過隨機(jī)數(shù)a的測試;

再取不同a要的值對n進(jìn)行t=5次測試,如果每次測試結(jié)果為n是素?cái)?shù),則以高概率判定n是素?cái)?shù)。假設(shè)n通過t次測試,則判定結(jié)果錯(cuò)誤的概率是1/4t;若只通過一次測試,素?cái)?shù)判定的錯(cuò)誤概率是25%。

流程圖如下:

360截圖16251112669372.png

密鑰e生成模塊

通過上面的的大素?cái)?shù)生成模塊,可以得到大素?cái)?shù)p和大素?cái)?shù)q,根據(jù)歐拉函數(shù)φ(n)=(p-1)(q-1),同時(shí)密鑰e與φ(n)互質(zhì),根據(jù)中國剩余定理可以計(jì)算密鑰e。

過程如下:

密鑰d生成模塊

通過大素?cái)?shù)生成模塊得到大素?cái)?shù)p和q,密鑰e生成模塊,根據(jù)1=ed mod(p-1)(q-1)。利用中國剩余定理計(jì)算e的乘法逆元d。

快速指數(shù)算法

得到e后,就可以通過公鑰(e,n)進(jìn)行加密得到密文C。在RSA加密過程中,為了計(jì)算ci≡(mi)e mod n,采用快速指數(shù)算法。將快速指數(shù)算法描述為三元組(M,E,Y),其初始值為(M,E,Y)=(mi,e,1)。重復(fù)執(zhí)行以下操作:

①若E是奇數(shù),則Y=MY mod n,E=E-1;②若E是偶數(shù),則X=XX mod n,E=E/2。最終,當(dāng)E=0時(shí),則Y=X^E mod n。

RSA加密和解密算法設(shè)計(jì)

過程如下:

360截圖16251112669372.png

ECC

橢圓曲線加密算法(ECC)是基于橢圓曲線數(shù)學(xué)的一種非對稱密碼算法,是建立在基于橢圓曲線的離散對數(shù)問題上的密碼體制。隨著分解大整數(shù)方法的進(jìn)步以及各方面的完善,RSA算法漸漸不能滿足現(xiàn)狀,ECC算法的需求性逐漸增大。ECC以其明顯的“短密鑰”優(yōu)勢得到了廣泛應(yīng)用,并逐漸被確定為許多編碼方式的數(shù)字簽名標(biāo)準(zhǔn)。當(dāng)然,ECC還有許多未解決的問題,不過這種引用了豐富數(shù)學(xué)理論的算法,也印證了將更多數(shù)學(xué)有較大可行性理論應(yīng)用到密碼學(xué)這一領(lǐng)域中。

首先從數(shù)學(xué)角度闡釋算法加密原理,ECC橢圓曲線加密算法數(shù)學(xué)基礎(chǔ)是利用有限域上橢圓曲線離散對數(shù)問題(ECDLP)的計(jì)算困難性,所謂橢圓曲線是指由韋爾斯特拉方程。其橢圓曲線方程如下:

y2+a1xy+a2 y=x3+a3x2+a4 x+a5

下面是橢圓曲線方式圖示

其中,系數(shù)ai定義在某個(gè)域上(密碼算法中需要把之前連續(xù)曲線變?yōu)橛邢抻蛏系狞c(diǎn),故ai也定義在有限域中)。曲線上所有點(diǎn)和一個(gè)無窮遠(yuǎn)點(diǎn)構(gòu)成一個(gè)集合連同定義上的加法(eg:a+b≡c(mod p))構(gòu)成阿貝爾群。由于曲線上每一點(diǎn)都是非奇異點(diǎn),故可在橢圓曲線上找到兩點(diǎn)P、Q,且存在如下關(guān)系式:

由此可見,已知m、P求Q較為容易,反之由Q逆向求m、P難度卻較大,橢圓曲線密碼正是基于該機(jī)制來展開設(shè)計(jì)及應(yīng)用。

**ECC系列算法secp256k1**

1.簡介

secp256k1是區(qū)塊鏈項(xiàng)目中應(yīng)用最多的橢圓曲線算法,源于比特幣中的應(yīng)用,后來的大多數(shù)區(qū)塊鏈項(xiàng)目如以太坊等都在用。名稱中的前三個(gè)字母sec代表Standards for Efficient Cryptography(SEC),后面的p256K1指的是參數(shù)256位素?cái)?shù)域。Secp256k1為基于Fp有限域(又名伽羅瓦域)上的橢圓曲線,由于其特殊構(gòu)造的特殊性,其優(yōu)化后的實(shí)現(xiàn)比其他曲線性能上可以特高30%,有明顯以下兩個(gè)優(yōu)點(diǎn):

1)占用很少的帶寬和存儲資源,密鑰的長度很短。2)讓所有的用戶都可以使用同樣的操作完成域運(yùn)算。

橢圓曲線圖y^2=x^3+7

在平面中的橢圓曲線上的加法在幾何上根據(jù)線截取曲線的位置來定義。我們不會在這里討論幾何,除了說它歸結(jié)為一組涉及實(shí)數(shù)的方程。但我們并沒有在實(shí)數(shù)域上去工作,而是在有限域。有限域p,其中

p=2^256-2^32-977

這里選擇p相對接近2^256。它不是小于2^256的最大素?cái)?shù);p和2^256之間有很多素?cái)?shù)。其他因素也同樣影響著選擇p。請注意,我們不是在整數(shù)mod p本身工作,而是在一個(gè)阿貝爾組中,其加法法則由整數(shù)mod p上的橢圓曲線定義。

二.密鑰的壓縮格式和非壓縮格式

接下來,我們在橢圓曲線上選擇一個(gè)基點(diǎn)g。定義secp256k1的標(biāo)準(zhǔn)說g是0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798以“壓縮形式”或

040x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

以“未壓縮的形式”?;c(diǎn)是橢圓曲線上特別選擇的點(diǎn),因此它是一對數(shù)字mod p,而不是單個(gè)數(shù)字。

該壓縮的形式:只給x,你就應(yīng)該解決y。在未壓縮的形式為您提供了x和y。但是,這些數(shù)字是略微編碼的。在壓縮形式中,字符串以“02”或“03”開頭,字符串的其余部分是x的十六進(jìn)制表示。將滿足y的兩個(gè)值

y²=x³+7 mod p

并且“02”或“03”告訴您選擇哪一個(gè)。如果壓縮形式以02開頭,則選擇最低有效位為偶數(shù)的根。如果壓縮形式從03開始,則選擇其最低有效位為奇數(shù)的根。(兩個(gè)根將添加到p,而p是奇數(shù),因此其中一個(gè)根將是偶數(shù),一個(gè)將是奇數(shù)。)未壓縮形式:未壓縮的將始終以04開頭。在此之后,按照x和y連接在一起的十六進(jìn)制表示形式。

無論哪種情況,我們都有x=79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798和y=483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

**ECC系列算法curve25519/ed25519/x25519**

一:幾種著名的橢圓曲線的方程和對應(yīng)的實(shí)際應(yīng)用1.魏爾斯特拉斯曲線和基于魏爾斯特拉斯曲線的若干種橢圓曲線公鑰算法

y^2=x^3+ax+b

2.蒙哥馬利曲線https://en.wikipedia.org/wiki/Montgomery_curve和基于蒙哥馬利曲線的Curve25519密鑰協(xié)商算法https://en.wikipedia.org/wiki/Curve25519

begin蒙哥馬利曲線By^2&=x^3+Ax^2+x其中A,B∈K且B(A^2−4)≠0Curve25519曲線y^2&=x^+486662x^+x,由素?cái)?shù)2^-19定義素?cái)?shù)域end

3.愛德華曲線https://en.wikipedia.org/wiki/Edwards_curve和基于愛德華曲線的Ed25519數(shù)字簽名算法https://ed25519.cr.yp.to/index.html

begin愛德華曲線x^2+y^2&=1+dx^y^Ed25519曲線-x^+y^&=1-}x^y^end

二:25519曲線Curve25519(X25519)是進(jìn)行蒙哥馬利曲線(Montgomery Curve)迪菲赫爾曼秘鑰交換的橢圓曲線算法。Ed25519是進(jìn)行愛德華曲線(Edwards Curve)數(shù)字簽名的橢圓曲線算法。他們與SECG所指定的魏爾斯特拉斯曲線(Weierstrass Curve)在曲線的公式上有所不同,因此他們不兼容。蒙哥馬利曲線和愛德華曲線的算法,能做到“Time-constant”,也就是說不論他們進(jìn)行運(yùn)算的數(shù)值是多少,他們所花的時(shí)間是相同的,因此“時(shí)間旁路”(Time side channel)攻擊就對它們無效。

三:Curve25519介紹和迪菲赫爾曼密鑰交換Curve25519是目前最高水平的Diffie-Hellman函數(shù),適用于廣泛的場景,由Daniel J.Bernstein教授設(shè)計(jì)。在密碼學(xué)中,Curve25519是一個(gè)橢圓曲線提供128位安全性,設(shè)計(jì)用于橢圓曲線Diffie-Hellman(ECDH)密鑰協(xié)商方案。它是最快的ECC曲線之一,并未被任何已知專利所涵蓋。

給定一個(gè)用戶的32字節(jié)密鑰,curve25519計(jì)算該用戶的32字節(jié)公鑰。給定該用戶的32字節(jié)密鑰和另一個(gè)用戶的32字節(jié)公鑰,curve25519計(jì)算一個(gè)32字節(jié)的共享密鑰提供給這兩個(gè)用戶使用。然后可以使用這個(gè)秘密對兩個(gè)用戶進(jìn)行身份驗(yàn)證和信息加密。方程為:

素?cái)?shù)域p=2的255減去19,也是名字中25519的由來。群秩為2的255次方+27742317777372352535851937790883648493,

Curve25519的構(gòu)造避免了許多潛在的實(shí)現(xiàn)方面陷阱,它不受計(jì)時(shí)攻擊,能接受任何32字節(jié)字符串作為有效公鑰(實(shí)際工程應(yīng)用中,0除外),并且不需要驗(yàn)證給定點(diǎn)是否屬于曲線,或者是否由基點(diǎn)生成。2013年斯諾登事件以后,得到大量關(guān)注和使用,目前應(yīng)用已經(jīng)非常廣泛,包括ssh,tls,OpenSSL,Libsodium等,實(shí)際成為NIST P-256橢圓曲線算法的替代品(前者被廣泛質(zhì)疑有后門(back door))

1.迪菲赫爾曼秘鑰交換

1.1簡介

Diffie–Hellman key exchange,縮寫為D-H,是一種安全協(xié)議,用于雙方在一個(gè)不安全的通信網(wǎng)絡(luò)上建立一個(gè)共享的秘鑰,有了共享秘鑰以后,就可以使用這個(gè)密鑰加密交互消息。由于通信雙方最終使用的密鑰相同,所以可以認(rèn)為該協(xié)議目標(biāo)是創(chuàng)建一個(gè)對稱密鑰(對稱密鑰和非對稱密鑰可自行學(xué)習(xí))。該協(xié)議也稱迪菲-赫爾曼密鑰協(xié)商,名字以發(fā)明人的名字命名,符合慣例,無其他特殊意義。

迪菲-赫爾曼密鑰交換本身是一個(gè)匿名(無認(rèn)證)的密鑰交換協(xié)議,它卻是很多認(rèn)證協(xié)議的基礎(chǔ),并且被用來提供傳輸層安全協(xié)議的短暫模式中的前向安全性。

1.2交換流程

First有自己的私鑰a,Second有自己的私鑰b,a,b均小于p,且私鑰絕對保密。

交換過程如下:

1.First用私鑰a生成A,過程如下:A=g^a mod p,然后通過信道發(fā)送出去。

2.Second用私鑰b生成B,過程如下:B=g^b mod p,然后通過信道發(fā)出去。

3.Frist收到B后執(zhí)行B^a mod p=Fkey。

4.Second收到A后執(zhí)行A^b mod p=Skey。

5.Fkey=Skey(因?yàn)檎w執(zhí)行下來Fkey=(g^b)^a mod p,而Skey=(g^a)^b mod p,故相等。)

進(jìn)而達(dá)到共享秘鑰的目的,二者通信可通過Fkey這個(gè)公共秘鑰加密后面的通訊內(nèi)容。整個(gè)過程中因?yàn)橹挥術(shù),p,A,B是公開的,私鑰a,b保密的,故基于離散對數(shù)運(yùn)算,敵人很難破解公共秘鑰。

1.3安全性

迪菲-赫爾曼密鑰交換本身并沒有提供通訊雙方的身份驗(yàn)證服務(wù),所以有可能會被中間人攻擊。一個(gè)中間人在信道的中間分別和A,B進(jìn)行兩次迪菲-赫爾曼密鑰交換,就能夠成功的向A假裝B,向B假裝A。此時(shí)攻擊者可以讀取任何一個(gè)人的信息并重新加密信息,然后傳遞給另一個(gè)人。因此通常都需要一個(gè)能夠驗(yàn)證通訊雙方身份的機(jī)制來防止這類攻擊。有很多種安全身份驗(yàn)證解決方案使用到了迪菲-赫爾曼密鑰交換。當(dāng)A和B共有一個(gè)公鑰基礎(chǔ)設(shè)施時(shí),他們可以將他們的返回密鑰進(jìn)行簽名;STS以及IPsec協(xié)議的IKE組件已經(jīng)成為了Internet協(xié)議的一部分。

四:ED25519簽名過程Ed25519使用了扭曲愛德華曲線,簽名過程和最大的區(qū)別在于沒有使用隨機(jī)數(shù),這樣產(chǎn)生的簽名結(jié)果是確定性的,即每次對同一消息簽名結(jié)果相同。一般說來隨機(jī)數(shù)是安全措施中重要的一種方法,但是隨機(jī)數(shù)的產(chǎn)生也是安全隱患,著名的索尼公司產(chǎn)品PS3密鑰泄露事件,就是隨機(jī)數(shù)產(chǎn)生的問題導(dǎo)致的。如果你對Schnorr,secp256k1,sm2等簽名過程比較熟的的話,就容易理解如果在簽名過程中出現(xiàn)了這個(gè)相同的隨機(jī)數(shù)r,那么私鑰將很容易被計(jì)算出來,造成泄露。

Ed25519公鑰生成算法流程

(1).選擇256 bit私鑰sk=(sk255,sk253,···,sk1,sk0)

(2)對sk做SHA-512運(yùn)算,即H(sk)=(h511,h510,···,h1,h0)2;

(3)取H(sk)的低256位,并整理為s=(0,1,h253,h252,···,h3,0,0,0)2;

(4)做標(biāo)量乘A=sB=(x,y),其中x=(x254,x253,···,x1,x0)2,y=(y254,y253,···,y1,y0)2;

(5)壓縮sB結(jié)果,得公鑰pk=(x0,y254,y253,···,y1,y0)2。

Ed25519簽名算法流程

(1)取H(sk)的高256位h=(h511,h510,···,h257,h256)2;

(2)做SHA-512運(yùn)算,r=H(h||M)mod L;

(3)做標(biāo)量乘R’=rB=(x,y),其中x=(x254,x253,···,x1,x0)2,y=(y254,y253,···,y1,y0)2;

(4)壓縮rB結(jié)果,得R=(x0,y254,y253,···,y1,y0)2;

(5)做SHA-512運(yùn)算,k=H(R||pk||M)mod L;

(6)計(jì)算S=(r+k·s)mod L;

(7)返回簽名結(jié)果(R||S)。

Ed25519驗(yàn)證簽名算法流程

(1)解壓R為點(diǎn)坐標(biāo)R’;

(2)解壓pk為點(diǎn)坐標(biāo)A;

(3)做SHA-512運(yùn)算,k=H(R||pk||M)mod L;

(4)驗(yàn)證SB=R’+kA是否成立,若成立則驗(yàn)簽成功。

混合加密-對稱加密和非對稱加密的實(shí)際應(yīng)用場景

所謂混合加密就是使用在實(shí)際的應(yīng)用中把對稱加密和非對稱加密結(jié)合起來使用。我們都知道非對稱加密算法比對稱加密算法慢數(shù)千倍,但在保護(hù)通信安全方面,非對稱加密算法卻具有對稱密碼難以企及的優(yōu)勢。所以在實(shí)際的應(yīng)用中,都是對稱加密與非對稱加密混合使用。取其優(yōu)勢,去其糟粕,達(dá)到完美使用的一個(gè)目的。

對稱加密技術(shù),即專用密鑰加密技術(shù)或單鑰密碼技術(shù),加密密鑰與解密密鑰一致,發(fā)送方與接收方用同一組的公私密鑰對加密或者解密信息。數(shù)據(jù)加密的一個(gè)關(guān)鍵要求是有相同的密鑰才能解密。因?yàn)橥ㄐ烹p方共享密鑰,如果密鑰丟失或泄露,那么獲取密鑰的人就可以加密或者解密數(shù)據(jù),所以為保證消息的機(jī)密性必須保障密鑰的安全。這種算法比較簡單且計(jì)算量比較小,對網(wǎng)絡(luò)開放、從而能夠效率高地加密。同時(shí)存在的缺點(diǎn),一是通訊雙方基于通過非面對面的方式協(xié)商一個(gè)共同的密鑰,因此不能保證協(xié)商過程的安全性。二是通訊雙方每次進(jìn)行數(shù)據(jù)傳輸時(shí)都使用惟一密鑰,這使得對稱加密技術(shù)在開放型的網(wǎng)絡(luò)中需要使用和生成大量的密鑰,對于密鑰的管理就成為用戶的很大負(fù)擔(dān)。三是對稱加密算法只能對數(shù)據(jù)進(jìn)行加解密,保證數(shù)據(jù)的機(jī)密性,但無法驗(yàn)證通訊雙方的真實(shí)身份,不能確定數(shù)據(jù)的完整性。

非對稱密鑰加密技術(shù),由公鑰和私鑰形成一個(gè)密鑰對,其中公鑰向公眾公開,私鑰歸密鑰持有人單獨(dú)保管。通訊雙方使用非對稱密鑰對數(shù)據(jù)進(jìn)行加密和解密時(shí),必須使用相互匹配的公鑰和私鑰。它有兩種方式:一種是發(fā)送方用接收方的公鑰來加密信息,接收方用其私鑰解密信息,這樣接收方可以收到多個(gè)發(fā)送方傳來的加密數(shù)據(jù),且此加密數(shù)據(jù)只有接收方一個(gè)用戶可以解讀;另一種即發(fā)送方利用自身的私鑰加密信息,接收方用對方公鑰解密信息,這樣一個(gè)信息有可能被多個(gè)接收方解密。非對稱密鑰加密技術(shù)的優(yōu)點(diǎn)是簡化了密鑰的發(fā)放及管理的過程,支持?jǐn)?shù)字簽名等安全認(rèn)證技術(shù),缺點(diǎn)是加密和解密的計(jì)算過程特別復(fù)雜,運(yùn)行數(shù)據(jù)加密和解密的速度比較慢。

THEEND

最新評論(評論僅代表用戶觀點(diǎn))

更多
暫無評論