Danh mục

thuật toán mã hóa và ứng dụng phần 4

Số trang: 24      Loại file: pdf      Dung lượng: 485.69 KB      Lượt xem: 32      Lượt tải: 0    
Thư viện của tui

Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Xác định khóa của chu kỳ Mã khóa của chu kỳ thứ i được xác định bao gồm các từ (8 byte) có chỉ số từ Nb * i đến Nb * (i + 1) − 1 của bảng mã khóa mở rộng. Như vậy, mã khóa của chu kỳ thứ i bao gồm các phần tử w[ Nb * i ] , w[ Nb * i + 1] , …, w[ Nb * (i + 1) − 1] .
Nội dung trích xuất từ tài liệu:
thuật toán mã hóa và ứng dụng phần 4 Chương 4 4.2.2.2 Xác định khóa của chu kỳ Mã khóa của chu kỳ thứ i được xác định bao gồm các từ (8 byte) có chỉ số từ Nb * i đến Nb * (i + 1) − 1 của bảng mã khóa mở rộng. Như vậy, mã khóa của chu kỳ thứ i bao gồm các phần 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 w12 w13 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. Bảng mã khóa mở rộng và cách xác định mã khóa của chu kỳ (với Nb = 6 và Nk = 4) 4.2.3 Quy trình giải mã Quy trình giải mã được thực hiện qua các giai đoạn sau: 1. Thực hiện thao tác AddRoundKey đầu tiên trước khi thực hiện các chu kỳ giải mã. 2. Nr – 1 chu kỳ giải mã bình thường: mỗi chu kỳ bao gồm bốn bước biến đổi InvShiftRows, InvSubBytes, AddRoundKey, liên tiếp nhau: InvMixColumns. 3. Thực hiện chu kỳ giải mã cuối cùng. Trong chu kỳ này, thao tác InvMixColumns được bỏ qua. 88 Phương pháp Rijndael mở rộng InvCipher( byte in[8 * Nb], byte out[8 * Nb], word w[Nb * (Nr + 1)]) begin byte state[8,Nb] state = in // Xem phần 0 AddRoundKey(state, w + Nr * Nb) for round = Nr - 1 downto 1 InvShiftRows(state) // Xem phần 4.2.3.1 // Xem phần 0 InvSubBytes(state) AddRoundKey(state, w + round * Nb) InvMixColumns(state) // Xem phần 0 end for InvShiftRows(state) InvSubBytes(state) AddRoundKey(state, w) out = state end 4.2.3.1 Phép biến đổi InvShiftRows InvShiftRows là biến đổi ngược của biến đổi ShiftRows. Mỗi dòng của trạng thái được dịch chuyển xoay vòng theo chiều ngược với biến đổi ShiftRows với độ dời Nb–shift (r, Nb) khác nhau. Các byte ở cuối dòng được đưa vòng lên đầu dòng trong khi các byte còn lại có khuynh hướng di chuyển về cuối dòng. ' s r ,(c + shift ( r , Nb)) mod Nb = s r ,c với 0 < r < 8 và 0 ≤ c < Nb (4.9) 89 Chương 4 InvShiftRows(byte state[8,Nb]) begin byte t[Nb] for r = 1 to 7 for c = 0 to Nb - 1 t[(c + shift[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 4.2.3.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(28) được 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à {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 + 7) mod 8 ⊕ d i , với di là bit thứ i của giá trị {05},0 ≤ i ≤ 7. (4.10) Đâ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. 90 Phương pháp Rijndael mở rộng Gọi x là phần tử thuộc GF(28) có biểu diễn nhị phân là {x7 x6 x5 x4 x3 x2 x1 x0 } . 2. Xác định phần tử nghịch đảo x-1 ∈ GF(28) với quy ước {00}-1 = {00} 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 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 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 8 có các hệ số thuộc GF(28) 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 ) = x 8 + 1 ) được sử dụng trong phép biến đổi MixColumns. Với 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 Chương 4 −1 Phép nhân s′( x) = a ( x) ⊗ s( x) được biểu diễn dưới dạng ma trận như sau: ⎡ s ' 0, c ⎤ ⎡ s 0, c ⎤ ⎢ ⎥ ⎢ ⎥ ⎢ s '1,c ⎥ ⎢ s1,c ⎥ ⎢ s ' 2, c ⎥ ⎢ s 2, c ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ s ' 3,c ⎥ = M ⎢ s 3,c ⎥ , 0≤ c≤ Nb (4.13) ⎢s' ⎥ a ⎢s ⎥ −1 ⎢ 4, c ⎥ ⎢ 4, c ⎥ ⎢ s ' 5 ,c ⎥ ⎢ s 5, c ⎥ ⎢s' ⎥ ⎢s ⎥ ⎢ 6, c ⎥ ⎢ 6, c ⎥ ⎢ s ' 7 ,c ⎥ ⎢ s 7 ,c ⎥ ⎣ ⎦ ⎣ ⎦ Đoạn chương trình sau thể hiện thao tác InvMixColumns sử dụng đa thức a-1(x) trong công thức (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 FFmul(0xb3, t[(r + 1) mod 8]) xor ...

Tài liệu được xem nhiều: