簽名、加密、證書的基本原理和理解


來源:https://zhuanlan.zhihu.com/p/59999022

最近做一個項目涉及到RSA加密解密,看了很多文章大概總結了一下,加密解密的原理和常見的一些加密算法。

1.摘要算法

常用的摘要算法有MD5,SHA1。摘要算法是一個不可逆過程,就是無論多大數據,經過算法運算后都是生成固定長度的數據,一般結果使用16進制進行顯示。

MD5和SHA1的區別:MD5結果是128位摘要,SHa1是160位摘要。那么MD5的速度更快,而SHA1的強度更高。

下面統一使用MD5算法進行說明,SHA1類似。

主要用途有:驗證消息完整性,安全訪問認證,數據簽名。

消息完整性:由於每一份數據生成的MD5值不一樣,因此發送數據時可以將數據和其MD5值一起發送,然后就可以用MD5驗證數據是否丟失、修改。在下文中對數據內容的完整性就是通過比較發送內容的MD5和接收到的內容的MD5是否一樣判斷其完整性。

安全訪問認證:這是使用了算法的不可逆性質,(就是無法從MD5值中恢復原數據)對賬號登陸的密碼進行MD5運算然后保存,這樣可以保證除了用戶之外,即使數據庫管理人員都無法得知用戶的密碼。

數字簽名:這是結合非對稱加密算法和CA證書的一種使用場景。

一般破解方法:字典法,就是將常用密碼生成MD5值字典,然后反向查找達到破解目的,因此建議使用強密碼

2.對稱加密算法

對稱加密算法只是為了區分非對稱加密算法。其中鮮明的特點是對稱加密是加密解密使用相同的密鑰,而非對稱加密加密和解密時使用的密鑰不一樣。對於大部分情況我們都使用對稱加密,而對稱加密的密鑰交換時使用非對稱加密,這有效保護密鑰的安全。非對稱加密加密和解密密鑰不同,那么它的安全性是無疑最高的,但是它加密解密的速度很慢,不適合對大數據加密。而對稱加密加密速度快,因此混合使用最好。

常用的對稱加密算法有:AES和DES.

DES:比較老的算法,一共有三個參數入口(原文,密鑰,加密模式)。而3DES只是DES的一種模式,是以DES為基礎更安全的變形,對數據進行了三次加密,也是被指定為AES的過渡算法。

