1 MD5摘要算法 簡介
1.1 消息摘要算法(雜湊算法,哈希算法):主要特征是加密過程不需要密鑰,並且經過加密的數據無法被解密,只有輸入相同的明文數據經過相同的消息摘要算法才能得到相同的密文。
- 一般地,只要輸入的消息不同,對其進行摘要以后產生的摘要消息也必不相同,且相同的輸入必會產生相同的輸出;
- 只能進行正向的信息摘要,而無法從摘要中恢復出任何的消息,甚至根本就找不到任何與原信息相關的信息;
- 好的摘要算法,沒有人能從中找到“碰撞”,但是“碰撞”是肯定存在的。
1.2 應用舉例
這里用md5摘要算法來對某個文件進行摘要計算,如果這個文件的大小或者時間做了修改,摘要后的值就會發生變化
2 對稱加密算法:采用單鑰密碼的加密方法,同一個密鑰可以同時用作信息的加密和解密
2.1 以常用的對稱加密算法AES為例:
- 秘鑰為123456:將abc加密為U2FsdGVkX1/jIs2LMTG3oFrmbfTRiU2+ow70BGeKW2o=,反之解密為abc
- 秘鑰為654321:將abc解密為U2FsdGVkX1/zzoThQmj1UwJmhcDAsF3+H023utRGvuY=,反之解密為abc
2.2 缺點:
- 首次交換秘鑰的環境安全難以保證
- 需要雙方共同保證秘鑰的安全,還要設計更改秘鑰的流程以防備秘鑰泄露
3 非對稱加密算法:采用一對秘鑰,即兩個密鑰來進行加密和解密。這一對密鑰分別是公開密鑰(public key,簡稱公鑰)和私有密鑰(private key,簡稱私鑰)。
3.1 特點:
- 公鑰大家都有,沒啥私密性
- 用公鑰加密的內容,只能用對應的私鑰來解密;用私鑰加密的內容,只能用對應的公鑰來解密
- 想利用公鑰破解私鑰,需要很長的時間,以目前的算力破解2048位的密鑰要80年以上
3.2 舉個例子
- 用戶A生成自己的一對秘鑰,公鑰+私鑰
- A把公鑰給B,私鑰自己保存,只有自己知道,不對外透露
- B想和A說私密的內容
3.3 安全隱患:中間人攻擊
- 中間人C生成兩對秘鑰,公鑰1+私鑰1;公鑰2+私鑰2
- C跟A謊稱自己是B,把公鑰1給A;C又跟B謊稱說自己是A,把公鑰2給B
- 然后C在中間開始搞事情
- 中間人攻擊的根本原因:無法確定公鑰的真實性
- 解決辦法:
- 通過大眾媒體大范圍的公布公鑰,使公鑰不可能造假
- 操作系統或瀏覽器內置公鑰,即創建根證書
3.4 非對稱加密的正確玩法
- 有個可靠的機構,有一對公鑰和私鑰,假設為公鑰root+私鑰root
- 公鑰root已經傳播到全世界,每個人手上都有,包括A和B,不能作假
- A和B想有一套自己的秘鑰對,自己溝通
- A向該機構申請生成一對自己的秘鑰對,假設為公鑰A+私鑰A
- 機構用私鑰root把公鑰A加密發給B,B用公鑰root解密成功,說明公鑰A是可靠的
- A有了私鑰A,B有了公鑰A,兩者開始愉快的溝通
- 流程圖解如下:
- 結論:用一對可靠的公鑰和秘鑰,可以對外傳遞無數對的新的公鑰和私鑰
- 證書鏈:基於上述結論,有了證書鏈的概念,即將由某對公鑰私鑰生成的新的公鑰私鑰中的公鑰做成子證書,子生孫孫生子,構成一個鏈條,如下所示:
4 非對稱加密和https
4.1 https的流程
- 企業向可靠的機構申請屬於自己的公鑰和私鑰
- 企業把公鑰和私鑰保存到自己的服務器
- 個人的客戶端瀏覽器向服務器發起請求
- 服務器把公鑰發送給客戶端
- 個人通過證書鏈驗證公鑰的可靠性
- 企業:拿到私鑰;個人:拿到公鑰?開始愉快的交流(並不是這樣的)
- 個人生成一串用於對稱加密的key,用公鑰加密以后發送給企業,然后雙方用這個key進行對稱加密交流
- 因為前面提到了,對稱加密簡單效率高,非對稱加密速度慢效率低
- 用非對稱加密解決對稱加密的痛點,然后使用對稱加密就可以了
- 流程如下
4.2 補充知識點:數字簽名
服務器發給客戶端的公鑰,萬一被中間人修改了呢?
解決辦法,使用數字簽名:
- 將公鑰進行HASH,再用私鑰進行加密得到密文,把密文和公鑰一起發送給客戶端
- 客戶端拿到公鑰后,會用相同的HASH算法重新算一遍,得到一個HASH值hash1
- 用公鑰解密數字簽名得到HASH值hash2
- 如果hash1等於hash2就證明這個公鑰是沒有被中間人修改的
- 即使中間人修改了公鑰的內容,他因為沒有私鑰可以重新生成數字簽名,所以無法造假