在實際開發的過程中,我們經常會用到一些安全加密的手段,通常會用到加密、簽名、證書等等
而當提及他們的作用與區別時候,我們可能並不是十分理解。
作者在最近的工作中也遇到了相關的需求,在查閱了相關的資料之後,覺得有必要做一些整理,留作日後查閱之用;也希望後來者讀到這篇文章時能有所收穫。
通常,我們認為滿足資訊保安三要素,即可保證資料傳輸的安全。
資訊保安三要素(cia triad)是指:
保密性:是指客戶端/服務端對請求或響應進行了加密,即使資料被黑客攔截,獲得的也是加密後的密文,無法獲得資料真實表達的訊息。(但是如果我們的**是已經實現了https,那麼我們就不必再手動加密了)
完整性:假設原報文原來的內容是10000,我們對報文進行加密,但黑客刪除了部分加密後的報文,解密後報文變成了1000,這就破壞了完整性,會影響資料真實想表達的含義。
有效性:以非對稱加密為例,假設黑客十分強大,偷換了伺服器給客戶端下發的公鑰,之後又攔截了客戶端所有的請求**到黑客自己的伺服器上,那麼客戶端後續所有的解密所使用的公鑰是黑客偽造的,所有獲得的資料也只是黑客偽造的;
我們以加密、簽名、證書作為主題,結合三要素展開分析。
概述:加密分為對稱加密和非對稱加密,非對稱加密是指加密使用的金鑰與解密使用的金鑰不相同,一般適用於對比較簡短的資料加密(隨著資料量增大加解密效率降低),對稱加密是指加密和解密使用的金鑰相同,一般適用於資料量比較大的資料,非對稱加密相對於對稱加密更加安全。實際開發中,對稱加密與非對稱加密經常組合使用。
作用:對資料進行加密,保證了資料的保密性
對三要素的影響:
概述:簽名的目的是保證資料的完整性;簽名的原理是伺服器將資料進行hash,hash的目的是原資料可能過長,而經過hash後的資料會非常短,更適合非對稱加密。且hash的無序性和不可逆性可以保證資料是沒有經過篡改的。(我們將經過hash的資料稱之為摘要);
然後再將hash後的摘要進行非對稱加密(加密後生成的就是所謂的簽名了),同原資料一起傳輸;
客戶端通過公鑰解開簽名,獲取摘要(也就是hash後的資料),再將原資料進行hash,比較二者是否相同,即可判斷資料是否被篡改。
作用:通過比較摘要,保證了資料的完整性
對三要素的影響:
概述: 證書的本質其實也是非對稱加密,原理是伺服器先向ca中心申請乙個私鑰,將伺服器想要傳輸的資料通過ca中心發布的私鑰加密;
而客戶端需要獲得ca中心發布的證書(本質是附帶著公鑰和各種證書資訊的檔案,許多證書在安裝系統時就會自帶),使用ca中心發布的證書中攜帶的公鑰去解開伺服器傳來的加密資料。(在實際開發中證書也可以用私下下發公鑰的形式實現,即服務端預先生成一組公私鑰,將公鑰在客戶端的**中寫死,即可達到證書的作用)
對三要素的影響:
我們可以看出:
加密對應的是保證保密性,簽名對應的是保證完整性,證書對應的是有效性,缺一不可。
由此我們可以得出結論:
如果對資料進行了加密,簽名,證書驗證,理論上就可以保證資料傳輸的安全。
實現過程:
1、服務端生成資料加解密所需的公鑰和私鑰
2、客戶端首先像服務端發起請求獲取公鑰
3、客戶端生成aes金鑰,對報文體進行aes加密,對aes金鑰進行rsa加密,將加密後的aes金鑰存入請求頭,向伺服器傳送請求(傳送內容為:rsa加密後的aes的金鑰、aes加密後的報文)
4、服務端收到請求,通過私鑰解開請求頭中的aes金鑰,再使用aes金鑰解開報文,獲取客戶端請求所攜帶的資料
5、服務端準備好響應資料,對響應資料通過客戶端發來的aes金鑰加密(獲得aes加密後的資料)
6、服務端準備好響應資料,進行hash獲得摘要(hash的目的是縮減所需加密的資料大小),通過第一步生成的私鑰對摘要進行加密,獲取簽名;
7、將第5步獲得的aes加密後的響應資料和第6步獲得的簽名一起傳送給客戶端
8、客戶端使用步驟2獲得的公鑰將服務端發來的簽名進行解密獲得摘要
9、客戶端使用步驟2獲得的公鑰將服務端發來的資料進行解密獲得服務端返回的明文資料
10、最後將明文資料hash後,與步驟8獲得的摘要進行比較,若一致則確保了資料的完整性
什麼是數字簽名和證書?
如果對你有所幫助,希望給我乙個小小的贊。
如有不當之處,敬請指正,萬分感謝!
加密和簽名證書
1.5 簽名和加密 我們說加密 是指對某個內容加密,加密後的內容還可以通過 解密進行還原。比如我們把一封郵件進行加密,加密後的內容在網路上進行傳輸,接收者在收到後,通過 解密可以還原郵件的真實內容。這裡主要解釋一下簽名,簽名就是在資訊的後面再加上一段內容,可以證明 資訊 沒有被修改過,怎麼樣可以達到...
簽名證書VS加密證書
從證書的用途來看,數字證書可以分為 簽名證書 主要用於對使用者資訊進行簽名,以保證資訊的不可否認性。加密證書 主要用於對使用者傳送資訊進行加密,以保證資訊的真實性和完整性。什麼是加密證書和簽名證書?數字證書可分為簽名證書和加密證書。簽名證書主要用於對使用者資訊進行簽名,以保證資訊的有效性和不可否認性...
加密和簽名的區別?
私鑰用來簽名的,公鑰用來驗籤的。公鑰加密私鑰解密是秘送,私鑰加密公鑰解密是簽名 就拿a給b傳送經過簽名加密資訊來說 1 a對資訊簽名的作用是確認這個資訊是a發出的,不是別人發出的 2 加密是對內容進行機密性保護,主要是保證資訊內容不會被其他人獲取,只有b可以獲取。也就是保證整個過程的端到端的唯一確定...