You are on page 1of 8

BÁO CÁO KỊCH BẢN KIỂM CHỨNG SINH KHÓA x MÃ HÓA

AES (ADVANCED ENCRYPTION STANDARD)


Nguyễn Thị Thủy Tiên, Nguyễn Đức Khánh
Bộ môn: Phát triển hệ thống nhúng bảo mật
Giảng viên hướng dẫn: Trần Xuân Tú
Viện Công nghệ Hàng không Vũ Trụ, Trường Đại học Công nghệ - ĐHQG Hà Nội
Email: 18021266@vnu.edu.vn, 18020697@vnu.edu.vn

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.

Hình 2: Hàm Rotword


Hình 3: Kết quả so sánh với mẫu có sẵn

b. Hàm subword Hình 6: Hàm G


Nhiệm vụ là chuyển đổi các từ khóa thành từ
khóa mới nhờ vào bảng Sbox. Trong từ khóa có
4bytes, nên chạy vòng for từ 1 đến 4 và mỗi lần
sẽ lấy byte thứ i tương ứng để lấy 1 byte. Sau đó,
dùng kết quả đó để tra vào bảng. Được bao nhiêu
ta ghép các byte lần lượt từ trái sang và thành từ
khóa mới.
Hình 7: Kết quả hàm G

d. Xây dựng hàm mở rộng khóa


Khóa AES-128: lặp lại trường hợp nếu i
tăng từ 0 đến 43 khi i là bội của 4.
Input khóa Key gồm 4 biến là 32 bit.
Hình 4:Hàm subword Khai báo con trỏ từ khóa gồm 44 từ word,
c. Hàm xor Rcon và hàm G gán 4 giá trị đầu bằng key. Rồi cho chạy i từ 4
Lấy từ khóa tương ứng với Rcon từng vòng. đến 43. Nếu i chia hết cho 4 thì lấy từ khóa
Mỗi vòng có Rcon[j/4] là giá trị hexan được tra vừa sinh khóa rồi xor với từ khóa i – 4 tương
theo bảng ứng. Còn nếu không chia hết cho 4 thì lấy từ
j=j/4 1 2 3 4 5 6 7 8 9 10 khoa i - 1 xor với từ khóa i – 4.
Rcon 01 02 04 08 10 20 40 80 1b 36
Bảng 1: Giá trị Rcon

Lấy byte1 để suy ra kết quả xor của byte1 với


Rcon[j]. Từ đó lấy ra 1 byte. Lấy ra 3 byte cuối
cùng của từ khóa. Sau đó ghép lại với nhau để ra
kết quả xor dịch 24bit (3 bytes) với 3 bytes cuối.

Hình 8: Hàm mở rộng khóa

Hình 5: Hàm xor Rcon

Với hàm G, ta ghép các hàm vừa rồi vào để ra


hàm G hoàn chỉnh.
Hình 9: Kết quả so sánh cuối cùng của phép sinh
khóa

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.

Bước 1: Bước khởi tạo: dữ liệu cần được mã


hóa input kết hợp với cipherKey bằng chức năng
AddroundKey.
Bước 2: Bước lặp mã hóa (lặp 9 vòng): kết
quả bước 1 được sử dụng để thực hiện tuần tự các
chức năng SubBytes, ShiftRows, MixColumns
và AddRoundKey. KeyExpansion thực hiện song
song với bước AddRoundKey để tạo khóa vòng. Hình 11: Hàm AddRoundKey

Bước 3: Bước tạo ngõ ra: Kết quả ở bước 2


được sủ dụng để thực hiện lần lượt các chức năng
SubBytes, ShiftRows và AddRoundKey để tạo
ngõ ra output.

Hình 12: Kết quả so sánh phép Addroundkey


b. Hàm Subbytes
Chức năng của SubBytes là thực hiện thay
thế từng byte của ma trận trạng thái, ngõ ra của
AddroundKey, bằng một giá trị đã quy định
trong chuẩn AES gọi là S-box.
Lấy ra từng byte rồi sử dụng hàm subword
đã viết ở phần sinh khóa. Có 4 từ khóa nên cho
chạy i từ 0 đến 3.
Hình 15: Hàm ShiftRows

Hình 13: Hàm Subbytes

Hình 16: Kết quả so sánh phép ShiftRows

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

Phép nhân 3 sẽ là phép xor của nhân 1 và nhân


2. Nên ta xor từ khóa với phép nhân 2 của từ
khóa.
không có phép MixColumns nữa.

Hình 18: Phép nhân 3

Sau đó, tiến hành nhân ma trận cơ bản,


nhân hàng với cột.

Hình 22: Hàm mã hóa AES

Hình 19: Phép nhân ma trận

Cuối cùng là đưa ra kết quả hàm


mixcolumns sau khi đã cho chạy hết các từ
khóa

Hình 20: Hàm MixColumns


Hình 23: Kết quả so sánh Output mã hóa

III. Thực hành kiểm chứng mã hóa và


giải mã
1. Xây dựng bài toán
Thực hành kiểm chứng mã hóa và sinh mã
bằng cách thực hiện song song trên hai user. Một
máy thực hiện sinh khóa và mã hóa, thông qua
internet để máy còn lại nhận được và tiến hành giải
mã.

2. Tiến hành kiểm chứng


Tại user 1, ta tiến hành nhập dữ liệu đầu vào
Hình 21: Kết quả so sánh phép MixColumns gồm CipherKey và State là 1 dãy các chữ cái hexan
e. Hàm mã hóa 128 bit. Thực hiện encoding ta được đầu ra là kết
quả của việc sinh khóa và mã hóa.
Thực hiện lần lượt các phép Subbytes,
ShiftRows, MixColumns và AddRoundKey
trong 9 vòng đầu tiên. Đối với vòng thứ 10 thì
IV. Đánh giá kết quả
Với mục tiêu ban đầu đặt ra, việc thực hiện
kịch bản để kiểm chứng để đưa ra cái nhìn bao
quát, giúp giải quyết các vấn đề trong việc thực
hiện mã hóa AES.
Hình 24: Nhập cipherKey và input của user 1 Thêm vào đó, việc thực hiện song song
decoding và encoding để đưa ra kết luận chính
xác cho thuật toán.
Qua đó, ta có thể thấy được mã hóa AES
(Advanced Encryption Standard) thiết kế và độ
dài của thuật toán là đủ an toàn để bảo vệ các
thông tin được xếp vào loại tối mật nhưng về an
ninh của AES thì chưa được đánh giá cao vì các
kỹ thuật tấn công ngày một cải thiện và tinh vi thì
AES có thể bị phá vỡ. Một vấn đề khác là cấu
trúc toán học của AES khá đơn giản
Ta cũng có nhiều phương pháp phòng chống
tấn công vào AES như sử dụng các biện pháp để
Hình 25: Kết quả của mã hóa tăng tính bảo mật của các thuật toán mã hóa.
Hoặc có thể bảo vệ dữ liệu theo phương pháp vật
Tại user 2, sau khi nhận được mã từ encoding.
lý như đặt thiết bị vào các hộp cách ly âm thanh,
Ta sử dụng mã đó để tiến hành decoding. Bằng việc
không để ai lại gần khi đang giải mã dữ liệu hoặc
nhập Key và mã thu được ở vòng 10 ở encoding.
sử dụng các nguồn âm thanh băng rộng tần số đủ
cao dể gây nhiễu

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.

Hình 27: Kết quả của quá trình giải mã

You might also like