Professional Documents
Culture Documents
Tóm tắt nội dung: Trong bản báo cáo này, thực được tạo ra bởi quá trình tạo khóa con Rijndael.
hiện xây dựng kịch bản kiểm chứng phần sinh Mỗi khóa con cũng là một cột gồm 4 byte. Hầu hết
khóa và thực hiện mã hóa cho mã AES. Có khả các phép toán trong AES đều thực hiện trong một
năng đáp ứng các yêu cầu về kết quả của thủ tục trường hữu hạn của các byte. Mỗi khối dữ liệu 128
sinh khóa Rijndael và bản mã hóa AES đối với bit đầu vào được chia thành 16byte (mỗi byte 8
từng trường hợp cụ thể. Ở báo cáo này sử dụng bit), có thể xếp thành 4 cột, mỗi cột 4 phần tử hay
bài toán ví dụ có sẵn, từ đó so sánh kết quả đối là ma trận 4x4 của các byte, nó được gọi là ma trận
chiếu trạng thái (state). Trong quá trình thực hiện thuật
toán các toán tử tác động để biến đổi ma trận trạng
I. MỞ ĐẦU thái này.
1. Giới thiệu tổng quát 3. Mở rộng khóa (KeyExpansion)
Trong mật mã học, Advanced Encryption Thuật toán AES nhận vào một khóa mã K và
Standard (viết tay AES) là một thuật toán mã hóa thực hiện phép mở rộng khóa để tạo ra một lược
khối được chinh phủ Hoa Kỳ áp dụng làm tiêu đồ khóa. Phép mở rộng khóa tạo ra tổng số
chuẩn mã hóa. Thuật toán được thiết kế bởi hai Nb(Nr + 1) từ. Thuật toán yêu cầu một tập khởi
nhà mật mã học người Bỉ: Joan Daemn và Vincent một gồm Nb từ và mỗi trong số Nr vòng đòi hỏi
Rịmen. Thuật toán được đặt tên là “Rijndael” khi Nb từ làm dữ liệu khóa đầu vào. Lược đồ khóa
tham gia cuộc thi thiết kế AES. kết quả là một mảng tuyến tính các từ 4 byte.
Thuật toán được dựa trên bản thiết kế Square
có trước đó của Daemn và Rijmenl còn Square lại 4. Quy trình mã hóa
được thiết kế dựa trên Shark.
Khác với DES sử dụng mạng Feitel, Rijndael Tại thời điểm bắt đầu phép mã hóa, đầu vào
sử dụng mạng thay thế-hoán vị. AES có thể dễ được sao chép vào mảng trạng thái được biến đổi
dàng thực hiện với tốc độ cao bằng phần mềm bằng cách thực hiện một vòng liên tiếp với số
hoặc phần cứng và không đòi hỏi nhiều bộ nhớ. vòng lặp là 10, 12 hoặc 14 (tương ứng với độ dài
Do AES là một tiêu chuẩn mã hóa mới, nó đang khóa). Phếp biến đổi cụ thể gồm SubBytes(),
được triển khai sử dụng đại trà. ShiftRows(), MixColumns(), và
AddRoundKey() dùng để xử lý trạng thái.
2. Mô tả thuật toán
Bao gồm các bước:
AES làm việc với các khối dữ liệu (đầu vào
và đầu ra) 128 bit và khóa có độ dài 128, 192 hoặc • Khởi động vòng lặp
256 bit. Các khóa con dụng trong các chu trinh
AddRoundKey: Mỗi cột của trạng thái đầu tiên
lần lượt được kết hợp với một khóa con theo thứ
tự từ đầu dãy khóa.
• Vòng lặp
SubBytes: Đây là phép thế (phi tuyến) trong đó
mỗi byte trong trạng thái sẽ được thế bằng một
byte khác theo bảng tra S-box.
ShifRows: Dịch chuyển, các hàng trong trạng
thái được dịch vòng theo số bước khác nhau.
MixColumns: Quá trình trộn làm việc theo các
cột trong khối theo một phép biến đổi tuyến tính.
AddRoundKey
• Vòng lặp cuối
SubBytes Hình 1: Thuật toán sinh khóa
ShiftRows Mỗi khóa vòng có 128 bit được chia là 4 word,
AddRoundKey mỗi word là 4 byte và ký hiệu là w[j], với j nguyên
chạy từ 0 đến 43. Tương ứng khóa mã ban đầu
II. CƠ SỞ XÂY DỰNG THUẬT TOÁN CipherKey có 4 word là w[0], w[1], w[2], w[3].
1. Xây dựng bài toán Khóa vòng 1 có 4 từ là w[4], w[5], w[6], w[7].
Với input đầu vào thể hiện mảng State với kích Tương tự, khóa vòng 10 có 4 từ là w[40], w[41],
thước 4x4 với độ dài khối và độ dài khóa là 16 w[42], w[43]. Tính w[j] (3 < j < 44) theo công thức
bytes tương ứng với Nb = 4 và Nk = 4. sau:
𝑤[𝑗] = 𝑤[𝑗 − 1] 𝑋𝑂𝑅 𝑤[𝑗 − 4]
Input = 32 43 f6 a8 88 5a 30 8d 31 31 98 a2 e0 37 𝑤[𝑗 = 4 ∗ 𝑛] = 𝐺(𝑤[𝑗 − 1]) 𝑋𝑂𝑅 𝑤[𝑗 − 4]
07 34 Hàm G được xây dựng bằng việc biến đổi qua
CiperKey = 2b 7e 15 16 28ae d2 a6 ab f7 15 88 09 df 3 bước RotWord, SubWord và xorRcon.
4f 3c a. Xây dựng hàm rotword
Ở trong phần này, với hàm in chữ sẽ in ra tất
Từ đó ta tìm Output là kết quả mã hóa AES và cả các chữ dạng hexan, kể cả với các trường hợp
trong đó sử dụng thủ tục sinh khóa Rindael. chữ hexan đầu tiên là 0 thì vẫn có thể in ra.
Đối với hàm rotword thực hiện nhiệm vụ dịch
2. Mở rộng khóa AES – 128bit
vòng trái 1 byte. Với byte đầu tiên ta dịch phải
Chức năng KeyExpansion thực hiện tính toán
24bit và lấy 1byte, còn đối với byte 2 3 và 4 thực
khóa vòng cho bước lặp mã hóa và bước tạo ngõ
hiện lấy 3 bytes cuối cùng. Kết quả phép rotword
ra. Kết quả của một lần thực thi KeyExpansion là
là 3 bytes bên phải được dịch trái 1 byte và kết hợp
một khóa vòng sử dụng cho chức năng
với byte đầu tiên
AddRoundKey. Với mã hóa AES-128, số khóa
vòng là 10 tương ứng với 9 lần AddRoundKey ở
bước lặp mã hóa và 1 lần AddRoundKey ở bước
tạo ngõ ra. Chức năng KeyExpansion được thực
hiện thông qua 4 bước là RotWord, SubWord,
xorRcon và AddW.
3. Mã hóa AES
Hình 10: Thuật toán mã hóa
Mã hóa AES được thực hiện thông qua 5
chức năng chính là AddroundKey, SubBytes, a. Hàm AddRoundKey
ShiftRows, MixColumns và KeyExpansion. Đầu vào là state gồm 4 biến, khóa K 4 biến.
Năm chức năng này được sắp xếp để thực hiện Khai báo biến kết quả là mảng 4x4. Sau đó xor
ba bước cơ bản. từng cặp byte với nhau.
d. Hàm MixColumns
Trong hàm này sẽ dùng ma trận để nhân
với ma trận từ phép Shift Rows để ra kết quả
mới. Vậy nên sẽ phải sử dụng đến hàm nhân 2
Hình 14: Kết quả so sánh phép Subbytes và nhân 3.
Phép nhân 2 là phép dịch bit sang trái 1.
c. Hàm ShiftRows Nếu kết quả lớn hơn 128. Ta phải thực hiện
Là hàm dịch trái 1 byte tăng dần theo từng phép xor kết quả với hàm M có dạng 𝑥 8 +
dòng. Đầu ra output: byte thứ nhất của w0 sẽ 𝑥 4 + 𝑥 3 + 𝑥 + 1 có dạng hexan là 11b.
là byte đầu tiên của w0 (input), byte thứ 2 của
w0 sẽ là byte thứ 2 của w1(input), byte thứ 3
của w0 sẽ là byte thứ 3 của w2(input) và byte
cuối cùng của w0 sẽ là byte cuối cùng của
w3(input). Làm tương tự với w1 w2 w3 của
output.
Hình 17: Phép nhân 2
LỜI CẢM ƠN
Chúng em xin được gửi lời cảm ơn đến
Tiến sĩ Trần Xuân Tú đã giúp đỡ và góp ý
Hình 26: Nhập dữ liệu đầu vào của quá trình giải mã cho chúng em trong quá trình học tập cũng
như thực hiện được báo cáo này.