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

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

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

生成證書請求
2,拿到CA的簽名的證書后解密過程
【PS:證書是可以上下關聯的,比如經過根證書得到的子證書的機構還可以生成證書,相當于多次加密,此時證書解密需要過程會層層CA公鑰解密】
應用場景:
常見的https的證書、區塊鏈證書、一些金融開戶或者藍牙鏈接傳輸等。





























