講完古典密碼之後,接下來將介紹現代密碼。
引入
古典密碼——對稱密碼演算法的雛形
古典密碼的特色:
① 共享同一個金鑰:加解密金鑰相同,或者由加密金鑰很容易得到解密金鑰。
② 資訊的“攪拌”:攪亂明文26各字母資訊,使得明文、密文、金鑰之間的統計關係變的混亂。
現代對稱密碼演算法設計核心
現代對稱密碼體制的加解密演算法是可以公開的,只要金鑰不洩露就行。現代對稱密碼又可以分為分組密碼和序列(流)密碼。下面主要是對分組密碼進行介紹。
4.1 分組密碼
分組密碼的定義:
分組密碼是將明文資料序列按照固定長度進行分組,讓後在同一金鑰控制下用同一演算法逐組進行加密,從而將各個明文分組變成一個長度固定的密文分組的密碼。
分組密碼的主要特點:
同一金鑰
同一加密演算法
分組加密
分組長度固定
加密:ci=E(mi),i=1,2,...,c=c1c2...,m=m1m2...
分組密碼的數學描述:
將明文訊息分組,逐組加密。
將明文訊息編碼表示後的數學序列x0,x1,...,xi,...劃分成長為n的組x=(x0,x1,...,xn-1).
各組(長為n的向量)分別在金鑰k=(k0,k1,...,kt-1).控制變換成輸出序列y=(y0,y1,...,ym-1)(長為m的向量)。
其加密函式E:Vn×K->Vm,Vn和Vm分別是n維和m維向量空間,K為金鑰空間。
明文分組長度為n,密文分組長度為m.
① 若n>m,則稱其為有資料壓縮的分組密碼。
② 若n<m,則稱其為有資料擴充套件的分組密碼。
通常取n=m,在二元情況下,明文x和密文y均為二院數字序列。它們的每個分量xi,yi∈GF(2).
常用的分組密碼演算法:
國際一些現行的標準:DES、3DES、IDEA、AES
中國分組密碼演算法標準(國密演算法、商用演算法):SM4
分組密碼設計原則:
① 安全原則
安全性是分組密碼設計時應考慮的最重要因素,人們一般將Shannon提出的混淆原則和擴散原則作為保證分組密碼安全性的兩個基本設計原則。
② 實現原則
硬體實現原則 & 軟體實現原則
“雪崩效應”
在密碼學中雪崩效應是指加密演算法(尤其是塊密碼和加密雜湊函式)的一種理想屬性。
雪崩效應是指當輸入發生最微小的改變(例如:反轉一個二進位制位)時,也會導致輸出的不可區分性改變(輸出中每個二進位制位50%的概率發生反轉)。
合格塊密碼中,無論金鑰或明文的任何細微變化都必須引起密文的不可區分性改變。
目的是抗擊敵手對密碼系統的統計分析。
擴散的實現方法
擴散:就是將明文的統計特性分佈到密文中去。
實現方式是使得明文的每一位影響密文中多位的值,等價於說密文中每一位均受明文中多為影響。這時明文的統計特性將被散佈到密文中。
因而每一字母在密文中出現的頻率比在明文中出現的頻率更接近於相等,雙字母及多字母出現的頻率也更接近於相等。
在二元分組密碼中,可對資料重複執行某個置換,再對這一置換作用於某一函式(代換),可獲得擴散。(置換+代換)
擴散的目的:使明文和密文之間的統計關係變得儘可能複雜,以使敵手無法得到金鑰。
混淆的實現方法
混淆:是是密文和金鑰之間的統計關係變得儘可能複雜,以使敵手無法得到金鑰。
即使敵手能得到密文的一些統計關係,由於金鑰和密文之間的統計關係複雜化,敵手也無法獲得金鑰。
使用複雜的代換演算法可以得到預期的混淆效果。簡單的線性代換函式得到的混淆效果則不夠理想,一般採用非線性代換。
擴散和混淆成功地實現分組密碼本質屬性,因而成為設計現代分組密碼的基礎。
分組密碼的設計方法
① 乘積密碼 ② 迭代密碼
① 乘積密碼
Shannon提出乘積密碼的思想。乘積密碼的基本思想是:通過將一個易於實現的具有一定混亂和擴散結構的較弱的密碼函式進行多次迭代來產生一個強的密碼函式。
主要思想:通過簡單密碼的乘積來組合密碼體制。
(1)乘法密碼
設M=C=Z26,K={a∈Z26;gcd(a,26)=1},對於a∈K,明文x,密文y,定義:
Ea(x)=ax (mod 26)
Da(y)=a-1y (mod 26)
(2)移位密碼
對於k∈K,明文x,密文y,定義:
Ek(x)=(x+k) (mod 26)
Dk(y)=(y-k) (mod 26)
假設S1是乘法密碼,S2是移位密碼,很容易看出S1×S2是仿射密碼。
對於S1×S2,其金鑰形式為(a,k)
E(a,k)(x)=(ax+k) (mod 26)
對於S2×S1,其金鑰形式為(k,a)
E(k,a)(x)=(ax+ak) (mod 26)
② 迭代密碼
當今大多數分組密碼都是乘積密碼,乘積密碼通常伴隨一系列置換與代替操作,常見的乘積密碼是迭代密碼。
迭代密碼通過講一個弱的密碼函式(稱為圈函式、輪函式等)迭代若干次,產生一個強的密碼函式,既能快速、有效地實現,又能使明文和金鑰得到必要的混淆和擴散。
g稱為圈變換、圈函式或輪函式。Nr稱為迭代次數、圈數或輪數。(K1,K2,...,KNr)是r個圈子祕鑰。
在設計圈函式時,要充分利用代換密碼和置換密碼各自的優點,抵消各自的缺點,保證通過多次迭代,形成一個強的分組密碼演算法。
典型的迭代密碼:
明確定義一個輪函式和一個金鑰編排方案,一個明文的加密將通過Nr輪類似過程。
K——確定長度的隨機二元金鑰
用K生成Nr個輪金鑰(也稱為子金鑰)K1,K2,...,KNr,其列表(K1,K2,...,KNr)即為金鑰編排方案,它是由K經過一個固定的、公開的演算法生成的。
輪函式g
輪函式g以輪金鑰Kr和當前狀態Wr-1作為它的兩個輸入,下一個狀態定義為Wr,初態W0被定義為明文x,密文y定義為經過Nr輪後的狀態。有
Wr=g(Wr-1,Kr)
加密過程:
W0 <- x 初態
W1 <- g(W0,K1) 第1輪
W2 <- g(W1,K2) 第2輪
...
WNr-1 <- g(WNr-2,KNr-1) 第Nr-2輪
WNr <- g(WNr-1,KNr) 第Nr-1輪
y <- WNr 第Nr輪
為解密,g在第二個變數固定的情況下,必須是單射,即等價於存在g-1,g-1(g(w,k),k)=w.
解密過程:
WNr <- y
WNr-1 <- g-1(WNr,KNr)
...
W1 <- g-1(W2,K2)
W0 <- g-1(W1,K1)
x <- W0
迭代密碼常見的模型有S-P網路(代替-置換網路),Feistel網路等。
代替-置換網路(S-PN)Substitution-Permutation
一個S-PN就是一類特殊的迭代密碼,設l和m都是正整數,明密文都是長為lm的二元向量。一個S-PN包含兩個變換,分別記為∏s和∏p.
∏s:{0,1}l -> {0,1}l 實現l位元的代替,即S盒。
∏p:{1,2,...,lm} -> {1,2,...,lm},實現lm位元的置換,即P盒。
x=(x1,x2,...,xm)=x<1>||x<2>||...||x<m>.
x<i>=(x(i-1)l+1,x(i-1)l+2,...,xil),1≤i≤m.
S-PN特點:
由Nr輪組成,在每一輪(最後一輪稍有不同),先用異或操作混入該輪的輪金鑰,再用∏s進行m次代換,然後用∏p進行一次置換。
密碼體制 3.1 代換-置換網路
演算法 3.1
① 對金鑰編排方案適當修改並用S盒的逆代替S盒,該演算法也能用於解密。
② 第一個和最後一個異或輪金鑰(白化)使得一個不知道金鑰的攻擊者,無法開始進行一個加密或解密操作。
非線性替換S一般稱為混亂層,主要起混亂的作用;線性置換P一般稱為擴散層,主要起擴散的作用。
Fristel體制
① 單輪Feistel
Feistel模型將輸入(2w位)分成相同長度的兩部分Li和Ri,按如下方式進行變換。
② Feistel模型的特點
(1)每輪的輸入(明文分組或上輪的輸出)被分成左右兩半;
(2)右邊一半資料直接作為輸出的左邊一半;
(3)輸出的右邊一半由輸入的左邊一半異或右邊一半輸入在一個函式F作用下的結果而得到的;
(4)F函式是輪變換的核心,它被稱為輪函式。輪函式F有兩個輸入:本輪的右邊一半輸入和本輪的輪(子)金鑰;
(5)輪函式F得到結構式固定不變的,這是各輪的輸入不斷變化;
(6)輪函式中包含了代換、置換以及換入子金鑰的操作;
(7)加解密演算法的結構相同,只是子金鑰的使用出相反。
③ Feistel模型的設計要求
分組大小:
分組越大,安全性越高,但速度也就越慢。
金鑰大小:
金鑰越長,安全性越高,但速度也就越慢。
迴圈次數:
迴圈越多,安全性越高。
圈函式:
複雜性越高則抗擊密碼分析的能力就越強。
子金鑰產生演算法:
複雜性越高,則密碼分析的難度就越大。
此外還要考慮演算法的執行速度,設計演算法便於分析。