密碼學專題 SSL協議

  • SSL協議為不同的高層協議(http、FTP)提供安全服務
  • SSL握手協議、SSL修改密文協議和SSL告警協議的目的是為了 管理 和SSL相關的密文交換
  • 連接:兩臺主機之間提供特定類型的數據傳輸,是點對點的關系;連接是短暫的,每一個連接都會和一個會話相互關聯
  • 會話:是指客戶和服務器之間的關聯,會話是通過握手協議創建的;會話是加密安全參數的一個集合,包含 加密算法、臨時的加密密鑰等信息;會話可以為多個連接所共享,就可以避免為每個連接建立都要進行安全參數的協商帶來的昂貴的時間代價。如果服務器和客戶端之間建立了多個安全的SSL連接,這些連接可以共享一個會話,也可以共享不同的會話。
  • SSL協議提供? 機密性和報文完整性兩種服務

SSL握手協議

  • 握手協議是客戶機和服務器用SSL連接通信時使用的第一個子協議,握手協議包括客戶機與服務器之間的一系列消息。SSL中最復雜的協議就是握手協議。該協議允許服務器和客戶機相互驗證,協商加密和MAC算法以及保密密鑰,用來保護在SSL記錄中發送的數據。握手協議是在應用程序的數據傳輸之前使用的。
  • 每個握手協議包含以下3個字段
    • Type:表示10種消息類型之一
    • Length:表示消息長度字節數
    • Content:與消息相關的參數

SSL的流程(整體)

  • 第一步,客戶端給出協議版本號、一個客戶端生成的隨機數(Client random),以及客戶端支持的加密方法。
  • 第二步,服務器 確認雙方使用的加密方法,并給出數字證書、以及一個服務器生成的隨機數(Server random)。
  • 第三步,客戶端確認數字證書有效,然后生成一個新的隨機數(Premaster secret),并使用數字證書中的公鑰,加密這個隨機數,發給服務器。
  • 第四步,服務器使用自己的私鑰,獲取客戶端發來的隨機數(即Premaster secret)。
  • 第五步,客戶端和服務器根據約定的加密方法,使用前面的三個隨機數,生成"對話密鑰"(session key),用來會話密鑰對稱加密接下來通信過程中的對話。

SSL的流程(拆分)

1.1 建立安全能力

  • SSL握手的第一階段啟動邏輯連接,建立這個連接的安全能力。首先客戶機向服務器發出client hello消息并等待服務器響應,隨后服務器向客戶機返回server hello消息,對client hello消息中的信息進行確認。
  • Client hello消息包括Version,Random,Session id,Cipher suite,Compression method等信息。

ClientHello 客戶發送CilentHello信息,包含如下內容:

  • (1)客戶端可以支持的SSL最高版本號
  • (2)一個用于生成主秘密的32字節的隨機數。(等會介紹主秘密是什么)
  • (3)一個確定會話的會話ID。
  • (4)一個客戶端可以支持的密碼套件列表。
  • (5)一個客戶端可以支持的壓縮算法列表。

補充

  • ?密碼套件格式:每個套件都以“SSL”開頭,緊跟著的是密鑰交換算法。用“With”這個詞把密鑰交換算法、加密算法、散列算法分開,例如SSL_DHE_RSA_WITH_DES_CBC_SHA,表示把DHE_RSA(帶有RSA數字簽名的暫時Diffie-HellMan)定義為密鑰交換算法;
  • 把DES_CBC定義為加密算法;把SHA定義為散列算法。

?ServerHello 服務器用ServerHello信息應答客戶,包括下列內容

  • (1)一個SSL版本號。取客戶端支持的最高版本號和服務端支持的最高版本號中的較低者。
  • (2)一個用于生成主秘密的32字節的隨機數。(客戶端一個、服務端一個)
  • (3)會話ID
  • (4)從客戶端的密碼套件列表中選擇的一個密碼套件
  • (5)從客戶端的壓縮方法的列表中選擇的壓縮方法

這個階段之后,客戶端服務端知道了下列內容:

  • (1)SSL版本
  • (2)密鑰交換、信息驗證和加密算法
  • (3)壓縮方法
  • (4)有關密鑰生成的兩個隨機數。

1.2 服務器鑒別與密鑰交換

?服務器啟動SSL握手第2階段,是本階段所有消息的唯一發送方,客戶機是所有消息的唯一接收方。該階段分為4步:
(a)證書:服務器將數字證書和到根CA整個鏈發給客戶端,使客戶端能用服務器證書中的服務器公鑰認證服務器。
(b)服務器密鑰交換(可選):這里視密鑰交換算法而定
(c)證書請求:服務端可能會要求客戶自身進行驗證。
(d)服務器握手完成:第二階段的結束,第三階段開始的信號

補充

  • 這里重點介紹一下服務端的驗證和密鑰交換。這個階段的前面的(a)證書 和(b)服務器密鑰交換是基于密鑰交換方法的。而在SSL中密鑰交換算法有6種:無效(沒有密鑰交換)、RSA、匿名Diffie-Hellman、暫時Diffie-Hellman、固定Diffie-Hellman、Fortezza。
  • 在階段1過程客戶端與服務端協商的過程中已經確定使哪種密鑰交換算法。
  • 如果協商過程中確定使用RSA交換密鑰,那么過程如下圖:

  • ?這個方法中,服務器在它的第一個信息中,發送了RSA加密/解密公鑰證書。不過,因為預備主秘密是由客戶端在下一個階段生成并發送的,所以第二個信息是空的。注意,公鑰證書會進行從服務器到客戶端的驗證。當服務器收到預備主秘密時,它使用私鑰進行解密。服務端擁有私鑰是一個證據,可以證明服務器是一個它在第一個信息發送的公鑰證書中要求的實體。

1.3 客戶機鑒別與密鑰交換:

客戶機啟動SSL握手第3階段,是本階段所有消息的唯一發送方,服務器是所有消息的唯一接收方。該階段分為3步:

  • (a)證書(可選):為了對服務器證明自身,客戶要發送一個證書信息,這是可選的,在IIS中可以配置強制客戶端證書認證。
  • (b)客戶機密鑰交換(Pre-master-secret):這里客戶端將預備主密鑰發送給服務端,注意這里會使用服務端的公鑰進行加密。
  • (c)證書驗證(可選),對預備秘密和隨機數進行簽名,證明擁有(a)證書的公鑰。

?1.4 完成

  • 客戶機啟動SSL握手第4階段,使服務器結束。該階段分為4步,前2個消息來自客戶機,后2個消息來自服務器。

密鑰生成的過程

  • 這樣握手協議完成,下面看下什么是預備主密鑰,主密鑰是怎么生成的。為了保證信息的完整性和機密性,SSL需要有六個加密秘密:四個密鑰和兩個IV。為了信息的可信性,客戶端需要一個密鑰(HMAC),為了加密要有一個密鑰,為了分組加密要一個IV,服務也是如此。SSL需要的密鑰是單向的,不同于那些在其他方向的密鑰。如果在一個方向上有攻擊,這種攻擊在其他方向是沒影響的。生成過程如下:

記錄協議?

  • 記錄協議在客戶機和服務器握手成功后使用,即客戶機和服務器鑒別對方和確定安全信息交換使用的算法后,進入SSL記錄協議,記錄協議向SSL連接提供兩個服務:
  • (1)保密性:使用握手協議定義的秘密密鑰實現
  • (2)完整性:握手協議定義了MAC,用于保證消息完整性

記錄協議的過程:

3、警報協議

  • 客戶機和服務器發現錯誤時,向對方發送一個警報消息。如果是致命錯誤,則算法立即關閉SSL連接,雙方還會先刪除相關的會話號,秘密和密鑰。每個警報消息共2個字節,第1個字節表示錯誤類型,如果是警報,則值為1,如果是致命錯誤,則值為2;第2個字節制定實際錯誤類型。

總結

  • SSL中,使用握手協議協商加密和MAC算法以及保密密鑰?,使用握手協議對交換的數據進行加密和簽名,使用警報協議定義數據傳輸過程中,出現問題如何去解決。

SSL/TLS握手過程可以分成兩種類型:

  • SSL/TLS 雙向認證,就是雙方都會互相認證,也就是兩者之間將會交換證書。
  • SSL/TLS 單向認證,客戶端會認證服務器端身份,而服務器端不會去對客戶端身份進行驗證。

注意事項

  • 生成對話密鑰一共需要三個隨機數。(客戶端生成隨機數、服務器生成隨機數、客戶端使用服務器公鑰加密的隨機數);考慮到中間人攻擊,中間人可以獲得客戶端生成隨機數、服務器生成隨機數和對稱加密使用的算法,安全性完全依靠第三個加密的隨機數(客戶端使用服務器公鑰加密的隨機數),盡管只要服務器的公鑰足夠長,破解的難度很大。因此部分 算法使用?DH密鑰交換算法 ,參見 參考鏈接;不需要使用第三個參數,僅僅根據 先前傳遞的隨機數 計算這個 隨機數
  • 握手之后的對話使用"對話密鑰"加密(對稱加密),服務器的公鑰和私鑰只用于加密和解密"對話密鑰"(非對稱加密),無其他作用。
  • 服務器公鑰放在服務器的數字證書之中。

  • ?第三步和第四步由傳遞Premaster secret變成了傳遞DH算法所需的參數,然后雙方各自算出Premaster secret。這樣就提高了安全性

