前文學習:
一、二、三
學習來源網站 :
極客時間
TLS
目的:身份驗證、保密性、完整性
解決問題:
Record記錄協議——對稱加密
Handshake握手協議———1.驗證通訊雙方身份 2.交換加解密安全套件 3.協商加密參數
有密鑰交換算法、身份驗證算法、對稱加密算法-強度-工作模式、簽名hash算法
對稱加密算法
原理:對稱加密之所以能實現一把密鑰既能實現加密也能實現解密,是因為XOR異或運算(不同為1相同為0)這種運算速度很快。
這就要求密鑰和明文長度需要一至所以需要使用padding(填充)——Block cipher分組加密:將明文分為多個等長的Block模塊,對每 個模塊分別加解密,因此最后一個明文Block模塊長度不足時,需要填充
填充方式:位填充:以Bit位為單位填充/字節填充:以字節為單位填充
分組工作模式
允許使用同一個分組密碼密鑰對多于一塊的數據進行加密,并且保證其安全性
ECB模式:直接將明文分解為多塊,對每個快獨立加密————無法隱藏數據特征
CBC模式:每個明文塊與前一個密文進行異或后,再進行加密————加密過程串行化(多個CPU無法同時進行)
CTR模式:通過遞增一個加密計數器已產生連續的密鑰流————不能提供密文消息完整性校驗,所以需要利用hash函數去檢驗完整性
hash函數
不同的輸入經過hash函數之后會得到不同的值(這些值都是較短的、很難相同)
所以能利用消息中的MAC(Hash之后的值)去驗證完整性————即傳送方通過Hash算法將消息轉化為MAC值通過密鑰的異或操作生成最終MAC,傳送給接收方不僅有消息還有最終MAC值,接收方通過密鑰和傳輸過來的消息進行相同操作對比傳輸過來的MAC和生成的MAC是否相同即可。
AES加密算法
是比利時密碼學所設計,又稱Rijndael加密算法
填充算法:PKCS7
常用分組工作模式:GCM
步驟:
把明文按照128bit(16字節)拆分成若干明文塊,每個明文塊是4*4矩陣
按照選擇的填充方式來填充最后一個明文塊
每一個明文塊利用AED加密器和密鑰,加密成密文塊
拼接所有的密文塊,成為最終的密文結果
十輪加密
分為三類:
1.初始輪
AddRoundKey 輪密鑰加
2.普通輪
AddRoundKey 輪密鑰加
SubBytes 字節替代
ShiftRows 行移位
MixColumns 列混合
3.最終輪
SubBytes 字節代替
ShiftRows 行移位
AddRoundKey 輪密鑰加
詳細解讀里面的加密
AddRoundKey 步驟:
矩陣中的每一個字節都與該次回合密鑰做XOR運算;每個子密鑰由密鑰生成方案產生
密鑰K是經過密鑰擴展算法,密鑰擴展就是把我們每一輪的密鑰所使用的密鑰擴展成為下一輪使用的密鑰
,比如說先把每4個字節構成一個字,把它構成一個4字節的數組再基于G函數和異或生成下一輪密鑰。
SubBytes 步驟
透過一個非線性的替換函數,用查找表的方式把每個字節都替換成對應的字節
避免了簡單代數性質的攻擊,即提供一個S沙盒,將a每個都通過S找到索引值放入SubBytes后替換
S盒子就是一個二維表格,有行和列
ShiftRows 步驟
把矩陣中的每個橫列進行循環式移位
第一行不變,第二行循環左移1個字節,第三行循環左移2個字節,第四行循環左移3個字節
MixColumns 步驟
將左邊行舉證和列出的另一個矩陣進行相乘的出另一個矩陣
解密反之
非對稱加密
每個參與方都有一對密鑰
公鑰——向對方公開
私鑰——僅自己使用
RSA算法公私鑰產生——隨機選擇兩個不相等的質數p和q
計算p和q的乘機n(明文小于n)
計算n的歐拉函數v=x(n)
隨機選擇一個整數k
1<k<v且k與v互為質數
計算k對于v的模反元素d
公鑰:(k,n)
私鑰:(d,n)
openssl
openssl genrsa -out 導出文件
生成私鑰
openssl rsa -in 導出文件 -pubout -out 公鑰生成
生成公鑰
所以使用公鑰去加密、私鑰去解密
openssl rsautl -encrypt -in 需要加密文件 -inkey 公鑰 -out 到處加密后的文件
私鑰解密
openssl rsautl -decrypt -in 加密后的文件 -inkey 私鑰 -out 解密后的文件
非對成加密應用:數字簽名
基于私鑰加密,只能使用公鑰解密:起到身份認證的作用
公鑰管理:Public Key Infrastructure (PKI)公鑰基礎設施
由CA數字證書認證機構將用戶個人身份與公開密鑰關聯在一起
公鑰數字證書組成:CA信息、公鑰用戶信息、公鑰、權威機構的簽字、有效期——因為用戶通過私鑰加密所以就知道是誰發出來的,一查CA機構就知道了
PKI用戶——向CA注冊公鑰的用戶、希望使用已注冊用戶
簽名與驗簽流程
現將用戶個人信息Data利用Hash函數進行加密生成Hash值,再把Hash值利用CA機構的私鑰進行加密的到秘文,再把秘文、用戶信息、證書、網站的公鑰打包為證書
驗簽過程 把證書提取出兩部分,一為原始數據和用戶信息,將這個使用hash加密后的到一個值。第二個為證書傳過來的已經公鑰加密的值,讓他使用CA機構的私鑰去解密確認他的信用
如果這兩個相同那就是可信任網站
DH密鑰交換協議
前向保密性:前向保密性保證了過去的通信即使在將來密鑰泄露的情況下仍然是安全的。
可以讓雙方在完全沒有任何預先信息的條件下通過不安全信道創建起一個密鑰。
首先客戶端發送請求給服務端,服務端生成一對密鑰1,公鑰1返回給客戶端,私鑰留給自己。然后客戶端再生成一對密鑰2,私鑰2依舊留給自己公鑰2給服務端,之后這兩種密鑰通過通過一種算法組成的就是完全,這就是對稱加密算法的交換性。
如果存在中間人偽造攻擊就可以使用身份驗證去解決這個問題
TLS運作方式
客戶端發送請求尋找安全套件,服務端選擇安全套件并且發送證書和DH加密后的公鑰同時返回給客戶端。同時客戶端返回一個公鑰給服務器,兩邊同時證書交換
TLS1.3
只需要1次RTT就可以完成了
Session緩存的手段減少RTT次數,因為服務器存儲的有sessionID并且沒有過期,那么就可以繼續使用上次點的加密密鑰,這樣就可減少傳輸密鑰所需要的RTT時間
問題:多個服務器如何共享SessionID,以及SessionId存放的時間應該是多久呢
解決辦法:Session ticket
每臺session中不再需要存放session的信息,而是基于獨有的密碼(整個服務器分享的密碼)
客戶端基于Session ticker加密后發給服務器集群,服務器是共享這個密碼的解密后就獲取上次連接后的密鑰就可以繼續使用上次連接的密鑰
重放攻擊:中間惡意服務器利用原本正確的報文重新發給對應的服務器,從而改變服務器狀態————解決辦法協定過期時間
量子通訊協議
OTP的絕對安全性:
密鑰隨機生成、密鑰的長度大于明文長度、相同的密鑰只能使用一次
如何傳遞密鑰————QKD量子密鑰分發
基于量子力學中:任何對量子系統的測量都會對系統產生干擾
QKD:如果有第三方試圖竊聽密碼,則通信雙方便會察覺