1. Trang chủ
  2. » Công Nghệ Thông Tin

book mã hóa ứng dụng update 2 phần 3 pot

29 277 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Chương 3 64 Giá trị của di số shift(r,Nb) phụ thuộc vào chỉ số dòng r và kích thước Nb của khối và được thể hiện trong Bảng 3.1. InvShiftRows(byte state[4,Nb]) begin byte t[Nb] for r = 1 to 3 for c = 0 to Nb - 1 t[(c + h[r,Nb]) mod Nb] = state[r,c] end for for c = 0 to Nb – 1 state[r,c] = t[c] end for end for end 3.6.2 Phép biến đổi InvSubBytes Phép biến đổi ngược của thao tác SubBytes, ký hiệu là InvSubBytes, sự dụng bảng thay thế nghịch đảo của S-box trên GF(2 8 ), ký hiệu là S-box -1 . Quá trình thay thế 1 byte y dựa vào S-box -1 bao gồm hai bước sau: 1. Áp dụng phép biến đổi affine (trên GF(2)) sau đối với y (có biểu diễn nhị phân là {} 01234567 yyyyyyyy ): Phương pháp mã hóa Rijndael 65 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ + ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ 0 0 0 0 0 1 0 1 01010010 00101001 10010100 01001010 0 0100101 10010010 01001001 10100100 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 y y y y y y y y x x x x x x x x (3.27) hay () iiiii dyyyx ⊕⊕⊕= +++ 8mod)7(8mod)5(8mod2 , với d i là bit thứ i của giá trị {05},0 ≤ i ≤ 7. (3.28) Rõ ràng đây chính là phép biến đổi affine ngược của phép biến đổi affine ở bước 1 của S-box. 2. Gọi x là phần tử thuộc GF(2 8 ) có biểu diễn nhị phân là {} 01234567 xxxxxxxx . Xác định phần tử nghịch đảo x -1 ∈ GF(2 8 ) với quy ước {00} -1 = {00} InvSubBytes(byte state[4,Nb]) begin for r = 0 to 3 for c = 0 to Nb - 1 state[r,c] = InvSbox[state[r,c]] end for end for end Chương 3 66 Bảng D.2 thể hiện bảng thay thế nghịch đảo được sử dụng trong phép biến đổi InvSubBytes 3.6.3 Phép biến đổi InvMixColumns InvMixColumns là biến đổi ngược của phép biến đổi MixColumns. Mỗi cột của trạng thái hiện hành được xem như đa thức s(x) bậc 4 có các hệ số thuộc GF(2 8 ) và được nhân với đa thức a -1 (x) là nghịch đảo của đa thức a(x) (modulo M(x)) được sử dụng trong phép biến đổi MixColumns . a -1 (x) = {0b}x 3 + {0d}x 2 + {09}x + {0e} (3.29) Phép nhân )()()( 1 xsxaxs ⊗= ′ − có thể được biểu diễn dưới dạng ma trận: ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ c c c c c c c c s s s s s s s s ,3 ,2 ,1 ,0 ' ,3 ' ,2 ' ,1 ' ,0 0e090d0b 0b0e090d 0d0b0e09 090d0b0e với 0 ≤ c < Nb (3.30) Trong đoạn mã chương trình dưới đây, hàm FFmul(x, y) thực hiện phép nhân (trên trường GF(2 8 )) hai phần tử x và y với nhau. InvMixColumns(byte block[4,Nb]) begin byte t[4] for c = 0 to Nb – 1 for r = 0 to 3 t[r] = block[r,c] end for for r = 0 to 3 Phương pháp mã hóa Rijndael 67 block[r,c] = FFmul(0x0e, t[r]) xor FFmul(0x0b, t[(r + 1) mod 4]) xor FFmul(0x0d, t[(r + 2) mod 4]) xor FFmul(0x09, t[(r + 3) mod 4]) end for end for end 3.6.4 Quy trình giải mã tương đương Nhận xét: 1. Phép biến đổi InvSubBytes thao tác trên giá trị của từng byte riêng biệt của trạng thái hiện hành, trong khi phép biến đổi InvShiftRows chỉ thực hiện thao tác di chuyển các byte mà không làm thay đổi giá trị của chúng. Do đó, thứ tự của hai phép biến đổi này trong quy trình mã hóa có thể được đảo ngược. 2. Với phép biến đổi tuyến tính A bất kỳ, ta có ( ) ( ) ( ) A xk Ax Ak+= + . Từ đó, suy ra InvMixColumns(state XOR Round Key)= InvMixColumns(state) XOR InvMixColumns(Round Key) Như vậy, thứ tự của phép biến đổi InvMixColumns và AddRoundKey trong quy trình giải mã có thể được đảo ngược với điều kiện mỗi từ (4 byte) trong bảng mã khóa mở rộng sử dụng trong giải mã phải được biến đổi bởi InvMixColumns. Do trong chu kỳ mã hóa cuối cùng không thực hiện thao tác MixColumns nên không Chương 3 68 cần thực hiện thao tác InvMixColumns đối với mã khóa của chu kỳ giải mã đầu tiên cũng như chu kỳ giải mã cuối cùng. Vậy, quy trình giải mã Rijndael có thể được thực hiện theo với trình tự các phép biến đổi ngược hoàn toàn tương đương với quy trình mã hóa. EqInvCipher(byte in[4*Nb], byte out[4*Nb], word dw[Nb*(Nr+1)]) begin byte state[4,Nb] state = in AddRoundKey(state, dw + Nr * Nb) for round = Nr - 1 downto 1 InvSubBytes(state) InvShiftRows(state) InvMixColumns(state) AddRoundKey(state, dw + round * Nb) end for InvSubBytes(state) InvShiftRows(state) AddRoundKey(state, dw) out = state end Trong quy trình trên, bảng mã khóa mở rộng dw được xây dựng từ bảng mã khóa w bằng cách áp dụng phép biến đổi InvMixColumns lên từng từ (4 byte) trong w, ngoại trừ Nb từ đầu tiên và cuối cùng của w. Phương pháp mã hóa Rijndael 69 for i = 0 to (Nr + 1) * Nb – 1 dw[i] = w[i] end for for rnd = 1 to Nr – 1 InvMixColumns(dw + rnd * Nb) end for 3.7 Các vấn đề cài đặt thuật toán Gọi a là trạng thái khi bắt đầu chu kỳ mã hóa. Gọi b, c, d, e lần lượt là trạng thái kết quả đầu ra sau khi thực hiện các phép biến đổi SubBytes, ShiftRows, MixColumns và AddRoundKey trong chu kỳ đang xét. Quy ước: trong trạng thái s (,,,, s abcde= ), cột thứ j được kí hiệu s j , phần tử tại dòng i cột j kí hiệu là s i, j . Sau biến đổi SubBytes: ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ][ ][ ][ ][ ,3 ,2 ,1 ,0 ,3 ,2 ,1 ,0 j j j j j j j j aS aS aS aS b b b b (3.31) Sau biến đổi ShiftRows: ()() ()() ()() ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ + + + NbNbshiftj NbNbshiftj NbNbshiftj j j j j j b b b b c c c c mod,3,3 mod,2,2 mod,1,1 ,0 ,3 ,2 ,1 ,0 (3.32) Sau biến đổi MixColumns: ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ j j j j j j j j c c c c d d d d ,3 ,2 ,1 ,0 ,3 ,2 ,1 ,0 02010103 03020101 01030201 01010302 (3.33) Chương 3 70 Sau biến đổi AddRoundKey: ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⊕ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ j j j j j j j j j j j j k k k k d d d d e e e e ,3 ,2 ,1 ,0 ,3 ,2 ,1 ,0 ,3 ,2 ,1 ,0 (3.34) Kết hợp các kết quả trung gian của mỗi phép biến đổi trong cùng chu kỳ với nhau, ta có: ()() [] ()() [] ()() [] ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⊕ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ + + + j j j j NbNbshiftj NbNbshiftj NbNbshiftj j j j j j k k k k aS aS aS aS e e e e ,3 ,2 ,1 ,0 mod,3,3 mod,2,2 mod,1,1 ,0 ,3 ,2 ,1 ,0 ][ 02010103 03020101 01030201 01010302 (3.35) Ký hiệu [] ( ) ( ) NbNbrshiftjrj mod,+= , biểu thức (3.35) có thể viết lại như sau: [] [] [] [] 0, 0 0, 0, 1, 1 1, 1, 2, 2, 2, 2 3, 3, 3, 3 [] 02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02 j j j j j j j j j j j j Sa ek Sa ek ek Sa ek Sa ⎡⎤ ⎢⎥ ⎡⎤ ⎡⎤ ⎡⎤ ⎡⎤ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎣⎦ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ =⊕ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎡⎤ ⎣⎦ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥⎢⎥ ⎢⎥ ⎣⎦ ⎣⎦ ⎣⎦ ⎡⎤ ⎢⎥ ⎣⎦ ⎣⎦ (3.36) Khai triển phép nhân ma trận, ta có: [] [] [] [] 0, 0, 1, 1, 0, 0 1, 1 2, 2 3, 3 2, 2, 3, 3, 02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02 j j j j jjj j j j j j ek ek Sa Sa Sa Sa ek ek ⎡⎤ ⎡⎤ ⎡⎤ ⎡⎤ ⎡⎤ ⎡⎤ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎡⎤ ⎡⎤ ⎡⎤ ⎡⎤ =⊕⊕⊕⊕ ⎣⎦ ⎣⎦ ⎣⎦ ⎣⎦ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥ ⎣⎦ ⎣⎦ ⎣⎦ ⎣⎦ ⎣⎦ ⎣⎦ (3.37) Phương pháp mã hóa Rijndael 71 Định nghĩa các bảng tra cứu T 0 , T 1 , T 2 , T 3 như sau: [] [] [] [] [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ • • = 03 02 0 aS aS aS aS aT , [] [] [] [] [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ • • = a a a a a S S 02S 03S T 1 , [] [] [] [] [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ • • = aS aS aS aS aT 02 03 2 , [] [] [] [] [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ • • = 02 03 3 aS aS aS aS aT (3.38) Khi đó, biểu thức (3.38) được viết lại như sau: [] jNbroundijii i j waTe + = ⊕ ⎟ ⎠ ⎞ ⎜ ⎝ ⎛ = ⊕ *][, 3 0 (3.39) với round là số thứ tự của chu kỳ đang xét. Như vậy, mỗi cột e j của trạng thái kết quả sau khi thực hiện một chu kỳ mã hóa có thể được xác định bằng bốn phép toán XOR trên các số nguyên 32 bit sử dụng bốn bảng tra cứu T 0 , T 1 , T 2 và T 3. Công thức (3.39) chỉ áp dụng được cho Nr-1 chu kì đầu. Do chu kỳ cuối cùng không thực hiện phép biến đổi MixColumns nên cần xây dựng 4 bảng tra cứu riêng cho chu kì này: [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 0 0 0 ][ 0 aS aU , [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 0 0 ][ 0 1 aS aU , [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 0 ][ 0 0 2 aS aU , [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ][ 0 0 0 3 aS aU (3.40) Chương 3 72 3.7.1 Nhận xét Kỹ thuật sử dụng bảng tra cứu giúp cải thiện tốc độ mã hóa và giải mã một cách đáng kể. Ngoài ra, kỹ thuật này còn giúp chống lại các phương pháp phá mã dựa trên thời gian mã hóa do khi sử dụng bảng tra cứu, thời gian mã hóa dữ liệu bất kỳ đều như nhau. Kỹ thuật này có thể được sử dụng trong quy trình mã hóa và quy trình giải mã tương đương do sự tương ứng giữa các bướ c thực hiện của hai quy trình này. Khi đó, chúng ta có thể dùng chung một quy trình cho việc mã hóa và giải mã nhưng sử dụng bảng tra khác nhau. Trên thực tế, các bảng tra cứu có thể được lưu trữ sẵn hoặc được xây dựng trực tiếp dựa trên bảng thay thế S-Box cùng với thông tin về các khuôn dạng tương ứng. Trên các bộ vi xử lý 32-bit, những thao tác biến đổi sử dụng trong quy trình mã hóa có thể được tối ưu hóa bằng cách sử dụ ng bốn bảng tra cứu, mỗi bảng có 256 phần tử với kích thước mỗi phần tử là 4 byte. Với mỗi phần tử a ∈ GF(2 8 ), đặt: [] [] [] [] [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ • • = 03 02 0 aS aS aS aS aT , [] [] [] [] [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ • • = a a a a a S S 02S 03S T 1 , [] [] [] [] [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ • • = aS aS aS aS aT 02 03 2 , [] [] [] [] [] ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ • • = 02 03 3 aS aS aS aS aT (3.41) Phương pháp mã hóa Rijndael 73 Nhận xét: T i [a] = RotWord(T i-1 [a]) với 1, 2,3i = . Ký hiệu RotWord i là hàm xử lý gồm i lần thực hiện hàm RotWord, ta có: [] [] () aTaT i i 0 RotWord= (3.42) Như vậy, thay vì dùng 4 kilobyte để lưu trữ sẵn cả bốn bảng, chỉ cần tốn 1 kilobyte để lưu bảng đầu tiên, các bảng còn lại có thể được phát sinh lại khi sử dụng. Các hạn chế về bộ nhớ thường không được đặt ra, trừ một số ít trường hợp như đối với các applet hay servlet. Khi đó, thay vì lưu trữ sẵn bảng tra cứu, chỉ cần lư u đoạn mã xử lý phát sinh lại các bảng này. Lúc đó, công thức (3.39) sẽ trở thành: [] [] () ][RotWord][ ,0 3 0 , 3 0 iji i i jijii i jj aTkaTke ⊕⊕ == == (3.43) 3.8 Kết quả thử nghiệm Bảng 3.2. Tốc độ xử lý của phương pháp Rijndael Tốc độ xử lý (Mbit/giây) Kích thước (bit) Pentium 200 MHz Pentium II 400 MHz Pentium III 733 MHz Pentium IV 2.4 GHz Khóa Khối C++ C C++ C C++ C C++ C 128 128 69.4 70.5 138.0 141.5 252.9 259.2 863.0 884.7 192 128 58.0 59.8 116.2 119.7 212.9 219.3 726.5 748.3 256 128 50.1 51.3 101.2 101.5 185.5 186.1 633.5 634.9 Kết quả thử nghiệm thuật toán Rijndael được ghi nhận trên máy Pentium 200 MHz (sử dụng hệ điều hành Microsoft Windows 98), máy Pentium II 400 MHz, Pentium III 733 MHz (sử dụng hệ điều hành Microsoft Windows 2000 Professional), Pentium IV 2,4GHz (sử dụng hệ điều hành Microsoft Windows XP Service Pack 2). [...]... end for end 4 .2. 1 .3 Phộp bin i MixColumns Trong thao tỏc bin i MixColumns, mi ct ca trng thỏi hin hnh c biu din di dng a thc s(x) cú cỏc h s trờn GF (28 ) Thc hin phộp nhõn: s ' ( x ) = a ( x ) s ( x ) vi a(x ) = 7 a x i i , a i GF (28 ) (4.5) i =0 t 0 1 2 Ma = 3 4 5 6 7 7 0 1 2 3 4 5 6 6 7 0 1 2 3 4 5 5 6 7 0 1 2 3 4 4 5 6 7 0 1 2 3 3 4 5 6 7 0 1 2 2 3 4 5 6 7 0 1 1 2 3 4 5 6 ... trng thỏi hin hnh c xem nh a thc s(x) bc 8 cú cỏc h s thuc GF (28 ) v c nhõn vi a thc a1(x) l nghch o ca a thc a(x) (modulo M ( x ) = x 8 + 1 ) c s dng trong phộp bin i MixColumns Vi a(x) = {05}x7 + { 03} x6 + {05}x5 + {04}x4+ { 03} x3 + { 02} x2 + { 02} x + {01} (4.11) ta cú: a-1(x) = {b3}x7 + {39 }x6 + {9a}x5 + {a1}x4+ {db}x3 + {54}x2 + {46}x + {2a} (4. 12) 91 Chng 4 1 Phộp nhõn s( x) = a ( x) s( x) c biu din di... kớch thc khúa v kớch thc khi c x lý Cỏc phiờn bn m rng 25 6 /38 4/5 12- bit v phiờn bn m rng 5 12/ 768/1 024 -bit ca thut toỏn Rijndael c trỡnh by di õy c chỳng tụi xõy dng trờn cựng c s lý thuyt ca thut toỏn nguyờn thy v cú kh nng x lý cỏc khúa v khi d liu ln hn nhiu ln so vi phiờn bn gc 4 .2 Phiờn bn m rng 25 6 /38 4/5 12- bit Trong thut toỏn m rng 25 6 /38 4/5 12- bit ca phng phỏp Rijndael, mi t gm cú Nw=8 byte Mi trng... S-box 90 Phng phỏp Rijndael m rng 2 Gi x l phn t thuc GF (28 ) cú biu din nh phõn l {x7 x6 x5 x4 x3 x2 x1 x0 } Xỏc nh phn t nghch o x-1 GF (28 ) vi quy c {00}-1 = {00} Bng D .2 th hin bng thay th nghch o c s dng trong phộp bin i InvSubBytes InvSubBytes(byte state[8,Nb]) begin for r = 0 to 7 for c = 0 to Nb - 1 state[r,c] = InvSbox[state[r,c]] end for end for end 4 .2. 3. 3 Phộp bin i InvMixColumns InvMixColumns... i 1 87 Chng 4 4 .2. 2 .2 Xỏc nh khúa ca chu k Mó khúa ca chu k th i c xỏc nh bao gm cỏc t (8 byte) cú ch s t Nb * i n Nb * (i + 1) 1 ca bng mó khúa m rng Nh vy, mó khúa ca chu k th i bao gm cỏc phn t w[ Nb * i ] , w[ Nb * i + 1] , , w[ Nb * (i + 1) 1] w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w 12 w 13 w14 w15 w16 w17 Maừ khoựa chu kyứ 0 Maừ khoựa chu kyứ 1 Maừ khoự a chu kyứ 2 Hỡnh 4 .2 Bng mó khúa m rng... state[r,c] = t[c] end for end for end 4 .2. 3 .2 Phộp bin i InvSubBytes Phộp bin i ngc ca thao tỏc SubBytes, ký hiu l InvSubBytes, s dng bng thay th nghch o ca S-box trờn GF (28 ) c ký hiu l S-box-1 Quỏ trỡnh thay th 1 byte y da vo S-box-1 bao gm hai bc sau: 1 p dng phộp bin i affine (trờn GF (2) ) sau i vi y (cú biu din nh phõn l {y 7 y 6 y5 y 4 y3 y 2 y1 y 0 } ): xi = y (i + 2 ) mod 8 y (i +5) mod 8 y ( i +... begin byte state[8,Nb] state = in AddRoundKey(state, w) // Xem phn 4 .2. 1.4 for round = 1 to Nr 1 SubBytes(state) // Xem phn 4 .2. 1.1 ShiftRows(state) // Xem phn 4 .2. 1 .2 MixColumns(state) // Xem phn 4 .2. 1 .3 AddRoundKey(state, w + round * Nb) end for SubBytes(state) ShiftRows(state) AddRoundKey(state, w + Nr * Nb) out = state end 4 .2. 1.1 Phộp bin i SubBytes Thao tỏc bin i SubBytes l phộp thay th cỏc... for r = 0 to 7 state[r,c] = FFmul(0x01, t[r]) xor FFmul(0x05, t[(r + 1) mod 8]) xor FFmul(0x 03, t[(r + 2) mod 8]) xor FFmul(0x05, t[(r + 3) mod 8]) xor FFmul(0x04, t[(r + 4) mod 8]) xor FFmul(0x 03, t[(r + 5) mod 8]) xor FFmul(0x 02, t[(r + 6) mod 8]) xor FFmul(0x 02, t[(r + 7) mod 8]) xor end for end for end 4 .2. 1.4 Thao tỏc AddRoundKey Mó khúa ca chu k c biu din bng 1 ma trn gm 8 dũng v Nb ct Mi ct ca... trỡnh thay th 1 byte x da vo S-box bao gm hai bc: 1 Xỏc nh phn t nghch o x1 GF (28 ) Quy c {00}1 = {00} 81 Chng 4 2 p dng phộp bin i affine (trờn GF (2) ) i vi x1 (gi s x1 cú biu din nh phõn l {x7 x6 x5 x4 x3 x2 x1 x0 } ): yi = xi x(i +4) mod 8 x(i +5) mod 8 x(i +6) mod 8 x (i +7) mod 8 ci (4 .2) vi ci l bit th i ca { 63} , 0 i 7 Phộp bin i SubBytes c th hin di dng mó gi: SubBytes(byte state[8,Nb])... s1,c s ' 2, c s 2, c s ' 3, c = M s 3, c , 0 c Nb 1 a s s' 4, c 4, c s ' 5 ,c s 5, c s' s 6, c 6, c s ' 7 ,c s 7 ,c (4. 13) on chng trỡnh sau th hin thao tỏc InvMixColumns s dng a thc a-1(x) trong cụng thc (4. 12) InvMixColumns(byte block[8,Nb]) begin byte t[8] for c = 0 to Nb 1 for r = 0 to 7 t[r] = block[r,c] end for for r = 0 to 7 block[r,c] = FFmul(0x2a, t[r]) xor . ()() [] ()() [] ()() [] ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⊕ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ + + + j j j j NbNbshiftj NbNbshiftj NbNbshiftj j j j j j k k k k aS aS aS aS e e e e ,3 ,2 ,1 ,0 mod ,3, 3 mod ,2, 2 mod,1,1 ,0 ,3 ,2 ,1 ,0 ][ 020 101 03 03 020 101 01 03 020 1 0101 03 02 (3. 35) Ký hiệu [] ( ) ( ) NbNbrshiftjrj mod,+= , biểu thức (3. 35) có thể viết lại. ⎢⎥ ⎣⎦ ⎣⎦ ⎣⎦ ⎡⎤ ⎢⎥ ⎣⎦ ⎣⎦ (3. 36) Khai triển phép nhân ma trận, ta có: [] [] [] [] 0, 0, 1, 1, 0, 0 1, 1 2, 2 3, 3 2, 2, 3, 3, 02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02 j j j j jjj j j j j. () ∑ = = 7 0i i i xaxa , ∈ i a GF (2 8 ) (4.5) Đặt ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 0 1 23 4567 70 1 23 456 670 1 23 45 5670 1 23 4 45670 1 23 34 5670 12 234 56701 1 23 45670 αααααααα αααααααα αααααααα αααααααα αααααααα αααααααα αααααααα αααααααα a M

Ngày đăng: 23/07/2014, 23:20

Xem thêm: book mã hóa ứng dụng update 2 phần 3 pot

TỪ KHÓA LIÊN QUAN