Danh mục

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

Số trang: 29      Loại file: pdf      Dung lượng: 483.29 KB      Lượt xem: 15      Lượt tải: 0    
tailieu_vip

Hỗ trợ phí lưu trữ khi tải xuống: 1,000 VND Tải xuống file đầy đủ (29 trang) 0
Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

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 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), 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
Nội dung trích xuất từ tài liệu:
book mã hóa ứng dụng update 2 phần 3 Chương 3 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(28), 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à {y7 y 6 y5 y 4 y3 y 2 y1 y 0 } ): 64 Phương pháp mã hóa Rijndael ⎡ x 0 ⎤ ⎡0 0 1 0 0 1 0 1 ⎤ ⎡ y 0 ⎤ ⎡1 ⎤ ⎢x ⎥ ⎢ ⎢⎥ 0 0 1 0 0 1 0⎥ ⎢ y1 ⎥ ⎢0⎥ ⎢ 1 ⎥ ⎢1 ⎥ ⎢⎥ ⎢ x 2 ⎥ ⎢0 1 0 0 1 0 0 1 ⎥ ⎢ y 2 ⎥ ⎢1 ⎥ ⎢⎥⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ x3 ⎥ = ⎢1 0 1 0 0 1 0 0⎥ ⎢ y 3 ⎥ ⎢0⎥ + (3.27) ⎢ x 4 ⎥ ⎢0 1 0 1 0 0 1 0⎥ ⎢ y 4 ⎥ ⎢0⎥ ⎢⎥⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ x 5 ⎥ ⎢0 0 1 0 1 0 0 1 ⎥ ⎢ y 5 ⎥ ⎢0⎥ ⎢ x ⎥ ⎢1 0 0 1 0 1 0 0⎥ ⎢ y 6 ⎥ ⎢0⎥ ⎢ 6⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ x 7 ⎥ ⎢0 1 0 0 1 0 1 0⎥ ⎢ y 7 ⎥ ⎢0⎥ ⎣⎦⎣ ⎦⎣ ⎦ ⎣ ⎦ hay 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. (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. 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} 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 65 Chương 3 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(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)) được sử dụng trong phép biến đổi MixColumns. a-1(x) = {0b}x3 + {0d}x2 + {09}x + {0e} (3.29) Phép nhân s ′( x) = a −1 ( x ) ⊗ s ( x) có thể được biểu diễn dưới dạng ma trận: ⎡ s 0,c ⎤ ⎡0e ' 0b 0d 09⎤ ⎡ s0,c ⎤ ⎢' ⎥ ⎢ ⎥⎢ ⎥ 0e 0b 0d ⎥ ⎢ s1,c ⎥ ⎢ s1,c ⎥ = ⎢09 với 0 ≤ c < Nb (3.30) ⎢ s ' ⎥ ⎢0d 09 0e 0b⎥ ⎢ s 2,c ⎥ ⎢ 2 ,c ⎥ ⎢ ⎥⎢ ⎥ ' 0d 09 0e⎦ ⎢ s3,c ⎥ ⎢ s3,c ⎥ ⎣0b ⎣⎦ ⎣⎦ 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(28)) 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 66 Phương pháp mã hóa Rijndael 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. Với phép biến đổi tuyến tính A bất kỳ, ta có A( x + k ) = A( x) + A(k ) . Từ đó, 2. 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 67 Chương 3 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) AddRoun ...

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