今天講講非對(duì)稱(chēng)加密算法。
可以說(shuō)非對(duì)稱(chēng)算法是對(duì)稱(chēng)算法的升級(jí),因?yàn)榉菍?duì)稱(chēng)算法是基于對(duì)稱(chēng)算法而被研究出來(lái)的。
非對(duì)稱(chēng)算法與對(duì)稱(chēng)算法的不同之處在于非對(duì)稱(chēng)算法省去了對(duì)稱(chēng)加密算法時(shí)要分發(fā)密鑰的麻煩,所以說(shuō)是對(duì)稱(chēng)加密算法的升級(jí)。
在非對(duì)稱(chēng)加密算法中同樣具有兩種密鑰:私鑰(private key)和公鑰(public key)。
私鑰和公鑰的保密程度是不同的。
私鑰,顧名思義,私鑰往往是個(gè)人持有,其他人沒(méi)有持有者給予是不可獲取的,常用于解密。其通過(guò)隨機(jī)算數(shù)法生成,然后再進(jìn)行Hash加密,從而達(dá)到一個(gè)更高程度的隨機(jī)性。
公鑰,則是公開(kāi)的,他人是可以獲取的,常用于加密。其可以以私鑰為根據(jù),再經(jīng)一定的算法生成。
目前,在非對(duì)稱(chēng)算法中,典型的代表有RSA、EIGamal、ECC(Elliptic Curve Crytosysitems橢圓曲線)、SM2系統(tǒng)等。
在所有的非對(duì)稱(chēng)算法中,都有一個(gè)共同的特征,即安全性基于數(shù)學(xué)問(wèn)題解題難度。也就是說(shuō),非對(duì)稱(chēng)加密算法以數(shù)學(xué)原理為依據(jù),并且是公開(kāi)透明的,這和對(duì)稱(chēng)加密算法就有所不同了。
下面我們就來(lái)了解了解以上這些典型的非對(duì)稱(chēng)加密算法,了解了解它們的原理是怎樣的:
1、RSA算法
RSA算法,是1978年由Ron Rivest、Adi Shamir和Leonard Adleman三人共同提出的,算法的名字就是它們名字的首字母的組合。
RSA是目前最有影響力和最常用的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。
RSA算法的原理是基于一個(gè)十分簡(jiǎn)單的數(shù)論事實(shí):將兩個(gè)大質(zhì)數(shù)相乘十分容易,但是想要對(duì)其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開(kāi)作為加密密鑰。
例如,2是最小的質(zhì)數(shù),那么很容易因式分解得到1乘以2,如果給了兩個(gè)質(zhì)數(shù)的乘積是243013,你多久能因式分解出來(lái)。兩個(gè)質(zhì)數(shù)的位數(shù)越大,那么要將它們的乘積因式分解就越難。目前,已發(fā)現(xiàn)的最大質(zhì)數(shù)長(zhǎng)達(dá)2233萬(wàn)位,可想而知,數(shù)字越大,因式分解將越難。
隨著設(shè)備或技術(shù)的不斷先進(jìn),這種加密算法開(kāi)始受到質(zhì)疑,理論上是可以通過(guò)一定的算力將其分解,但是目前仍沒(méi)有任何可靠的攻擊較長(zhǎng)RSA密鑰的方式被提出。
2、ElGamal
ElGamal算法于1986年由Taher ElGamal提出,ElGamal算法與RSA算法類(lèi)似。RSA算法依據(jù)的是大質(zhì)數(shù)的因式分解,而ElGamal算法依據(jù)的是模運(yùn)算下求解離散對(duì)數(shù)困難。
所謂的離散對(duì)數(shù),是一種基于同余運(yùn)算和原根的一種對(duì)數(shù)算法。
例如,有y是n的一個(gè)原根,令n=5,y=2,如果存在有滿(mǎn)足(k,n)=1的k存在,那么k關(guān)于y的離散對(duì)數(shù)定義為存在一個(gè)整數(shù)t,使得下面的式子成立:
y^t=k mod n
整數(shù)t可以隨意取值,
如果t=0,則有2^0≡1;
如果t=1,則有2^1≡2;
如果t=2,則有2^2≡4;
如果t=3,則有2^3≡3。
離散對(duì)數(shù)的求解目標(biāo)就是找到這個(gè)正整數(shù)系數(shù)k。
這種算法,目前還沒(méi)有找到一個(gè)快速計(jì)算離散對(duì)數(shù)的解法。
3、ECC(Elliptic Curve Crytosysitems橢圓曲線)
ECC算法于1985年由NcalKoblitz和VictorMiller分別獨(dú)立提出。
ECC算法充分利用了對(duì)橢圓曲線上特定的點(diǎn)執(zhí)行乘法后的逆運(yùn)算困難的獨(dú)特性質(zhì)。
其基本原理是:在一個(gè)橢圓曲線方程上隨機(jī)找到一個(gè)點(diǎn),并使用該點(diǎn)對(duì)私鑰執(zhí)行乘法運(yùn)算以得到公鑰。在私鑰較長(zhǎng)的情況下,由公鑰得到私鑰是非常困難的。
相比于RSA等經(jīng)典的算法,其安全性更高,但其有一個(gè)明顯的缺點(diǎn)就是計(jì)算的過(guò)程比較費(fèi)時(shí)間。
4、SM2算法
SM2算法,也叫ShangMi2,國(guó)家商用密碼算法。于2010年12月有國(guó)家密碼管理局發(fā)布。
SM2算法出現(xiàn)較晚,是由ECC改進(jìn)而來(lái),但也是依據(jù)于橢圓曲線,但是其加密強(qiáng)度更高,甚至優(yōu)于經(jīng)典、公認(rèn)程度更高的RSA算法。
同由國(guó)家密碼管理局發(fā)布的還有SM1、SM3、SM4和SSF33等,它們可以說(shuō)與SM2算法齊名。
非對(duì)稱(chēng)加密算法相較于對(duì)稱(chēng)加密算法你更傾向于哪一種算法呢?