AES:高級加密標准,新一代標准,加密速度更快,安全性更高(不用說優先選擇

3.非對稱加密(RSA)

這里主要對RSA進行介紹。

對稱加密加密解密使用的是相同的密鑰,而非對稱加密加密解密時使用的不同的密鑰,分為公鑰(public key)和私鑰(private key).公鑰可以公開,而私鑰自己保存。它利用的是兩個大質數相乘十分容易,而對其乘積進行因素分解十分困難。這樣就可以將乘積作為密鑰了,這個乘積為N值,根據兩個大質數選擇e和生成d,刪掉兩個大質數。這樣(N,e)為公鑰,(N,d)為私鑰,公鑰無法破解出私鑰(不作詳細介紹,我們不是研究算法的)。由於非對稱加密的密鑰生成麻煩,所以無法做到一次一密,而且其加密速度很慢,無法對大量數據加密。因此最常用的使用場景就是數字簽名和密碼傳輸,用作數字簽名時使用私鑰加密,公鑰解密;用作加密解密時,使用公鑰加密,私鑰解密。

下面這篇文章對這三個算法都做了詳細的介紹,想要深入了解的可以看看:


數據傳輸安全的要滿足的要求:

  1. 消息的發送方能夠確定消息只有預期的接收方可以解密(不保證第三方無法獲得,但保證第三方無法解密)。
  2. 消息的接收方可以確定消息是由誰發送的(消息的接收方可以確定消息的發送方)。
  3. 消息的接收方可以確定消息在途中沒有被篡改過(必須確認消息的完整性)。

對稱加密
網絡的數據傳輸從發送方發出到接收方接收到,要經過數個節點才能到達目的地,在這個過程中難免會被別有用心的人監聽(現在常用的網絡數據監聽軟件就有charles,具體可以查看相關使用教程,通過這個軟件可以監聽到某個頁面用到了哪些接口,發送以及返回的參數分別是什么)。所以在傳輸敏感數據的過程中,就要對數據進行加密。現行的加密過程中,一般加密算法是公開的,密鑰是自己持有,發送方有密鑰對數據進行加密傳輸,在傳輸的過程中經過加密的數據即使被第三方竊取到也因為沒有密鑰不能解密。而接收方同樣持有密鑰通過算法的逆運算把密文解析出對應的明文來。
過程如下:


上述算法即為對稱加密,特點是加密和解密都是用同一個密鑰。這種算法的前提條件是發送方和接收方用一個密鑰,也就是說在數據傳輸之前,接收方要知道發送方用於發送加密數據所用到的密鑰。但是現實條件是一般不會把密鑰手把手的交給對方,所以下面就要用到非對稱加密算法。
非對稱加密算法
非對稱加密算法中信息的發送方和接收方都分別有兩個密鑰,其中分別為私鑰和公鑰,私鑰為數據的發送方持有,公鑰可以公開。其中涉及到兩種模式,它們分別為加密模式和認證模式。
加密模式:
發送方用公鑰給數據進行加密,然后把加密后的數據發送到接收方,然后接收方用對應的私鑰解密,因為只有接收方的私鑰才能解析數據,所以即使被第三方竊取到數據也沒有關系。這個模式叫做加密模式。在這個過程中如何保證數據的完整性,保證數據是發送方發送的數據,而不是被第三方篡改后的數據。這時就要用到簽名,在發送方加密明文之前,給明文取md5值,得到其信息的摘要(注:不能通過信息摘要反推明文)。然后用公鑰分別給明文和明文的摘要加密發送到數據的接收方,數據的接收方接收到數據之后,用私鑰對密文和摘要進行解密,然后對解密得到的明文取md5摘要,比對解密后的明文摘要和發送過來的摘要是否一致;一致就證明數據是原始的數據沒有遭到篡改。這個加密的過程中保證了數據的安全性(即只有接收方才可以解密)和防篡改性(簽名認證),這就保證了上面說的數據傳輸要求中的第一點和第三點。下面是圖解過程:


但是因為公鑰是公開的,所以在加密模式中我們是不知道到底是誰發送數據給我們的,因此下面就要提到認證模式。
認證模式:
在認證模式中,發送方用私鑰加密數據,給接收方發送數據,接收方用公鑰解密,因為私鑰是唯一的,所以只要數據解析成功就可以知道數據發送方是誰。
這就附和我們在數據的傳輸要求中的第二點了。下面是圖解過程:


結合加密模式和認證模式就可以實現數據傳輸安全的三大要點了。
下面我們來解釋一下這種高級模式,以發送方和接收方兩個部分來解釋:

  1. 將消息進行散列運算,得到消息摘要。
  2. 使用自己的私鑰對消息摘要加密(認證模式:確保了接收方能夠確認自己)。
  3. 使用接收方的公鑰對消息進行加密(加密模式:確保了消息只能由期望的接收方解密)。
  4. 發送消息和消息摘要。

接下來我們看一下接收方所執行的步驟:

  1. 使用發送方的公鑰對消息摘要進行解密(確認了消息是由誰發送的)。
  2. 使用自己的私鑰對消息進行解密(安全地獲得了實際應獲得的信息)。
  3. 將消息進行散列運算,獲得消息摘要。
  4. 將上一步獲得的消息摘要 和 第一步解密的消息摘要進行對比(確認了消息是否被篡改)。

可以看到,通過上面這種方式,使用了接收方、發送方全部的四個密鑰,再配合使用消息摘要,使得前面提出的安全傳遞的所有三個條件全都滿足了。那么是不是這種方法就是最好的呢?不是的,因為我們已經說過了,非對稱加密是一種很耗時的操作,所以這個方案是很低效的。實際上,我們可以通過它來解決對稱加密中的密鑰傳遞問題,如果你已經忘記了可以翻到前面再看一看,也就是說,我們可以使用這里的高級實現方式來進行對稱加密中密鑰的傳遞,對於之后實際的數據傳遞,采用對稱加密方式來完成,因為此時已經是安全的了。
證書機制
與數字簽名相關的一個概念就是證書機制了,證書是用來做什么呢?在上面的各種模式中,我們一直使用了這樣一個假設,就是接收方或者發送方所持有的、對方的公鑰總是正確的(確實是對方公布的)。而實際上除非對方手把手將公鑰交給我們,否則如果不采取措施,雙方在網絡中傳遞公鑰時,一樣有可能被篡改。那么怎樣解決這個問題呢?這時就需要證書機制了:可以引入一個公正的第三方,當某一方想要發布公鑰時,它將自身的身份信息及公鑰提交給這個第三方,第三方對其身份進行證實,如果沒有問題,則將其信息和公鑰打包成為證書(Certificate)。而這個公正的第三方,就是常說的證書頒發機構(Certificate Authority)。當我們需要獲取公鑰時,只需要獲得其證書,然后從中提取出公鑰就可以了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM