目錄
- 一、SSL 與 TLS
- 二、從網路協議的角度理解 HTTPS
- 三、從密碼學的角度理解 HTTPS
- 1.TLS 作業流程
- 2.密碼基礎
- 1)偽亂數生成器
- 2)訊息認證碼
- 3)數字簽名
- 4)公鑰密碼
- 5)證書
- 6)密碼小結
- 三、TLS 總結
- 四、RSA 簡單示例
一、SSL 與 TLS
SSL:(Secure Socket Layer) 安全套接層,于1994年由網景公司設計,并于 1995 年發布了 3.0 版本
TLS:(Transport Layer Security)傳輸層安全性協議,是 IETF 在 SSL3.0 的基礎上設計的協議以下全部使用 TLS 來表示
二、從網路協議的角度理解 HTTPS
HTTP:HyperText Transfer Protocol超文本傳輸協議
HTTPS:Hypertext Transfer Protocol Secure超文本傳輸安全協議
TLS:位于 HTTP 和 TCP 之間的協議,其內部有TLS握手協議、TLS記錄協議
HTTPS 經由 HTTP 進行通信,但利用 TLS 來保證安全,即 HTTPS = HTTP + TLS
參考資料:《Java中高級核心知識全面決議》
有想要獲取這份學習資料的同學可以點擊這里免費獲取
三、從密碼學的角度理解 HTTPS
HTTPS 使用 TLS 保證安全,這里的“安全”分兩部分,一是傳輸內容加密、二是服務端的身份認證
1.TLS 作業流程
此為服務端單向認證,還有客戶端/服務端雙向認證,流程類似,只不過客戶端也有自己的證書,并發送給服務器進行驗證
2.密碼基礎
1)偽亂數生成器
為什么叫偽亂數,因為沒有真正意義上的亂數,具體可以參考Random/TheadLocalRandom它的主要作用在于生成對稱密碼的秘鑰、用于公鑰密碼生成秘鑰對
2)訊息認證碼
訊息認證碼主要用于驗證訊息的完整性與訊息的認證,其中訊息的認證指“訊息來自正確的發送者”
訊息認證碼用于驗證和認證,而不是加密
1.發送者與接收者事先共享秘鑰
2.發送者根據發送訊息計算 MAC 值
3.發送者發送訊息和 MAC 值
4.接收者根據接收到的訊息計算 MAC 值
5.接收者根據自己計算的 MAC 值與收到的 MAC 對比
6.如果對比成功,說明訊息完整,并來自與正確的發送者
3)數字簽名
訊息認證碼的缺點在于無法防止否認,因為共享秘鑰被 client、server 兩端擁有,server可以偽造client發送給自己的訊息(自己給自己發送訊息),為了解決這個問題,我們需要它們有各自的秘鑰不被第二個知曉(這樣也解決了共享秘鑰的配送問題)
數字簽名和訊息認證碼都不是為了加密
可以將單向散列函式獲取散列值的程序理解為使用 md5 摘要演算法獲取摘要的程序
使用自己的私鑰對自己所認可的訊息生成一個該訊息專屬的簽名,這就是數字簽名,表明我承認該訊息來自自己
注意:私鑰用于加簽,公鑰用于解簽,每個人都可以解簽,查看訊息的歸屬人
4)公鑰密碼
公鑰密碼也叫非對稱密碼,由公鑰和私鑰組成,它是最開始是為了解決秘鑰的配送傳輸安全問題,即,我們不配送私鑰,只配送公鑰,私鑰由本人保管
它與數字簽名相反,公鑰密碼的私鑰用于解密、公鑰用于加密,每個人都可以用別人的公鑰加密,但只有對應的私鑰才能解開密文
client:明文 + 公鑰 = 密文
server:密文 + 私鑰 = 明文
注意:公鑰用于加密,私鑰用于解密,只有私鑰的歸屬者,才能查看訊息的真正內容
5)證書
證書:全稱公鑰證書加粗樣式(Public-Key Certificate, PKC),里面保存著歸屬者的基本資訊,以及證書過期時間、歸屬者的公鑰,并由認證機構(Certification Authority, CA)施加數字簽名,表明,某個認證機構認定該公鑰的確屬于此人
想象這個場景:你想在支付寶頁面交易,你需要支付寶的公鑰進行加密通信,于是你從百度上搜索關鍵字“支付寶公鑰”,你獲得了支什寶的公鑰,這個時候,支什寶通過中間人攻擊,讓你訪問到了他們支什寶的頁面,最后你在這個支什寶頁面完美的使用了支什寶的公鑰完成了與支什寶的交易
在上面的場景中,你可以理解支付寶證書就是由支付寶的公鑰、和給支付寶頒發證書的企業的數字簽名組成
任何人都可以給自己或別人的公鑰添加自己的數字簽名,表明:我拿我的尊嚴擔保,我的公鑰/別人的公鑰是真的,至于信不信那是另一回事了
6)密碼小結

三、TLS 總結
TLS 是一系列密碼工具的框架,作為框架,它也是非常的靈活,體現在每個工具套件它都可以替換,即:客戶端與服務端之間協商密碼套件,從而更難的被攻破,例如使用不同方式的對稱密碼,或者公鑰密碼、數字簽名生成方式、單向散列函式技術的替換等
四、RSA 簡單示例
RSA 是一種公鑰密碼演算法,我們簡單的走一遍它的加密解密程序
加密演算法:密文 = (明文^E) mod N,其中公鑰為{E,N},即”求明文的E次方的對 N 的余數“
解密演算法:明文 = (密文^D) mod N,其中秘鑰為{D,N},即”求密文的D次方的對 N 的余數“
例:我們已知公鑰為{5,323},私鑰為{29,323},明文為300,請寫出加密和解密的程序:
加密:密文 = 123 ^ 5 mod 323 = 225
解密:明文 = 225 ^ 29 mod 323 = [[(225 ^ 5) mod 323] * [(225 ^ 5) mod 323] * [(225 ^ 5) mod 323] * [(225 ^ 5) mod 323] * [(225 ^ 5) mod 323] * [(225 ^ 4) mod 323]] mod 323 = (4 * 4 * 4 * 4 * 4 * 290) mod 323 = 123
參考資料:《Java中高級核心知識全面決議》
有想要獲取這份學習資料的同學可以點擊這里免費獲取
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/236655.html
標籤:區塊鏈
上一篇:《The swirlds hashgraph consensus algorithm: Fair, fast, byzantine fault tolerance》Hashgraph論文的學習
下一篇:新手如何玩好位元幣合約?
