對稱加密(Symmetric Cryptography),又稱私鑰加密
對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key),這種方法在密碼學中叫做對稱加密算法。
對稱加密有很多種算法,由於它效率很高,所以被廣泛使用在很多加密協議的核心當中。對稱加密通常使用的是相對較小的密鑰,一般小於256 bit。
因爲密鑰越大,加密越強,但加密與解密的過程越慢。
如果你只用1 bit來做這個密鑰,那黑客們可以先試着用0來解密,不行的話就再用1解;
但如果你的密鑰有1 MB大,黑客們可能永遠也無法破解,但加密和解密的過程要花費很長的時間。
密鑰的大小既要照顧到安全性,也要照顧到效率,是一個trade-off。
非對稱加密(Asymmetric Cryptography),又稱公鑰加密
1976年,美國學者Dime和Henman爲解決信息公開傳送和密鑰管理問題,提出一種新的密鑰交換協議,
允許在不安全的媒體上的通訊雙方交換信息,安全地達成一致的密鑰,這就是“公開密鑰系統”。
相對於“對稱加密算法”這種方法也叫做“非對稱加密算法”。
非對稱加密爲數據的加密與解密提供了一個非常安全的方法,它使用了一對密鑰,公鑰(public key)和私鑰(private key)。
私鑰只能由一方安全保管,不能外泄,而公鑰則可以發給任何請求它的人。
非對稱加密使用這對密鑰中的一個進行加密,而解密則需要另一個密鑰。
比如,你向銀行請求公鑰,銀行將公鑰發給你,你使用公鑰對消息加密,那麼只有私鑰的持有人–銀行才能對你的消息解密。
與對稱加密不同的是,銀行不需要將私鑰通過網絡發送出去,因此安全性大大提高。
混合加密機制
即先用計算複雜度高的非對稱加密協商一個臨時的對稱加密密鑰(會話密鑰,一般相對內容 來說要短的多),
然後雙方再通過對稱加密對傳遞的大量數據進行加解密處理。
典型的場景是現在大家常用的 HTTPS 機制。HTTPS 實際上是利用了 Transport Layer Security/Secure Socket Layer(TLS/SSL)來實現可靠的傳輸。
TLS 爲 SSL 的升級版本,目 前廣泛應用的爲 TLS 1.0,對應到 SSL 3.1 版本。
建立安全連接的具體步驟如下:
客戶端瀏覽器發送信息到服務器,包括隨機數 R1,支持的加密算法類型、協議版本、壓 縮算法等。注意該過程爲明文。
服務端返回信息,包括隨機數 R2、選定加密算法類型、協議版本,以及服務器證書。注 意該過程爲明文。
瀏覽器檢查帶有該網站公鑰的證書。該證書需要由第三方 CA 來簽發,瀏覽器和操作系統 會預置權威 CA 的根證書。如果證書被篡改作假(中間人攻擊),很容易通過 CA 的證書 驗證出來。
如果證書沒問題,則用證書中公鑰加密隨機數 R3,發送給服務器。此時,只有客戶端和 服務器都擁有 R1、R2 和 R3 信息,基於 R1、R2 和 R3,生成對稱的會話密鑰(如 AES 算法)。後續通信都通過對稱加密進行保護。
AES爲分組密碼,分組密碼也就是把明文分成一組一組的,每組長度相等,每次加密一組數據,直到加密完整個明文。
在AES標準規範中,分組長度只能是128位,也就是說,每個分組爲16個字節(每個字節8位)。
密鑰的長度可以使用128位、192位或256位。密鑰的長度不同,推薦加密輪數也不同。
詳細參見:https://blog.csdn.net/qq_28205153/article/details/55798628
RSA非對稱加密算法
RSA加密算法是現在世界上運用最廣泛的非對稱加密算法,比如常用的https協議、銀行交易等等。詳細參見:
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
非對稱加密:傳遞公鑰,用公鑰加密,用私鑰解密。
非對稱密鑰加密的使用過程:
1. A要向B發送信息,A和B都要產生一對用於加密和解密的公鑰和私鑰。
2. A的私鑰保密,A的公鑰告訴B;B的私鑰保密,B的公鑰告訴A。
3. A要給B發送信息時,A用B的公鑰加密信息,因爲A知道B的公鑰。
4. A將這個消息發給B(已經用B的公鑰加密消息)。
5. B收到這個消息後,B用自己的私鑰解密A的消息,其他所有收到這個報文的人都無法解密,因爲只有B纔有B的私鑰。
6. 反過來,B向A發送消息也是一樣。
混合加密機制:先用非對稱加密傳遞對稱加密的密鑰,然後再用對稱加密傳遞信息。
解決的辦法是將對稱加密的密鑰使用非對稱加密的公鑰進行加密,然後發送出去,接收方使用私鑰進行解密得到對稱加密的密鑰,然後雙方可以使用對稱加密來進行溝通。