聊聊對(duì)稱加密、非對(duì)稱加密、Hash算法
對(duì)稱加密
什么是對(duì)稱加密(Symmetric Key Encryption)?
對(duì)稱加密采用了對(duì)稱密碼編碼技術(shù),它的特點(diǎn)是加密和解密使用相同的密鑰,用這個(gè)密鑰都能去加密或解密 。
基本過程:
甲方(主導(dǎo)方或者服務(wù)器方)生成加密密鑰,將密鑰私下共享給乙方(客戶方或者受眾方),當(dāng)甲方或者乙方用密文信息交換時(shí),均用此鑰將明文加密生成密文或者密文解密生成明文
常見的對(duì)稱加密算法:
DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES
常用的對(duì)稱加密算法:
AES、DES
優(yōu)點(diǎn):
生成密鑰的算法公開、計(jì)算量小、加密速度快、加密效率高、密鑰較短
缺點(diǎn):
一方面:雙方共同的密鑰,有一方密鑰被竊取,雙方都影響。另一方面:如果為每個(gè)客戶都生成不同密鑰,則密鑰數(shù)量巨大,密鑰管理有壓力。
應(yīng)用場(chǎng)景:
登錄信息用戶名和密碼加密、傳輸加密、指令加密(如扣款、下單操作)

非對(duì)稱加密
什么是非對(duì)稱加密(Asymmetric Key Encryption)?
非對(duì)稱加密算法需要一對(duì)密鑰(兩個(gè)密鑰):公開密鑰(publickey)和私有密鑰(privatekey)(簡(jiǎn)稱公鑰,私鑰)。公開密鑰與私有密鑰生成時(shí)是一對(duì),用公鑰加密只能是對(duì)應(yīng)的私鑰解密,同理用私鑰加密只能用對(duì)應(yīng)的公鑰解密。
基本過程:
甲方(主導(dǎo)方或者服務(wù)器方)生成一對(duì)密鑰(也就是公鑰和私鑰)并將其中的一把公用密鑰向其它方公開或者私下共享;得到該公用密鑰的乙方使用該公鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給甲方;甲方再用自己保存的另一把對(duì)應(yīng)的私鑰對(duì)加密后的信息進(jìn)行解密。相當(dāng)于甲方和乙方各持一把鑰匙。此時(shí)乙方可以是一“人”或者多“人”。
常見的非對(duì)稱加密算法:
RSA、ECC、Diffie-Hellman、El Gamal、DSA(數(shù)字簽名用)
常用的非對(duì)稱加密:
RSA、 ECC
優(yōu)點(diǎn):
安全高(幾乎很難破解)
缺點(diǎn):
加解密相對(duì)速度慢、密鑰長(zhǎng)、計(jì)算量大、效率低
應(yīng)用場(chǎng)景:
HTTPS(ssl)證書里制作、CRS請(qǐng)求證書、金融通信加密、藍(lán)牙等硬件信息加密配對(duì)傳輸、關(guān)鍵的登錄信息驗(yàn)證。

