密碼學及其應用 —— 對稱加密技術

1. 對稱加密、流加密和塊加密

1.1?對稱加密

????????對稱加密(也稱為密鑰加密)是一種加密方式,其中加密和解密使用相同的密鑰。這種加密方法基于二進制層面的操作,如XOR(異或)、SHIFT(位移)、替代和置換等。對稱加密系統相對較快。接下來,我們將介紹對稱加密的兩個主要類別:流加密和塊加密

1.2 流加密

????????流加密是一種加密方式,其中每個明文字符按時間變化進行轉換,通常是通過與偽隨機數生成器產生的符號進行XOR操作來實現。這種方法的關鍵在于使用專門為加密應用設計的偽隨機數生成器。流加密的例子包括Vernam密碼(一次一密)、A5、RC4、E0等。在這些系統中,每個明文字符 mi 與一個偽隨機字符 si 進行XOR運算以生成密文字符 ci 。即 ci = mi + si ,這里的加號表示XOR操作

1.3?塊加密

????????與流加密不同,塊加密將明文分割成固定大小的塊,然后對每個塊使用時間不變的轉換進行加密。這種方式需要將明文分成一系列的塊,每個塊具有固定的長度,然后使用密鑰對這些塊進行加密。當處理的數據不足以填充完整的塊時,通常需要進行填充。塊加密的常見例子包括DES、3-DES、IDEA、RC5、AES等。

????????總結來說,對稱加密包括流加密和塊加密兩種主要形式,它們都在二進制層面上進行操作,包括XOR、位移、替換和置換等。流加密在時間上變化地對每個字符進行轉換,而塊加密則將數據分成固定大小的塊進行處理。對稱加密由于其加密和解密速度快、實現簡單等優點,在許多加密場景中被廣泛使用。

2.?流加密

????????對稱加密中的流加密是一種加密方法,它對每個明文字符進行變化加密,這種變化隨時間不同而不同。最常見的操作是將明文字符與一個偽隨機生成器產生的符號進行XOR(異或)操作。具體來說,加密過程中,每個明文字符`mi`與一個偽隨機符號`zi`進行XOR操作以生成密文字符`ci`,即`ci = mi + zi`;而在解密過程中,將密文字符`ci`與相同的偽隨機符號`zi`進行XOR操作以還原明文字符`mi`,即`mi = ci + zi`。在這里,“+”表示XOR操作。

2.1 偽隨機數生成器(GPA)

????????流加密的核心部分是偽隨機數生成器(GPA)。這是一種自動機,它能夠從有限數量的符號(稱為種子或"seed")產生一個看似無限且隨機的序列。為了適應加密應用,這種生成器需要滿足特定的要求,特別是要避免那些可能被利用來破解密碼的線性特性。

????????偽隨機數生成器在加密中的作用非常重要,因為它決定了加密強度。如果生成器的輸出可以預測或存在規律,那么加密就容易被破解。因此,為了安全,偽隨機數生成器必須能夠產生高度隨機的輸出,且其輸出序列不應有任何可被利用的規律或重復模式。

????????總的來說,流加密通過將每個明文字符與一個偽隨機序列中的對應字符進行XOR操作來加密信息,這一過程依賴于強大且不可預測的偽隨機數生成器。流加密的安全性在很大程度上取決于這種生成器的隨機性和不可預測性。

2.1.1?偽隨機數生成器(GPA)的特點

????????偽隨機數生成器(GPA)是一種有限狀態自動機,它的特點可以總結如下:

????????狀態空間Q:通常由n位組成的二進制數表示,例如Q={0, 1}^n,這里n代表自動機的狀態位數。
????????狀態轉換函數Φ:這是一個將自動機從當前狀態qt轉換到下一個狀態qt+1的函數,即qt+1 = Φ(qt),其中qt ∈ Q是離散時刻t的狀態。

????????輸出函數f:這是一個將每個狀態映射到輸出符號集合Σ中某個符號的函數,即zt = f(qt),這里的zt是時刻t的輸出符號。

2.2?線性反饋移位寄存器(LFSR)

????????偽隨機數生成器(GPA)一個典型的例子是線性反饋移位寄存器(LFSR)。LFSR通過將寄存器中的位逐個移位,同時根據反饋函數計算并輸入新的位來生成位序列。反饋函數是線性的,通常是通過在特定的點上進行XOR操作來實現的。這些特定的點稱為抽頭(tap)。

????????下圖是一個線性反饋移位寄存器(LFSR),它是一種用于生成偽隨機二進制序列的裝置。

2.2.1 LFSR包含的元素

? ? ? ? a. 一系列的D觸發器(D Flip-Flops),它們用來保存當前的狀態位。

????????b. 每個D觸發器的輸出連接到下一個D觸發器的輸入,形成一個鏈條。

????????c. 最后一個D觸發器的輸出通過一些邏輯運算(通常是XOR操作),再反饋到第一個D觸發器的輸入。

????????d. ak、ak-1、`ak-2`和`ak-3`表示的是當前LFSR中的狀態位,而加號表示的是XOR操作,這種線性結構正是LFSR的名稱由來。

????????在這個系統中,輸出位(即寄存器中的最右邊一位)會根據反饋函數影響下一個狀態,通常通過將一組位進行XOR操作來計算。在圖中,這個過程通過反饋路徑和XOR門(標記為“+”)實現。每個D盒子代表一個寄存器位,它存儲了一個位狀態,并將其傳遞到下一個盒子,實現了位的移動。

2.2.2 線性反饋移位寄存器(LFSR)的基本原理

????????LFSR生成的序列在數學上是線性的,這意味著通過觀察足夠長的輸出序列,可以推斷出生成序列的規則,并預測未來的輸出。因此,盡管LFSR很高效,也容易實現,但是如果直接用于流加密,它的線性特性會使得加密系統容易被破解。

????????在密碼學中,為了強化LFSR生成的序列的隨機性和不可預測性,通常會采取非線性變換的措施,例如將多個LFSR結合,或者在LFSR的基礎上引入非線性函數,從而制造出適用于流加密的偽隨機數生成器。

????????由于其線性結構,LFSR本身并不適合用于流加密。這是因為如果攻擊者可以觀察到足夠的輸出位,就可能通過解線性方程來預測之后的輸出,這樣就破壞了生成器的偽隨機性。為了在加密應用中使用,LFSR通常會被結合非線性元素或者與其他LFSR串聯使用來增加其輸出序列的隨機性和不可預測性。

2.2.3?線性遞推關系

????????線性反饋移位寄存器(LFSR)是一個在硬件和軟件中廣泛使用的結構,用于生成重復模式的序列,這些序列在某些情況下可視為偽隨機的。LFSR 利用線性遞推關系來產生二進制序列。

在數學上,這個線性遞推關系可以表示為:

a_k = \sum_{i=1}^{m} h_i a_{k-i}

????????其中:

?????????a_k是在時間步k產生的位。

????????m是反饋抽頭的數量,它決定了遞推關系的“記憶”長度。

?????????h_i是反饋抽頭的系數,決定了對應位置的位如何影響反饋。

????????在這種結構中,每個新位的值是由前 m個位按照一定規則進行線性組合得到的。這個規則是通過選擇特定的位(即抽頭)并將它們進行XOR運算來實現的。

????????在這個例子中,m = 3表示使用三個反饋抽頭,且系數h_1 = 1, h_2 = 0, h_3 = 1意味著第一個和第三個位將會被用來計算新的位,而第二個位則不會被使用。

????????對于LFSR,如果抽頭系數h_i被恰當選擇,那么寄存器狀態s_k = (a_{k-1}, a_{k-2}, \ldots, a_{k-m})將會周期性地遍歷2^m - 1個可能的非零狀態,因為狀態“全零”是一個陷阱狀態(一旦進入這個狀態,寄存器就會永遠保持零)。這意味著序列(a_k)_{k=0}^{\infty}將會有一個周期2^m - 1,如果m是LFSR的位數。這樣的序列在密碼學和通信系統中非常有用,但它們由于線性的性質而不適用于所有類型的加密需求,因為它們相對較容易被預測和攻擊。因此,它們經常被用作隨機數生成的一個部分,或者通過某種方式被改進以增加非線性,以便用于加密。

2.2.4?通過線性遞歸關系生成二進制序列

????????是的,LFSR(線性反饋移位寄存器)通過線性遞歸關系生成二進制序列。在給定的例子中,對于所有的k \geq m,有:

a_k = \sum_{i=1}^{m} h_i a_{k-i}

????????其中m = 3,抽頭系數h_1 = 1, h_2 = 0, h_3 = 1。這意味著每個新的位a_k是通過取特定的前幾個位(在這個例子中是a_{k-1}a_{k-3})的XOR來生成的。

????????由于LFSR的線性特性,可以使用Berlekamp-Massey算法來分析輸出序列,并且僅需LFSR序列的一個周期就能計算出LFSR的初始狀態和抽頭系數。這種算法非常有效,因為它只需要一個與LFSR狀態位數相同長度的輸出序列。

????????LFSR由于其線性特性,如果直接用于加密,那么在已知明文和密文的情況下,可以使用Berlekamp-Massey算法恢復出密鑰流。這意味著LFSR序列可以被預測,因此,它本身并不適合直接用于加密應用。在密碼學中,通常需要在LFSR的基礎上增加額外的非線性復雜性,或者將它與其他算法結合使用來增強其安全性,以抵御這種類型的已知明文攻擊。

2.3? 同步與異步流加密

????????流加密有兩種類型:同步和異步。

2.3.1?同步流加密?????

????????在同步流加密中,加密數據流與密鑰流是獨立的,加密過程的安全性高度依賴于偽隨機數生成器(GPA)產生密鑰流的質量。以下是同步流加密初始化和加密過程的解釋:

2.3.1.1?同步流加密的初始化

????????在同步流加密中,偽隨機數生成器(GPA)的初始狀態是由密鑰`k`和一個初始化向量`IV`共同決定的。這個過程可以用以下方式表示:

q0 = g(k, IV)

????????其中,`q0`是GPA的初始狀態,k是保持不變的會話密鑰,IV是初始化向量,通常是公開傳輸的,它可以頻繁變化,比如每次通信或每個數據包都不同,以保證即使密鑰不變,每次加密的輸出也應該不同,從而提供更高的安全性。

2.3.1.2?同步流加密

????????在同步流加密中,GPA的狀態僅依賴于其內部狀態,而與明文信息無關。狀態的轉換由狀態轉換函數Φ定義:

qt = Φ(qt?1)

????????并且輸出函數`f`定義了在任何給定時刻`t`的輸出`zt`:

zt = f(qt)

????????在同步流加密中,明文不會直接影響密鑰流的生成。而是,明文會與GPA生成的密鑰流同步進行XOR操作以產生密文。同步流加密的一個重要屬性是,如果密鑰流未泄露,且IV每次都是唯一的,那么即使攻擊者知道部分明文,也無法推斷出剩余的明文或者密鑰流。這是因為同步流加密中密鑰流的生成完全獨立于明文信息。

????????因此,在同步流加密中,如果發送者和接收者的GPA的狀態能夠保持同步,那么接收者就能夠使用相同的密鑰流解密密文,恢復出原始的明文信息。這種方法的安全性在很大程度上取決于GPA的質量以及IV的正確使用和管理。

2.3.1.3?同步流加密的工作過程

????????GPA:偽隨機數生成器,負責產生密鑰流。
????????k:密鑰,作為GPA的一個輸入,用來生成密鑰流。
????????IV(初始化向量):另一個輸入,通常公開傳輸,與k一起用于初始化GPA。
????????zi:在時間i的GPA的輸出,即密鑰流中的一個元素。
????????mi:明文消息中的第i個符號或位。
????????ci:通過將mi和zi進行XOR(表示為⊕符號)操作得到的密文中的第i個符號或位。

????????加密過程如下:

  1. 初始化:使用密鑰k和IV初始化GPA。
  2. 生成密鑰流:GPA按照其算法產生一個密鑰流,其中每個zi是密鑰流的一個符號。
  3. 加密:明文消息的每個符號mi與對應的密鑰流符號zi進行XOR操作,產生密文符號ci。

????????同樣地,解密過程也是將密文ci與同樣的密鑰流zi進行XOR操作,以恢復出明文mi,因為XOR操作是自身的逆運算:

mi = ci ⊕ zi

????????此圖示很好地總結了同步流加密的過程,展示了如何使用密鑰和IV生成密鑰流,并且如何利用這個密鑰流對信息進行加密。這種加密方法的安全性高度依賴于GPA的隨機性和不可預測性,以及IV的正確使用,以確保每個加密操作的唯一性。

2.3.2?異步或自同步加密

????????在流加密中,異步或自同步加密(auto-synchronizing stream cipher)與同步流加密有所不同。在自同步流加密中,偽隨機數生成器(GPA)的狀態不僅取決于其內部狀態,而且還取決于先前的M個密文符號。這樣,即使在傳輸過程中發生數據丟失或錯誤,接收方的解密過程也能夠在接收到足夠數量的后續密文字符后自動同步,而無需重新初始化。因此,這種加密方式被稱為“自同步”的。

????????在自同步流加密中,狀態轉換函數Φ取決于當前狀態和M個先前的密文字符:

qt = Φ(qt?1, ct?1, ct?2, ..., ct?M)

????????這里,qt表示當前狀態,ct-1到`ct-M`表示先前的密文字符。

????????輸出函數f仍然負責在任何給定時刻`t`產生輸出符號zt`:

zt = f(qt)

????????這種依賴于前M個密文字符來決定下一狀態的設計,允許解密過程在遇到錯誤時恢復同步。在這種情況下,即使在傳輸過程中一些密文字符丟失或被篡改,接收方的加密裝置仍能在接收到連續M個正確的密文字符后自動恢復到正確的狀態。

2.3.2.1?自同步加密的優點與缺點

????????自同步加密的優點是它能在某種程度上抵抗傳輸錯誤,缺點是比同步加密稍微復雜,并且可能導致更高的延遲。此外,因為自同步加密依賴于之前的密文字符,它也更容易受到某些類型重放攻擊的影響。因此,設計時需要特別注意抵抗此類攻擊。

2.3.2.2 異步(自同步)流加密的工作過程

? ? ? ? 上圖展示了一個異步(自同步)流加密的簡化模型。在這個模型中,GPA(偽隨機數生成器)接收一個密鑰`k`和初始化向量`IV`作為輸入,生成偽隨機輸出序列`zi`。這個序列與明文消息`mi`進行異或(XOR)操作生成密文`ci`。

????????不同于同步流加密,異步流加密的GPA還會接收先前的密文字符作為反饋,用以更新其內部狀態,這一點在圖像中的反饋路徑所示。

????????工作過程如下:

  1. ????????初始化GPA:使用密鑰`k`和初始化向量`IV`來初始化GPA的狀態。
  2. ????????生成密鑰流:GPA使用內部狀態和過去的密文字符(數量為M)作為輸入來生成下一個狀態,并產生一個偽隨機輸出`zi`。
  3. ????????加密消息:輸出`zi`通過XOR門與明文消息`mi`進行XOR操作,生成密文`ci`。
  4. ????????更新GPA狀態:?GPA的下一個狀態不僅基于當前的內部狀態,還基于先前的密文字符(這些字符的數量和M值有關)。這意味著,即便在通信過程中某些密文字符丟失或出錯,只要連續M個密文字符保持正確,GPA都能夠恢復到正確的狀態,從而重新同步。

????????因此,這種自同步的特性允許加密系統在經歷錯誤或數據丟失后能夠自行恢復,無需外部的同步信號或重啟整個加密過程。這對于數據傳輸中可能遇到的錯誤和干擾有很好的抵抗力,特別是在不穩定的通信環境中。

2.4?安全的隨機數生成器(GPACS)

????????在密碼學中,密碼學上安全的偽隨機數生成器(Cryptographically Secure Pseudo-Random Number Generator,簡稱 CSPRNG),或者密碼學上安全的隨機數生成器(GPACS),是至關重要的組件。這類生成器的特點是它們產生的序列看起來是隨機的,并且在給定多項式時間資源的情況下,攻擊者不能預測序列中的下一個位。更具體地說,即使攻擊者知道序列的一部分z_1, z_2, \ldots, z_k,也無法以實際有效的方式預測序列的下一位z_{k+1}

????????CSPRNGs的設計旨在通過以下屬性實現這一目標:

????????下一個位不可預測性:給定序列的當前狀態,下一個輸出位不能在多項式時間內被預測,除非有先驗知識。

????????前向安全性:即使攻擊者在某一時刻獲得了生成器的內部狀態,也無法重新構建之前生成的序列。

????????后向安全性(或后向保密性):即使攻擊者在某一時刻獲得了生成器的內部狀態,如果生成器在此之后更新了內部狀態,那么攻擊者也無法預測之后生成的序列。

????????相比之下,LFSR由于其線性特性,不滿足這些屬性,特別是不可預測性。如你所指出的,LFSR生成的序列可以通過Berlekamp-Massey算法等線性方法在已知足夠序列的情況下被有效地預測和重構。因此,盡管它們在一些應用中非常高效,但LFSRs并不是GPACS。在設計加密系統時,通常會選用CSPRNG來生成密鑰、初始化向量(IV)、隨機數等,確保加密系統的強健性。

2.5?Blum-Blum-Shub(BBS)生成器

????????Blum-Blum-Shub(BBS)生成器是一個以安全性為核心設計的偽隨機數生成器,特別適合于密碼學應用。它基于二次剩余的數學難題,特別是模大素數乘積的平方運算的困難性

????????這個生成器的工作原理如下:

? ? ? ? a. 輸入:選擇兩個大的質數p和q,它們對4取模等于3(即p \equiv q \equiv 3 \mod 4),并令n = pq。選取一個與n互質的種子g(即滿足\text{gcd}(n, g) = 1)。

? ? ? ? b. 輸出:要產生的偽隨機序列的長度k位。

? ? ? ? c. 初始化:設置x_0 = g^2 \mod n

? ? ? ? d. 迭代:對于i從1到k,執行以下操作:

????????計算x_i = x_{i-1}^2 \mod n

????????提取x_i的最低有效位作為序列的第i位,即z_i = x_i \mod 2

? ? ? ? e. 結果:返回生成的序列z_1, z_2, ..., z_k

????????BBS生成器的安全性基于模n的平方取模運算的不可預測性,只要n的選擇是安全的(即p和q足夠大),那么在不知道p和q的情況下,要預測序列是非常困難的。具體來說,BBS生成器被證明在計算上是安全的,這意味著在多項式時間內預測下一個比特是不可行的。

????????盡管如此,由于每次只生成一個比特,并且涉及到模大數乘法運算,BBS生成器在速度上非常緩慢,因此在實際中不適合用作流加密的密鑰流生成器。目前尚未發現既安全又快速的GPACS,這使得流加密通常依賴于更快的、但可能在理論上不那么安全的偽隨機數生成器。在實踐中,通常會尋求在安全性和性能之間找到合適的平衡點。

2.6?LFSR的安全性與Geffe生成器

????????實際上,在對稱流加密中確實經常使用線性反饋移位寄存器(LFSR),因為它們可以高效地生成比特序列。但是,如您所指出的,單個LFSR由于其線性特性,容易受到密碼分析攻擊,如已知明文攻擊或伯萊坎普-馬西算法攻擊。為了增加安全性,會采用幾種策略來打破這種線性,增加密碼的復雜度和抵抗攻擊的能力。

????????一個常見的方法是將多個LFSR的輸出通過非線性布爾函數結合起來。這樣做的目的是引入非線性元素,以增加潛在攻擊者通過線性方法破解生成器的難度。非線性函數保證了即使攻擊者可以觀察到輸出比特序列,也很難逆推出LFSR的初始狀態。

2.6.1?Geffe生成器

????????Geffe生成器是一個使用三個LFSR和一個特定的非線性函數來結合它們的輸出的例子。Geffe生成器的輸出不是簡單地將三個LFSR的輸出做XOR操作,而是使用一個更復雜的非線性函數來混合它們,使得分析變得更加困難。

????????圖中展示的是Geffe生成器的結構示意圖。Geffe生成器是一個將多個線性反饋移位寄存器(LFSR)的輸出通過一個非線性布爾函數組合起來,以生成一個偽隨機數序列的機制。它由以下幾部分組成:

????????多個LFSR:圖示中的LFSR 1, LFSR 2, ..., LFSR n代表了n個不同的線性反饋移位寄存器,每個寄存器產生一個序列x_1, x_2, ..., x_n

????????非線性布爾函數f:這個函數將所有LFSR的輸出作為輸入,并產生一個單一的輸出序列。這個函數設計得復雜且非線性,目的是使得整個系統的輸出序列難以預測。

????????輸出序列:函數的輸出s代表了偽隨機數序列,它由函數f根據輸入x_1, x_2, ..., x_n的值計算得出。

2.6.2 非線性布爾函數

????????在示意圖的右側,提供了Geffe生成器具體的非線性布爾函數的一個例子。這個函數包括三個輸入x_1, x_2, x_3和一個輸出z,其中輸出z是通過某種特定方式組合這三個輸入的結果。

????????總體來說,通過這種方式,Geffe生成器能夠抵抗基于LFSR線性特性的攻擊。然而,它也可能受到相關性攻擊的影響,因為即使是非線性組合,也可能存在某些統計學上的相關性,這可以被特定的分析技術所利用。盡管存在這些潛在的安全風險,Geffe生成器及類似機制的設計為密碼學提供了一個在LFSR基礎上增加安全性的有效方式。

2.6.3 安全性

????????盡管通過非線性函數結合多個LFSR可以提高系統的安全性,但這種方法仍然可能受到其他類型的分析攻擊,如相關性攻擊。在相關性攻擊中,攻擊者會試圖找到不同LFSR之間的統計相關性,然后利用這些信息來破解整個系統。

????????由于這些潛在的安全隱患,設計流密碼系統時需要非常小心,需要在實用性、效率和安全性之間做出權衡。因此,除了使用非線性函數之外,現代的流加密算法也會采用各種其他技術來提高安全性,如狀態增強、不規則鐘控制和復雜的輸出轉換等。此外,密碼學家會對已知的攻擊方法進行充分的評估,以確保所設計的系統能夠抵抗這些攻擊。

2.7?流加密標準

????????流加密標準在許多通信技術中都有應用,它們是保障數據傳輸安全性的重要組成部分。你提到的幾個標準如下:

2.7.1? A5/1, A5/2, A5/3

????????這些是用于GSM(全球移動通信系統)網絡的加密算法。A5/1被認為是比A5/2更安全的算法,主要用于歐洲和美國。A5/2提供較低的安全性,主要用于其他地區。A5/3是較新的加密標準,提供更高的安全性。

????????A5/1是一種同步流加密算法,最初設計用于在大多數歐洲國家的GSM(全球移動通信系統)網絡中對電話通話進行加密。這個算法的確切細節一開始是保密的,但后來被逆向工程學家分析并公布了。

2.7.1.1 A5/1加密算法的基本結構


????????A5/1使用了三個不同長度的線性反饋移位寄存器(LFSR),長度分別為19、22和23位。

????????這些LFSR會被一個64位的秘密密鑰和一個22位的公開的幀數(也稱為幀標識符或初始化向量)初始化。

????????密鑰流是通過復雜的機制,如控制多個LFSR之間的時鐘,以及通過非線性函數組合它們的輸出來生成的。

????????A5/1設計之初被認為是安全的,但隨著計算能力的提高和密碼分析方法的進步,它現在被認為是不安全的。實際上,已經有多種實用的攻擊方法被發現,可以在短時間內破解A5/1加密,這使得它對現代標準來說太弱,無法提供足夠的安全性。

????????由于這些安全問題,GSM網絡后來采用了更安全的算法A5/3,它使用了KASUMI塊加密作為其核心。KASUMI是為移動通信設計的加密算法,它比A5/1提供了更高的安全性。然而,即使是A5/3,隨著時間的推移,也已經有報告顯示它可能存在弱點。

????????在選擇和使用加密技術時,隨著密碼分析技術的不斷發展,我們必須接受加密算法可能會變得不再安全的事實。這就是為什么持續的研究和更新加密算法是保護信息安全的一個關鍵部分。

2.7.1.2?E0? ? ?

????????這是用于藍牙設備之間的通信加密的流密碼算法。E0用于保護藍牙連接的隱私和安全性。

????????E0是藍牙技術中用于加密通信的流加密算法。它采用可變長度的密鑰,通常是128位。E0算法的結構包括4個不同長度的線性反饋移位寄存器(LFSR),分別是25位、31位、33位和39位,以及一個2位的內部狀態。

????????E0算法的工作流程如下:

  1. 初始化:LFSRs和內部狀態用預共享的密鑰和一些公開參數(比如設備地址和初始計數器)進行初始化。
  2. 時鐘管理:在每個時鐘周期,所有LFSRs都會根據它們的反饋函數移位。LFSR的設計確保了輸出序列具有良好的統計特性,并盡可能接近隨機。
  3. 內部狀態變換:內部狀態的更新依賴于它的前兩個值以及LFSRs的狀態。這個內部狀態為LFSRs提供額外的非線性,以提高安全性。
  4. 輸出生成:算法的輸出是通過將四個LFSRs的輸出和內部狀態的一個位進行異或(XOR)運算產生的。這個輸出是加密的密鑰流。
  5. 密鑰流與明文的結合:最后,這個密鑰流與明文進行異或運算,生成密文。在接收端,同樣的操作(使用相同的密鑰流進行異或運算)將密文轉換回明文。

????????盡管E0算法包含了一些設計來增加安全性的特性,例如使用多個LFSRs和非線性內部狀態,但研究人員已經發現了多種攻擊方法。這些攻擊揭示了E0的一些脆弱性,特別是在某些實現中,密鑰管理和密鑰更新策略存在缺陷,導致安全性降低。結果是,現代的藍牙設備通常采用更新的加密方法來提供更高的安全性。

2.7.1.3?RC4

????????這是一種廣泛使用的流密碼,最著名的應用是在WEP(有線等效加密)中,它是早期WiFi網絡的安全協議的一部分。然而,RC4在實踐中已經顯示出多種弱點,尤其是在WEP中的實現方式使其容易受到攻擊。

????????不幸的是,上述所有算法都已經在某些情況下被證實是可以被破解的。對于A5/1和A5/2,已經發現了多種攻擊方法,可以在實際操作中突破其安全性。對于E0,也發現了若干弱點。而RC4由于一系列已知的漏洞,比如在WEP協議中的應用,被認為是不安全的。

????????除了這些標準之外,還有其他非標準化的流加密候選算法,如Trivium,它在eSTREAM項目的密碼競賽中被提交。Trivium被設計為高效且安全的流密碼,雖然它沒有成為正式的加密標準,但是它被廣泛認為是一個強大和實用的算法,特別是在需要高性能和低資源消耗的加密應用中。

????????標準化的流程是一個復雜的行業和政治過程,而不完全是基于技術優越性。有些算法即便在技術上優秀,也可能因為各種原因(如專利問題、商業競爭、政治問題)沒有被標準化。因此,一個流加密算法是否被標準化并不直接決定其質量的高低。在選擇加密算法時,應該綜合考慮安全性、性能、兼容性和實現的復雜性。

2.8 流加密的應用場景

????????流加密(Stream Ciphers)是密碼學中的一個重要分支,它與塊加密(Block Ciphers)并行,各有特點和應用場景。流加密的主要特點是它在加密數據時可以處理一個比特(或字節)流,而不需要像塊加密那樣處理一個固定大小的數據塊。這使得流加密在某些實時或者硬件資源受限的環境中非常有用。

????????Adi Shamir的2004年在AsiaCrypt會議上的演講提到,在過去的三十年里,流加密的重要性有所下降,它們變得越來越不常用,但這并不意味著流加密已經“死亡”。盡管存在許多針對流加密的攻擊,流加密的研究和開發仍然活躍。流加密在特定的應用場合下仍有需求,比如在需要非常高效率加密或者具有嚴格延遲要求的通信中,流加密因為其較低的處理延遲仍然是首選。

????????盡管塊加密因其結構的安全性和多樣性在許多應用中成為了首選,但流加密在以下情況下仍然很有用:

  • 性能要求:在某些應用中,尤其是在資源受限的設備上(如RFID標簽、智能卡等),流加密算法因為其計算上的高效性而受到青睞。
  • 實時通信:在一些需要實時或近乎實時加密的場景(如視頻會議或直播)中,流加密算法由于其可以逐比特或逐字節處理數據的能力,因而是一個很好的選擇。
  • 硬件實現:流加密算法通常更容易轉換為高效的硬件實現,這在需要低能耗和高性能的加密硬件中非常有價值。

????????現代的流加密算法,如ChaCha20和Salsa20,以及eSTREAM項目中的一些算法,例如SOSEMANUK、HC-128等,都表明了流加密算法的進步和它們在現代加密系統中的有效性。

????????總之,流加密并非“死亡”,而是在特定的場景和需求下依然“活著”。它們與塊加密算法一起,作為現代密碼學的重要組成部分,繼續演化和發展。

3. 塊加密

????????塊加密是對稱加密的一種形式,它涉及將明文消息分割成固定大小的塊,并對每個塊使用相同的加密算法進行加密。這種加密方法與流加密不同,后者將輸入視為一個連續的比特流。

3.1 塊加密的總體介紹

3.1.1?塊加密的過程

? ? ? ? a. 分割明文:明文消息?m 被分割成`n`位的塊,表示為`m1, m2, ..., ml`。如果消息的長度不是`n`的倍數,則需要添加填充(padding),以使最后一個塊的大小等于`n`位。

? ? ? ? b. 填充(Padding):常見的填充技術包括PKCS#7、ANSI X.923、ISO/IEC 7816-4以及零填充(Zero padding)。RFC 2040提出了與使用RC5算法相關的填充方案。填充確保所有的數據塊大小都是一致的,這對于塊加密算法的正確執行是必需的。

? ? ? ? c. 加密每個塊:每個數據塊使用相同的加密密鑰進行獨立加密,通常使用復雜的變換,如替換、置換、混合列和行等操作。

3.1.2?塊加密的模式(Modes of Operation)

????????為了提高安全性和靈活性,塊加密可以以不同的模式操作,其中包括:

3.1.2.1?ECB(電子密碼本)模式

????????ECB(電子密碼本模式)是塊加密算法的一種模式,它將明文分割成多個塊,然后獨立地加密每個塊。這是最簡單的加密模式,明文塊獨立加密。它的一個主要弱點是同樣的明文塊會產生同樣的密文塊,這可能會泄露信息。

3.1.2.1.1 加密過程

????????對于每個明文塊`mi`:1. 使用加密函數 E 和密鑰 k 對明文塊進行加密:ci = E_k(mi)。2. 輸出加密塊ci

3.1.2.1.2?解密過程

????????對于每個密文塊ci:1. 使用解密函數`D`和同樣的密鑰`k`對密文塊進行解密:mi = D_k(ci)。2. 輸出明文塊`mi`。

????????ECB模式的主要優點是簡單性和并行處理能力 —— 因為它不依賴于前一個塊的加密結果,所以可以同時加密多個塊。然而,正是因為這種獨立性,ECB模式也有一個重大的安全弱點。

3.1.2.1.3 安全弱點

????????可預測性:在ECB模式中,相同的明文塊將總是被加密成相同的密文塊。這意味著模式(比如圖片的像素布局、文本中的重復)可以在密文中被保留下來,這可能會泄露關于原始數據的信息。
????????不安全性:如果攻擊者能夠控制明文,并且能夠觀察密文的變化,他們可能能夠推斷出密鑰或明文的某些信息。

????????由于這些問題,ECB模式通常不推薦用于需要高安全性的應用。在實際應用中,更傾向于使用其他模式,如CBC、CFB、OFB或CTR,因為這些模式通過將前一個塊的輸出以某種方式與當前塊結合,解決了ECB模式的可預測性問題。

3.1.2.2??CBC(密碼塊鏈接模式)

????????CBC(Cipher Block Chaining,密碼塊鏈接)模式和OFB(Output Feedback,輸出反饋)模式是塊加密算法的兩種運行模式,旨在解決ECB模式中存在的一些問題,特別是重復塊問題。

????????加密前每個明文塊與前一個密文塊進行異或操作。這個模式使用一個初始化向量(IV)來加密第一個明文塊。CBC模式通過將前一個密文塊的輸出與當前的明文塊混合,確保即使兩個明文塊相同,它們的密文表示也會不同。

3.1.2.2.1 加密過程(CBC)

????????1. 選擇一個隨機的初始化向量(IV)。
????????2. 對于第一個明文塊`m1`,將它與IV進行異或(XOR)操作,然后加密:c1 = E_k(m1 ⊕ IV)。
????????3. 對于隨后的每個明文塊`mi`,將它與前一個密文塊`ci-1`進行XOR操作,然后加密:`ci = E_k(mi ⊕ ci-1)。
????????4. 加密后的IV和所有密文塊`ci`被一起傳輸。

3.1.2.2.2?解密過程(CBC)

????????1. 對于第一個密文塊c1,解密然后與IV進行XOR操作以恢復明文:m1 = D_k(c1) ⊕ IV。
????????2. 對于隨后的每個密文塊`ci`,解密然后與前一個密文塊`ci-1`進行XOR操作以恢復明文:`mi = D_k(ci) ⊕ ci-1`。

3.1.2.2.3?安全性考量

????????CBC模式:需要確保IV是隨機的,并且每次加密都是唯一的,以保證加密的安全性。如果IV泄露,第一個塊的明文可能會被暴露。

3.1.2.3? OFB(輸出反饋模式)

????????類似于CFB,但它生成密鑰流,這個密鑰流與明文異或生成密文。密鑰流的生成與明文無關。

????????OFB模式將塊加密轉換為一種流加密形式。通過使用加密算法的輸出作為下一個加密操作的輸入,它生成一個密鑰流,然后將這個密鑰流與明文進行XOR操作來加密數據。

3.1.2.3.1 加密過程(OFB)


????????1. 選擇一個隨機的IV作為第一個反饋值r0。
????????2. 對每個時鐘周期`i`,計算ri = E_k(ri-1)。注意這里`ri`的值僅取決于IV和密鑰,與明文無關。
????????3. 生成密文塊`ci`,通過將`ri`與對應的明文塊`mi`進行XOR操作:ci = ri ⊕ mi`。

3.1.2.3.2?解密過程(OFB)

????????1. 解密過程與加密過程相同。使用相同的密鑰和IV,生成相同的密鑰流。

????????2. 接收方計算`mi = ri ⊕ ci`來恢復明文。

3.1.2.3.3 安全性考量

????????OFB模式:由于生成的是密鑰流,因此它對密鑰和IV的選擇非常敏感。如果IV和密鑰組合重用,會導致安全性下降,因為重復的密鑰流可以被利用來還原明文。

????????總體而言,這些模式增加了加密操作的復雜性,并解決了ECB模式中相同明文塊產生相同密文塊的問題。這兩種模式都比ECB更安全,因為它們能夠隱藏明文數據中的模式。然而,它們的實現需要注意保護IV的安全性,以及在OFB模式中保持密鑰流的唯一性。

3.1.2.4 CFB(密碼反饋模式)

????????將塊加密轉換為自同步的流加密,明文通過與上一塊加密后的輸出進行異或來加密。

3.1.2.5 CTR(計數器模式)

????????加密一個遞增的計數器和固定的密鑰,生成一個密鑰流,然后將該密鑰流與明文異或得到密文。這種模式將塊加密轉換為流加密。

????????CTR模式(計數器模式)是塊加密算法的一種運行模式,這種模式通過將加密算法轉化為一種流密碼系統,它具有相對于其他模式的某些優勢,比如簡單的并行計算和不需要填充(padding)。

????????CTR模式的核心思想是加密一個遞增的計數器而不是直接加密明文,然后將產生的密鑰流與明文進行異或操作來產生密文。這個模式既可以用于加密也可以用于解密,因為它們操作完全相同。

3.1.2.5.1 加密過程(CTR)


? ? ? ? a. 選擇一個初始的計數器值`cpt`(通常與一個隨機的初始化向量IV一起使用)。

????????b. 對于每個明文塊`mi`,計算`ri = E_k(cpt + i ? 1)`。這里,`E_k`是加密函數,`k`是密鑰,`i`是塊的序號。

????????c. 生成密文塊`ci`,通過將密鑰流`ri`與明文塊`mi`進行XOR操作:`ci = mi ⊕ ri`。

3.1.2.5.2 解密過程(CTR)

????????解密過程與加密過程相同,因為XOR操作是自反的(即`a ⊕ b ⊕ b = a`)。

????????1. 使用相同的密鑰`k`和初始計數器`cpt`來生成相同的密鑰流`ri`。

????????2. 將密文塊`ci`與密鑰流`ri`進行XOR操作,恢復明文塊`mi`:`mi = ci ⊕ ri`。

3.1.2.5.3?安全性考量

????????唯一性:計數器必須對于每個加密消息是唯一的,這通常通過在計數器中包含IV來實現。如果重用計數器和密鑰的組合,會導致安全性嚴重下降。

????????不可預測性:計數器雖然遞增,但整個計數器值(包括IV)不應是可預測的,以免泄露信息。

????????CTR模式的優勢在于它的靈活性和效率,尤其是在需要并行加密或解密操作的場合,因為每個塊的加密是獨立的。此外,CTR模式不會擴展消息的長度,因為它不需要填充到塊的整數倍。這在需要密文和明文大小相同的應用中非常有用,如某些網絡協議和硬盤加密。

????????這些模式設計的目的是為了防止模式分析攻擊,并確保加密是安全的,即使是在處理具有重復模式的數據時。它們提供了不同的性能和安全特性,使得塊加密在各種應用場景中都能找到合適的應用。

3.2?迭代結構

????????塊加密通常采用迭代結構,這意味著它將一系列固定步驟(稱為“輪”或“回合”)重復應用于明文塊。在每一輪中,會使用一個從原始密鑰派生出來的輪密鑰(子密鑰)來進行特定的加密操作。迭代過程增強了加密算法的安全性,因為它使得對加密過程的逆向工程變得極其困難。

3.2.1 迭代加密的基本流程

????????密鑰擴展:原始密鑰 k 通過密鑰擴展算法生成一系列輪密鑰k1, k2, ..., kr。每一輪使用不同的輪密鑰,以提供加密的多樣性。

????????初始化:明文塊m準備進行加密。

????????迭代加密:明文塊m經過`r`輪變換,每一輪包括:

????????輪函數F:對數據進行加密處理,如置換、替換、混淆和擴展等操作。

????????輪密鑰結合:每次迭代將輪函數的結果與一個輪密鑰結合(通常是XOR操作)。

????????輸出密文:經過`r`輪處理后,最終輸出密文塊`c`。

3.2.3?迭代加密的典型例子

????????迭代結構的一個典型例子是AES(高級加密標準),它采用一種稱為SP網絡的特殊迭代結構。SP網絡在每一輪中進行替代(Substitution)和置換(Permutation),這是為了達到混淆(Confusion)和擴散(Diffusion)的目的——混淆是為了使攻擊者難以理解密鑰和密文之間的關系,擴散是為了將明文的單個位的影響散布到整個密文中。

????????在設計塊加密算法時,輪數`r`通常會根據所需的安全性和效率來選擇。輪數越多,算法越安全,但同時也可能會更慢。輪函數的設計也是保障加密強度的關鍵因素。輪數、輪函數和密鑰擴展算法的設計必須共同協作,以抵抗各種密碼分析技術,包括差分分析和線性分析。

3.3 DES

????????DES(Data Encryption Standard,數據加密標準)是一種曾廣泛使用的對稱密鑰加密算法。1977年由美國國家標準局(現為國家標準與技術研究所NIST)正式采納為標準,它的設計基于IBM的先前算法Lucifer,并在Horst Feistel等人的主導下進行了改進。

????????DES的設計初衷是為了提供一種可以在各種硬件和軟件中實施的加密方法,直到21世紀初,它都是保護電子信息安全的重要工具。

????????DES(Data Encryption Standard,數據加密標準)是一種基于Feistel網絡結構的塊加密算法。Feistel結構是一種將塊加密的輸入分為兩半,并通過交叉處理這兩半來進行加密的方法。DES的設計旨在通過一系列復雜的操作確保高度的數據安全性。

3.3.1 歷史背景和設計特點

????????設計與批準:DES在1977年被批準為標準,成為公共和私營部門廣泛使用的加密技術。

????????設計者:IBM公司,主要設計者是Horst Feistel,算法是基于他的Feistel網絡結構。

????????使用時長:從1977年到2000年初,DES被廣泛用于商業、工業和金融行業的信息安全保護,但由于它的密鑰長度較短(56位),在數據安全要求日益增高的背景下,它的安全性逐漸被質疑。

3.3.2?DES的主要特點

????????塊大小:DES以64位(8字節)為一個塊進行加密和解密操作。

????????密鑰長度:雖然DES使用的密鑰長度為64位,但實際上只有56位用于加密過程,剩下的8位用作奇偶校驗位,以檢測密鑰在傳輸或存儲時是否發生錯誤。

????????輪數:DES執行16輪迭代加密。每一輪都使用不同的輪密鑰對數據進行處理,這些輪密鑰是從原始的64位密鑰中派生出的48位密鑰。

????????密鑰派生:DES密鑰派生使用了一個稱為密鑰調度的算法,從64位的主密鑰中生成16個48位的輪密鑰。這一過程包括密鑰壓縮和移位操作,以生成每一輪所需的密鑰。

3.3.3?Feistel結構的加密流程

????????初始置換(IP):在加密的第一步中,對輸入的64位數據塊進行一個初始置換操作。

????????16輪迭代:每一輪都包括分裂、混合和置換步驟。具體來說,每一輪都將數據塊分為左半部(L)和右半部(R),然后對右半部進行一系列操作(如擴展、與輪密鑰結合、替換和壓縮),其結果與左半部進行XOR操作。然后,左半部和右半部交換位置進行下一輪操作。在最后一輪后,L和R不進行交換。

????????逆初始置換(FP):在16輪迭代后,將最后的輸出(L和R合并)通過逆初始置換(即初始置換的逆操作)生成最終的密文塊。

????????DES雖然在設計之初被認為是非常安全的,但隨著計算能力的提升和密碼分析技術的進步,其56位的有效密鑰長度逐漸不足以抵抗暴力攻擊。這導致了3DES(Triple DES)和后來的AES(Advanced Encryption Standard)的開發,以提供更強的安全性。

3.3.4 安全性

3.3.4.1 安全性和演變

????????DES自從1977年成為標準以來,一直是密碼學和信息安全領域研究的重點。盡管它的設計考慮了當時已知的攻擊方法,但隨著時間的推移,密碼分析學者發展出了更高級的技術來挑戰DES的安全性。其中最著名的兩種攻擊技術是線性密碼分析和差分密碼分析。

????????隨著計算能力的提高,DES的56位密鑰長度成為其安全性的短板。到了1990年代末,通過暴力攻擊已經能夠在實際時間內破解DES加密,這導致了對DES安全性的重新評估和尋找替代方案的需求。

????????作為響應,AES(高級加密標準)在2001年被選為DES的后繼標準,提供更高的安全性和更長的密鑰長度(128位、192位和256位)。同時,為了過渡期間的需要,3DES(或稱Triple DES)作為一種臨時解決方案,通過連續三次應用DES算法(使用三個不同的密鑰)來增加加密的強度。

????????盡管DES已不再被認為是安全的加密標準,它在密碼學和信息安全領域的歷史上仍占有重要地位,對后續的加密算法設計產生了深遠影響。

3.3.4.2?線性密碼分析

????????發明者:由Mitsuru Matsui于1993年發明,目的是攻擊DES。

????????原理:線性密碼分析是基于找到加密算法中的線性近似式,這些近似式以一定的概率描述了輸入位、輸出位和密鑰位之間的線性關系。通過分析大量的明文和對應的密文,攻擊者試圖利用這些線性關系推斷出密鑰。

????????針對DES:DES中的某些S盒因為存在線性關系,所以對線性密碼分析比較脆弱。通過足夠多的明文-密文對,可以以非常低于窮舉搜索的計算量推斷出密鑰。

3.3.4.3?差分密碼分析

????????發明者:由Eli Biham和Adi Shamir在1990年發表,他們提出了一種針對DES及類似加密算法的差分密碼分析方法。

????????原理:差分密碼分析關注兩個略有差異的輸入在加密過程中產生的輸出差異。通過觀察特定輸入差異導致的輸出差異,攻擊者可以收集有關密鑰信息的線索。

????????效果:與線性密碼分析類似,通過分析大量的明文-密文對,差分密碼分析試圖降低破解DES的復雜度,使得某些密鑰比其他密鑰更有可能。

????????這兩種分析技術的提出,明確表明了DES在面對有能力收集和分析大量數據的攻擊者時的脆弱性。盡管這些攻擊通常需要大量的數據和相對高的計算資源,它們展示了DES密鑰空間(56位)不足以抵抗現代的密碼分析技術。

????????差分密碼分析和線性密碼分析的發展不僅標志著對DES安全性的重大突破,也推動了密碼學研究的進步,促進了更安全加密算法(如AES)的發展。這些分析方法如今被廣泛應用于對現代加密算法的安全性評估中。

3.3.4.4 總結

????????DES(數據加密標準)在其設計之初是一個非常先進的加密算法,提供了相當高的安全性。然而,隨著計算技術的快速發展,尤其是計算能力的顯著提升,DES的安全性逐漸被削弱。

????????1998年,電子前哨基金會(Electronic Frontier Foundation,EFF)展示了通過硬件攻擊DES的可能性。他們構建了一臺專用的機器,名為“DES Cracker”,成本為25萬美元。這臺機器能夠通過暴力攻擊,在4天內完成對一個DES密鑰的窮舉搜索,并成功破解了DES加密。這一成就標志著DES在面對有足夠資源的攻擊者時,其56位密鑰長度已不足以提供必要的安全保障。

????????此外,隨著線性密碼分析和差分密碼分析等先進密碼分析技術的出現,DES的理論安全性也受到了挑戰。這些技術可以以遠低于窮舉搜索的成本來破解DES,進一步凸顯了其密鑰長度的局限性。

????????鑒于DES的這些安全缺陷,以及公眾對更高數據安全標準的需求,美國國家標準與技術研究所(NIST)發起了一項尋找DES替代品的公開競賽。這一過程最終選出了高級加密標準(AES),它提供了更長的密鑰長度(128位、192位和256位)和更高的安全性。從2001年開始,AES逐漸取代了DES,成為新的加密標準。

????????盡管DES不再被視為安全的加密算法,但它在密碼學歷史上的地位仍然十分重要。DES不僅促進了加密技術的發展,還引發了對公共加密標準安全性的廣泛討論,對后續加密標準的制定產生了深遠影響。

3.3.5?3-DES(或Triple DES)

????????3-DES(或Triple DES)是一種改進的DES版本,旨在通過多次應用DES加密過程來增加加密的強度。盡管DES本身因為其56位密鑰長度而不再被認為是安全的,3-DES提供了一種有效的方法來延長DES算法的使用壽命,同時提高安全性。3-DES已經被廣泛用于需要高安全性的場合,直到更高級的加密算法(如AES)成為新的標準。

3.3.5.1?3-DES的工作原理

????????3-DES使用兩種主要方式進行加密:

????????EDE模式(Encrypt-Decrypt-Encrypt):使用三個密鑰(K1、K2、K3)對數據塊進行三次連續的DES操作。首先用K1加密,然后用K2解密(實際上是另一次加密操作,因為DES的解密過程只是加密過程的反向而已),最后用K3再次加密。這種模式也可以用兩個密鑰(K1、K2),其中第一次和最后一次加密使用同一個密鑰(K1=K3)。

????????EEE模式(Encrypt-Encrypt-Encrypt):所有三步都是加密操作,分別使用三個不同的密鑰。這種方式相對不太常用。

3.3.5.2 安全性提升

????????通過這種方法,3-DES顯著提高了加密的安全性,因為它增加了密鑰的有效長度。在使用兩個密鑰的配置中,有效密鑰長度為112位;在使用三個不同密鑰的配置中,有效密鑰長度為168位。然而,由于每一輪加密實際上都是在執行DES操作,這意味著3-DES的加密和解密過程需要更多的計算時間,這使得它在性能上比單次DES慢得多,也比新的加密標準如AES慢。

3.3.5.3?應用和轉移

????????盡管3-DES提供了比DES更高的安全性,但它在計算效率上的劣勢導致了對更高效加密算法的需求。AES的出現滿足了這一需求,提供了更高的安全性以及更好的性能。隨著AES成為新的行業標準,3-DES的使用開始逐漸減少。然而,在過渡期間,3-DES作為一種更安全的替代方案,在很多系統中仍然保持著重要的地位,特別是在那些需要與舊系統兼容的場合。

3.4 AES

????????AES(Advanced Encryption Standard,高級加密標準)是一種廣泛使用的對稱加密算法,旨在替代老舊的DES算法。1997年,美國國家標準與技術研究所(NIST)發起了尋找DES替代者的公開競賽,最終選擇了由比利時密碼學家Joan Daemen和Vincent Rijmen提出的Rijndael算法作為AES。

????????AES(高級加密標準)是一種廣泛使用的對稱密鑰加密算法,旨在取代DES。它由兩位比利時密碼學家Joan Daemen和Vincent Rijmen提出的Rijndael算法發展而來,于2001年被美國國家標準與技術研究所(NIST)正式標準化為AES。

3.4.1 AES的主要特點

????????塊長度:AES固定使用128位的數據塊大小,這一點與DES的64位數據塊不同。較長的塊大小提高了加密的安全性和效率。
??
????????密鑰長度:AES提供三種密鑰長度:128位、192位和256位。這比DES的56位密鑰和3DES的112位或168位密鑰要長得多,提供了更高的安全性。

????????輪數(迭代次數):AES的迭代次數根據密鑰長度的不同而不同。128位密鑰使用10輪,192位密鑰使用12輪,256位密鑰使用14輪。每一輪的操作包括字節替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns,最后一輪除外)和輪密鑰加(AddRoundKey)。

????????設計原則:AES的設計強調了安全性、效率、簡單性和靈活性。它既適用于硬件實現,也適用于軟件實現,無論是在高性能服務器上還是在資源受限的設備上。

3.4.2?AES加密流程的基本步驟

????????AES(高級加密標準)算法中一個加密輪(round)的過程。AES并不使用Feistel網絡,而是采用了一種全塊置換-替換(substitution-permutation)結構,也稱為SP網絡。這里,對整個數據塊同時進行替換和置換,增強了安全性。每一輪的主要步驟包括:

? ? ? ? a. 初始狀態:輸入的128位明文塊被視為一個4x4的字節矩陣,這是AES處理的“狀態(State)”。AES加密中每輪的內部狀態`State`是一個4x4的字節矩陣,如下所示:

s00 s01 s02 s03
s10 s11 s12 s13
s20 s21 s22 s23
s30 s31 s32 s33

? ? ? ? b. 密鑰擴展:使用一個密鑰擴展算法從原始密鑰生成多個輪密鑰(Ne + 1個,每個輪密鑰為128位)。這一過程稱為密鑰調度。也是變為一個4x4的字節矩陣

? ? ? ? c. 初始輪:初始輪密鑰加(AddRoundKey):初始的狀態(State,即128位的明文塊)與第一個輪密鑰進行XOR操作。

? ? ? ? c. 中間輪(Ne - 1輪):每一輪包括四個步驟:

????????字節代替(SubBytes):對狀態中的每個字節進行非線性替換,使用一個預定義的查找表(S-box)。每個字節通過一個非線性的S-box進行替換,用于混淆數據。

? ? ? ? d.最終輪:最后一輪略有不同,不包括列混淆(MixColumns)步驟。
????????字節代替(SubBytes)
????????行移位(ShiftRows)
????????輪密鑰加(AddRoundKey)

????????輸出密文:最后的狀態就是加密后的密文。

3.4.3 SUBBYTES

????????在每個加密輪中,這個`State`會經歷幾個變換步驟,其中第一步是字節替換,稱為SUBBYTES。

3.4.3.1 SUBBYTES(字節替換)步驟詳解

????????S-box的應用:每個字節`sij`在`State`中通過一個S-box進行替換。S-box(替換盒)是一個非線性的替換工具,它根據固定的替換表對字節進行映射。AES中的S-box是一個16x16的表格,其中的每個條目都是一個8位的值。

????????S-box索引:S-box中的行索引由字節的前4位確定,列索引由字節的后4位確定。這8位合起來表示S-box中一個特定位置的值,該值將替換原始的字節。

????????代數結構:與DES的看似隨機的S-box不同,AES的S-box有明確的代數結構。它可以通過以下步驟得到:

????????計算字節的逆元素:在有限域`GF(2^8)`中,每個非零元素都有一個逆元素。對于`State`中的每個字節`sij`,都計算其在`GF(2^8)`中的逆元素。

????????應用仿射變換:計算得到的逆元素再經過一個特定的仿射變換,以獲得最終的S-box輸出。

3.4.3.2 為什么使用S-box?

????????S-box的目的是引入非線性,這對抵抗密碼分析攻擊(如線性和差分密碼分析)至關重要。在AES中,這種非線性是通過在有限域`GF(2^8)`上的代數操作實現的。這確保了加密算法不僅僅是一系列線性變換,因此更難以預測和破解。

????????每次SUBBYTES步驟后,`State`的每個字節都已經根據S-box中定義的規則變換,為接下來的行移位(ShiftRows)和列混淆(MixColumns)步驟做好了準備。

????????行移位(ShiftRows):對狀態中的行進行循環移位。每行的字節進行循環移位,第一行不移位,第二行移位一個位置,以此類推,達到擴散數據的目的。

????????列混淆(MixColumns):每一列的四個字節通過特定的數學運算進行混合,進一步擴散數據。每一列的四個字節通過特定的數學運算進行混合,進一步擴散數據。左乘一個固定的矩陣。

????????輪密鑰加(AddRoundKey):將轉換后的狀態與輪密鑰進行XOR操作,得到最終狀態,即為本輪的輸出。

3.4.4?安全性和應用

????????AES自從2001年被正式采納為標準以來,已經證明是一種非常安全和高效的加密算法。它抵抗了包括線性密碼分析、差分密碼分析在內的多種已知密碼攻擊方法。由于其出色的安全性能和高效率,AES已經成為全球加密通信和數據保護的重要工具。

????????AES的應用范圍非常廣泛,包括但不限于互聯網安全協議(如SSL/TLS)、無線網絡安全(如WPA/WPA2)、文件加密和政府機密通信。它的安全性得到了全球密碼學社區的廣泛認可,是當今數字安全領域的基石之一。

????????AES的設計確保了其在多方面的安全性,包括抵抗差分密碼分析和線性密碼分析等先進的攻擊技術。由于其高效的加密性能和強大的安全性,AES已成為全球最重要的加密標準之一,被廣泛應用于各種安全通信協議和數據保護方案中。

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

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

相關文章

Redis Stream Redisson Stream

目錄 一、Redis Stream1.1 場景1:多個客戶端可以同時接收到消息1.1.1 XADD - 向stream添加Entry(發消息 )1.1.2 XREAD - 從stream中讀取Entry(收消息)1.1.3 XRANGE - 從stream指定區間讀取Entry(收消息&…

【DevExpress】WPF DevExpressMVVM 24.1版本開發指南

DevExpressMVVM WPF 環境安裝 前言重要Bug(必看)環境安裝控件目錄Theme 主題LoginWindow 登陸窗口INavigationService 導航服務DockLayout Dock類型的畫面布局TreeView 樹狀列表注意引用類型的時候ImageSource是PresentationCore程序集的博主找了好久&am…

[筆記] keytool 導入服務器證書和證書私鑰

背景 我當前手頭已有一個服務器證書和對應的私鑰,現在需要轉換為 Java KeyStore 格式使用,找了一大圈才發現 keytool 無法直接導入服務器證書和私鑰,當然證書可以直接導入,但是私鑰是無法直接導入。找了一大圈發現可以先將服務器…

LeetCode題解:1669. 合并兩個鏈表,JavaScript,詳細注釋

原題鏈接: https://leetcode.cn/problems/merge-in-between-linked-lists/ 解題思路: 注意該題傳入的a和b是鏈表的索引,而不是節點的值先遍歷list1,找到a-1和b1節點將a-1的next指向list2的頭節點在將list2的尾節點的next指向b1節…

Navicat 外網連接 mysql (1、通過SSH方式內網訪問 2、對外開放3306端口)

1、通過SSH方式內網訪問 直接常規方式使用IP、賬號密碼連接,失敗 SSH方式: 常規 選項卡中:localhost錄入數據庫賬號密碼 SSH 選項卡中:勾選使用SSH,輸入服務器IP、賬號、密碼 如果出現該錯誤,可能是服務器…

計算機網絡重點名詞解釋整理

名詞解釋 GPTVersion 一、網絡協議 網絡協議 數據交換的規則 組成:語義、語法、定時 二、DHCP DHCP 動態規劃主機配置協議 作用:讓計算機自動獲取IP地址 特點:即插即用,不需要手動設置 三、信號的基本調制方法以及定義 …

Windows下activemq開啟jmx

1.activemq版本信息 activemq&#xff1a;apache-activemq-5.18.4 2.Windows下activemq開啟jmx 1.進入activemq conf目錄&#xff0c;備份activemq.xml文件 2.編輯activemq.xml文件&#xff0c;在broker節點增加useJmx"true" <broker xmlns"http://active…

C++循環隊列 自定義queue

原理解析 看main部分的注釋&#xff0c;對照著函數&#xff0c;應該能看懂。 #include <iostream> class Queue {public:static constexpr int MAX_SIZE 5;int items[MAX_SIZE];int front, rear;Queue() : front(-1), rear(-1) {}void enqueue(int value) {if ((rear …

理解 Vue.js 中的 immediate: true

理解 Vue.js 中的 immediate: true 在使用 Vue.js 時&#xff0c;監聽器 (watchers) 是一種非常重要的工具&#xff0c;它允許我們觀察和響應數據的變化。在定義監聽器時&#xff0c;我們通常會在組件的 watch 選項中添加相關配置。immediate: true 是其中的一個配置選項。本文…

無線通訊幾種常規天線類別簡介

天線對于無線模塊來說至關重要&#xff0c;合適的天線可以優化通信網絡&#xff0c;增加其通信的范圍和可靠性。天線的選型對最后的模塊通信影響很大&#xff0c;不合適的天線會導致通信質量下降。針對不同的市場應用&#xff0c;天線的材質、安置方式、性能也大不一樣。下面簡…

近期計算機領域的熱點技術

隨著科技的飛速發展&#xff0c;計算機領域的新技術、新趨勢層出不窮。本文將探討近期計算機領域的幾個熱點技術趨勢&#xff0c;并對它們進行簡要的分析和展望。 一、人工智能與機器學習 人工智能&#xff08;AI&#xff09;和機器學習&#xff08;ML&#xff09;是近年來計算…

基于Vue 3.x與TypeScript的PPTIST本地部署與無公網IP遠程演示文稿

文章目錄 前言1. 本地安裝PPTist2. PPTist 使用介紹3. 安裝Cpolar內網穿透4. 配置公網地址5. 配置固定公網地址 前言 本文主要介紹如何在Windows系統環境本地部署開源在線演示文稿應用PPTist&#xff0c;并結合cpolar內網穿透工具實現隨時隨地遠程訪問與使用該項目。 PPTist …

[gpt胡說八道篇] 使用Docker快速啟動Doris

Docker 是一種輕量級的虛擬化技術&#xff0c;我們可以利用 Docker 快速的在本地啟動一個 Doris 的實例&#xff0c;方便進行開發和測試。下面我們來看一下如何操作。 1. 拉取 Docker 鏡像 首先&#xff0c;我們需要從 Docker Hub 上拉取 Doris 的鏡像。打開終端&#xff0c;輸…

Qt Qvariant

QVariant 是 Qt 框架中的一個非常強大的類&#xff0c;它用于存儲各種不同類型的數據&#xff0c;并提供了一種統一的方式來處理這些數據。QVariant 可以存儲大多數基本數據類型&#xff0c;如整數、浮點數、字符串、日期時間等&#xff0c;以及更復雜的數據類型&#xff0c;如…

ChatGPT的原理可以通俗易懂地介紹

ChatGPT的原理可以通俗易懂地介紹如下&#xff1a; 基礎架構&#xff1a; ChatGPT基于OpenAI的GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型&#xff0c;尤其是GPT-3的架構進行構建。GPT模型是一種基于Transformer架構的預訓練語言模型&#xff0c;特別…

基于STM32的智能水質監測系統

目錄 引言環境準備智能水質監測系統基礎代碼實現&#xff1a;實現智能水質監測系統 4.1 數據采集模塊4.2 數據處理與分析4.3 控制系統實現4.4 用戶界面與數據可視化應用場景&#xff1a;水質管理與優化問題解決方案與優化收尾與總結 1. 引言 智能水質監測系統通過使用STM32嵌…

RISC-V知識總結 —— 向量(擴展)指令集

資源1:晏明 - RISC-V向量擴展指令架構及LLVM自動向量化支持 - 202112118 - 第13屆開源開發工具大會&#xff08;OSDTConf2021&#xff09;_嗶哩嗶哩_bilibili資源2:張先軼 - 基于RISC-V向量指令集優化基礎計算軟件生態【第12屆開源開發工具大會&#xff08;OSDT2020&#xff09…

設計模式(實際項目)-狀態機模式

需求背景&#xff1a;存在狀態流轉的預約單 一.數據庫設計 CREATE TABLE appointment (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 主鍵id,appoint_type int(11) NOT NULL COMMENT 預約類型(0:線下查房...),appoint_user_id bigint(20) NOT NULL COMMENT 預約人…

研導智能科技——AI輔助科研產品開發

人工智能&#xff08;AI&#xff09;技術的飛速發展為科研領域帶來了革命性的變化。本公司致力于開發基于人工智能的科研輔助產品&#xff0c;旨在通過智能化手段提高科研人員的工作效率和研究質量。目前&#xff0c;我們成功開發了研導學術平臺&#xff08;www.zhiyanxueshu.c…

Linux運維:MySQL數據庫(1)

1.信息與數據&#xff1a; 數據是信息的載體&#xff0c;信息是數據的內涵。數據庫就是存儲數據的倉庫&#xff0c;并長期存儲在計算機磁盤中&#xff0c;可由多個用戶和應用程序共享的數據集合&#xff0c;就是數據庫。 2.數據庫中的數據的特點&#xff1a; 2.1.數據是按照某…