Trang ii
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT VĨNH LONG
KHOA CƠNG NGHỆ THƠNG TIN
BÁO CÁO MƠN HỌC
AN TỒN VÀ AN NINH THƠNG TIN – TH1341
ĐỀ TÀI:
MÃ
GVHD: ThS . LÊ HỒNG AN
NHÓM SVTH: NHÓM 6
Nguyễn Thị Tuyết Hoa MSSV: 19304032
Lê Thị Huyền Trân MSSV: 19304046
Lớp : 44 A-CNTT
Vĩnh Long – 2020
Trang ii
NHẬN XÉT GIÁO VIÊN HƯỚNG DẪN
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
Vĩnh Long, ngày
tháng
Giáo viên hướng dẫn
Lê Hoàng An
năm 2020
Trang ii
LỜI CẢM ƠN
Trong thời gian thực hiện và hoàn thành tiểu luận: “MÃ HĨA AES”. Nhóm em xin
chân thành cảm ơn sự giúp đỡ nhiệt tình của quý Thầy, Cô trường Đại Học Sư Phạm Kỹ
Thuật Vĩnh Long, những người đã giúp đỡ, cung cấp nhiều thông tin quý báu và tạo điều
kiện cho nhóm em trong q trình thực hiện tiểu luận này.
Nhóm em xin được gửi lời cảm ơn đặc biệt đến thầy Lê Hoàng An, người đã tận
tình hướng dẫn, giúp đỡ chỉ bảo cho nhóm em nghiên cứu và hồn thành tiểu luận.
Trong q trình làm đồ án chắc khơng tránh khỏi những sai sót. Kính mong nhận
được sự góp ý, nhận xét từ phía q Thầy, Cơ để kiến thức của nhóm em ngày càng hoàn
thiện hơn.
Xin chân thành cảm ơn!
Sinh viên thực hiện
Nguyễn Thị Tuyết Hoa
Lê Thị Huyền Trân
MỤC LỤ
Trang ii
CHƯƠNG I. MỞ ĐẦU.......................................................................7
1. Lí do chọn đề tài......................................................................7
2. Phạm vi nghiên cứu.................................................................7
3. Ý nghĩa thực tiễn.......................................................................7
CHƯƠNG II. MÃ HĨA AES..............................................................9
1. Lịch sử mã hóa AES................................................................9
2. Cách thực hiện mã hóa AES...................................................10
3. Cách thực hiện của mã hóa AES-128.....................................20
CHƯƠNG III. ỨNG DỤNG CỦA MÃ HÓA AES............................41
CHƯƠNG IV. KẾT LUẬN................................................................43
TÀI LIỆU THAM KHẢO..................................................................44
Trang ii
DANH MỤC HÌNH
Hình 1: Cơ chế hoạt động của AES..................................................................................3
Hình 2: Quy tắc ma trận đầu vào.....................................................................................3
Hình 3: Quy tắc ma trận khóa vịng.................................................................................4
Hình 4: Mảng trạng thái state..........................................................................................4
Hình 5: Sơ đồ thực hiện của mã hóa AES.........................................................................6
Hình 6:Q trình mã hóa AES-128.................................................................................11
Hình 7: Dữ liệu và khóa mã được sắp xếp dưới dạng ma trận.......................................11
Hình 8: Chức năng AddRoundKey cho bước khởi tạo....................................................11
Hình 9: S-box của mã hóa AES......................................................................................12
Hình 10: Chức năng SubBytes........................................................................................12
Hình 11: Chức năng ShiftRows.......................................................................................13
Hình 12: Ma trận chuyển đổi sử dụng trong chức năng MixColumns...........................13
Hình 13: Chức năng MixColumns..................................................................................14
Hình 14: Chức năng KeyExpansion...............................................................................15
Hình 15: Thực thi RotWord cho từ w[3].........................................................................16
Hình 16: Thực thi SubWord khi chuyển đổi từ w[3]......................................................16
Hình 17: Thực thi AddRcon khi chuyển đổi từ w[3]......................................................17
Hình 18: Thực thi AddW để tạo khóa vịng 1..................................................................18
Hình 22: Chức năng InvShiftRows.................................................................................20
Hình 23: Bảng S-box đảo của chuẩn AES......................................................................21
Hình 24: Chức năng InvSubBytes...................................................................................21
Hình 25: Ma trận chuyển đổi dùng trong InvMixColumns.............................................22
Hình 26: Chức năng InvMixColumns.............................................................................25
Hình 27: Mạch nguyên lý nhân một byte A với các phần tử trong ma trận chuyển đổi
InvMixColumns..............................................................................................................25
Trang ii
BẢNG PHÂN CHIA CƠNG VIỆC TRONG NHĨM
STT
Cơng việc
Sinh viên thực hiện
1
Lịch sử mã hóa AES
Lê Thị Huyền Trân
2
3
4
5
6
7
8
Cơ chế thực hiện chung cho 3 loại AES-128,
AES-192, AES -256.
Ví dụ cách thực hiện cho AES-128.
Ứng dụng của mã hóa AES.
Soạn bài word báo cáo.
Chỉnh sửa bài báo cáo
Soạn bài powerpoint báo cáo.
Chỉnh sửa bài powerpoint
Lê Thị Huyền Trân
Nguyễn Thị Tuyết Hoa
Nguyễn Thị Tuyết Hoa
Nguyễn Thị Tuyết Hoa
Lê Thị Huyền Trân
Nguyễn Thị Tuyết Hoa
Lê Thị Huyền Trân
Trang ii
PHẦN 1: LÝ THUYẾT
CHƯƠNG I. MỞ ĐẦU
1. Lí do chọn đề tài
Theo thống kê của Trung tâm ứng cứu khẩn cấp máy tính Việt Nam - VNCERT,
năm 2015 Việt Nam có 4.484 sự cố tấn cơng lừa đảo, 6.122 sự cố thay đổi giao diện,
14.115 sự cố về mã độc đặc biệt, nhiều trang web, cổng thông tin điện tử của Cơ quan
nhà nước bị tấn công thay đổi giao diện; gần đây nhất, vào ngày 29 tháng 7/2016 trang
mạng của Vietnam Airlines bị tin tặc nước ngoài tấn công gây ra những tổn thất vô cùng
to lớn. Như vậy, ta có thể thấy, việc trao đổi thơng tin qua mạng truyền dẫn có ý nghĩa vơ
cùng quan trọng đối với cuộc sống, công việc của chúng ta nhưng cũng vô cùng nguy
hiểm nếu như bị đánh cắp, tấn cơng mạng, đặc biệt là bí mật quốc gia bị các thế lực thù
địch đánh cắp và sử dụng để chống phá ta. Do đó, đi kèm với việc ứng dụng cơng nghệ
thơng tin thì đồng nghĩa chúng ta phải gia tăng cảnh giác và có các biện pháp để bảo mật
thơng tin, phịng chống tấn cơng mạng. Với tính chất cấp thiết của cuộc sống và công
việc ngày nay của chúng ta khi ứng dụng công nghệ thông tin cần phải được bảo mật. Mã
hóa AES “ Tiêu chuẩn mã hóa tiên tiến” là một thuật tốn mã hóa khối được chính
phủ Hoa kỳ áp dụng làm tiêu chuẩn mã hóa. Giống như tiêu chuẩn tiền nhiệm DES, AES
được kỳ vọng áp dụng trên phạm vi thế giới và đã được nghiên cứu rất kỹ lưỡng. AES
được chấp thuận làm tiêu chuẩn liên bang bởi Viện tiêu chuẩn và cơng nghệ quốc gia Hoa
kỳ (NIST) sau một q trình tiêu chuẩn hóa kéo dài 5 năm. Nó được sử dụng rất rộng
trong việc bảo mật thông tin, rất nhiều các phần mềm bảo mật được thiết kế dựa trên giải
thuật mã hóa AES này. Đây cũng chính là lý do nhóm chúng em chọn nghiên cứu đề tài “
Mã Hóa AES” này.
2. Phạm vi nghiên cứu
Chúng em nghiên cứu chính trên các phần:
- Lịch sử hình thành và phát triển của mã hóa AES.
- Cách thực hiện mã hóa AES.
- Giải thuật mã hóa AES cụ thể là AES-128.
- Ứng dụng của mã hóa AES.
Trang ii
3. Ý nghĩa thực tiễn
Giới thiệu được sự hình thành và phát triển, cách thực hiện và các ứng dụng của
mã hóa AES, từ đó giúp hiểu rõ hơn về mã hóa này để có thể vận dụng giải thuật mã hóa
AES trong việc sử dụng thơng tin cũng như hình thành ý thức tốt trong việc bảo mật an
tồn an ninh thơng tin dữ liệu.
Trang ii
CHƯƠNG II. MÃ HÓA AES
AES là viết tắt của Advanced Encryption Standard, chuẩn mã hóa dữ liệu rất phổ
biến, dùng cho nhiều mục đích và được cả chính phủ Mỹ sử dụng để bảo vệ các dữ liệu
tuyệt mật.
AES là kiểu mã hóa đối xứng dạng khối, nghĩa là mỗi khối văn bản có một kích
thước nhất định (128 bit) được mã hóa, khác với mã hóa dạng chuỗi khi từng kí tự được
mã hóa. Đối xứng nghĩa là khóa để mã hóa và giải mã đều là một.
1. Lịch sử mã hóa AES
AES được phát triển từ cuối những năm 90s để thay thế chuẩn mã hóa trước đó là
Data Encryption Standard (DES) do IBM tạo ra đầu những năm 70s. Nó được chính phủ
Mỹ dùng trong năm 1977 nhưng sau đó có nhiều lỗ hổng dễ bị tấn cơng (brute force,
phân tích mật mã khác biệt/tuyến tính) do dựa trên thuật tốn 56 bit, nên khơng cịn hữu
ích nữa khi vi xử lý máy tính ngày càng mạnh hơn.
Vào năm 1998, DES trở thành 3DES hay còn gọi là Triple DES, dùng thuật tốn
DES để truyền thơng điệp 3 lần liên tiếp với 3 khóa mã hóa khác nhau. 3DES khiến dữ
liệu an toàn hơn trước kiểu tấn cơng brute force thời đó.
15 thuật tốn được đề xuất thay thế DES, bắt đầu quy trình 5 năm của chính phủ
Mỹ. AES được hai nhà mật mã học là Vincent Rijmen và Joan Daemen đề xuất, sau được
gọi là “đơn Rijindael”.
AES là chuẩn mở vì khi đó chuẩn thực sự cũng chưa được xác định. Trong quá
trình thiết kế, nó cũng nhận bình luận, góp ý. Nó được Viện tiêu chuẩn và kỹ thuật quốc
gia Hoa Kỳ phát triển với mục tiêu dễ dùng cho cả phần cứng và phần mềm. Một số thay
đổi về khóa và khối được thực hiện để tăng tính an tồn.
NSA cũng tham gia xem xét 15 bản đề xuất. Tới tháng 8/1999 chỉ cịn 5 thuật tốn
(Rijndael, Serpent, RC6, Twofish và MARS). Các “ứng viên” được phân tích thêm về độ
bảo mật, tính dễ sử dụng, bản quyền, tốc độ, độ chính xác khi mã hóa và giải mã.
Trang ii
Người chiến thắng sau cùng là Rijndael, sau đó được đưa lên cho chính phủ Mỹ
vào năm 2002 và cả NSA cùng các tổ chức khác. Đến giờ, AES vẫn được dùng cho các
tài liệu tuyệt mật, được cho là FIPS (Federal Information Processing Standard - tiêu
chuẩn xử lý thơng tin liên bang). Sau đó nó được dùng trong khối tư nhân, là chuẩn mã
hóa phổ biến nhất với mã hóa khóa đối xứng.
2. Cách thực hiện mã hóa AES.
Cơ chế thực hiện của mã hóa AES
AES là kiểu mã hóa khối, mỗi khối kích thước 128 bit. Khóa đối xứng với 3 kích
thước là 128, 192 và 256 bit, trong đó 2 kích thước sau được chính phủ Mỹ dùng cho các
tài liệu mật cấp cao, được gọi là “Top Secret”.
Rijndael ban đầu được phép thêm khối và tăng độ dài khóa nhưng chuẩn sau này
bị bỏ, giữ chuẩn kích thước như đã nói ở trên. AES là chuẩn mã hóa duy nhất được phát
hành rộng rãi được NSA chấp thuận dùng để bảo vệ thơng tin chính phủ ở mức cao cấp
nhất.
AES dùng thuật tốn mã hóa khối mạng thay thế hoán đổi (SPN - Substitution
Permutation Network). Dữ liệu được chuyển thành dạng an toàn trong vài bước, bắt đầu
là khối plain text kích thước chuẩn, sau đó chèn vào hàng và sau đó là mã hóa. Mỗi lần
đều có các bước thay thế, chuyển đổi, hịa trộn.
Cũng như 3DES có 3 bước mã hóa, AES cũng có nhiều bước nhưng được thực
hiện nhiều hơn, phụ thuộc vào độ dài khóa, với khóa 128 bit là 10 lần, khóa 192 bit là 12
lần và khóa 256 bit là 14 lần.
AES được thực hiện bởi các hàm theo thứ tự sau: Trộn từng byte (SubBytes), trộn
từng hàng (ShiftRows), trộn từng cột (MixColumns) và mã hóa (AddRoundKey). Trong
đó SubBytes, ShiftRows, MixColumns có nhiệm vụ làm cho mối quan hệ giữa bản rõ và
bản mã bị che khuất (phương thức "mập mờ"). AddRoundKey sử dụng key mã hóa để mã
hóa dữ liệu đầu vào bằng việc phân tán những kiểu mẫu của bản rõ sang bản mã (phương
thức "khuếch tán").
Trang ii
Trong q trình này, khóa mã hóa được tạo và cũng phải có khóa này để giải mã.
Nếu khơng, dữ liệu sẽ chỉ là mớ lộn xộn không thể đọc được. Cả người gửi và người
nhận đều phải biết khóa mã hóa và giải mã.
Về cơ bản, cơ chế sẽ như sau:
Hình 1: Cơ chế hoạt động của AES
AES là một mã khối, nhưng khác với các mã khối khác được biết đến trước đây
(DES, IDEA,…), dữ liệu trong AES không được biểu diễn dưới dạng một mảng các byte
hay các bit mà được biểu diễn dưới dạng một ma trận 4xNb và được gọi là mảng trạng
thái (state). Trong đó, đối với AES, Nb ln có giá trị bằng 4. Trong khi thuật toán
Rijndael hỗ trợ ba giá trị của Nb là 4, 6, 8 tương ứng với kích thước khối 128, 192 và 256
bit Dữ liệu đầu vào được đọc vào ma trận state theo từng cột, theo thứ tự từ trên xuống
dưới, từ trái qua phải. Dữ liệu đầu ra được đọc từ ma trận cũng theo quy tắc trên.
Hình 2: Quy tắc ma trận đầu vào
Khóa vịng trong AES cũng được biểu diễn hồn tồn tương tự như cách biểu diễn
dữ liệu. Tuy nhiên, tùy vào kích thước khóa mà số cột của ma trận khóa vịng Nk sẽ khác
Trang ii
nhau. Cụ thể, Nk nhận các giá trị 4, 6, 8 tương ứng với các kích thước khóa là 128, 192 và
256 bit. Đây chính là điểm mạnh của thuật tốn AES trong vấn đề mở rộng khóa.
Hình 3: Quy tắc ma trận khóa vịng
Số vịng lặp ký hiệu là Nr, phụ thuộc vào hai đại lượng Nb và Nk. Vì Nb trong AES
có giá trị cố định nên Nr chỉ phụ thuộc vào Nk. Giá trị của Nr tương ứng với ba giá trị của
Nk là Nr = 10, 12, 14. Cụ thể, giá trị Nr được xác định bởi
-Khái niệm từ (Word) trong AES
Bốn byte trên mỗi cột trong mảng trạng thái state tạo thành 1 từ 32 bit, trong đó số
thứ tự của hàng r (0≤r<4) cho biết chỉ số của bốn byte trong mỗi từ. Từ định nghĩa state ở
trên có thể coi state là mảng một chiều chứa các từ 32 bit
Hình 4: Mảng trạng thái state
Tương tự như đối với mảng khóa cũng có thể biểu diễn thành mảng một chiều chứa
các từ 32 bit như công thức dưới đây với số lượng từ khóa phụ thuộc vào Nk (Nk=4, 6, 8).
- Thuật tốn của AES
Thuật tốn AES khá phức tạp, được mơ tả khái quát gồm 3 bước như sau:
+ 1 Vòng khởi tạo chỉ gồm phép AddRoundKey
+ Nr -1 Vòng lặp gồm 4 phép biển đổi lần lượt: SubBytes, ShiftRows,
MixColumns, AddRoundKey.
Trang ii
+ 1 Vòng cuối gồm các phép biến đổi giống vịng lặp và khơng có phép
MixColumns.
- Khái qt:
1. Mở rộng khóa - Các khóa phụ dùng trong các vịng lặp được sinh ra từ khóa
chính AES sử dụng thủ tục sinh khóa Rijndael.
2. InitialRound – AddRoundKey - Mỗi byte trong state được kết hợp với khóa phụ
sử dụng XOR
3. Rounds - SubBytes—bước thay thế phi tuyến tính, trong đó mỗi byte trong state
được thay thế bằng một byte khác sử dụng bảng tham chiếu - ShiftRows—bước đổi chỗ,
trong đó mỗi dòng trong state được dịch một số bước theo chu kỳ - MixColumns—trộn
các cột trong state, kết hợp 4 bytes trong mỗi cột - AddRoundKey
4. Final Round (không MixColumns) - SubBytes - ShiftRows - AddRoundKey.
Thuật toán giải mã khá giống với thuật tốn mã hóa về mặt cấu trúc nhưng 4 hàm
sử dụng là 4 hàm ngược của quá trình mã hóa. Riêng đối với cấu trúc giải mã trong AES
gồm 2 chế độ giải mã:
+ Ở cấu trúc giải mã ngược, gồm vòng khởi tạo, Nr-1 vòng lặp và vịng kết thúc.
Trong đó vịng khởi tạo chỉ có phép biến đổi AddRounKey, vòng lặp gồm lần lượt 4 phép
biến đổi chính: InvShiftRows, InvSubBytes, AddRounKey, InvMixColumns; vịng kết
thúc khác với vịng lặp chính ở chỗ khơng có phép InvMixColumns.
+ Ngược lại với cấu trúc giải mã ngược là cấu trúc giải mã xuôi, việc ngược lại thể
hiện ở điểm: trong cấu trúc giải mã xuôi việc sắp xếp các phép biến đổi ngược giống hệt
với cấu trúc mã hóa, cụ thể bao gồm: vòng khởi tạo, Nr-1 vòng lặp và vịng kết thúc.
Trong đó vịng khởi là phép AddRounKey; ở vòng lặp thứ tự các phép biến đổi ngược lần
lượt là: InvSubBytes, InvShiftRows, InvMixColumns, AddRounKey; vòng kết thúc giống
vòng lặp nhưng được lược bỏ phép InvMixColumns. Một điểm khác biệt nữa trong hai
cấu trúc giải mã ngược và giải mã xi đó là: Trong giải mã ngược khóa vịng giải mã
chính là khóa vịng mã hóa với thứ tự đảo ngược. Cịn trong giải mã xi thì khóa giải mã
ngồi việc đảo ngược thứ tự khóa vịng mã hóa cịn phải thực hiện phép InvMixColumns
đối với các khóa vịng của vòng lặp giải mã.
Trang ii
Hình 5: Sơ đồ thực hiện của mã hóa AES
Các chế độ hoạt động của AES
Khi cài đặt thuật tốn mã AES người ta thường khơng sử dụng ở dạng nguyên gốc.
AES thường hoạt động ở bốn chế độ cơ bản của mã khối n-bit (ECB, CBC, CFB và OFB)
đặc tả bởi tiêu chuẩn ISO/IEC 10116:1997 Information technology– Security techniques
– Modes of operation for an n-bit cipher (Công nghệ thơng tin- kỹ thuật an tồn- chế độ
hoạt động của mã hóa nbit). Trên cơ sở bốn chế độ cơ bản ban đầu này người ta đã phát
triển thêm một số chế độ khác (Có thể trong tương lai ISO/IEC sẽ công bố thêm một số
chế độ hoạt động khác nữa cho mã khối. Hiện tại ISO/IEC mới quy định bốn chế độ cơ
bản nói trên). Sau đây là những nét sơ lược của bốn chế độ này.
Chế độ sách mã điện tử ECB (Electronic Code Book): Trong chế độ ECB các khối
rõ được mã hoá độc lập nhau và khối mã được giải mã độc lập: C i = Ek(Mi); Mi = Dk(Ci),
trong đó Ek và Dk là các phép mã hoá và giải mã theo khoá mật K.
Chế độ xích liên kết khối mã CBC (Cipher block Chaining): Trong chế độ này,
đầu tiên người ta tạo ra một xâu nhị phân 64 bit được gọi là véc-tơ khởi đầu và thông báo
cho nhau. Trong bước đầu tiên khối dữ liệu rõ M1 được cộng với véc-tơ khởi đầu theo
phép cộng bit, kết quả nhận được sẽ được biến đổi qua các phép mã hóa để được đầu ra là
Trang ii
khối mã C1. Ở các bước sau, mỗi khối Mi của bản rõ được cộng theo modulo 2 với bản
mã trước đó Ci-1 và được mã hố:
Ci = Ek(Mi r Ci-1)
Mi =Dk(Ci) r Ci-1
Chế độ mã liên kết ngược CFB (Cipher Feed Back): Chế độ này này khác với chế
độ CBC, tại bước đầu tiên véc-tơ khởi đầu được mã hóa bằng Ek rồi cộng theo modulo 2
với khối rõ. Kết quả thu được lại làm véc-tơ khởi đầu cho bước tiếp theo, rồi lại thực hiện
tương tự chế độ CBC:
Ci = Mi r Ek(Ci-1)
Mi =Ci r Dk(Ci-1)
Chế độ đầu ra liên kết ngược OFB (Output Feedback): Thực chất của chế độ OFB
là tạo ra khóa dịng rồi cộng theo modulo 2 với bản rõ. Khóa dịng được tạo như sau: Đầu
tiên lấy véc-tơ khởi đầu s0 rồi mã hóa qua phép mã khối Ek được s1. Tiếp đó, s1 lại được
mã hóa qua Ek để được s2,.. và cứ thế thực hiện cho đến khi tạo được khóa dịng có độ
dài bằng dữ liệu cần mã.
Mỗi chế độ sử dụng mã khối trên đây đều có ưu điểm và nhược điểm riêng. Tùy
từng trường hợp cụ thể mà người ta lựa chọn một chế độ sử dụng phù hợp đáp ứng yêu
cầu bảo mật đặt ra.
Thực thi thuật toán AES bằng phần mềm:
Thuật toán AES cho phép thực thi hiệu quả bằng cả phần mềm và phần cứng.
Thông thường, với những ứng dụng không yêu cầu hiệu năng và tốc độ cao thì thuật tốn
thường được thực thi ở dạng phần mềm. Ngược lại, có những thiết bị phần cứng chuyên
dụng cho phép thực thi thuật toán AES với tốt độ cao và khả năng vận hành bền vững.
Nếu xét về ngơn ngữ lập trình thì hiện có khá nhiều mã nguồn thực thi thuật tốn
AES được viết bằng nhiều ngơn ngữ lập trình (Assembler, C/C++, Visual Basic, Java, C#,
…) có thể vận hành trên nhiều nền hệ điều hành (Windows, Linux/Unix, Solaris,…) chạy
các vi xử lý dịng Intel, AMD,... Việc lựa chọn ngơn ngữ lập trình nào để thể hiện thuật
toán AES tùy thuộc vào ý thích và khả năng của người lập trình cũng như mục đích, nền
tảng phần cứng cho phép. Chẳng hạn, nếu với mục đích cứng hóa thuật tốn thì người lập
trình thường chọn các dạng ngôn ngữ ở thấp như hợp ngữ Assembler. Nếu hướng tới việc
Trang ii
xây dựng các thư viện mật mã để thực thi trong nhân hệ điều hành hoặc sử dụng bởi ứng
dụng khác thì người lập trình lại thường chọn ngơn ngữ C/C++. Nếu thực thi thuật toán
trong các ứng dụng đồ họa thì người lập trình lại thường chọn các ngôn ngữ bậc cao như
Visual Basic, Visual C++, Java, C#,… Nếu viết để thực thi thuật toán AES trên nền web
thì người lập trình thường chọn các ngơn ngữ hướng web như Java, VBScript, JavaScript,
C#,… Hiện nay, trên Internet có rất nhiều mã nguồn thực thi thuật toán AES do nhiều tác
giả viết bằng nhiều dạng ngơn ngữ lập trình khác nhau. Tuy nhiên, chúng ta được khuyến
cáo chỉ nên tham khảo một số mã nguồn thuật toán được cung cấp bởi các tác giả đáng
tin cậy. Trước hết, nên tham khảo website hỗ trợ nhiều thông tin về AES cung cấp bởi
NIST tại địa chỉ: Nội dung của website này mô tả rất
nhiều vấn đề liên quan đến AES như: đặc tả thuật toán AES, mã nguồn chương trình thực
thi, các véc-tơ kiểm tra thuật tốn, một số bài báo liên quan đến AES, các bản báo cáo
của NIST về quá trình phát triển AES, các chế độ hoạt động của thuật tốn mã khối AES,
một số cơng cụ mật mã,…
Mã nguồn tin cậy của thuật toán AES nói riêng và thuật tốn Rijndael nói chung
được Vincent Rijmen đưa ra trên một website cá nhân tại địa chỉ krypto/aes/old/~rijmen/rijndael/. Ở website này có thể tải xuống mã
nguồn thực thi thuật tốn bằng nhiều ngơn ngữ lập trình cũng như một số bài viết và hình
ảnh liên quan đến thuật toán Rijndael.
Brian Gladman - một chuyên gia mật mã làm việc tại Worcester (Anh) đưa ra một
số mã nguồn thực thi thuật toán AES được đánh giá cao tại website cá nhân tại địa chỉ
Ngoài mã nguồn thực thi thuật toán, các véc-tơ
kiểm tra thuật toán AES cũng được cung cấp ở website trên.
Cộng đồng mã nguồn mở cũng đã xây dựng nên một bộ thư viện các hàm mật mã
tương đối đồ sộ tại dự án OpenSSL (www.openssl.org). Bộ thư viện này bao gồm rất
nhiều chương trình thực thi các thuật tốn mật mã khác nhau trong đó có chương trình
thực thi thuật tốn AES.
Trên cơ sở mã nguồn chương trình thực thi cung cấp bởi NIST và một số nhà mật
mã học nổi tiếng, Học viện Kỹ thuật Mật mã – Ban Cơ yếu Chính phủ đã xây dựng một
bộ chương trình thực thi thuật tốn AES bằng ngơn ngữ C/C++ theo các chế độ hoạt động
Trang ii
của thuật toán mã khối đã nêu ở trên. Ngồi chương trình thực thi thuật tốn cịn cung
cấp thêm các véc-tơ kiểm tra và chương trình thực thi việc kiểm tra thuật toán.
Thực thi thuật toán AES bằng phần cứng
Các thiết bị phần cứng thực thi thuật toán AES được chia làm hai dòng. Dòng thiết
bị thứ nhất dựa vào một hệ vi xử lý liên kết với hệ vi xử lý chính của máy tính (coprocessor). Thơng thường thiết bị thuộc dòng này được thiết kế ở dạng card chuyên dụng
kết nối qua giao diện ghép nối với máy tính (ví dụ qua PCI). Dịng thiết bị thứ hai thường
được thiết kế ở dạng thẻ thông minh (Smart Card) hoặc các thiết bị cắm qua cổng USB
(USB Devices). Các thiết bị thuộc dịng thứ hai thường có một hệ vi xử lý (CPU) và bộ
nhớ (ROM/RAM) riêng để thực thi thuật toán độc lập so với máy tính.
Cơng nghệ cứng hóa thuật tốn hiện cũng tồn tại hai dịng. Dịng cơng nghệ thứ
nhất sử dụng một kỹ thuật chuyên dụng chẳng hạn như ASIC (Application Specific
Integrated Circuit). Cơng nghệ ASIC cho phép thực thi thuật tốn nhanh và hiệu quả với
năng lượng tiêu tốn rất ít. Tuy nhiên, cơng nghệ này có một số hạn chế như khơng cho
phép sửa đổi thuật tốn sau khi đã tạo thành thiết bị. Dịng cơng nghệ thứ hai sử dụng
một bộ mạch tích hợp chứa hệ vi xử lý cho phép lập trình bằng phần mềm. Với cơng
nghệ này, thuật tốn có thể được cấu hình lại theo ý đồ của người lập trình nhưng vẫn cho
phép thực thi thuật tốn với tốc độ và hiệu quả cao. Điển hình cho dịng cơng nghệ này là
các thiết bị sử dụng công nghệ FPGA (Field Programmable Gate Arrays). Hiện nay, công
nghệ FPGA được coi là cơng nghệ có nhiều ưu điểm và được sử dụng trong hầu hết các
thiết bị phần cứng thực thi thuật tốn AES. Có thể tham khảo trang để có thơng tin đầy đủ hơn về các vấn đề thực thi thuật
toán AES bằng phần cứng.
Với việc thực thi hiệu quả các thuật toán AES, Tiêu chuẩn quốc gia Việt Nam về Mã
hóa dữ liệu sẽ góp phần thúc đẩy ứng dụng các sản phẩm bảo mật thông tin tại Việt Nam
và là một công cụ hữu hiệu để đánh giá các sản phẩm mật mã.
Yêu cầu của AES:
Phương pháp mã hóa theo khối có kích thước khối dữ liệu đầu vào và đầu ra là 128
bit, độ dài khóa có thể thay đổi linh hoạt với các giá trị 128, 192 hay 256 bit. Phương
pháp mã hóa này thích hợp ứng dụng trên nhiều hệ thống khác nhau, từ các thẻ thông
minh cho đến các máy tính cá nhân. Chuẩn mã mới mạnh và nhanh hơn Triple DES. Mã
Trang ii
mới có cơ sở lý thuyết mạnh để thời gian sống của chuẩn khoảng 20 - 30 năm (cộng thêm
thời gian lưu trữ). Khi đưa ra thành phần yêu cầu cung cấp chi tiết thiết kế và đặc tả đầy
đủ. Đảm bảo rằng chuẩn mã mới cài đặt hiệu quả trên cả C và Java.
Cơ sở toán học của AES:
Trong AES các phép toán cộng và nhân được thực hiện trên các byte trong trường hữu
hạn GF(28 )
Phép cộng: A = (a1 a2 a3 a4 a5 a6 a7 a8); B = (b1 b2 b3 b4 b5 b6 b7 b8); C = A + B
= (c1 c2 c3 c4 c5 c6 c7 c8), trong đó: Ci = ai + bi Ví dụ 2.5: A = 56H; B = 3DH Dạng cơ
số Hecxa: 56H + 3DH = 93 Dạng nhị phân: 01010110 + 00111101 = 10010011 Dạng đa
thức: (x 6 + x 4 + x 2 + x) + (x 5 + x 4 + x 3 + x 2 + 1) = (x 7 + x 4 + x + 1)
Phép nhân: A = (a1 a2 a3 a4 a5 a6 a7 a8); B = (b1 b2 b3 b4 b5 b6 b7 b8); C = A.B =
(c1 c2 c3 c4 c5 c6 c7 c8) Ví dụ 2.6: A = C3H; B = 85H Dạng cơ số Hecxa: (C3H).(85H)
= AEH Dạng nhị phân: (11000011).(10000101) = 10101110 Dạng đa thức: (x 7 + x 6 + x
+ 1).(x 7 + x 2 + 1) = (x 7 + x 5 + x 3 + x 2 + 1) 16
Đánh giá giải thuật AES:
Kể từ khi được công nhận là giải thuật mã hóa tiên tiến, AES ngày càng được xã
hội chấp nhận. Ban đầu AES chỉ được sử dụng để mã hóa các dữ liệu nhạy cảm. Về sau
này, người ta đã dùng nó để mã hóa các thơng tin bí mật. Giải thuật AES-192/256 được
sử dụng để bảo vệ các thơng tin mật và tối mật. Nó được đưa vào các tiêu chuẩn ISO,
IETF, IEEE. Cho đến nay, hàng trăm sản phẩm ứng dụng dựa theo tiêu chuẩn mã hóa
AES đã được NIST cấp chứng chỉ. Ở Việt Nam, Thông tư số 01/2011/TT-BTTTT ban
hành ngày 04 tháng 01 năm 2011 của Bộ thông tin truyền thông đã khuyến nghị sử dụng
AES là giải thuật mã hóa sử dụng cho các thông tin, văn bản trong các cơ quan Nhà
nước.
-
Ưu điểm của giải thuật AES:
AES là giải thuật mã hóa có tốc độ xử lý nhanh, đã được chính phủ Hoa Kỳ tun bố
là có độ an tồn cao, được sử dụng làm tiêu chuẩn mã hóa mới thay thế cho tiêu chuẩn
DES đã lỗi thời. AES được sử dụng để mã hóa các thơng tin mật đến tuyệt mật. AES có
cấu trúc đơn giản, rõ ràng và có mơ tả tốn học rất đơn giản.
-
Độ an tồn của AES:
Trang ii
Thiết kế và độ dài khóa của thuật tốn AES (128, 192 và 256 bit) là đủ an toàn để bảo
vệ các thông tin được xếp vào loại tối mật. Các thơng tin tuyệt mật sẽ phải dùng khóa 192
hoặc 256 bit. Một vấn đề khác nữa là cấu rúc tốn học của AES khơng giống với các
thuật tốn mã học khác, AES có mơ tả tốn học khá đơn giản. Tuy điều này chưa dẫn đến
mối nguy hiểm nào nhưng một số nhà nghiên cứu sợ rằng sẽ có người lợi dụng được cấu
trúc này trong tương lai. Vào thời điểm năm 2006, dạng tấn công AES duy nhất thành
công là tấn công kênh bên tức là không tấn cơng trực tiếp vào thuật tốn mã hóa mà thay
vào đó tấn cơng lên các hệ thống thực hiện thuật tốn có sơ hở làm lộ dữ liệu.
-
Nhược điểm của AES:
Mặc dù AES được đánh giá là an toàn nhưng với phương pháp “tấn cơng kênh biên”
thì nó chưa thực sự an tồn. Cấu trúc tốn học của AES được mơ tả khá đơn giản. Điều
này có thể dẫn tới một số mối nguy hiểm trong tương lai. Giải thuật AES thực hiện hiệu
quả cả bằng phần mềm và phần cứng. Thông thường với những ứng dụng không yêu cầu
cao về hiệu năng và tốc độ thì AES được thực hiện ở dạng phần mềm. Với việc thực hiện
trên phần mềm, thuật tốn AES có thể được viết bằng nhiều ngơn ngữ lập trình phổ biến
hiện nay như C/C++, VB.NET, Java, C#... và có thể vận hành trên nhiều hệ điều hành
như Windows, Linux… Khi thực hiện trên phần cứng, thuật tốn AES hỗ trợ thực hiện
trên hai dịng thiết bị: dòng thiết bị thứ 21 nhất dựa vào một hệ vi xử lý phụ kết hợp với
hệ vi xử lý của máy tính, dịng thiết bị thứ hai thường được thiết kế ở dạng thẻ thông
minh hoặc các thiết bị giao tiếp thông qua cổng USB.
3. Cách thực hiện của mã hóa AES-128
Q trình mã hóa AES
Mã hóa AES được thực hiện thơng qua 5 chức năng chính là AddRoundKey,
SubBytes, ShiftRows, MixColumns và KeyExpansion. Năm chức năng này được sắp xếp
để thực hiện ba bước cơ bản.
Bước 1. Bước khởi tạo: dữ liệu cần được mã hóa plain_text[127:0] kết hợp
với key[127:0] bằng chức năng AddRoundKey
Bước 2. Bước lặp mã hóa: 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. Bước này được
Trang ii
lặp lại 9 lần. Chú ý, KeyExpansion thực hiện song song với bước AddRoundKey để
tạo khóa vịng cho chức năng này.
Bước 3. Bước tạo ngõ ra: Sau 9 lần lặp ở bước 2, kết quả được sử dụng để thực
hiện tuần tự các chức năng SubBytes, ShiftRows và AddRoundKey để tạo ngõ ra
cipher_text[127:0].
Hình 6:Q trình mã hóa AES-128
Q trình mã hóa AES-128 sẽ được giải thích trên một ví dụ cụ thể. Giả sử chuỗi
dữ liệu cần mã hóa plain_text[127:0] và khóa mã key[127:0] có giá trị như sau:
plain_text[127:0] = 32 43 f6 a8 88 5a 30 8d 31 31 98 a2 e0 37 07 34
key[127:0] = 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c
Dữ liệu và khóa mã được sắp xếp dưới dạng ma trận với mỗi phần tử là một byte.
Trang ii
Hình 7: Dữ liệu và khóa mã được sắp xếp dưới dạng ma trận
Trong q trình mã hóa, ma trận dữ liệu ban đầu sẽ bị biến đổi bởi các chức năng
AddRoundKey, SubBytes, ShiftRows hoặc MixColumns để tạo ra các dữ liệu trung gian
gọi là ma trận trạng thái. Ma trận khóa mã sẽ bị biến đổi bởi chức năng KeyExpansion để
tạo ra các khóa mã trung gian gọi là khóa vịng.
- Chức năng AddRoundKey
Chức năng AddRoundKey thực hiện ở:
+ Bước khởi tạo: XOR khóa mã với ma trận dữ liệu
+ Bước lặp mã hóa và bước tạo ngõ ra: XOR khóa vịng (round key) với ma trận trạng
thái.
Hình 8: Chức năng AddRoundKey cho bước khởi tạo
Đối với bước lặp mã hóa và bước tạo ngõ ra, vị trí "khóa mã" là các "khóa vịng"
cịn dữ liệu là của lần tính trước đó
Trang ii
- Chức năng SubBytes
Chức năng 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. Bảng quy định giá trị
thay thế gọi là S-box.
Hình 9: S-box của mã hóa AES
Ví dụ, byte cần thay thế là H08 thì dị ở hàng số 0 và cột số 8 trong bảng S-box sẽ
được kết quả là 30.
Trang ii
Hình 10: Chức năng SubBytes
Trang ii
- Chức năng ShiftRows
Chức năng ShiftRows thực hiện quay trái từng hàng của ma trận trạng thái, ngõ ra
của SubBytes, theo byte với hệ số quay tăng dần từ 0 đến 3. Hàng đầu tiên có hệ số quay
là 0 thì các byte được giữ ngun vị trí. Hàng thứ hai có hệ số quay là 1 thì các byte được
quay một byte. Hàng thứ ba quay hai byte và hàng thứ tư quay ba byte.
Hình 11: Chức năng ShiftRows
- Chức năng MixColumns
Chức năng MixColumns thực hiện nhân từng cột của ma trận trạng thái, ngõ ra
của ShiftRows, với một ma trận chuyển đổi quy định bởi chuẩn AES.
Hình 12: Ma trận chuyển đổi sử dụng trong chức năng MixColumns
Trang ii
Việc biến đổi một cột của ma trận trạng thái được thực hiện bởi hai phép toán là
nhân (.) và XOR (+).
Biểu thức sau tạo ra phần tử H04, H là ký hiệu của số Hex, ở cột 1 trong hình minh họa
"chức năng MixColumns".
H04 =Hd4.H02 + Hbf.H03 + H5d.H01 + H30.H01=Hd4.H02 + (Hbf.H02 + Hbf.H01)
+ H5d.H01 + H30.H01
Hình 13: Chức năng MixColumns
Phép nhân với H01 thì giữ nguyên giá trị. Phép nhân với H02 tương đương với
việc dịch trái một bit và XOR có điều kiện như sau: