密碼學系列文(3)--分組密碼

一、分組密碼概述

分組密碼是許多系統安全的一個重要組成部分,可用于構造:

  • 擬隨機數生成器
  • 流密碼
  • 消息認證碼(MAC)和雜湊函數
  • 消息認證技術、數據完整性機構、實體認證協議以及單鑰數字簽字體制的核心組成部分

應用中對于分組密碼的要求:

  • 安全性
  • 運行速度
  • 存儲量(程序的長度、數據分組長度、高速緩存大小)
  • 實現平臺(硬、軟件、芯片)
  • 運行模式

明文序列x_1,x_2,...,x_i,...

加密函數E:V_n\times K\rightarrow V_n

這種密碼實質上是字長為m的數字序列的代換密碼;如圖所示:

通常取n=m

n>m,則為有數據擴展的分組密碼;

n<m,則為有數據壓縮的分組密碼;

分組密碼的設計問題在于找到一種算法,能在密鑰控制下從一個足夠大且足夠好的置換子集中,簡單而迅速地選出一個置換,用來對當前輸入的明文的數字組進行加密變換。

分組密碼算法應滿足的要求:

  • 分組長度n要足夠大:防止明文窮舉攻擊法奏效;
  • 密鑰量要足夠大:盡可能消除弱密鑰并使所有密鑰同等地好,以防止密鑰窮舉攻擊奏效;
  • 由密鑰確定置換的算法要足夠復雜:充分實現明文與密鑰的擴散和混淆,沒有簡單的關系可循,要能抗擊各種已知的攻擊;
  • 加密和解密運算簡單:易于軟件和硬件高速實現;
  • 數據擴展:一般無數據擴展,在采用同態置換和隨機化加密技術時可引入數據擴展;
  • 差錯傳播盡可能地小

1.1 代換網絡

  • 代換是輸入集A到輸出A'上的雙射變換:f_k:A\rightarrow A'。式中,k是密鑰。
  • 實現代換f_k的網絡稱作代換網絡。雙射條件保證在給定k下可從密文唯一地恢復出原明文。
  • 代換f_k的集合:S=\left \{ f_k|k\in K \right \},K是密鑰空間。如果網絡可以實現所有可能的2^n!個代換,則稱其為全代換網絡。全代換網絡密鑰個數必須滿足條件:\left \{ k \right \}\geq 2^n!.
  • 密碼設計中需要先定義代換集S,而后還需定義解密變換集,即逆代換網絡S^{-1},它以密文y作為輸入矢量,其輸出為恢復的明文矢量x
  • 要實現全代換網絡并不容易。因此實用中常常利用一些簡單的基本代換,通過組合實現較復雜的、元素個數較多的代換集。實現密碼體制的集合S中的元素個數都遠小于2^n!

1.2 代換盒(S盒)?

在密碼設計中,可選n=r\cdot n_0,其中rn_0都為正整數,將設計n個變量的代換網絡化為設計r個較小的子代換網絡,而每個子代換網絡只有n_0個輸入變量。稱每個子代換網絡為代換盒(Substitution Box)

DESS_1盒的輸入和輸出關系:

1.3 擴散和混淆

  • 擴散將明文的統計特征散步到密文中。實現的方式是使明文的每一位影響密文中多位的值。
  • 混淆是使密文和密鑰之間的統計關系變得盡可能復雜,以使敵手無法得到密鑰。因此即使敵手能得到密文的一些統計關系,由于密鑰和密文之間統計關系復雜化,敵手無法得到密鑰。

擴散和混淆成功地實現了分組密碼的本質屬性,因而成為設計現代分組密碼的基礎。

S盒的設計準則實現較好的混淆:

  • S盒的輸出都不是其輸入的線性或仿射函數;
  • 改變S盒的一個輸入比特,其輸出至少有兩比特產生變化,即近一半產生變化;
  • 當S盒的任一輸入位保持不變,其它5位輸入變化時(共有2^5=32種情況),輸出數字中的0和1的總數近于相等;

S盒的組合(將幾個S盒組合起來構成一個n值較大的組):

  • 將幾個S盒的輸入端并行,并通過坐標置換(P盒)將各S盒輸出比特次序打亂,再送到下一級各S盒的輸入端,起到了Shannon所謂的“擴散”作用。
  • S盒提供非線性變換,將來自上一級不同的S盒的輸出進行混淆。經過P盒的擴散作用使1均勻分散到整個輸出矢量中,從而保證了輸出密文統計上的均勻性,這就是Shannon的乘積密碼的作用。

1.4 Feistel網絡

將n比特明文分成為左右各半,長為\frac{n}{2}比特的段,以LR表示。然后進行多輪迭代,其第i輪迭代的輸出為前輪輸出的函數:

  • L_i=R_{i-1}
  • R_i=L_{i-1}\bigoplus f(R_{i-1},K_i)

式中,K_i是第i輪用的子密鑰,f是任意密碼輪函數。稱這種分組密碼算法為Feistel網絡,它保證加密和解密可采用同一算法實施。

1.5 迭代分組密碼

若以一個簡單函數f,進行多次迭代,就稱其為迭代密碼

每次迭代稱作一輪(Round),相應函數f稱作輪函數

每一輪輸出都是前一輪輸出的函數,即y^{(i)}=f(y^{(i-1)},k^{(i)}),其中k^{(i)}是第i輪迭代用的子密鑰,由秘密密鑰k通過密鑰生成算法產生;

二、分組密碼運行模式

即使有了安全的分組密碼算法,也需要采用適當的工作模式來隱蔽明文的統計特性、數據的格式等,以提高整體的安全性,降低刪除、重放、插入和偽造成功的機會。

2.1 電碼本模式(ECB)

  • 直接利用加密算法分別對分組數據組加密
  • 在給定的密鑰下同一明文組總產生同樣的密文組。這會暴露明文數據的格式和統計特征。明文數據都有固定的格式,需要以協議的形式定義,重要的數據常常在同一位置上出現,使密碼分析者可以對其進行統計分析、重傳和代換攻擊。

2.2 密碼分組鏈接模式(CBC)

  • 每個明文組P_i加密之前,先與反饋至輸入端的前一組密文C_{i-1}按位模2求和后,再送至加密算法加密
  • 各密文組C_{i}不僅與當前明文組P_i有關,而且通過反饋作用還與以前的明文組P_1,P_2,...,P_{i-1}有關。

  • 初始矢量IV:第一組明文加密時尚無反饋密文,為此需要在寄存器中預置一個,收發雙方必須選用同一個IV;
  • 實際上,IV的完整性要比其保密性更為重要。在CBC模式下,最好是每發一個消息,都改變IV,比如將其值加1.

CBC的錯誤傳播:

  • 明文有一組中有錯,會使以后的密文組都受影響,但經解密后的恢復結果,除原有誤的一組外,其后各組明文都正確地恢復;
  • 若在傳送過程中,某組密文組C_i出錯時,則該組恢復的明文P_i'和下一組恢復數據P_{i+1}'出錯。再后面的組將不會受C_i中錯誤比特的影響

2.3 密碼反饋模式(CFB)

對于k比特密碼反饋模式

  • 若待加密消息必須按字符或按比特處理時,可采用CFB模式
  • CFB實際上是將加密算法DES作為一個密鑰流產生器,當k=1時就退化為流密碼了

CFB的優點:

  • 特別適合用戶數據格式的需要
  • 能隱蔽明文數據圖樣,也能檢測出對手對于密文的篡改

CFB的缺點:

  • 對信道錯誤較敏感,且會造成錯誤傳播
  • CFB也需要一個初始矢量,并要和密鑰同時進行更換

2.4 輸出反饋模式(OFB)

  • 將分組密碼算法作為一個密鑰流產生器,其輸出的k比特密鑰直接反饋至分組密碼的輸入端,同時這k比特密鑰和輸入的k比特明文段進行對應位模2相加;
  • 克服了CBC和CFB的錯誤傳播所帶來的問題
  • 對于密文被篡改難以進行檢測

2.5?填充(Padding)

給定加密消息的長度是隨機的,如果按64bit分組時,最后一組消息長度可能不足64bit。此時可以填充一些數字,通常用最后1字節作為填充指示符(PI)。它所表示的十進制數字就是填充占有的字節數。數據尾部、填充字符和填充指示符一起作為一組進行加密。

三、DES算法

雖然DES已有替代的數據加密標準算法,但是它仍是迄今為止得到最廣泛應用的一種算法,也是一種最有代表性的分組加密體制;

  • 分組長度為64 bits;
  • 密文分組長度也是64 bits;
  • 密鑰長度為64 bits,有8 bits奇偶校驗,有效密鑰長度為56 bits;
  • 算法主要包括:初始置換IP、16輪迭代的乘積變換、逆初始置換以及16個子密鑰產生器;

DES算法框圖如下所示:

3.1 初始置換IP

將64 bit明文的位置進行置換,得到一個亂序的64 bit明文組,而后分成左右兩段,每段為32 bit

初始置換和逆初始置換在密碼意義上作用不大,它們的作用在于打亂原來輸入x的ASCII碼字劃分的關系,并將原來明文的校驗位x_8,x_{16},x_{32},x_{64}變成為IP輸出的一個字節

3.2 輪結構

  • DES算法的核心部分,將經過IP置換后的數據分成32 bit的左右兩組,在迭代過程中彼此左右交換位置
  • 每次迭代時只對右邊的32 bit進行一系列的加密變換,在此輪迭代即將結束時,把左邊的32 bit與右邊得到的32 bit逐位模2相加,作為下一輪迭代時右邊的段,并將原來右邊未經過變換的段直接送到左邊的寄存器中作為下一輪迭代時左邊的段
  • 在每一輪迭代時,右邊的段要經過選擇拓展運算E、密鑰加密運算、選擇壓縮運算S、置換運算P和左右混合運算

DES加密算法的輪結構:

3.3 DES的安全性

  • 互補性:若明文組x逐位取補,密鑰k逐位取補,即y=DES_k(x),則有\bar{y}=DES_k(\bar{x}))。這種互補性會使DES在選擇明文破譯下所需的工作量減半;
  • 弱密鑰和半弱密鑰:DES算法在每次迭代時都有一個子密鑰供加密用。如果給定初始密鑰k,各輪的子密鑰都相同,即有k_1=k_2=...=k_{16}就稱給定密鑰為弱密鑰;

k為弱密鑰,則有DES_k(DES_k(x))=xDES_k^{-1}(DES_k^{-1}(x))=x

即以kx加密兩次或解密兩次都可恢復出明文。其加密運算和解密運算沒有區別。弱密鑰下使DES在選擇明文攻擊下的搜索量減半。

如果隨機地選擇密鑰,弱密鑰所占比例極小,而且稍加注意就不難避開。因此,弱密鑰的存在不會危及DES的安全性。

  • DES密鑰太短:窮搜索對DES構成威脅

3.4 兩重DES

用DES進行兩次加密,不能意味著兩重DES加密強度等價于112 bit密鑰的密碼的強度

  • 中途相遇攻擊法

由Diffie和Hellman最早提出,可以降低搜索量。其基本思想如下:

若有明文密文對(x_i,y_i)滿足y_i=E_{k_2}[E_{k_1}(x_i)]則可得z=E_{k_1}(x_i)=D_{k_2}(y_i)

給定一已知明密文對(x_1,y_1),可按下述方法攻擊:

  • 以密鑰k_1的所有2^{56}個可能的取值對此明文x_1加密,并將密文z存儲在一個表中;
  • 從所有可能的2^{56}個密鑰k_2中依任意次序選出一個對給定的密文y_1解密,并將每次解密結果z在上述表中查找相匹配的值。一旦找到,則可確定出兩個密鑰k_1k_2
  • 以此對密鑰k_1k_2對另一已知明密文對(x_2,y_2)中的明文x_2進行加密,如果能得出相應的密文y_2就可確定k_1k_2是所要找的密鑰

