Download miễn phí Giáo trình Thuật toán mã hóa và ứng dụng





Phần lõi chính của quy trình mã hóa MARS là một hệthống Feistel loại 3 bao
gồm 16 chu kỳ. Trong mỗi chu kỳsửdụng một hàm E được xây dựng dựa trên
một tổhợp của các phép nhân, phép quay phụthuộc dữliệu và S–box. Hàm này
nhận vào một từdữliệu và trảra ba từdữliệu. Cấu trúc của hệthống Feistel được
thểhiện trong Hình 5.3 và hàm E được mô tảtrong Hình 5.4. Trong mỗi chu kỳ
sửdụng một từdữliệu đưa vào Evà cho ra ba từdữliệu được cộng hay XOR
với ba từdữliệu khác. Sau khi thực hiện xong hàm E từnguồn được quay 13 bit
vềbên trái.



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

ùi giống giai đoạn trộn tới của quy trình mã hóa, ngoại trừ các từ
dữ liệu được xử lý theo thứ tự khác. Nghĩa là, nếu đưa kết quả từ giai đoạn trộn
tới không dùng khóa vào giai đoạn trộn lùi không dùng khóa theo thứ tự đảo lại
(tức là dữ liệu kết quả D[3] đưa vào dữ liệu vào D[0], dữ liệu kết quả D[2] đưa
vào dữ liệu vào D[1], …) sau đó hai giai đoạn này sẽ khử lẫn nhau. Hình 5.5 thể
hiện giai đoạn trộn lùi.
Chương 5
130
⊕ Phép XOR Phép cộng
S0 S1 S–box 8 >>> phép quay phải 8 bit 8 <<< phép quay trái 8 bit
Hình 5.5. Cấu trúc giai đoạn “Trộn lùi”
K[39] K[38] K[37] K[36]
D[3] D[2] D[1] D[0]
S1
S0
S1
S0
8 <<<
8 <<<
8 <<<
S1
S0
8 <<<
8 <<<
8 <<<
S0
S1 8 <<<
8 <<<
S0
S1
8 <<<
S1
S0
S1
S0
8 <<<
8 <<<
8 <<<
Thực
hiện
hai lần
S1
S0
Các thuật toán ứng cử viên AES
131
Như ở giai đoạn trộn tới, ở đây cũng vậy trong mỗi chu kỳ sử dụng một từ nguồn
để thay đổi ba từ đích khác. Bốn byte của từ nguồn được biểu diễn bằng b0, b1, b2,
b3. Với b0 và b2 được sử dụng làm chỉ số cho S–box S1; b1 và b3 làm chỉ số cho
S–box S0. XOR S1[b0] với từ đích thứ nhất, trừ S0[b3] với từ dữ liệu thứ hai, trừ
S1[b2] với từ đích thứ ba và sau đó XOR S0[b1] với từ đích thứ ba. Cuối cùng,
quay từ nguồn 24 bit về bên trái.
Đối với chu kỳ kế tiếp quay bốn từ về bên phải một từ để từ đích thứ nhất hiện tại
trở thành từ nguồn kế tiếp, từ đích thứ hai hiện tại trở thành từ đích thứ nhất kế
tiếp, từ đích thứ ba hiện tại trở thành từ đích thứ hai kế tiếp và từ nguồn hiện tại
trở thành từ đích thứ ba kế tiếp.
Cũng như vậy, trước mỗi bốn chu kỳ riêng biệt trừ một từ trong số các từ đích với
từ nguồn: trước chu kỳ thứ tư và chu kỳ thứ tám trừ từ đích thứ nhất với từ nguồn
và trước chu kỳ thứ ba và chu kỳ thứ bảy trừ từ đích thứ ba với từ nguồn.
5.1.4.5 Quy trình mã hóa MARS
Trong đoạn mã giả mô tả quy trình mã hóa của phương pháp MARS sử dụng các
kí hiệu và quy ước sau:
1. Các phép toán sử dụng trong mã hóa được thực hiện trên các từ 32 bit (được
xem là số nguyên không dấu). Các bit được đánh số từ 0 đến 31, bit 0 là bit
thấp nhất và bit 31 là bit cao nhất.
2. Chúng ta biểu diễn:
a ⊕ b là phép XOR của a và b,
Chương 5
132
a ∨ b và a ∧ b là phép OR và AND của a và b.
a + b biểu diễn phép cộng modulo 232.
a – b biểu diễn phép trừ modulo 232.
a × b biểu diễn phép nhân modulo 232.
a >> b biểu diễn phép quay của từ 32 bit a sang phải hay sang
trái b bit.
(D[3], D[2], D[1], D[0]) ← (D[0], D[3], D[2], D[1]) biểu diễn phép quay
một mảng bốn từ sang phải một từ.
MARS–Encrypt(input: D[], K[])
Pha (I): Trộn “tới”
//Trước tiên, cộng các subkey vào dữ liệu
for i = 0 to 3
D = D = K
//Sau đó thực hiện 8 chu kỳ trộn “tới”
for i = 0 to 7 //Dùng D[0] để thay đổi D[1], D[2], D[3]
//Tra bảng S–box
D[1] = D[1] ⊕ S0[byte thứ 1 của D[0]]
D[1] = D[1] + S1[byte thứ 2 của D[0]]
D[2] = D[2] + S0[byte thứ 3 của D[0]]
D[3] = D[3] ⊕ S1[byte thứ 4 của D[0]]
//thực hiện phép quay phải từ nguồn (source word)
D[0] = D[0] >>> 24
Các thuật toán ứng cử viên AES
133
//Thao tác trộn bổ sung
if i = 1 or 4 then
D[0] = D[0] + D[3] //Cộng D[3] vào từ nguồn
end if
if i = 1 or 5 then
D[0] = D[0] + D[1] //Cộng D[1] vào từ nguồn
end if
//Quay D[] sang phải 1 từ để chuẩn bị cho chu kỳ tiếp theo
(D[3], D[2], D[1], D[0]) ← (D[0], D[3], D[2], D[1])
end for
Pha (II) Biến đổi sử dụng khóa
//Thực hiện 16 chu kỳ biến đổi có khóa
for i = 0 to 15
(out1,out2,out3) = E–function(D[0], K[2i + 4], K[2i + 5])
D[0] = D[0] <<< 13
D[2] = D[2] + out2
if i < 8 then //8 chu kỳ đầu – chế độ “tới”
D[1] = D[1] + out1
D[3] = D[3] ⊕ out3
else //8 chu kỳ sau – chế độ “lùi”
D[3] = D[3] + out1
D[1] = D[1] ⊕ out3
end if
//Quay D[] sang phải 1 từ để chuẩn bị cho chu kỳ tiếp theo
(D[3], D[2], D[1], D[0]) ← (D[0], D[3], D[2], D[1])
end for
Chương 5
134
Pha (III): Trộn “lùi”
//Thực hiện 8 chu kỳ trộn “lùi”
for i = 0 to 7
//Thao tác trộn bổ sung
if i = 2 or 6 then
D[0] = D[0] – D[3] //trừ từ nguồn cho D[3]
if i = 3 or 7 then
D[0] = D[0] – D[1] //trừ từ nguồn cho D[1]
//Tra bảng S–box
D[1] = D[1] ⊕ S1[byte thứ 1 của D[0]]
D[2] = D[2] – S0[byte thứ 4 của D[0]]
D[3] = D[3] – S1[byte thứ 3 của D[0]]
D[4] = D[4] ⊗ S0[byte thứ 2 của D[0]]
//Quay từ nguồn sang trái
D[0] = D[0] <<< 24
//Quay D[] sang phải 1 từ để chuẩn bị cho chu kỳ tiếp theo
(D[3], D[2], D[1], D[0]) ← (D[0], D[3], D[2], D[1])
end for
//Trừ dữ liệu cho subkey
for i = 0 to 3
D = D – K[36 + i]
end for
Các thuật toán ứng cử viên AES
135
5.1.5 Quy trình giải mã
Quy trình giải mã là nghịch đảo của quy trình mã hóa. Mã giả cho quy trình giải
mã của thuật toán MARS tương tự với mã giả của quy trình mã hóa của thuật
toán
MARS–Decrypt(input: D[], K[])
Pha (I): Trộn “tới”
// Cộng các subkey vào dữ liệu
for i = 0 to 3
D = D + K[36 + i]
//Thực hiện 8 chu kỳ trộn “tới”
for i = 7 downto 0
//Quay D[] sang trái 1 từ để bắt đầu xử lý trong chu kỳ này
(D[3], D[2], D[1], D[0]) ← (D[2], D[1], D[0], D[3])
//Quay từ nguồn sang phải
D[0] = D[0] >>> 24
//Tra bảng S–box
D[4] = D[4] ⊕ S0[byte thứ 2 của D[0]]
D[3] = D[3] + S1[byte thứ 3 của D[0]]
D[2] = D[2] + S0[byte thứ 4 của D[0]]
D[1] = D[1] ⊕ S1[byte thứ 1 của D[0]]
//Thao tác trộn bổ sung
if i = 2 or 6 then
D[0] = D[0] + D[3] //Cộng D[3] vào từ nguồn
Chương 5
136
if i = 3 or 7 then
D[0] = D[0] + D[1] //Cộng D[1] vào từ nguồn
end for
Pha (II): Biến đổi sử dụng khóa
//Thực hiện 16 chu kỳ biến đổi có khóa
for i = 15 downto 0
//Quay D[] sang trái 1 từ để bắt đầu chu kỳ này
(D[3], D[2], D[1], D[0]) ← (D[2], D[1], D[0], D[3])
D[0] = D[0] >>> 13
(out1, out2, out3)=E–function(D[0], K[2i + 4], K[2i + 5])
D[2] = D[2] – out2
if i < 8 then //8 chu kỳ cuối – chế độ “tới”
D[1] = D[1] – out1
D[3] = D[3] ⊕ out3
else //8 chu kỳ đầu – chế độ “lùi”
D[3] = D[3] – out1
D[1] = D[1] ⊕ out3
end if
end for
Pha (III): Trộn “lùi”
//Thực hiện 8 chu kỳ trộn “lùi”
for i = 7 downto 0
//Quay D[] sang trái 1 từ để bắt đầu chu kỳ này
(D[3], D[2], D[1], D[0]) ← (D[2], D[1], D[0], D[3])
//Thao tác trộn bổ sung
if i = 0 or 4 then
Các thuật toán ứng cử viên AES
137
D[0]=D[0] – D[3] //Trừ từ nguồn cho D[3]
if i = 1 or 5 then
D[0] = D[0] – D[1] //Trừ từ nguồn cho D[1]
//Quay từ nguồn sang trái
D[0] = D[0] <<< 24
//Tra bảng S–box
D[3] = D[3] ⊕ S1[byte thứ 4 của D[0]]
D[2] = D[2] – S0[byte thứ 3 của D[0]]
D[1] = D[1] – S1[byte thứ 2 của D[0]]
D[1] = D[1] ⊕ S0[byte thứ 1 của D[0]]
end for
//Trừ dữ liệu cho các subkey
for i = 0 to 3
D = D – K
end for
5.2 Phương pháp mã hóa RC6
Thuật toán RC6 tương ứng với các tham số w/r/b, trong đó kích thước từ là w bit,
quy trình mã hóa bao gồm r chu kỳ và tham số b xác định chiều dài mã khóa tính
bằng byte. Để đáp ứng yêu cầu khi tham gia vào việc chọn lựa chuẩn mã hóa
AES, RC6 phải đạt được kích thước khóa b là 16, 24 và 32–byte (tương ứng với
128/192/256 bit).
Chương 5
138
RC6–w/r/b thực hiện trên cá...
 
Top