1- 1- 1 就就就就就就就 就就就 , DES 就就就就就就就就就就就就就就 ( 就 56 就就 ) , 就就就就就就就就就 就就就就就就就就 就就就 ,, Triple-DES 就就就。 就就就就就就就就就 就就就就就 , Triple-DES 就就就就就就就就就就就, 就就就就 就就就就就就就就就 , (NIST) 就 1997 就就就就就就就就就就就 就就就就就 就就就就就 一 ( 就就 AES) 。 傳傳傳傳傳傳傳傳 一、: AES
1-1- 11
就目前科技而言,現有之 DES 密碼系統所使用之金鑰長度過短 ( 僅 56 位元 ) ,其安全性已遭受質疑,為提高其安全性,便有了 Triple-DES 的構想。
隨著電腦技技的發展,可預見未來 Triple-DES 的加密演算法也勢必淘汰,有鑑於此,美國國家標準技術局 (NIST) 於 1997 年元月二日開始著手計劃公開徵求新一代加密標準 ( 簡稱 AES) 。
一、傳統的加解密法: AES
1-1- 22
• Advanced Encryption Standard (AES)
AES 為新一代 NIST/FIPS 的加密標準
• NIST 於 1998 年開始 15 個 AES 候選演算法之技術分析
• 1999 年選出五個候選演算法 :MARS, RC6, Rijndael, Serpent, Twofish
• NIST 於 2000 年選定 Rijndael 為新一代的加密標準
一、傳統的加解密法: AES
1-1- 33
有限體 GF(28)
一個位元組 ( byte) b 是由 8 個 bits b7 b6 b5 b4 b3 b2 b1 b0
所組成的,我們可以將它視為一個係數為 0 或 1 的多項式如下 :
b7 x7+ b6 x
6+ b5 x5+ b4 x
4+ b3 x3+ b2 x
2+ b1 x1+ b0 x
0
Example:
16 進位表示法’ 57’ 的 2 進位表示法為 01010111 ,它所對應的多項式則為 :
x6+ x4+ x2+ x+1 .
1-1- 44
Example 1:
(x6+ x4+ x2+ x+1) +( x7+ x+1)= x7+ x6+ x4+ x2 .
”01010111”+”10000011”=”11010100”
Example 2: (x6+ x4+ x2+ x+1)•( x7+ x+1) = x13 + x11 + x9 + x8
+ x7 + x7 + x5 + x3 + x2 + x +x6 + x4 + x2 + x + 1
= x13+ x11+ x9+ x8+ x6+ x5+ x4+ x3+1
x13+ x11+ x9+ x8+ x6+ x5+ x4+ x3+1 modulo x8+ x4+ x3+ x+1
= x7 + x6 + 1
有限體 GF(28) 下之運算
1-1- 55
有限體 GF(28) 下之運算
10xx0x0x0x0x x
___________________________________________________________________________
xxx0xxx0x0x0 x
xxx0x0x0x0x0x0 x
____________________________________________________________________________
0x0x0xx0x
xxx0xxx0x0x0x
10xx0xxxxx0xxx0xx0x1xxxx
1234567
34567891011
34567891011
12345
5678910111213
123456789101112131348
1-1- 66
Multiplication by xMultiplication by x
• Multiply b(x) with the polynomial x: b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x
• If b7=0, the reduction is identity operation; if b7=1, m(x) must be subtracted (i.e. EXORed).
• That is, multiplication by x (‘02’) can be implemented by a left shift and a conditional EXOR with’1B’.
1xx0x x
____________________________________________________________________________
1
1xx0xxx00xx0x
00xx0x0x0x00xx0x1xxxx
1234
12345678
123456781348
0001 1011
1-1- 77
ExampleExample
• ‘57’ ‘13’ =‘FE’
‘57’ ’02’=xtime(57)=‘AE’
‘57’ ’04’=xtime(AE)=‘47’
‘57’ ’08’=xtime(47)=‘8E’
‘57’ ’10’=xtime(8E)=‘07’
‘57’ ‘13’ =‘57’(‘01’’02’’10’) = ‘57’’AE’’07’=‘FE’
1-1- 88
Polynomials with coefficients Polynomials with coefficients in GF(2in GF(288))
• Two polynomials over GF(28):a(y)=a3y3+a2y2+a1y+a0
b(y)=b3y3+b2y2+b1y+b0
• Their product c(y)=c6y6+c5y5+c4y4+c3y3+c2y2+c1y+c0
c0=a0 b0
c1=a1 b0 a0 b1
c2=a2 b0 a1 b1 a0 b2
c3=a3 b0 a2 b1 a1 b2+ a0 b3
c4=a3 b1 a2 b2 a1 b3
c5=a3 b2 a2 b3
c6=a3 b3
1-1- 99
Polynomials with coefficients in Polynomials with coefficients in GF(2GF(288))
• By reducing c(y) modulo a polynomial of degree 4, the result can be reduced to a polynomial of degree below 4.
• M(y)=y4+1 and
yi mod y4+1=yi mod 4.
1-1- 1010
Polynomials with coefficients in Polynomials with coefficients in GF(2GF(288))
• Product of a( y ) and b( y ):
d( y ) = a( y ) b( y )= d3y3+d2y2+d1y+d0
d0 = ab0 ab1 ab2 ab3
d1 = ab0 ab1 ab2 ab3
d2 = ab0 ab1 ab2 ab3
d3 = ab0 ab1 ab2 ab3
• Two polynomials over GF(28):a(y)=a3y3+a2y2+a1y+a0
b(y)=b3y3+b2y2+b1y+b0
1-1- 1111
Polynomials with coefficients in Polynomials with coefficients in GF(2GF(288))
circulant matrix:
1-1- 1212
Polynomials with coefficients in Polynomials with coefficients in GF(2GF(288))
circulant matrix:
e5
81
66
04
30
5d
bf
d4
02010103
03020101
01030201
01010302
e5
81
?
?
30
5d
bf
d4
02010103
03020101
01030201
01010302
= 02d4 03bf 015d 0130 = 1011 00111101 10100101 11010011
0000=0000 0100=04
1-1- 1313
Rijndael 演算法
Rijndael 是一個包含可變區塊長度和可變密鑰長度的區塊加密法 , 其區塊長度和密鑰長度可允許為 128, 192 或 256 bits
Nr Nb=4 Nb=6 Nb=8Nk=4 10 12 14Nk=6 12 12 14Nk=8 14 14 14
運算回合數與區塊長度和密鑰長度之關係
1-1- 1414
Example of The State and the Cipher Key
32 88 31 E0
43 5A 31 37F6 30 98 17A8 8D A2 34
54 E1 31 E0
21 5A C1 37A6 C1 98 22A8 8D A2 55
128bits 之區塊長度表示法 (Nb = 4)
128bits 之密鑰長度表示法 (Nk = 4)
1-1- 1515
Round 函數 Round(State, RoundKey)
{ ByteSub(State);
ShiftRow(State);
MixColumn(State);
AddRoundkey(State, RoundKey); }
FinalRound(State, Roundkey)
{ ByteSub(State);
ShiftRow(State);
AddRoundkey(State, RoundKey); }
1-1- 1616
ByteSub 函數 y0 1 1 1 1 1 0 0 0 x0 0
y1 0 1 1 1 1 1 0 0 x1 1
y2 0 0 1 1 1 1 1 0 x2 1
y3 0 0 0 1 1 1 1 1 x3 0
y4 = 1 0 0 0 1 1 1 1 x4 + 0
y5 1 1 0 0 0 1 1 1 x5 0
y6 1 1 1 0 0 0 1 1 x6 1
y7 1 1 1 1 0 0 0 1 x7 1
1-1- 1717
ShiftRow 函數Nb C1 C2 C3
4 1 2 36 1 2 38 1 3 4
a b c dm n o pj k I lw x y z
a b c dn o p mI l j kz w x y
不同的區塊長度所須旋轉的大小
ShiftRow 運算在狀態值表的情形 (Nb=4)
1-1- 1818
在 MixColumn 函數中,狀態值表的每一行是被視為在 GF(28)中的多項式,並且乘上一個固定的多項式 C(x) 後再同餘於多項式 y4+1 ,而其中 C(y)=’03’y3+’01’y2+’01’y+’02’
我們可將其表示矩陣乘法。令 b(y)=c(y)a(y)
b0 02 03 01 01 a0
b1 = 01 02 03 01 a1
b2 01 01 02 03 a2
b3 03 01 01 02 a3
MixColumn 函數
1-1- 1919
子金匙加法函數 (The Round Key Addition)
32 88 31 E0
43 5A 31 37F6 30 98 17A8 8D A2 34
54 E1 31 E0
21 5A C1 37A6 C1 98 22A8 8D A2 55
32 88 31 E0
43 5A 31 37F6 30 98 17A8 8D A2 34
(Nb = 4)
1-1- 2020
Key Expansion
(Nk 6)
KeyExpansion(CipherKey , W)
{ for( i =0 ; i < Nk ; i++)
W[i]=CipherKey[i] ;
for( j= Nk ; j < Nb*(Nr+1) ; j + = Nk )
{ W[ j ]=W[ j - Nk] ^ SubByte(Rotl(W[j-1])) ^ Rcon[j/ Nk] ;
for( i =1 ; i < Nk && i + j < Nb*(Nr+1) ; i ++)
W[i+j] = W[ i+j- Nk] ^ W[ i+j+1]; } }
1-1- 2121
Key Expansion
(Nk > 6) KeyExpansion(CipherKey , W) { for( i =0 ; i < Nk ; i++) W[i]=CipherKey[i] ; for( j= Nk ; j < Nb*(Nr+1) ; j + = Nk ) { W[ j ]=W[ j - Nk] ^ SubByte(Rotl(W[j-1])) ^ Rcon[j/ Nk] ; for( i =1 ; i < 4 ; i ++) W[i+j] = W[ i+j- Nk] ^ W[ i+j-1]; W[j+4] = W[j+4- Nk]^ SubByte(W[j+3]) for( i =5 ; i < Nk ; i++) W[i+j] = W[ i+j- Nk] ^ W[ i+j-1]; } }
1-1- 2222
加密演算法 Rijndael(State , CipherKey)
{
KeyExpansion(CipherKey , ExpandedKey) ;
AddRoundKey(State , ExpandedKey);
For ( i =1 ; I < Nr ; i++)
Round(State , ExpandedKey + Nb* i );
FinalRound(State , ExpandedKey + Nb * Nr );
}
1-1- 2323
InvCipher(byte in[4 * Nb], byte out[4 * Nb], word w[Nb * (Nr + 1)])beginbytestate[4,Nb];state = inAddRoundKey(state, w + Nr * Nb)for round = Nr - 1 step -1 to 1 InvShiftRows(state)InvSubBytes(state)AddRoundKey(state, w + round * Nb)InvMixColumns(state)
end forInvShiftRows(state)InvSubBytes(state)AddRoundKey(state, w)out = stateend
Pseudo Code for the Inverse Cipher
1-1- 2424
AES 的使用模式可參考 DES 的使用模式,有底下四種標準操作模式:
(1) 電子編碼模式( Electronic Codebook Mode, ECM ) (2) 密文塊串連模式( Cipher Block Chaining, CBC ) (3) 密文反饋模式( Cipher Feedback, CFB ) (4) 輸出反饋模式( Output Feedback, OFB )
AES 的使用模式
1-1- 2525
(1) 電子編碼模式( Electronic Codebook Mode, ECM )
AES 的使用模式
AES K
M 1 , M 2 , ...
C 1 , C 2 , ..
AES K
M 1 , M 2 , ...
C 1 , C 2 , ..
加密 解密
1-1- 2626
(2) 密文塊串連模式( Cipher Block Chaining, CBC )
AES 的使用模式
AES K
M 1 , M 2 , ...
C 1 , C 2 , ..
AES K
M 1 , M 2 , ...
C 1 , C 2 , ..
加密 解密
初始值 C 0
初始值 C 0
C i = E k ( M i C i -1 ) M i = D k ( C i ) C i -1
1-1- 2727
(3) 密文反饋模式( Cipher Feedback, CFB )
AES 的使用模式
解密
M i = E k (I i-1 ) j C i
AES K
M 1 , M 2 , ... C 1 , C 2 , ..
初始值 I 0 暫存器
( j 位元 )
取左 j 位元
128- j j
AES K
M 1 , M 2 , ... C 1 , C 2 , ..
初始值 I 0 暫存器
128- j j
加密
I i = Shift j (I i-1 ): C i
C i = E k (I i-1 ) j M i I i = Shift j (I i-1 ): C i
1-1- 2828
(4) 輸出反饋模式( Output Feedback, OFB )
AES 的使用模式
解密
M i = E k (I i-1 ) j C i
AES K
M 1 , M 2 , ... C 1 , C 2 , ..
初始值 I 0 暫存器
( j 位元 )
取左 j 位元
128- j j
加密
C i = E k (I i-1 ) j M i
I i = Shift j (I i-1 ): E k (I i-1 ) j
AES K
M 1 , M 2 , ... C 1 , C 2 , ..
初始值 I 0 暫存器
取左 j 位元
128- j j
I i = Shift j (I i-1 ): E k (I i-1 ) j