分析知道:

  • 對于給定明文x,以兩重DES加密將有2^{64}個可能的密文
  • 可能的密鑰數為2^{112}。所以,在給定明文下,將有2^{112}/2^{64}=2^{48}個密鑰能產生給定的密文
  • 用另一對64 bits明文密文對進行檢驗,就使虛報率降為2^{48-64}=2^{-16}
  • 這一攻擊法所需要的存儲量為2^{56}\times 8?字節,最大試驗的加密次數2\times2^{56}。這說明破譯雙重DES的難度為2^{57}量級;

3.5 三重DES加密

  • 加密:y=E_{k_1}[D_{k_2}[E_{k_1}(x)]]
  • 解密:x=D_{k_1}[E_{k_2}[D_{k_1}(y)]]

破譯它的窮舉密鑰搜索量為2^{112}\approx 5\times 10^{35}量級,而用差分分析破譯也要超過10^{52}量級。此方案仍有足夠的安全性;

四、分組密碼的分析

4.1 差分密碼分析

  • 差分密碼分析是一種攻擊迭代分組密碼的選擇明文統計分析破譯法;
  • 它不是直接分析密文或密鑰的統計相關性,而是分析明文差分和密文差分之間的統計相關性;
  • 給定一個r輪迭代密碼,對已知n長明文對XX',定義其差分為:\Delta X=X\bigotimes (X')^{-1}。其中,\bigotimes表示n bits組X的集合中定義的群運算,(X')^{-1}X'在群中的逆元。
  • 在密鑰作用下,各輪迭代所產生的中間密文差分為\Delta Y(i)=Y(i)\bigotimes Y'(i)^{-1},0\leq i\leq r
  • i=0時,Y(0)=X,Y'(0)=X',\Delta Y(0)=\Delta X
  • i=r時,\Delta Y=\Delta Y(r),k^{(i)}是第i輪加密的子密鑰,Y(i)=f(Y(i-1),k^{(i)})
  • 由于X\neq X',因此,\Delta Y(i)\neq e(單位元)
  • 每輪迭代所用子密鑰k^{(i)}與明文統計獨立,且可認為服從均勻分布;

如圖所示為r輪迭代分組密碼的差分序列:

  • Lai等引入Markov鏈描述多輪迭代分組密碼的差分序列。并定義了Markov密碼
  • Lai等證明,Markov密碼的差分序列\Delta X= \Delta Y(0), \Delta Y(1),..., \Delta Y(r)是一齊次Markov鏈,且若\Delta X在群的非零元素上均勻分布,則此Markov鏈是平穩的;
  • 不少迭代分組密碼可歸結為Markov密碼;
  • 一個Markov型密碼,可以用轉移概率P(\Delta Y(1)=\alpha _j | \Delta X=\alpha _i)的所有可能轉移值構成的矩陣描述,稱其為齊次Markov鏈的轉移概率矩陣,以\Omega表示;
  • 一個n bits分組密碼有1\geq i,j\leq M=2^n-1。對所有r,有\Omega^{r}=P_{ij}^{(r)}=P(\Delta Y(r)=\alpha_j |\Delta X=\alpha_i ),\Omega的每一行都是一概率分布,行元素之和為1;
  • 對于Markov型密碼,當\Delta X在非零元素上為均勻分布,則\Delta Y為一平穩Markov鏈,此時對于每個j即各列元素之和也為1,從而可1知各列也構成一概率分布;
  • 差分密碼分析揭示出,迭代密碼中的一個輪迭代函數f,若已知三元組\left \{ \Delta Y(i-1),Y(i),Y'(i) |Y(i)=f(Y(i-1),k^{(i)}),Y'(i)=f(Y'(i-1),k^{(i)} \right \},則不難決定該輪密鑰k^{(i)};
  • 因此輪函數f的密碼強度不高。如果已知密文對,且有辦法得到上一輪輸入對的差分,則一般可決定出上一輪的子密鑰(或其主要部分);
  • 在差分密碼分析中,通常選擇一對具有特定差分\alpha的明文,它使最后一輪輸入對的差值\Delta Y(r-1)為特定值\beta的概率很高;

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

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

相關文章

WCDB soci 查詢語句

測試代碼 #pragma once #include <string> #include <vector>// Assume OperationLog is a struct representing a row in the table struct OperationLog {int id;std::string op_type;std::string op_subtype;std::string details;std::string timestamp; };clas…

lesson16:Python函數的認識

目錄 一、為什么需要函數&#xff1f; 1. 拒絕重復造輪子 2. 讓代碼像句子一樣可讀 3. 隔離變化&#xff0c;降低維護成本 二、函數的定義&#xff1a;編寫高質量函數的5個要素 基本語法框架 1. 函數命名的黃金法則&#xff08;PEP8規范&#xff09; 2. 不可或缺的文檔…

通過輪詢方式使用LoRa DTU有什么缺點?

在物聯網系統中&#xff0c;DTU&#xff08;Data Transfer Unit&#xff09;通常用于通過485或M-Bus等接口抄讀子設備的數據&#xff0c;并將這些數據傳輸到平臺側。然而&#xff0c;如果DTU采用輪詢方式與平臺通信&#xff0c;會帶來一系列問題&#xff0c;尤其是在功耗和系統…

Syntax Error: Error: PostCSS received undefined instead of CSS string

報錯&#xff1a;Syntax Error: Error: PostCSS received undefined instead of CSS string npm rebuild node-sass報錯&#xff1a;npm i canvas 報錯 canvas2.11.2 run install node-pre-gyp install --fallback-to-build --update-binary npm install canvas --canvas_binar…

人工智能之數學基礎:概率論和數理統計在機器學習的地位

概率和統計的概念概率統計是各類學科中唯一一門專門研究隨機現象的規律性的學科&#xff0c;隨機現象的廣泛性決定了這一學科的重要性。概率論是數學的分支&#xff0c;它研究的是如何定量描述隨機現象及其規律。我們之前經常在天氣軟件上看到&#xff1a;“今天下雨的概率是95…

第十四章 Stream API

JAVA語言引入了一個流式Stream API,這個API對集合數據進行操作&#xff0c;類似于使用SQL執行的數據庫查詢&#xff0c;同樣可以使用Stream API并行執行操作。Stream和Collection的區別Collection:靜態的內存數據結構&#xff0c;強調的是數據。Stream API:和集合相關的計算操作…

Oracle數據庫各版本間的技術迭代詳解

今天我想和大家聊聊一個我們可能每天都在用&#xff0c;但未必真正了解的技術——Oracle數據庫的版本。如果你是企業的IT工程師&#xff0c;可能經歷過“升級數據庫”的頭疼&#xff1b;如果你是業務負責人&#xff0c;可能疑惑過“為什么一定要換新版本”&#xff1b;甚至如果…

論文reading學習記錄3 - weekly - 模塊化視覺端到端ST-P3

文章目錄前言一、摘要與引言二、Related Word2.1 可解釋的端到端架構2.2 鳥瞰圖2.3 未來預測2.4 規劃三、方法3.1 感知bev特征積累3.1.1 空間融合&#xff08;幀的對齊&#xff09;3.1.2 時間融合3.2 預測&#xff1a;雙路徑未來建模3.3 規劃&#xff1a;先驗知識的整合與提煉4…

crawl4ai--bitcointalk爬蟲實戰項目

&#x1f4cc; 項目目標本項目旨在自動化抓取 Bitcointalk 論壇中指定板塊的帖子數據&#xff08;包括主貼和所有回復&#xff09;&#xff0c;并提取出結構化信息如標題、作者、發帖時間、用戶等級、活躍度、Merit 等&#xff0c;以便進一步分析或使用。本項目只供科研學習使用…

調用 System.gc() 的弊端及修復方式

弊端分析不可控的執行時機System.gc() 僅是 建議 JVM 執行垃圾回收&#xff0c;但 JVM 可自由忽略該請求&#xff08;尤其是高負載時&#xff09;。實際回收時機不確定&#xff0c;無法保證內存及時釋放。嚴重的性能問題Stop-The-World 停頓&#xff1a;觸發 Full GC 時會暫停所…

git merge 和 git rebase 的區別

主要靠一張圖&#xff1a;區別 git merge git checkout feature git merge master此時在feature上git會自動產生一個新的commit 修改的是當前分支 feature。 git rebase git checkout feature git rebase master&#xff08;在feature分支上執行&#xff0c;修改的是master分支…

Java學習--JVM(2)

JVM提供垃圾回收機制&#xff0c;其也是JVM的核心機制&#xff0c;其主要是實現自動回收不再被引用的對象所占用的內存&#xff1b;對內存進行整理&#xff0c;防止內存碎片化&#xff1b;以及對內存分配配進行管理。JVM 通過兩種主要算法判斷對象是否可回收&#xff1a;引用計…

用大模型(qwen)提取知識三元組并構建可視化知識圖譜:從文本到圖譜的完整實現

引言 知識圖譜作為一種結構化的知識表示方式&#xff0c;在智能問答、推薦系統、數據分析等領域有著廣泛應用。在信息爆炸的時代&#xff0c;如何從非結構化文本中提取有價值的知識并進行結構化展示&#xff0c;是NLP領域的重要任務。知識三元組&#xff08;Subject-Relation-O…

(附源碼)基于 Go 和 gopacket+Fyne 的跨平臺網絡抓包工具開發實錄

基于 Go 和 gopacket Fyne 的跨平臺網絡抓包工具開發實錄 一、項目背景 在網絡安全、協議分析、運維排查等場景中&#xff0c;抓包工具是不可或缺的利器。Wireshark 雖然功能強大&#xff0c;但對于部分初學者或有定制需求的開發者來說&#xff0c;學習曲線較陡&#xff0c;且…

Langchain和Faiss搭建本地知識庫對比

對比 對比維度及優缺點分析對比維度LangChain&#xff08;封裝 FAISS&#xff09;直接使用 FAISS易用性? 高&#xff0c;提供高級封裝&#xff0c;簡化開發流程? 中等&#xff0c;需要熟悉 FAISS API學習成本? 低&#xff0c;適合快速開發? 高&#xff0c;需要掌握 FAISS 的…

Java常用命令匯總

JDK 工具命令jps&#xff08;Java Virtual Machine Process Status Tool&#xff09;命令示例&#xff1a;jps -l 應用場景&#xff1a;列出當前系統中所有Java進程的PID和主類名&#xff0c;常用于快速定位Java應用的進程ID。javac&#xff08;Java Compiler&#xff09;命令示…

Llama 2:開放基礎模型與微調聊天模型

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" Llama 2&#xff1a;開放基礎模型與微調聊天模型 摘要 在本研究中&#xff0c;我們開發并發布了 Llama 2&#xff0c;一組預訓練和微調的大型語言模型&#xff08;LLMs&#xff09;&#xff0c;其規模從 70 億參…

ThinkPHP 8 在 Apache 下啟用偽靜態

ThinkPHP 8 在 Apache 下啟用偽靜態&#xff0c;需要配置 .htaccess 文件并確保 Apache 支持 URL 重寫。以下是詳細設置步驟&#xff1a;1. 啟用 Apache 重寫模塊首先確保 Apache 的 mod_rewrite 模塊已啟用。編輯 Apache 配置文件&#xff08;通常是 /etc/apache2/apache2.con…

Android開發中Retrofit使用方法與底層原理詳解

Retrofit 是 Android 開發中一個 類型安全、基于注解、高度解耦 的 RESTful HTTP 客戶端庫&#xff0c;由 Square 公司開發。它極大地簡化了 Android 應用與 Web 服務進行網絡交互的過程。 核心價值&#xff1a; 聲明式 API 定義&#xff1a; 使用 Java/Kotlin 接口和注解描述 …

基于FPGA的IIC控制EEPROM讀寫(2)

基于FPGA的IIC控制EEPROM讀寫 文章目錄基于FPGA的IIC控制EEPROM讀寫一、EEPROM簡介二、代碼實現——個人理解1、狀態機2、仿真效果3、上板驗證4、代碼top.viic_master.vuart三、代碼實現——復用性較高的IIC模塊1、框架設計2、狀態機設計3、仿真效果4、上板驗證5、代碼top.viic…