Bốn giai đoạn khác nhau được sử dụng, một giai đoạn hoán vị và ba giai đoạn thay thế: ➢ Substitute bytes: Sử dụng S-box để thực hiện thay thế từng byte của khối đầu vào ➢ ShiftRows: Một
Trang 1BÀI TIỂU LUẬN Tiêu chuẩn mật mã hóa tiên tiến AES
Trang 2Tên Nhiệm vụ
1 Giới thiệu về Tiêu chuẩn mật
mã hóa tiên tiến AES
2 Cấu trúc AES
3 Các hàm biến đổi AES
3.1 SubBytes 3.2 ShiftRows 3.1 MixColumns 3.2 AddRoundKey
4 Tạo khóa AES
5 Thực hiện mật mã AES
6 Thực hiện Giải mã AES
Trang 3MỤC LỤC
Danh mục Hình – Bảng 4
Lý do chọn đề tài 5
Mục đích và phạm vi của tiểu luận 6
Chương 1 Giới thiệu về Tiêu chuẩn mật mã hóa tiên tiến AES 7
Chương 2 Cấu trúc AES 8
2.1 Cấu trúc chung 8
2.2 Cấu trúc chi tiết 10
Chương 3 Các hàm biến đổi AES 13
3.1 SubBytes 13
3.2 ShiftRows 15
3.3 MixColumns 16
3.4 AddRoundKey 20
Chương 4 Tạo khóa AES 21
Chương 5 Thực hiện mật mã AES 23
5.1 SubBytes 23
5.2 ShiftRow 24
5.3 MixColumns 24
5.4 AddRoundKey 25
Chương 6 Thực hiện Giải mã AES 26
6.1 InvSubBytes() 26
6.2 InvShiftRows() 27
6.3 InvMixColumns() 27
6.4 Biến đổi nghịch AddRoundKey() 28
Kết luận 30
Tài liệu tham khảo 31
Trang 4Danh mục Hình – Bảng
Hình 2.1: Cấu trúc chung của quá trình mã hóa AES 9
Hình 2.2: Khóa và khóa mở rộng 10
Hình 2.3 Mã hóa AES và giải mã AES 11
Hình 2.4 vòng mã hóa AES 12
Hình 3.1: Hàm SubBytes 13
Bảng 3.1: S-Box mật mã hóa 14
Bảng 3.2: S-Box giải mật mã 14
Hình 3.2: Chuyển đổi hàng 15
Hình 3.3: Ví dụ dịch vòng của hàm ShiftRows 15
Hình 3.4: Các biến đổi của hàng và cột AES 16
Hình 3.5: Biến đổi của AddRoundKey 20
Bảng 3.3: Bảng xác định RC[j] 22
Hình 3.6: khóa mở rộng AES 22
Hình 5.1: Sơ đồ chuyển đổi SubByte 24
Bảng 5.1: Bảng chuyển đổi S-box 24
Hình 5.2: Sơ đồ chuyển đổi shiftrow 24
Hình 5.3: Sơ đồ chuyển đổi MixColumns 25
Hình 5.4: Sơ đồ chuyển đổi AddRoundKey 25
Hình 6.1 : Sơ đồ chuyển đổi Inv SubByte 27
Hình 6.2: Bảng chuyển đổi S-box nghịch đảo 27
Hình 6.3: Sơ đồ chuyển đổi ShiftRow nghịch đảo 27
Hình 6.4: Sơ đồ chuyển đổi MixColumns nghịch đảo 28
Hình 6.5: Sơ đồ giải mã AES 29
Trang 5Lý do chọn đề tài
Chúng ta đang sống trong thời đại của cuộc cách mạng Internet kết nối toàn cầu Mạng Internet đã mở ra những cơ hội vô cùng to lớn cho con người trong công cuộc hành trình tìm kiếm tri thức, nhưng đồng thời cũng phát sinh một vấn đề quan trọng hơn
đó là đảm bảo sự an toàn của người sử dụng trên không gian mạng công khai đó Việc mất cắp, rò rỉ thông tin mang lại những rủi ro lớn cho cá nhân và doanh nghiệp
Vì thế hầu hết tại các doanh nghiệp lớn đều có ít nhất một kỹ thuật viên phụ trách về an toàn thông tin, nó đảm bảo cho họ an tâm hoạt động và bảo vệ các bí mật của tổ chức Việc tìm hiểu và làm chủ được những công nghệ bảo mật phổ biến các kỹ thuật mã hóa, giải mã các thông điệp; nắm được cách xây dựng một hệ thống mạng an toàn là vô cùng quan trọng đối với các sinh viên khối các ngành Công nghệ thông tin, Viễn thông,
An toàn thông tin,… quan trọng không kém đó là xây dựng được những chuẩn chính sách An toàn thông tin để bảo vệ hệ thống Đó cũng là lý do chính để nhóm chúng tôi chọn đề tài “Tiêu chuẩn mật mã hóa tiên tiến AES”
Trang 6Mục đích và phạm vi của tiểu luận
Mục đích của bài tiểu luận là tìm hiểu về cấu trúc và các kỹ thuật mã hóa, giải mã của tiêu chuẩn mật mã hóa tiên tiến AES
Phạm vi của bài tiểu luận bao gồm 6 chương:
Chương 1: Giới thiệu về Tiêu chuẩn mật mã hóa tiên tiến AES Chương này
giới thiệu khái quát về lịch sử và các ứng dụng của tiêu chuẩn mã hóa tiên tiến AEA đối với vấn đề bảo mật
Chương 2: Cấu trúc AES Chương này tìm hiểu về cấu trúc chung và chi tiết các
thành phần của AES
Chương 3 Các hàm biến đổi AES Chương này tìm chi tiết về 4 hàm chính của
một cấu trúc AES (SubBytes, ShiftRows, MixColumns, AddRoundKey)
Chương 4 Tạo khóa AES Chương này là quá trình tạo khóa mở rộng cho một
Trang 7Chương 1 Giới thiệu về Tiêu chuẩn mật mã hóa tiên tiến AES
Tiêu chuẩn mã hóa nâng cao (AES) thuật toán là một trong những mã hóa mật mã khối thuật toán được xuất bản bởi National Institute tiêu chuẩn và công nghệ (NIST) vào năm 2000 Mục đích chính của thuật toán này là thay thế DES thuật toán sau khi xuất hiện một số khía cạnh dễ bị tổn thương của nó NIST đã mời các chuyên gia làm việc về mã hóa và bảo mật dữ liệu trên toàn thế giới để giới thiệu một thuật toán mật mã khối sáng tạo để mã hóa và giải mã dữ liệu với cấu trúc mạnh mẽ và phức tạp
Từ khắp nơi trên thế giới, nhiều nhóm đã gửi thuật toán của họ NIST đã chấp nhận năm các thuật toán để đánh giá Sau khi thực hiện nhiều tiêu chí và thông số bảo mật,
họ đã chọn một trong số năm thuật toán mã hóa được đề xuất bởi hai nhà mật mã học người Bỉ Joan Daeman và Vincent Rijmen Tên ban đầu của AES thuật toán là thuật toán Rijndel Tuy nhiên, điều này tên đã không trở thành một cái tên phổ biến cho điều này thay vào đó, thuật toán được công nhận là Nâng cao Thuật toán tiêu chuẩn mã hóa (AES) xung quanh thế giới
Trang 8Chương 2 Cấu trúc AES
2.1 Cấu trúc chung
AES là một phép lặp thay vì mật mã Feistel Nó dựa trên hai kỹ thuật phổ biến để
mã hóa và giải mã các dữ liệu đã biết là thay thế và hoán vị hay mạng thay thế và hoán
vị (substitution-permutation network) SPN là một số phép toán được thực hiện trong các thuật toán mật mã khối AES có khả năng xử lý 128bit (16 byte) như một kích thước khối văn bản rõ cố định 16 byte này được biểu diễn trong ma trận 4x4 và AES hoạt động trên ma trận byte Một tính năng quan trọng khác trong AES là số vòng Số vòng phụ thuộc vào độ dài của khóa Có ba kích thước khóa khác nhau được sử dụng bởi thuật toán AES để mã hóa và giải mã dữ liệu như 128 bit (16 byte), 192 (24 byte) hoặc 256 bit (32 byte) Mỗi vòng này yêu cầu một khóa vòng, nhưng vì chỉ một khóa được nhập vào thuật toán, khóa này cần được mở rộng để lấy các khóa cho mỗi vòng, bao gồm cả vòng 0
N-1 vòng đầu tiên bao gồm bốn chức năng chuyển đổi riêng biệt: SubBytes, ShiftRows, MixColumns và AddRoundKey Vòng cuối cùng chỉ chứa ba phép biến đổi
và có một phép biến đổi ban đầu (AddRoundKey) trước vòng đầu tiên, có thể được coi
là Vòng 0
Hình 2.1 cho thấy cấu trúc tổng thể của quá trình mã hóa AES Mật mã có kích thước khối bản rõ là 128 bit (16 byte) Đầu ra của mỗi vòng là ma trận 4 * 4, với đầu ra của vòng cuối cùng là bản mã
Trang 9Hình 2.1: Cấu trúc chung của quá trình mã hóa AES
Trang 10Ngoài ra, hàm mở rộng khóa tạo ra N + 1 khóa vòng, mỗi khóa là một ma trận 4 *
4 riêng biệt Mỗi khóa vòng đóng vai trò là một trong những đầu vào cho phép biến đổi AddRoundKey trong mỗi vòng
Hình 2.2: Khóa và khóa mở rộng
2.2 Cấu trúc chi tiết
Hình 2.3 mô tả chi tiết hơn về mật mã AES, chỉ ra trình tự biến đổi trong mỗi vòng
và hiển thị chức năng giải mã tương ứng, hiển thị quá trình mã hóa đang tiến hành xuống trang và quá trình giải mã lên trang
Trang 11Hình 2.3 Mã hóa AES và giải mã AES
AES xử lý toàn bộ khối dữ liệu dưới dạng một ma trận duy nhất trong mỗi vòng bằng cách sử dụng thay thế và hoán vị
Bốn giai đoạn khác nhau được sử dụng, một giai đoạn hoán vị và ba giai đoạn thay thế:
➢ Substitute bytes: Sử dụng S-box để thực hiện thay thế từng byte của khối đầu vào
➢ ShiftRows: Một phép hoán vị đơn giản
➢ MixColumns: Một sự thay thế sử dụng số học trên GF
➢ AddRoundKey: Một XOR bitwise đơn giản của khối hiện tại với một phần
Trang 12đoạn AddRoundKey, tiếp theo là chín vòng mà mỗi vòng bao gồm tất cả bốn giai đoạn, tiếp theo là vòng thứ mười gồm ba giai đoạn Hình 2.4 mô tả cấu trúc của một vòng mã hóa đầy đủ
Hình 2.4 vòng mã hóa AES
Mỗi giai đoạn có thể dễ dàng đảo ngược Đối với các giai đoạn Replace Byte, ShiftRows và MixColumns, một hàm nghịch đảo được sử dụng trong thuật toán giải mã Đối với giai đoạn AddRoundKey, nghịch đảo đạt được bằng cách XOR cùng một khóa tròn vào khối, sử dụng kết quả A Ⓧ B Ⓧ B = A
Trang 13Chương 3 Các hàm biến đổi AES
3.1 SubBytes
Hàm biến đổi byte thay thế được gọi là SubBytes, là một bảng tra cứu đơn giản (Hình 3.1) SubBytes chia nhỏ đầu vào thành các byte và chuyển từng byte qua S-Box (một ma trận 16*16 các giá trị byte) AES sử dụng cùng một S-Box (Bảng 3.1) cho tất
cả các byte Để đọc Bảng này, đầu vào byte được chia thành hai nửa 4 bit Nửa đầu xác định hàng và nửa sau xác định cột Ví dụ, giá trị theo mã hexa “19” tương ứng với hàng
1 và cột 9 của S-box, chứa giá trị “d4” Như vậy, giá trị “19” được ánh xạ thành giá trị
“d4”
Hình 3.1: Hàm SubBytes
Trang 14Bảng 3.1: S-Box mật mã hóa
Trang 153.2 ShiftRows
Bước tiếp theo sau SubByte thực hiện trên trạng thái là ShiftRow Ý tưởng chính
đằng sau bước này là chuyển các byte trạng thái theo chu kỳ sang trái trong mỗi hàng
Trong quá trình này, các byte của hàng số 0 vẫn giữ nguyên và không thực hiện bất kỳ
hoán vị nào Trong hàng đầu tiên, chỉ có một byte được chuyển theo vòng tròn sang trái
Hàng thứ hai được dịch chuyển hai byte sang trái Hàng cuối cùng được dịch chuyển ba
byte sang trái Kích thước của trạng thái mới không bị thay đổi mà vẫn giữ nguyên như
kích thước ban đầu 16 byte nhưng đã thay đổi vị trí của các byte ở trạng thái như minh
họa trong Hình 3.2
Hình 3.2: Chuyển đổi hàng
Hình 3.3: Ví dụ dịch vòng của hàm ShiftRows
Trang 163.3 MixColumns
Hình 3.4: Các biến đổi của hàng và cột AES
Hàm MixColumns là thực hiện phép biến đổi cột hỗn hợp tiến và được thực hiện trên từng cột riêng lẻ Mỗi byte của một cột được ánh xạ thành một giá trị mới là một hàm của tất cả bốn byte trong cột đó Phép biến đổi được thực hiện bằng phép nhân ma trận sau giống như bảng trạng thái (Hình 3.4):
Mỗi phần tử trong ma trận kết quả là tổng của các tích hàng và cột Các phép cộng
và phép nhân đều được thực hiện trong GF (28) Sự chuyển đổi MixColumns trên một cột Trạng thái có thể được biểu thị bằng
Trang 17Trong bước Mix Column, ta sẽ thực hiện việc nhân các cột của bảng kết quả với ma trận mặc định sau đây:
Ta thực hiện Mix Column với bảng sau:
Trang 1810101000 𝑋𝑜𝑟
00011010
= 10110011 Sau đó chúng ta tiếp tục tính (𝑏𝑓 03)
Trong trường hợp số nhân là “03”, ta có:
00011011
= 01100101 Với (𝑏𝑓 01) = 𝑏𝑓 = 10111111
Trang 19Từ đó:
𝑋1 = (𝐷4.02) 𝑥𝑜𝑟 (𝑏𝑓 03) 𝑥𝑜𝑟 (5𝑑 01)𝑥𝑜𝑟(30.01)
1011 0011 𝑋𝑜𝑟
1101 1010 𝑋𝑜𝑟
0101 1101 𝑋𝑜𝑟
0011 0000
𝑋1 = 0000 0100 = 04 Tiếp tục với đến hết ta có:
=
Sau khi thực hiện xong bước MixColumn, ta có kết quả:
=
Trang 20Hình 3.5: Biến đổi của AddRoundKey
AddRoundKey là phép biến đổi khóa tròn bổ sung về phía trước.Thực hiện XOR
128 bit trạng thái được sau khi thực hiện Mix Column với 128 bit của khóa tròn Như trong Hình 3.5, thao tác này được xem như là thao tác theo chiều cột giữa 4 byte của cột Trạng thái và một từ của khóa tròn; nó cũng có thể được xem như là một hoạt động ở mức byte Sau đây là một ví dụ về AddRoundKey:
Ma trận đầu tiên là Trạng thái, và ma trận thứ hai là khóa tròn
Phép biến đổi phím tròn bổ sung nghịch đảo giống với phép biến đổi phím tròn bổ sung chuyển tiếp, vì phép toán XOR là phép nghịch đảo của chính nó
Trang 21Chương 4 Tạo khóa AES
Thuật toán mở rộng khóa AES với đầu vào gồm 4 từ (16 byte) khóa và tạo ra được
1 bảng tuyến tính gồm 44 từ (176 byte) Đây là đủ để cung cấp cho giai đoạn AddRoundKey ban đầu và mỗi 10 vòng sau đó của các mật mã
Điều quan trọng là sao chép vào các 4 từ đầu tiên của khóa mở rộng Phần còn lại của khóa mở rộng được điền vào 4 từ cùng một lúc.Mỗi từ được thêm vào w[i] phụ thuộc vào từ đứng ngay trước nó, w[i-1] ,và vị trí của 4 từ được quay trở lại, w[i-4]
Ta có thuật toán tạo khóa mở rộng như sau:
Thuận toán tạo khóa AES và hàm phức g Hàm phức g gồm các hàm con dưới đây:
➢ RotWord: thực hiện dịch 1 byte xoay trong về bên trái tức là đưa byte đầu xuống cuối và dịch trái với những byte còn lại Ví dụ: [B0, B1, B2, B3] được chuyển thành [B1, B2, B3, B0]
➢ SubWord thực hiện một byte thay trên từng byte của nó từ đầu vào, sử dụng S-box giống như trong phần SubByte ở trên
➢ Các kết quả của bước 1 và 2 được XORed với một vòng liên tục, RCON [j] Hàm Rcon[j] cho mỗi vòng sẽ là khác nhau và được định nghĩa như sau:
Rcon[j]=(RC[j],0,0,0) với RC[j] được xác định như bảng dưới đây:
Trang 22Bảng 3.3: Bảng xác định RC[j]
Hình 3.6: khóa mở rộng AES
Trang 23Chương 5 Thực hiện mật mã AES
Giai đoạn mã hóa của AES có thể được chia thành ba giai đoạn: vòng đầu tiên, các vòng chính và vòng cuối cùng Tất cả các giai đoạn sử dụng các phép toán con giống nhau trong các kết hợp khác nhau như sau:
Quy trình mật mã được thực hiện qua các giai đoạn sau
Thực hiện thao tác AddRoundKey đầu tiên trước khi thực hiện các chu kỳ mã hóa
𝑁𝑟 – 1 chu kỳ giải mã bình thường : mỗi chu kì bao gồm bốn biến đổi liên tiếp nhau: 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠 , 𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠, 𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦, 𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠
Thực hiện chu kỳ giải mã cuối cùng Trong chu kỳ này , thao tác MixColumns được bỏ qua
Trong vòng chính, mỗi vòng trong thuật toán bao gồm 4 bước
5.1 SubBytes
Giai đoạn SubBytes của AES liên quan đến việc chia nhỏ đầu vào thành các byte
và chuyển từng byte qua S-box
Trang 24Hình 5.1: Sơ đồ chuyển đổi SubByte
Bảng 5.1: Bảng chuyển đổi S-box
5.2 ShiftRow
Ngoại trừ hàng đầu tiên còn các hàng phía dưới chúng ta sẽ dịch sang trái 1 hàng
Trang 25Hình 5.3: Sơ đồ chuyển đổi MixColumns
Trình bày trực quan của hoạt động MixColumns được hiển thị ở trên Không giống như phép nhân ma trận tiêu chuẩn, MixColumns thực hiện phép nhân ma trận theo Trường Galois 2 8 Mặc dù chúng tôi sẽ không mô tả chi tiết bước này, nhưng điều quan trọng cần lưu ý là phép nhân này có thuộc tính hoạt động độc lập trên mỗi cột của
ma trận ban đầu, tức là cột đầu tiên khi được nhân với ma trận, tạo ra cột đầu tiên của
Trang 26Chương 6 Thực hiện Giải mã AES
Để giải mã một bản mã được mã hóa AES, cần phải hoàn tác từng giai đoạn của hoạt động mã hóa theo thứ tự ngược lại mà chúng đã được áp dụng Ba giai đoạn giải
mã
Quy trình giải mã được thực hiện qua các giai đoạn sau :
Thực hiện thao tác AddRoundKey đầu tiên trước khi thực hiện các chu kỳ giải mãi
Nr – 1 chu kỳ giải mã bình thường : mỗi chu kì bao gồm bốn biến đổi liên tiếp nhau: InvShifRows, InvSubBytes, AddRoundKey, InvMixColumns
Thực hiện chu kỳ giải mã cuối cùng Trong chu kỳ này , thao tác InvMixColumns được bỏ qua
Trang 27Hình 6.1 : Sơ đồ chuyển đổi Inv SubByte
Hình 6.2: Bảng chuyển đổi S-box nghịch đảo
6.2 InvShiftRows()
Phép biến đổi InvShiftRows() là phép biến đổi ngược của ShiftRows() Các byte trong ba từ cuối của trạng thái được dịch vòng theo số byte khác nhau Ở hàng đầu tiên (r=0) không thực hiện phép chuyển dịch, ba hàng dưới cùng được dịch vòng Nb-shift(r,Nb) byte
Hình 6.3: Sơ đồ chuyển đổi ShiftRow nghịch đảo
6.3 InvMixColumns()
Phép biến đổi InvMixColumns() là phép biến đổi ngược của MixColumns() Nó thao tác theo từng cột của trạng thái, xem mỗi cột như một đa thức bốn hạng tử
Trang 28Hình 6.4: Sơ đồ chuyển đổi MixColumns nghịch đảo
6.4 Biến đổi nghịch AddRoundKey()
Phép biến đổi AddRoundKey() là phép biến đổi thuận nghịch vì nó chỉ áp dụng một phép toán XOR nên nó được thực hiện như nhau ở cả phép mã hóa và phép giải mã
Ngoài các phép giải mã trên, thuật toán AES còn cho phép thực hiện một phép giải
mã tương đương có cùng thứ tự các phép biến đổi như trong phép mã hóa (các biến đổi được thay bằng các phép biến đổi ngược) Có thể thực hiện được điều này là nhờ một thay đổi trong lược đồ khóa Hai tính chất tạo nên một phép giải mã tương đương là: Tính giao hoán giữa hai phép biến đổi SubBytes() và ShiftRows() (tính chất này cũng đúng với phép nghịch đảo InvSubBytes() và InvShiftRows()), Các phép toán trộn cột MixColumns() và InvMixColumns() là tuyến tính đối với đầu vào cột Các tính chất này cho phép đảo ngược thứ tự của các phép biến đổi InvSubBytes() và InvShiftRows() Thứ
tự của các phép biến đổi AddRoundKey() và InvMixColumns() cũng có thể đảo ngược với điều kiện đảm bảo rằng các cột của lược đồ khóa giải mã được chỉnh sửa bằng cách
sử dụng phép biến đổi InvMixColumns()
Hai hàm InvMixColumns và AddRoundKey không làm thay đổi thứ tự các byte trong ma trận nên nó có thể thực hiện luôn cả 2 hàm trong cùng 1 thời điểm:
Để thấy điều này, giả sử rằng cột đầu tiên của State Si là dãy là dãy (𝑦 0, 𝑦 1, 𝑦 2, 𝑦 3) và cột đầu tiên của khóa tròn wj là (𝑘 0, 𝑘 1, 𝑘 2, 𝑘 3) Sau đó, ta được: