什么非對(duì)稱加密算法
非對(duì)稱加密算法是一種密鑰的保密方法。
非對(duì)稱加密算法需要兩個(gè)密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對(duì),如果用公開密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱加密算法。 非對(duì)稱加密算法實(shí)現(xiàn)機(jī)密信息交換的基本過程是:甲方生成一對(duì)密鑰并將其中的一把作為公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給甲方;甲方再用自己保存的另一把專用密鑰對(duì)加密后的信息進(jìn)行解密。
另一方面,甲方可以使用乙方的公鑰對(duì)機(jī)密信息進(jìn)行簽名后再發(fā)送給乙方;乙方再用自己的私匙對(duì)數(shù)據(jù)進(jìn)行驗(yàn)簽。
甲方只能用其專用密鑰解密由其公用密鑰加密后的任何信息。 非對(duì)稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的需要。
非對(duì)稱密碼體制的特點(diǎn):算法強(qiáng)度復(fù)雜、安全性依賴于算法與密鑰但是由于其算法復(fù)雜,而使得加密解密速度沒有對(duì)稱加密解密的速度快。對(duì)稱密碼體制中只有一種密鑰,并且是非公開的,如果要解密就得讓對(duì)方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對(duì)稱密鑰體制有兩種密鑰,其中一個(gè)是公開的,這樣就可以不需要像對(duì)稱密碼那樣傳輸對(duì)方的密鑰了。這樣安全性就大了很多。
工作原理
1.A要向B發(fā)送信息,A和B都要產(chǎn)生一對(duì)用于加密和解密的公鑰和私鑰。
2.A的私鑰保密,A的公鑰告訴B;B的私鑰保密,B的公鑰告訴A。
3.A要給B發(fā)送信息時(shí),A用B的公鑰加密信息,因?yàn)锳知道B的公鑰。
4.A將這個(gè)消息發(fā)給B(已經(jīng)用B的公鑰加密消息)。
5.B收到這個(gè)消息后,B用自己的私鑰解密A的消息。其他所有收到這個(gè)報(bào)文的人都無法解密,因?yàn)橹挥蠦才有B的私鑰。
主要應(yīng)用
非對(duì)稱加密(公鑰加密):指加密和解密使用不同密鑰的加密算法,也稱為公私鑰加密。假設(shè)兩個(gè)用戶要加密交換數(shù)據(jù),雙方交換公鑰,使用時(shí)一方用對(duì)方的公鑰加密,另一方即可用自己的私鑰解密。如果企業(yè)中有n個(gè)用戶,企業(yè)需要生成n對(duì)密鑰,并分發(fā)n個(gè)公鑰。假設(shè)A用B的公鑰加密消息,用A的私鑰簽名,B接到消息后,首先用A的公鑰驗(yàn)證簽名,確認(rèn)后用自己的私鑰解密消息。由于公鑰是可以公開的,用戶只要保管好自己的私鑰即可,因此加密密鑰的分發(fā)將變得 十分簡(jiǎn)單。同時(shí),由于每個(gè)用戶的私鑰是唯一的,其他用戶除了可以通過信息發(fā)送者的公鑰來驗(yàn)證信息的來源是否真實(shí),還可以通過數(shù)字簽名確保發(fā)送者無法否認(rèn)曾發(fā)送過該信息。非對(duì)稱加密的缺點(diǎn)是加解密速度要遠(yuǎn)遠(yuǎn)慢于對(duì)稱加密,在某些極端情況下,甚至能比對(duì)稱加密慢上1000倍。DSACryptoServiceProviderRSACryptoServiceProvider
//加密
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] PasswordBytes = encoding.GetBytes(password);//將密碼轉(zhuǎn)換為字節(jié)數(shù)組RSACryptoServiceProvider crypt=new RSACryptoServiceProvider();//RSA加密算法,非對(duì)稱PasswordBytes=crypt.Encrypt(password ,false);//加密字節(jié)數(shù)組,這是加密后的密碼值,放入數(shù)據(jù)庫中的表字段中。
string key=crypt.ToXmlString(true);//輸出密鑰為XML格式的字符串,且包含私鑰,這個(gè)字符串要作為數(shù)據(jù)庫表中的一個(gè)字段同用戶的密碼放在一起。
//解密
RSACryptoServiceProvider crypt=new RSACryptoServiceProvider();//已隨機(jī)生成了一個(gè)密鑰對(duì)crypt.Clear();//毀掉當(dāng)前密鑰對(duì)
crypt.FromXmlString(key)//輸入密鑰對(duì),
key是從數(shù)據(jù)庫表字段中讀取的那個(gè)XML格式的字符串,即密鑰字段PasswordBytes=crypt.Decrypt(password ,false);//解密字節(jié)數(shù)組,返回原始密碼給用戶上面方法的一個(gè)特點(diǎn)是每個(gè)用戶對(duì)應(yīng)一個(gè)密鑰(包含公鑰和私鑰),它們都是隨機(jī)生成的,所以各不相同。不過缺點(diǎn)也是很明顯的,就是密鑰存儲(chǔ)在數(shù)據(jù)庫中,如果數(shù)據(jù)庫被攻破密鑰就泄漏了。還有另外一個(gè)方法就是依照上面方法隨機(jī)生成一個(gè)密鑰對(duì)(包含公鑰和私鑰),通過ToXmlString(true)方法導(dǎo)出,然后把這個(gè)XML字符串格式的密鑰放到你的Web程序的Web.config文件的AppSetting節(jié)點(diǎn)里面,然后通過FromXmlString(key)方法讀入密鑰,這樣就意味著所有的用戶密碼都用同一個(gè)密鑰對(duì)加密和解密。
主要功能
非對(duì)稱加密體系不要求通信雙方事先傳遞密鑰或有任何約定就能完成保密通信,并且密鑰管理方便,可實(shí)現(xiàn)防止假冒和抵賴,因此,更適合網(wǎng)絡(luò)通信中的保密通信要求。
主要算法
RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)。
使用最廣泛的是RSA算法,Elgamal是另一種常用的非對(duì)稱加密算法。
Elgamal由Taher Elgamal于1985年發(fā)明,其基礎(chǔ)是DiffieˉHellman密鑰交換算法,后者使通信雙方能通過公開通信來推導(dǎo)出只有他們知道的秘密密鑰值[DiffieˉHellman]。DiffieˉHellman是Whitfield Diffie和Martin Hellman于1976年發(fā)明的,被視為第一種 非對(duì)稱加密算法,DiffieˉHellman 與RSA的不同之處在于,DiffieˉHellman不是加密算法,它只是生成可用作對(duì)稱密鑰的秘密數(shù)值。在DiffieˉHellman密鑰交換過程中,發(fā)送方和接收方分別生成一個(gè)秘密的隨機(jī)數(shù),并根據(jù)隨機(jī)數(shù)推導(dǎo)出公開值,然后,雙方再交換公開值。DiffieˉHellman算法的基礎(chǔ)是具備生成共享密鑰的能力。只要交換了公開值,雙方就能使用自己的私有數(shù)和對(duì)方的公開值來生成對(duì)稱密鑰,稱為共享密鑰,對(duì)雙方來說,該對(duì)稱密鑰是相同的,可以用于使用對(duì)稱加密算法加密數(shù)據(jù)。
與RSA相比,DiffieˉHellman的優(yōu)勢(shì)之一是每次交換密鑰時(shí)都使用一組新值,而使用RSA算法時(shí),如果攻擊者獲得了私鑰,那么他不僅能解密之前截獲的消息,還能解密之后的所有消息。然而,RSA可以通過認(rèn)證(如使用X.509數(shù)字證書)來防止中間人攻擊,但Diff ieˉHellman在應(yīng)對(duì)中間人攻擊時(shí)非常脆弱。
非對(duì)稱加密算法特點(diǎn)
對(duì)稱加密算法的特點(diǎn)是算法公開、計(jì)算量小、加密速度快、加密效率高。
不對(duì)稱加密算法不對(duì)稱加密算法使用兩把完全不同但又是完全匹配的一對(duì)鑰匙—公鑰和私鑰。在使用不對(duì)稱加密算法加密文件時(shí),只有使用匹配的一對(duì)公鑰和私鑰,才能完成對(duì)明文的加密和解密過程。加密明文時(shí)采用公鑰加密,解密密文時(shí)使用私鑰才能完成,而且發(fā)信方(加密者)知道收信方的公鑰,只有收信方(解密者)才是唯一知道自己私鑰的人。不對(duì)稱加密算法的基本原理是,如果發(fā)信方想發(fā)送只有收信方才能解讀的加密信息,發(fā)信方必須首先知道收信方的公鑰,然后利用收信方的公鑰來加密原文;收信方收到加密密文后,使用自己的私鑰才能解密密文。顯然,采用不對(duì)稱加密算法,收發(fā)信雙方在通信之前,收信方必須將自己早已隨機(jī)生成的公鑰送給發(fā)信方,而自己保留私鑰。由于不對(duì)稱算法擁有兩個(gè)密鑰,因而特別適用于分布式系統(tǒng)中的數(shù)據(jù)加密。廣泛應(yīng)用的不對(duì)稱加密算法有RSA算法和美國(guó)國(guó)家標(biāo)準(zhǔn)局提出的DSA。
優(yōu)點(diǎn):
更安全,密鑰越長(zhǎng),它就越難破解
缺點(diǎn):
加密速度慢
評(píng)論