1. 程式人生 > 其它 >密碼套件:密碼,演算法和協商安全設定(一)

密碼套件:密碼,演算法和協商安全設定(一)

如果我們在與SSL / TLS和HTTPS加密的互動時間足夠長,那麼我們將會遇到“密碼套件”這一個片語。聽起來像一個某種服務套餐,但確實密碼套件在我們通過Internet建立的每個HTTPS連線中都起著至關重要的作用。

那麼,什麼是密碼套件?

密碼是一種演算法,密碼演算法是密碼協議的基礎,用於加密和解密的數學函式。更具體地說,密碼演算法是執行密碼功能的一組步驟-可以是加密,解密或數字簽名。 隨著科技的迅猛發展,密碼變得更加複雜,但其背後的邏輯一直保持不變。今天,我們討論SSL / TLS密碼套件,關於它們的各個部分,我們來看TLS 1.2和TLS 1.3之間的變化。

密碼套件的背景

我們說密碼實際上只是一種演算法,或者是一組用於執行特定數學功能的步驟:可以是加密、解密或者數字簽名。密碼以數學為基礎,即使是Caesar(凱撒)的原始移位密碼也需要向前計算字母中指定數量的空格以加密某些內容。
我們下面可以使用凱撒密碼來解釋一些基本概念,這些基本概念在以後進入現代密碼套件時會非常有用。如今是數字時代,那些原始的未加密資料被稱為純文字,它很容易以原始格式被讀取。在執行加密過程之後,它就成為一段密文,並且在正常情況下,沒有私有金鑰的任何人都無法讀取。

金鑰與演算法

加密是通過金鑰執行的,金鑰和演算法如何組合在一起很重要。 所使用的演算法或密碼都是這樣,它必須用來加密明文的一系列步驟。 根據密碼系統,演算法中的值或演算法本身得出的值都是金鑰。 我們可以這樣思考:演算法是給定密碼系統使用的一般原理或規則,金鑰是實際執行功能的物件。

數學原理

我們回到用凱撒密碼演算法為例加以說明。在凱撒密碼中,實際演算法為:
下面我們分析一下每個元件。 在凱撒密碼中,關鍵只是你決定移動字母的空格數。因此,在下面的示例中,關鍵值為3。我們將所有內容向前移動三個空格。 現在讓我們新增模數。模數運算在達到模數(基本上是行的末尾,即數字上限)之後迴繞,但是你需要考慮一下。對於字母,模數顯然為26。有26個字母,因此,如果要向前移動三個空格,則必須環繞並再次從1(或A)開始。因此,在這種情況下,等式為B =(Y + 3)(mod 26)。

現代密碼和密碼套件

這些數學概念簡直是越發展越複雜,現在就讓我們將對演算法瞭解到的知識應用於SSL / TLS和HTTPS連線之上。
HTTPS連線實際上是一個相當複雜的過程。之前,我們幾篇文章有提到TLS握手。在此過程中,客戶端和伺服器就相互支援的密碼套件達成一致,然後使用所選的密碼套件來協商安全連線。 使握手如此複雜的部分原因在於,它利用了幾種不同的加密功能來實現HTTPS連線。在握手期間,客戶端和伺服器將使用:
  • 金鑰交換演算法
  • 批量加密演算法
  • 數字簽名方案
  • 雜湊/ MAC演算法
這些密碼在不同的地方都可以協同工作,以執行身份驗證,金鑰生成和交換以及校驗和確保完整性。 為了確定使用哪種特定演算法,客戶端和伺服器首先確定要使用的密碼套件。密碼套件是這些演算法的集合,可以一起使用以執行握手和隨後的加密/解密。在連線開始時,雙方共享受支援密碼套件的列表,然後確定最安全,相互支援的套件。 現在,數學變得更復雜了……但是基本概念仍然相同。 有37個TLS 1.2密碼和5個TLS 1.3密碼。理解它們的不同部分是理解HTTPS連線和SSL / TLS本身的關鍵。讓我們從TLS 1.2(該協議的更常見的版本)的概述開始,然後我們將討論TLS 1.3的改進之處。 什麼是TLS 1.2密碼套件? 正如我們在上一節中所述,密碼套件是用於在SSL / TLS握手期間協商安全設定的演算法的組合。客戶端在傳送ClientHello訊息時,將其支援的密碼套件的優列表傳送給服務端。然後,伺服器從客戶端支援的列表中選擇的自己支援的密碼套件在ServerHello中進行響應。 密碼套件的命名組合為:
  • 金鑰交換演算法(RSA,DH,ECDH,DHE,ECDHE,PSK)
  • 認證/數字簽名演算法(RSA,ECDSA,DSA)
  • 批量加密演算法(AES,CHACHA20,Camellia,ARIA)
  • 訊息驗證碼演算法(SHA-256,POLY1305)
例如以下一個密碼套件的示例: 我們為它塗上顏色,以便幫助你區分密碼。 TLS是協議。從ECDHE開始,我們可以看到在握手期間,金鑰將通過臨時的橢圓曲線Diffie Hellman(ECDHE)進行交換。RSA是認證演算法。AES_128_GCM是批量加密演算法:AES以128位金鑰大小執行Galois計數器模式。最後,SHA-256是雜湊演算法。 在TLS 1.2握手期間,它將像這樣進行:
  1. 客戶端和伺服器確定相互支援的密碼套件
  2. 伺服器傳送其證書和公鑰
  3. 客戶驗證證書和數字簽名
  4. 執行金鑰交換功能以生成對稱會話金鑰
  5. 資料開始加密;HMAC用於確保握手不被篡改
TLS 1.2有37種不同的密碼套件可供選擇,而且並不是所有的密碼套件都被認為是安全的。我們可能想知道如何使用近40種不同的密碼套件。有兩個方面。一方面,TLS 1.2已經存在大約10年了,這意味著出現了許多新演算法,而且舊演算法已經被淘汰了。碰巧的是,由於需要四種不同的演算法,並且存在無數種可能性,因此,負責管理所有這些工作的組織IANA(網際網路數字分配機構)必須繼續建立新的密碼組合(即新的密碼套件)。 當然,並非所有演算法都可以這樣很好地配合使用,但是目前使用了37個已批准的TLS 1.2密碼套件已經足夠使用。 下期接著深入地研究TLS 1.2密碼套件的四個不同元件。