Session恢復

  • 如果出于某種原因,對話中斷,就需要重新握手。這時有兩種方法可以恢復原來的session:一種叫做session ID,另一種叫做session ticket。

session ID

  • session ID的思想很簡單,就是每一次對話都有一個編號(session ID)。如果對話中斷,下次重連的時候,只要客戶端給出這個編號,且服務器有這個編號的記錄,雙方就可以重新使用已有的"對話密鑰",而不必重新生成一把。
  • session ID是目前所有瀏覽器都支持的方法,但是它的缺點在于session ID往往只保留在一臺服務器上。所以,如果客戶端的請求發到另一臺服務器,就無法恢復對話。session ticket就是為了解決這個問題而誕生的,目前只有Firefox和Chrome瀏覽器支持。

session ticket?

  • 客戶端不再發送session ID,而是發送一個服務器在上一次對話中發送過來的session ticket。這個session ticket是加密的,只有服務器才能解密,其中包括本次對話的主要信息,比如對話密鑰和加密方法。當服務器收到session ticket以后,解密后就不必重新生成對話密鑰了

??

參考鏈接

  • SSL握手過程詳解 - 簡書
  • 使用wireshark觀察SSL/TLS握手過程--雙向認證/單向認證_NowOrNever-CSDN博客
  • 圖解SSL/TLS協議_NowOrNever-CSDN博客
  • DH密鑰交換算法_NowOrNever-CSDN博客_dh算法
  • SSL協議詳解 - 麒麟 - 博客園

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446350.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446350.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1709 ltsb 內存占用_深挖Python的內存管理機制:垃圾回收機制

Python 程序在運行時,需要在內存中開辟出一塊空間,用于存放運行時產生的臨時變量,計算完成后,再將結果輸出到永久性存儲器中。但是當數據量過大,或者內存空間管理不善,就很容易出現內存溢出的情況&#xff…

Python學習11 繼承

面向對象三大特征 繼承 Python多繼承,默認從左到右依次繼承,使用,隔開 默認繼承object類 #繼承了object類,可以省略 class m:def eat(self):print(m)class m2(object):def eat(self):print(m)繼承的注意事項 class A(object):de…

密碼學 專題 DH密鑰交換算法

注意事項: SSL中密鑰交換算法有6種:無效(沒有密鑰交換)、RSA、匿名Diffie-Hellman、暫時Diffie-Hellman、固定Diffie-Hellman、Fortezza生成對話密鑰一共需要三個隨機數。(客戶端生成隨機數、服務器生成隨機數、客戶端使用服務器…

qq瀏覽器網頁翻譯_iOS 14中直接在Safari瀏覽器中翻譯網頁的方法!

在 iOS 14 中,蘋果推出了「翻譯」的應用程序,可以實時翻譯數種不同的語言。同時,Safari 瀏覽器也新增了翻譯功能。借助新的網頁翻譯功能,Safari 會根據設備的首選語言列表自動檢測書否需要翻譯訪問的網頁內容,以便繼續…

java 輸出三位數和n位數的每一位的數

思路 規律:先除以/10^(n-1)再%10 三位數:n 個位:n/1%10 十位:n/10%100 百位:n/100%10 n位數:n 個位:n/10^0%10 十位:n/10^1%10 百位:n/10^2%10n位:n/10^(n…

密碼學專題 相關概念的解析 對稱算法|算法的安全性|非對稱算法存在的問題|單向散列函數|數字簽名的弊端|密鑰交換

對稱加密算法 對稱加密算法又可以分成流加密算法和塊加密 算法。流加密算法又稱為序列加密算法或序列密碼,它每次只對明文中的單個位或單個字節 進行加密操作。這種算法的優點是能夠實時進行數據傳輸和解密,缺點是抗攻擊能力比 較弱。塊加密算法又稱為分…

java 交換兩個數的值(臨時變量,加減,異或)

臨時變量 開發中一般使用此方式 加減 第二種寫法: //3.使用加減d1d1d2;d2d1-d2;d1d1-d2;System.out.println("d1"d1"\td2"d2);異或(位運算符) 原理 ^異或:相同為0,不同為1 總代碼 class ExchangeNumber {public st…

ipython安裝-IPython的安裝及問題解決

IPython是python的一個第三方庫,本來使用pip(類似于linux的yum)工具是很容易安裝的,但是因為版本原因有時會出些問題,比如2.7.x版本的不能安裝IPython的最新版本,會報錯: 報錯如下: [rootiZ2ze7qh6q0di3qkv…

51單片機下載完程序后不亮_程序如何下載到單片機中?單片機常用的四種燒寫程序方式介紹...

單片機是一種可編程控制器,搭好硬件電路后,可以利用程序實現很多非常復雜的邏輯功能,與純硬件電路相比,簡化了硬件外圍的設計、方便了邏輯的設計、豐富了邏輯的輸出。不同廠家的單片機需要不同編程IDE來實現編程。在學習單片機之前…

java 使用三元運算符和if-else獲取兩個和三個數中的最大值

三元運算符格式 三元運算符:獲取兩個數中最大值 三元運算符:獲取三個數中最大值 三元運算符:總代碼 //案例1:獲取兩個數中最大的數int num178;int num256;int max1(num1>num2)?num1:num2;System.out.println("max1"max1);//max178//案例2:…

密碼學專題 鑒別協議|實際應用的混合協議

鑒別是指確定一個人的身份,即確定一個人是否是他所宣稱的身份 基于口令的鑒別協議 口令是最常用和最常見的鑒別協議。當登錄一臺重要的計算機時,它會要求輸入用戶 名和密碼,用戶名代表你的身份,口令起鑒別作用,如果你…

如何用texstudio下載ctex_公眾號素材庫視頻如何下載,用這種方法就可以哦

隨著微信的不斷崛起,它現在不僅僅是一個交流軟件還包含著很多功能,其中里面就有各種微信公眾號,我們可以在公眾號上找到許多有用的視頻,今天拓途數據就告訴大家公眾號素材庫視頻如何下載吧。 如何下載微信公眾號里的視頻文件 復制…

java 進制轉換 十進制轉二,八,十六進制

十進制轉其他進制 因為在java中位運算符是直接對數值的二進制數進行操作的 并且 寫的是二進制數在輸出和操作時是以十進制數的形式; 所以十進制轉二,八,十六進制;就已經實現了二進制,八進制,十進制&#x…

密碼學專題 密鑰生成|分組加密的模式 ECB|CBC|CFB|OFB

密鑰生成 如何安全地生成密鑰。即如何生成可信任的密鑰,保證用戶得到的密鑰是安全的, 生成密鑰的機器或程序是可信的。如何生成安全的密鑰。安全的密鑰沒有統一準確的定義,但一般來說是指密鑰抗 猜測和抗窮舉等針對密鑰攻擊的能力。涉及密鑰…

java 狗的年齡轉換為對應的人的年齡

題目 我家的狗5歲了,5歲的狗相當于人類多大呢? 其實,狗的前兩年每 一年相當于人類的10.5歲,之后每增加一年就增加四歲。 那么5歲的狗相當于人類多少年齡呢?應該是:10.5 10.5 4 4 4 33歲。 編寫一個程序…

excel高級篩選怎么用_Excel表格中高級篩選的優點以及常用方法介紹

在Excel表格中普通的數據篩選只能滿足一些基本的篩選要求,這篇文章為朋友們總結一下高級篩選的優點以及常用方法。一.與普通篩選相比,高級篩選可以使用比較運算符。在下圖中要篩選性別為男并且評分大于90的人員。如果使用普通篩選需要一個個的勾選成績大…

STL源碼剖析 第二次溫習 細節審核

臨時對象的產生 臨時對象也叫做 無名對象,(使用pass by value的方式會引發copy的操作,于是產生一個臨時的對象),造成效率的負擔,但是可以可以制造一些臨時對象在型別的后面 直接加上() 并可以指定初始數值,相當于調用…

java 彩票游戲

題目 Math.random()獲取隨機數 Math.random()返回的是一個[0.0,1.0)的doule類型的數 所以,獲取0-9:(int)Math.random()*10–> [0,10) 獲取0-10:(int)Math.random()*101–> [0,11) 獲取10-99:(int)Math.random()9010–> […

python異常處理_Python入門 斷言與異常處理

一、斷言斷言,可以理解為判斷是否斷開的預言。assert 表達式 , 描述表達式為我們的預期結果,當表達式的結果為False時,拋出 AssertionError 異常,如無異常捕獲程序遇到異常時直接結束運行。反之,表達式結果為True 程序…

C++ 左值和右值 的學習

引用是一個變量,它引用其他變量的內存位置 int x 34; int &lRef x; 標識符 IRef 就是一個引用。在聲明中,引用是通過 & 來指示的,出現在類型與變量的標識符之間,這種類型的引用稱為左值引用左值看作是一個關聯了名稱的…