DES算法流程
DES數(shù)據(jù)加密標(biāo)準(zhǔn) (Data Encryption Standard)是一個16輪的Feistel型結(jié)構(gòu)密碼,它的分組長度為64比特,用一個56比特的密鑰來加密一個64比特的明文串,輸出一個64比特的密文串。其中,使用密鑰為64比特,密鑰位數(shù)是56比特,另8位用作奇偶校驗,加密用的位數(shù)是48比特。加密的過程是先對64位明文分組進行初始置換,然后分左、右兩部分分別經(jīng)過16輪迭代,然后再進行循環(huán)移位與變換,最后進行逆變換得出密文。加密與解密使用相同的密鑰,因而它屬于對稱密碼體制。
DES算法流程
a) 擴展置換E
b) S盒代換
c) 置換P
Feistel結(jié)構(gòu):feistel結(jié)構(gòu)把任何函數(shù)(一般稱為F函數(shù),又稱輪函數(shù))轉(zhuǎn)化為一個置換。
子密鑰的生成:子密鑰K的生成大致分成三個過程:置換選擇PC1,循環(huán)左移,置換選擇PC2。
Ln = R(n - 1);
Rn = L(n - 1)⊕f(Rn-1,kn-1)
1.初始置換
DES算法使用64位的密鑰key將64位的明文輸入塊變?yōu)?4位的密文輸出塊,并把輸出塊分為L0、R0兩部分,每部分均為32位。初始置換規(guī)則如下:
注意:這里的數(shù)字表示的是原數(shù)據(jù)的位置,不是數(shù)據(jù)
初始置換把64位明文的第1位置換到第40位,第2位置換到第8位,第3位置換到第48位。以此類推,最后一位是原來的第7位。
M1=(123456789ABCDEF)16
=(00000001 00100011 01000101 01100111 10001001 10101011 11001101 11101111)2
經(jīng)過IP置換,并分成左右兩部分,結(jié)果為:
L0=11001100 00000000 11001100 11111111
R0=11110000 10101010 11110000 10101010
2.生成16個48位的子密鑰
DES算法由64位秘鑰產(chǎn)生16輪的48位子秘鑰。在每一輪的迭代過程中,使用不同的子秘鑰。
a、在DES中,每一輪迭代都使用了一個輪密鑰。輪密鑰是從用戶輸入的密鑰k(64位)產(chǎn)生的。實用密鑰是56位,另8位是奇偶校驗位:輸出密鑰k的第8 , 16 , …,64位為奇偶校驗位(每一字節(jié)的最后一位),這些位的值使得每個字節(jié)恰好包含了奇數(shù)個1,這樣如果輸入密鑰中某個字節(jié)中存在一個錯誤,奇偶校驗可以幫助查到這些錯誤。根據(jù)選擇置換PC-1將這56位分成兩塊C0(28位)和D0(28位);
b、將C0和D0進行循環(huán)左移變化(注:每輪循環(huán)左移的位數(shù)由輪數(shù)決定),變換后生成C1和D1,然后C1和D1合并,并通過選擇置換PC-2生成子密鑰K1(48位);
c、C1和D1在次經(jīng)過循環(huán)左移變換,生成C2和D2,然后C2和D2合并,通過選擇置換PC-2生成密鑰K2(48位);
d、以此類推,得到K16(48位)。但是最后一輪的左右兩部分不交換,而是直接合并在一起R16L16,作為逆置換的輸入塊。其中循環(huán)左移的位數(shù)一共是循環(huán)左移16次,其中第一次、第二次、第九次、第十六次是循環(huán)左移一位,其他都是左移兩位。
密鑰置換選擇PC-1(子秘鑰的生成)
操作對象是64位秘鑰,初始密鑰K=(123DAB779F658067)16
=(00010010 00111101 10101011 01110111 10011111 01100101 10000000 01100111)2
64位秘鑰通過縮小選擇換位表1的變換變成56位。如下:
再將56位秘鑰分成C0和D0:
C0=(0101010 0101010 0010101 1100001)2
D0=(1001110 1101110 1000010 1101011)2
根據(jù)輪數(shù),將Cn和Dn分別循環(huán)左移1位或2位
循環(huán)左移每輪移動的位數(shù)如下:
第一輪是循環(huán)左移1位。循環(huán)左移1位后如下:
C1=(1010100 1010100 0101011 1000010)2
D1=(0011101 1011101 0000101 1010111)2
C1和D1合并之后,再經(jīng)過置換選擇表2生成48位的子秘鑰K1。置換選擇表2(PC-2)如下:
去掉第9、18、22、25、35、38、43、54位,從56位變成48位,再按表的位置置換。
K1=(000011 100011 001001 101100 011011 010010 011100 011101)
C1和D1再次經(jīng)過循環(huán)左移變換,生成C2和D2,C2和D2合并,通過PC-2生成子秘鑰K2。
以此類推,得到子秘鑰K1~K16。需要注意其中循環(huán)左移的位數(shù)。
3.F輪函數(shù)
將明文進行完初始置換IP后,進入輪函數(shù)F。輪函數(shù)F中包含運算(擴展置換E、S盒代換、置換IP)
R0=11110000 10101010 11110000 10101010
K1=000011 100011 001001 101100 011011 010010 011100 011101
通過擴展置換E,數(shù)據(jù)的右半部分R0從32位擴展到48位。擴展置換改變了位的次序,重復(fù)了某些位。
擴展置換的目的:
a、產(chǎn)生與秘鑰相同長度的數(shù)據(jù)以進行異或運算,R0是32位,子秘鑰是48位,所以R0要先進行擴展置換之后與子秘鑰進行異或運算;
b、提供更長的結(jié)果,使得在替代運算時能夠進行壓縮。
E(R0)=011110 100001 010101 010101 011110 100001 010101 010101
E(R0)⊕K1=011101 000010 011100 111001 000101110011 001001 001000
S盒代換
在密碼函數(shù)f (R , k)中有8個S盒,稱為8個不同的選擇函數(shù),分別用S1,S2,…S8表示。每個S盒都是將6位作為輸入,得到一個4位塊作為輸出。
以S1為例,若B是6位的一個塊,則S1(B)計算如下:B的第一和最后一位表示從0到3之間的二進制數(shù),令該數(shù)為i ;而B的中間4位表示從0到15之間的二進制數(shù),令該數(shù)為j;在該表S1中查第i行j列的數(shù),它是從0到15之間的一個數(shù),且唯一地由4位塊代表,則該塊就是輸入B的S1的輸出S1(B)例如對于輸入為101000而言,行是10,即第2行。而列是由0100確定,即第5列,S1盒的第2行與第5列的交叉處即為B,因而輸出為1101,因此1101就是S盒S1在輸入為101000時的輸出。
在f ( R , k )的計算中,它將由模2加運算得到的b1,b2,…,b48按每6個一組共
分為8組,順序記為B1,B2,…,B8它們分別經(jīng)過8個選擇函數(shù) Si運算變成C1,C2,…,C32即
S1(B1)S2(B2)…S8(B8) = C1,C2,…,C32
E(R0)⊕K1=011101 000010 011100 111001 000101110011 001001 001000
S1的輸入為011101,第一位和第六位組成行,行選為01(即第1行),中間四位組成列,列選為1100(即第12列,8+4),行列交叉位置的數(shù)為9,其4位二進制表示為1001,所以S1的輸出為1001。
S2的輸入為000010,第一位和第六位組成行,行選為00(即第0行),中間四位組成列,列選為0001(即第1列),行列交叉位置的數(shù)為1,其4位二進制表示為0001,所以S2的輸出為0001。
S盒的32bit輸出為:
S(E(R0)⊕K1)=0011 0001 0010 1100 0010 1110 0100 0110
再經(jīng)過P盒置換,S-盒代替運算,每一盒得到4位,8盒共得到32位輸出。這32位輸出作為P盒置換的輸入塊。
P盒置換將每一位輸入位映射到輸出位。任何一位都不能被映射兩次,也不能被略去。
經(jīng)過P-1盒置換的結(jié)果與最初64位分組的左半部分異或。
得到函數(shù)的輸出:
f(R0,K1)=00010000 00110010 01010010 11101110
在初始置換IP中,得知:
L0=11001100 00000000 11001100 11111111
通過如下運算可得到第一輪迭代輸出結(jié)果的左右兩部分為:
R1=L0⊕f(R0,K1)=11011100 00110010 10011110 00010001
L1=R0=11110000 10101010 11110000 10101010
4.逆初始置換IP-1
將初始置換進行16次的迭代,即進行16層的加密變換,這個運算過程我們暫時稱為函數(shù)f。得到L16和R16,將此作為輸入塊,進行逆置換得到最終的密文輸出塊。逆置換是初始置換的逆運算。從初始置換規(guī)則中可以看到,原始數(shù)據(jù)的第1位置換到了第40位,第2位置換到了第8位。則逆置換就是將第40位置換到第1位,第8位置換到第2位。以此類推,逆置換規(guī)則如下
第16輪迭代輸出結(jié)果的左右兩部分為:
R16=01110010 00010011 01001111 10010011
L16=10001111 01011110 00000011 10111100
V=IP-1(R16L16)=10011101 11111101 10100110 10100110 01110011 01000010 01100100 10000011
微信公眾號鏈接
總結(jié)
- 上一篇: Linux网络:网络传输基本流程与协议初
- 下一篇: Security+考试总结