RSA與ECC對(duì)比
這兩個(gè)生成公私密鑰對(duì)的算法都是基于數(shù)學(xué)上的當(dāng)前計(jì)算機(jī)未解決的數(shù)學(xué)問題
RSA對(duì)極大整數(shù)做因數(shù)分解的難度決定了RSA算法的可靠性,ECC橢圓曲線密碼編碼學(xué)。
RSA一般加密小量的數(shù)據(jù),ECC多用移動(dòng)設(shè)備,兩者相比同樣的安全性ECC密鑰更短,速度更快。傳輸數(shù)據(jù)量小。
(1) RSA簽名算法適合于:Verify操作頻度高,而Sign操作頻度低的應(yīng)用場(chǎng)景。比如,分布式系統(tǒng)中基于capability的訪問控制就是這樣的一種場(chǎng)景。
(2) ECDSA簽名算法適合于:Sign和Verify操作頻度相當(dāng)?shù)膽?yīng)用場(chǎng)景。比如,點(diǎn)對(duì)點(diǎn)的安全信道建立
細(xì)說(shuō)對(duì)稱加密與非對(duì)稱加密對(duì)比
在管理方面:非對(duì)稱加密比對(duì)稱加密更有優(yōu)勢(shì),對(duì)稱加密的密鑰管理和分發(fā)上比較困難,不是非常安全,密鑰管理負(fù)擔(dān)很重。
在安全方面:非對(duì)稱加密算法基于未解決的數(shù)學(xué)難題,在破解上幾乎不可能。到了對(duì)稱加密 AES 雖說(shuō)從理論來(lái)說(shuō)是不可能破解的,但從計(jì)算機(jī)的發(fā)展角度來(lái)看。非對(duì)稱加密安全性更具有優(yōu)越性;
在速度方面:比如對(duì)稱加密方式AES 的軟件實(shí)現(xiàn)速度已經(jīng)達(dá)到了每秒數(shù)兆或數(shù)十兆比特。是非對(duì)稱加密公鑰的 100 倍,如果用硬件來(lái)實(shí)現(xiàn)的話這個(gè)比值將擴(kuò)大到 1000 倍。
對(duì)稱加密優(yōu)缺點(diǎn):對(duì)稱加密相比非對(duì)稱加密算法來(lái)說(shuō),加解密的效率要高得多、加密速度快。
非對(duì)稱加密優(yōu)缺點(diǎn):安全性更高,公鑰是公開的,密鑰是自己保存的,不需要將私鑰給別人。缺點(diǎn):加密和解密花費(fèi)時(shí)間長(zhǎng)、速度慢,只適合對(duì)少量數(shù)據(jù)進(jìn)行加密。
摘要(Hash算法)
摘要特別的地方在于它是一種單向算法,單向散列函數(shù)一般用于產(chǎn)生消息摘要,用戶可以通過hash算法對(duì)目標(biāo)信息生成一段特定長(zhǎng)度的唯一hash值,卻不能通過這個(gè)hash值重新逆向獲得目標(biāo)原文信息。(非可逆到原明文,相同的明文產(chǎn)生相同的摘要)
常見的Hash算法
MD2、MD4、MD5、HAVAL、SHA、SHA-1
常用的Hash算法
MD5、SHA-1
應(yīng)用場(chǎng)景:
1, Hash算法常用在不可還原的密碼存儲(chǔ)、信息完整性校驗(yàn)。
2,文檔、音視頻文件、軟件安裝包等用新老摘要對(duì)比是否一樣(接收到的文件是否被修改)
3, 用戶名或者密碼加密后數(shù)據(jù)庫(kù)存儲(chǔ)(數(shù)據(jù)庫(kù)大多數(shù)不會(huì)存儲(chǔ)關(guān)鍵信息的明文,就像很多登錄功能的忘記密碼不能找回,只能重置)
4,數(shù)字簽名和數(shù)據(jù)檢索。
SHA-1 與 MD5 的比較 :
因?yàn)槎呔?MD4 導(dǎo)出,SHA-1 和 MD5 彼此很相似。相應(yīng)的,他們的強(qiáng)度和其他特性也是相似。
安全性:最顯著和最重要的區(qū)別是 SHA-1 摘要比 MD5 摘要長(zhǎng) 32 位。使用強(qiáng)行技術(shù),產(chǎn)生任何一個(gè)報(bào)文使其摘要等于給定報(bào)摘要的難度對(duì) MD5 是 2128 數(shù)量級(jí)的操作,而對(duì) SHA-1 則是 2160 數(shù)量級(jí)的操作。這樣,SHA-1 對(duì)強(qiáng)行攻擊有更大的強(qiáng)度;對(duì)密碼分析的安全性:由于 MD5 的設(shè)計(jì),易受密碼分析的攻擊,SHA-1 顯得不易受這樣的攻擊;
速度:在相同的硬件上,SHA-1 的運(yùn)行速度比 MD5 慢
數(shù)字簽名
數(shù)字簽名非常簡(jiǎn)單,它是對(duì)上文中的摘要進(jìn)行加密后得到數(shù)字簽名。
也就是說(shuō),數(shù)字簽名是由明文本身的內(nèi)容經(jīng)過hash算法計(jì)算得到digest摘要,然后用甲方(或者發(fā)起方或者直接代號(hào)A)的私鑰加密而來(lái)的。簡(jiǎn)單理解就是,數(shù)字簽名 = 對(duì)摘要加密
它主要解決你給了我摘要,但是誰(shuí)知道這個(gè)摘要到底是不是你的摘要。如何保證你給的摘要在到我手上之前沒被修改。所以就用了對(duì)方的私鑰加密摘要。如果此時(shí)不是個(gè)人,而是信任的機(jī)構(gòu)所做的簽名,其實(shí)就是公證。
數(shù)字證書
上文中非對(duì)稱加密、Hash摘要的應(yīng)用場(chǎng)景都是提起到數(shù)字證書。也就是說(shuō)數(shù)字證書是基于他們生成的。
數(shù)字證書是A(或者說(shuō)甲方)向數(shù)字證書中心(CA)申請(qǐng)的,是由A的個(gè)人(或甲方的機(jī)構(gòu)企業(yè))信息,公鑰等經(jīng)過CA的私鑰加密而來(lái)的。相當(dāng)于進(jìn)行公證。而數(shù)字證書中心(CA)就是根證書的生產(chǎn)單位,很多Windows系統(tǒng)的瀏覽器根證書都是由一個(gè)或多個(gè)可信根的證書頒發(fā)機(jī)構(gòu)。(微軟、蘋果也有根證書頒發(fā)機(jī)構(gòu)機(jī)構(gòu))。
過程如下:
1,產(chǎn)生數(shù)字證書請(qǐng)求(我求你辦事需要你蓋章,我準(zhǔn)備的東西)
由于原文可能數(shù)據(jù)很大,非對(duì)稱加解密比較耗時(shí)導(dǎo)致時(shí)間長(zhǎng),網(wǎng)絡(luò)傳輸數(shù)據(jù)量大,所以證書請(qǐng)求生成時(shí),需要對(duì)原文或者信息進(jìn)行hash摘要(MD5或者SHA的方式),這樣不管原信息多長(zhǎng),就得到固定的短信息摘要,然后再用A(或者甲方)的私鑰進(jìn)行數(shù)字簽名(對(duì)摘要加密) 。然后將簽名+個(gè)人(或機(jī)構(gòu)企業(yè))信息+公鑰三者要素合成一個(gè)CRS(證書請(qǐng)求)讓CA(數(shù)字證書中心)去生成數(shù)字證書(就是CA私鑰加密),或者說(shuō)你給蓋章。這樣CA就會(huì)給你一個(gè)相當(dāng)于公證認(rèn)可后的數(shù)字證書。

生成證書請(qǐng)求
2,拿到CA的簽名的證書后解密過程
【PS:證書是可以上下關(guān)聯(lián)的,比如經(jīng)過根證書得到的子證書的機(jī)構(gòu)還可以生成證書,相當(dāng)于多次加密,此時(shí)證書解密需要過程會(huì)層層CA公鑰解密】
應(yīng)用場(chǎng)景:
常見的https的證書、區(qū)塊鏈證書、一些金融開戶或者藍(lán)牙鏈接傳輸?shù)取?/p>