1.非對稱加密
非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。
公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。
因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。
工作原理
- A要向B發送信息,A和B都要產生一對用於加密和解密的公鑰和私鑰。
- A的私鑰保密,A的公鑰告訴B;B的私鑰保密,B的公鑰告訴A。
- A要給B發送信息時,A用B的公鑰加密信息,因為A知道B的公鑰。
- A將這個消息發給B(已經用B的公鑰加密消息)。
- B收到這個消息后,B用自己的私鑰解密A的消息。其他所有收到這個報文的人都無法解密,因為只有B才有B的私鑰。
RSA算法
RSA加密算法是一種非對稱加密算法
RSA是三位開發者姓氏開頭字母拼在一起組成的。
2.對稱加密
所謂對稱,就是采用這種加密方法的雙方使用方式同樣的密鑰進行加密和解密。
密鑰是控制加密及解密過程的指令。
算法是一組規則,規定如何進行加密和解密。
優缺點
由於其速度快,對稱性加密通常在消息發送方需要加密大量數據時使用。對稱性加密也稱為密鑰加密。
加密的安全性不僅取決於加密算法本身,密鑰管理的安全性更是重要。因為加密和解密都使用同一個密鑰,如何把密鑰安全地傳遞到解密者手上就成了必須要解決的問題。
工作原理
- 數據發送方將明文(原始數據)和加密密鑰一起經過特殊加密算法處理后,使其變成復雜的加密密文發送出去。
- 接收方收到密文后,若想解讀原文,則需要使用加密密鑰及相同算法的逆算法對密文進行解密,才能使其恢復成可讀明文。
- 在對稱加密算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密。
AES
高級加密標准(英語:Advanced Encryption Standard,縮寫:AES)
這個標准用來替代原先的DES
DES全稱為Data Encryption Standard,即數據加密標准,是一種使用密鑰加密的塊算法
AES屬於對稱加密方法
3.密碼散列函數
密碼散列函數(Cryptographic hash function),又譯為加密散列函數,是散列函數(哈希函數)的一種。
它被認為是一種單向函數,也就是說極其難以由散列函數輸出的結果,回推輸入的數據是什么。
這種散列函數的輸入數據,通常被稱為消息(message),而它的輸出結果,經常被稱為消息摘要(message digest)或摘要(digest)。
特點
- 對於任何一個給定的消息,它都很容易就能運算出散列數值
- 難以由一個已知的散列數值,去推算出原始的消息
- 在不更動散列數值的前提下,修改消息內容是不可行的
- 對於兩個不同的消息,它不能給與相同的散列數值
MD5
MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數
可以產生出一個128位(16字節)的散列值(hash value),用於確保信息傳輸完整一致。
SHA家族
安全散列算法(英語:Secure Hash Algorithm,縮寫為SHA)是一個密碼散列函數家族,是FIPS所認證的安全散列算法。
能計算出一個數字消息所對應到的,長度固定的字符串(又稱消息摘要)的算法。
家族成員
- SHA家族的五個算法,分別是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512
- SHA-1在許多安全協定中廣為使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec
- SHA-1的安全性如今被密碼學家嚴重質疑;后四者有時並稱為SHA-2,至今尚未出現對SHA-2有效的攻擊
4.證書機制
- 引入一個公正的第三方
- 當某一方想要發布公鑰時,它將自身的身份信息及公鑰提交給這個第三方
- 第三方對其身份進行證實,如果沒有問題,則將其信息和公鑰打包成為證書(Certificate)
- 而這個公正的第三方,就是常說的證書頒發機構(Certificate Authority)
- 當我們需要獲取公鑰時,只需要獲得其證書,然后從中提取出公鑰就可以了
解決問題:
通常情況下,獲取外部平台的公鑰時,除非對方手把手將公鑰交給我們,否則公鑰在網絡中傳遞時,可能被篡改
5.數據安全傳輸條件
數據傳輸安全要滿足的要求:
- 消息的發送方能夠確定消息只有預期的接收方可以解密(不保證第三方無法獲得,但保證第三方無法解密)。
- 消息的接收方可以確定消息是由誰發送的(消息的接收方可以確定消息的發送方)。
- 消息的接收方可以確定消息在途中沒有被篡改過(必須確認消息的完整性)。
如何實現?
假設有兩組四個密鑰
A的公鑰(PUB_A),A的私鑰(PRI_A);B的公鑰(PUB_B),B的私鑰(PRI_B)
公鑰一般用來加密,私鑰用來簽名
A發送消息
- 利用加密散列函數(SHA-2、MD5)對要發送的消息進行運算,單向生成消息摘要
- A用自己的私鑰(PRI_A)對消息摘要進行簽名
- A用B的公鑰(PUB_B)對消息和簽名后的消息摘要進行加密
B接受消息
- B用自己的私鑰(PRI_B)解密A用B的公鑰(PUB_B)加密的內容
- 解密后的內容分為兩部分,一部分是消息,一部分是簽名后的消息摘要
- B用A的公鑰(PUB_A)解簽A用A自己私鑰(PRI_A)簽的簽名
- 對解密后的消息,進行加密散列函數運算,生成新的消息摘要,對比解簽后的消息摘要,判斷是否一致
非對稱加密盡可能的保證了,消息在網絡傳輸過程中,即使被截取,也無法被解密;
對消息摘要解簽的過程,要用到發送方的公鑰,這樣也就確定了消息的發送方;
消息摘要的前后對比,保證了消息的完整性。
非對稱加密是一種很耗時的操作,而對稱加密效率雖然高,但不安全。
我們可以結合使用。
利用非對稱加密,加密(簽名)消息摘要和對稱加密中的密鑰;利用對稱加密方式,加密消息數據
偷了一幅圖:
這篇博客寫的很詳細,圖偷他的:
加密、簽名和SSL握手機制細節:https://www.cnblogs.com/f-ck-need-u/p/6089523.html
圖中利用私鑰,加密摘要信息生成數字簽名,就是 簽名 的過程。
參考
加密和簽名的區別:https://blog.csdn.net/youshaoduo/article/details/78476578
簽名、加密、證書的基本原理和理解:https://www.cnblogs.com/Caersi/p/6720789.html
加密、簽名和SSL握手機制細節:https://www.cnblogs.com/f-ck-need-u/p/6089523.html
還有一篇,關於前后端代碼層面的,可以看一下: