Một là mật mã đối xứng: là cùng một khóa được sử dụng để mã hóa và giải mã dữ liệu.. AES Advanced Encryption Standard là một trong những thuật toán mật mã khối đối xứng phổ biến và được
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA VIỄN THÔNG 1
-
-BÀI TIỂU LUẬN TÌM HIỂU VÀ MÔ PHỎNG HỆ THỐNG MẬT MÃ HÓA TIÊN TIẾN AES
Vũ Đình Trường Trịnh Xuân Đạt
Hà Nội, 27/06/2021
Trang 2MỤC LỤC
Bảng phân công công việc
Danh mục thuật ngữ
Danh mục hình ảnh
MỞ ĐẦU
I Giới thiệu chung
1.1 Giới thiệu .
1.2 Sơ lược lịch sử AES .
II Các tiêu chí đánh giá thuật toán AES
2.1 Bảo mật .
2.2 Chi phí .
2.3 Đặc điểm thực hiện và thuật toán .
III Cấu trúc cơ bản của thuật toán mã hóa tiên tiến AES
IV Quá trình mã hóa
4.1 Phép biến đổi SubBytes .
4.2 Phép biến đổi ShiftRow .
4.3 Phép biến đổi MixColumns .
4.4 Phép biến đổi AddRoundKey .
4.5 Mở rộng khóa (ExpandKey) .
V Quá trình giải mã
5.1 Tổng quan về giải mã AES-128 .
5.2 Chức năng AddRoundKey đảo .
5.3 Chức năng InvShiftRows .
5.4 Chức năng InvSubBytes .
5.5 Chức năng InvMixColumns .
5.6 Chức năng InvKeyExpansion .
VI Demo thuật toán AES bằng Python .
6.1 Giới thiệu .
6.2 Thiết lập ứng dụng .
6.2.1 Các thư viện hỗ trợ cho ứng dụng .
6.2.2 Thuật toán mã hóa .
6.2.3 Thuật toán giải mã .
6.2.4 Các trường hợp được ứng dụng .
VII Kết luận
Tài liệu tham khảo
Trang 3Bảng phân công công việc
Họ tên
Vũ Đình Trường– B17DCVT
Trịnh Xuân Đạt – B17DCVT
Vũ Trọng Linh – B17DCVT219
Trang 4Danh mục thuật ngữ
AES
DESSPN
SubByteShift RowMix ColumnsAdd Round KeyExpand KeyInv SubByteInv Shift RowInv Mix ColumnsInv Add Round Key
Trang 5Danh mục hình ảnh
Hình 1 Cấu trúc cơ bản của AES 9
Hình 2 Kiến trúc mã hóa chung của AES 10
Hình 3 Bảng S-box 11
Hình 4 Ví dụ phép biến đổi SubBytes 11
Hình 5 Ví dụ phép biến đổi ShiftRow 12
Hình 6 Ví dụ phép biến đổi MixColumns 13
Hình 7 Ví dụ về AddRoundKey 13
Hình 8 Mở rộng khóa 14
Hình 9 Quá trình giải mã (Inverse Cipher) 16
Hình 10 Ma trận khóa vòng thứ 10 và ma trận dữ liệu đã mã hóa 16
Hình 11 Chức năng AddRoundKey 17
Hình 12 Chức năng InvShiftRows 17
Hình 13 Bảng S-box đảo của chuẩn AES 18
Hình 14 Chức năng InvSubBytes 18
Hình 15 Ma trận chuyển đổi dùng trong InvMixColumns 19
Hình 16 Chức năng InvMixColumns 22
Hình 17 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 23
Trang 6MỞ ĐẦU
Với sự phát triển ngày càng mạnh về nhu cầu truyền tin và bảo mật trên Internethiện nay thì chúng ta rất cần một thuật toán mã hóa đủ mạnh, cực kỳ khó phá để thaythế các thuật toán mã hóa đã cũ và lỗi thời Hiện nay có rất nhiều thuật toán mã hóatiên tiến, một trong số đó là thuật toán mã hóa tiên tiến AES Với những ưu điểm vượttrội của mình thì AES đã và đang được kỳ vọng là thuật toán tiên tiến nhất được đưavào áp dụng trên toàn cầu trong tương lai gần Đó chính là lý do chúng em chọn đề tàinày làm bài tiểu luận
Mục đích của bài tiểu luận là giúp mọi người có cái nhìn tổng quan nhất vềthuật toán mã hóa tiên tiến AES Qua bài tiểu luận chúng ta có thể hiểu được nhữngvấn đề cơ bản về AES như cấu trúc cơ bản của thuật toán, quá trình mã hóa và giải mã
Phạm vi của bài tiểu luận sẽ xoay quanh những vấn đề cơ bản của thuật toán mãhóa tiên tiến AES
Về cấu trúc của bài tiểu luận, chúng em chia thành 7 phần lớn như sau:
I Giới thiệu chung
AI.Các tiêu chí đánh giá thuật toán AES
BI. Cấu trúc cơ bản của thuật toán mã hóa tiên tiến AES
IV Quá trình mã hóa
Trang 7I. Giới thiệu chung
có hoặc không có khóa
Ngày nay, có một số thuật toán đã có sẵn để mã hóa và giải mã dữ liệu nhạycảm, thường được chia thành ba loại Một là mật mã đối xứng: là cùng một khóa được
sử dụng để mã hóa và giải mã dữ liệu Thứ hai là mật mã không đối xứng Loại mật mãnày dựa trên hai khóa khác nhau để mã hóa và giải mã Cuối cùng, hàm băm mật mãkhông sử dụng khóa mà thay vào đó nó được trộn dữ liệu
Khóa đối xứng hiệu quả hơn và nhanh hơn nhiều so với Không đối xứng Một
số thuật toán đối xứng phổ biến là AES, S-DES và 3DES Mục đích chính của bài báonày sẽ cung cấp thông tin chi tiết về thuật toán Tiêu chuẩn mã hóa nâng cao (AES) cho
dữ liệu mã hóa và giải mã, sau đó thực hiện so sánh giữa thuật toán AES và DES đểđưa ra một số ý tưởng tại sao lại thay thế thuật toán DES thành AES
AES (Advanced Encryption Standard ) là một trong những thuật toán mật
mã khối đối xứng phổ biến và được sử dụng trên toàn thế giới Thuật toán này có mộtcấu trúc đặc biệt riêng để mã hóa và giải mã dữ liệu quan trọng và được áp dụng trongphần cứng và phần mềm trên toàn thế giới Rất khó để tin tặc lấy được dữ liệu thực khi
mã hóa bằng thuật toán AES Cho đến nay không phải là bất kỳ bằng chứng nào đểđánh lừa thuật toán này AES có khả năng xử lý ba kích thước khóa khác nhau nhưAES 128, 192 và 256 bit và mỗi mật mã này có kích thước khối 128 bit Bài báo cáonày chúng sẽ đưa ra cái nhìn tổng quan về thuật toán AES và giải thích chi tiết một sốtính năng quan trọng của thuật toán này
Thuật toán AES là một trong những thuật toán mã hóa mật mã khối được Viện Tiêuchuẩn và Công nghệ Quốc gia (NIST) xuất bản vào năm 2000 Mục đích chính của thuậttoán này là thay thế thuật toán DES sau khi xuất hiện một số khía cạnh dễ bị tấn cô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
Trang 8toàn thế giới để giới thiệu một thuật toán mật mã khối cải tiến để mã hóa và giải mã dữliệu với cấu trúc mạnh mẽ và phức tạp.
Sau khi thực hiện các tiêu chí và đánh giá các thông số bảo mật khác nhau, họ đãchọn một trong 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 thuật toán AES là thuật toán Rijndel.Tuy nhiên, tên này đã không trở thành một tên phổ biến cho thuật toán này thay vào đó nóđược công nhận là thuật toán Tiêu chuẩn mã hóa nâng cao (AES) trên khắp thế giới
AI. Các tiêu chí đánh giá thuật toán AES
Ba tiêu chí quan trọng đã được NIST sử dụng để đánh giá các thuật toán đượcgửi bởi các chuyên gia mật mã
2.1 Bảo mật
Một trong những khía cạnh quan trọng nhất mà NIST đã xem xét để lựa chọnthuật toán đó là bảo mật Lý do chính đằng sau điều này là rõ ràng vì mục đích chínhcủa AES là cải thiện vấn đề bảo mật của thuật toán DES AES có khả năng tốt nhất đểbảo vệ dữ liệu nhạy cảm khỏi những kẻ tấn công và không cho phép chúng phá dữ liệu
mã hóa so với các thuật toán được đề xuất khác Điều này đạt được bằng cách thựchiện nhiều thử nghiệm trên AES dựa trên lý thuyết và các cuộc tấn công thực tế
Một tiêu chí khác được NIST nhấn mạnh để đánh giá các thuật toán đó là chiphí Một lần nữa, các yếu tố đằng sau các biện pháp này cũng rõ ràng do một mục đíchchính khác của thuật toán AES là cải thiện hiệu suất thấp của DES AES là một trongnhững thuật toán được NIST đề cử vì nó có thể có hiệu quả tính toán cao và có thểđược sử dụng trong nhiều ứng dụng, đặc biệt là trong các liên kết băng thông rộng vớitốc độ cao
Tiêu chí này rất quan trọng để ước tính các thuật toán nhận được từ các chuyêngia mật mã Một số khía cạnh quan trọng đã được đo lường trong giai đoạn này là tínhlinh hoạt, tính đơn giản và tính phù hợp của thuật toán đối với sự đa dạng của việctriển khai phần cứng và phần mềm
BI. Cấu trúc cơ bản của thuật toán mã hóa tiên tiến AES
AES là một thuật toán mã hóa mới thay thế mật mã DES Nó dựa trên hai kỹ thuậtphổ biến để mã hóa và giải mã dữ liệu là mạng thay thế và hoán vị (Substitution andPermutation Network SPN) SPN là một số phép toán được thực hiện trong các thuật toánmật mã khối AES có khả năng xử lý 128 bit (16 byte) như kích thước khối 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 Ngoài
ra, 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àicủ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, 192 hoặc 256 bit) Các kích thước khóa quyết
Trang 9định đến số vòng như AES sử dụng 10 vòng cho khóa 128 bit, 12 vòng cho khóa 192bit và 14 vòng cho khóa 256 bit.
Hình 1 Cấu trúc cơ bản của AES
IV Quá trình mã hóa
Mã hóa là một kỹ thuật phổ biến đóng vai trò chính để bảo vệ dữ liệu khỏi những
kẻ xâm nhập Thuật toán AES sử dụng một cấu trúc cụ thể để mã hóa dữ liệu nhằm manglại sự bảo mật tốt nhất Để làm được điều đó, nó dựa vào số vòng và bên trong mỗi vòngbao gồm bốn quy trình phụ Mỗi vòng bao gồm bốn bước sau để mã hóa khối 128 bit
Trang 10Hình 2 Kiến trúc mã hóa chung của AES
Bước đầu tiên của mỗi vòng bắt đầu với phép biến đổi SubBytes Bước này phụthuộc vào bảng S-box phi tuyến để thay thế một byte trong ma trận trạng thái thànhmột byte khác
Trang 11Hình 3 Bảng S-box
Ta có ví dụ sau đây về phép biến đổi SubBytes:
Hình 4 Ví dụ phép biến đổi SubBytes
Trong ví dụ, ta sẽ thay tham số EA trong ma trận trạng thái bằng số 87 trong bảngS-box 87 chính là giao điểm của hàng E và cột A trong bảng S-box
Trang 124.2 Phép biến đổi ShiftRow
Bước tiếp theo sau SubByte thực hiện trên ma trận trạng thái là ShiftRow Trongquá 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 ma trận 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 xáo trộn các byte để tạo các cột khácnhau trước khi sử dụng cột cho thao tác MixColumns
Hình 5 Ví dụ phép biến đổi ShiftRow
Một bước quan trọng khác là MixColumn Phép biến đổi MixColumns thựchiện biến đổi độc lập từng cột trong ma trận trạng thái bằng một phép nhân đa thức.Mỗi byte của một hàng trong phép biến đổi ma trận nhân với mỗi giá trị (byte) của cộttrạng thái Nói cách khác, mỗi hàng của phép biến đổi ma trận phải nhân với mỗi cộtcủa trạng thái Kết quả của phép nhân này được sử dụng với XOR để tạo ra bốn bytemới cho trạng thái tiếp theo Trong bước này, kích thước ma trận trạng thái không bịthay đổi mà vẫn là kích thước ban đầu 4x4 như trong hình sau
Trang 13Hình 6 Ví dụ phép biến đổi MixColumns
b1 = (b1 * 2) XOR (b2 * 3) XOR (b3 * 1) XOR (b4 * 1)
Và cứ tiếp tục như vậy cho đến khi tất cả các cột của ma trận trạng thái kết thúc
Trong thao tác AddRoundKey, 128 bit của ma trận state sẽ được XOR với 128bit của khóa con của từng vòng Vì sử dụng phép XOR nên phép biến đổi ngược củaAddRoundKey trong cấu trúc giải mã cũng chính là AddRoundKey Việc kết hợp vớikhóa bí mật tạo ra tính làm rối (confusion) của mã hóa Sự phức tạp của thao tác mởrộng khóa (KeySchedule) giúp gia tăng tính làm rối này
Hình 7 Ví dụ về AddRoundKey
Trang 144.5 Mở rộng khóa (ExpandKey)
ExpandKey là thao tác tạo lược đồ khóa hay mở rộng khóa, tạo ra Nr+1 khóavòng từ khóa chính K, mỗi khóa vòng gồm Nb từ 32 bit, trong đó đối với AES thì Nb
= 4, còn Nr được xác định theo Các phép biến đổi để tạo khóa vòng trong ExpandKey
là khác nhau đối với các giá trị khác nhau của kích thước khóa K Sau đây là việc mởrộng khóa đối với khóa mã 128 bit
Hình 8 Mở rộng khóa
Trong thao tác mở rộng khóa với khóa mã 128 bit có đầu vào là 16 byte (4word) của khóa mã, và sinh ra một mảng khóa vòng (Nr+1)x4=44 từ (word) hay 176byte 44 word này được sử dụng cho 11 vòng mã hóa của AES, mỗi vòng dùng 4 word
Từ bốn word đầu vào w0w1w2w3, trong lần lặp đầu tiên thao tác ExpandKey sinh rabốn word w4w5w6w7, lần lặp thứ 2 từ w4w5w6w7 sinh ra w8w9w10w11 , cứ như thếcho đến lần lặp thứ 10 (tùy thuộc chiều dài khóa) sinh ra bốn word cuối cùngw40w41w42w43 như hình vẽ
Mục đích của ExpandKey: dùng để chống lại known-plaintext attack
Biết một số bit của khóa hay khóa con cũng không thể tính các bit còn lại
Không thể tính ngược: biết một khóa con cũng không thể tính lại các khóa con trước đó
Tính khuếch tán: một bit của khóa chính tác động lên tất cả các bit của các khóa con.
14 Nhóm 6
Trang 15V. Quá trình giải mã
5.1 Tổng quan về giải mã AES-128
Mã hóa chuyển một "bản rõ" (plaintext) thành một "bản mã" (ciphertext) thôngqua một khóa mã (key) giúp che dấu thông tin gốc ban đầu Giải mã là quá trình nghịchđảo (Inverse cipher) của quá trình mã hóa Nó giúp khôi phục lại bản rõ từ một bản mã
Trong quá trình giải mã, ma trận ciphertext sẽ bị biến đổi bởi các chức năngAddRoundKey, InvSubBytes, InvShiftRows hoặc InvMixColumns để 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ăngKeyExpansion như trong quá trình mã hóa Tuy nhiên, thứ tự sử dụng các khóa vòngtrong quá trình giải mã ngược với quá trình mã hóa, nghĩa là khóa vòng số 10 sẽ được
sử dụng đầu tiên Tiếp theo đó là khóa vòng số 9, số 8, , cuối cùng là khóa mã gốc
Quá trình giải mã được thực hiện qua 5 chức năng cơ bản là AddRoundKey,InvSubBytes, InvShiftRows, InvMixColumns và InvKeyExpansion Chú ý,InvKeyExpansion không phải là một chức năng được mô tả trong chuẩn mà là một têngọi được tác giả thêm vào để chỉ quá trình biến đổi ngược giá trị khóa vòng từ khóavòng số 10 đến khóa mã gốc
Bước 1 Bước khởi tạo: Dữ liệu cần được mã hóa cipher_text[127:0] kết hợp với khóa vòng thứ 10, round_key_10[127:0], bằng chức năng AddRoundKey
Bước 2 Bước lặp giải mã: kết quả bước 1 được sử dụng để thực hiện tuần tựcác chức năng InvShiftRows, InvSubBytes, AddRoundKey và InvMixColumns Bướcnày được lặp lại 9 lần Chú ý, InvKeyExpansion thực hiện song song với bướcAddRoundKey để 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 InvShiftRows, InvSubBytes và AddRoundKey vớikhóa mã ban đầu để khôi phục lại plain_text[127:0]
Trang 16Hình 9 Quá trình giải mã (Inverse Cipher)
Quá trình giải mã 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 cipher_text[127:0] và khóa vòng cuối cùng lấy từ quá trình
mã hóa round_key_10[127:0] có giá trị như sau:
cipher_text[127:0] = 69 c4 e0 d8 6a 7b 04 30 d8 cd b7 80 70 b4 c5 5a
round_key_10[127:0] = 13 11 1d 7f e3 94 4a 17 f3 07 a7 8b 4d 2b 30 c5
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
Hình 10 Ma trận khóa vòng thứ 10 và ma trận dữ liệu đã mã hóa
Giá trị dùng làm ví dụ lấy từ phần "INVERSE CIPHER (DECRYPT)" của phụ lục "C.1 AES-128 (Nk=4, Nr=10)" của tài liệu mô tả chuẩn mã hóa
Trang 175.2 Chức năng AddRoundKey đảo
Chức năng AddRoundKey đảo trong quá trình giải mã cũng chính là chức năngAddRoundKey trong quá trình mã hóa nên gọi chung là AddRoundKey
Hình 12 Chức năng InvShiftRows
Trang 185.4 Chức năng InvSubBytes
Chức năng InvSubBytes là thực hiện thay thế từng byte của ma trận trạng thái, bằngmột giá trị đã quy định trong chuẩn AES Bảng quy định giá trị thay thế cho InvSubBytesgọi là S-box đảo (Inverse S-box)
Hình 13 Bảng S-box đảo của chuẩn AES
Hình 14 Chức năng InvSubBytes
Trang 195.5 Chức năng InvMixColumns
InvMixColumns của quá trình giả mã là đảo của MixColumns trong quá trình
mã hóa Từng cột của ma trận trạng thái sẽ được nhân với ma trận chuyển đổi sau đây
Hình 15 Ma trận chuyển đổi dùng trong InvMixColumns
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 (+)
Nguyên tắc tính toán InvMixColumns là biến đổi phép nhân với một số thành
phép nhân với H02 và H01 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:
Nếu bit MSB của giá trị được dịch bằng 1 thì giá trị sau khi dịch được XOR với H1b
Nếu bit MSB của giá trị được dịch bằng 0 thì giữ giá trị sau khi dịch
Như vậy, việc biến đổi về phép nhân với H01 và H02 sẽ giúp dễ dàng thiết kế
mạch logic thực hiện chức năng InvMixColumns với tài nguyên được tối ưu hóa Thiết
kế và RTL code sẽ được phân tích trong những bài sau Tuy nhiên, các bạn cần hiểucách tính InvMixColumns sẽ được trình bày sau đây:
Phép nhân một byte A với H0e = B00001110 sẽ tương đương như sau:
A.H0e = A.H08 + A.H04 + A.H02
Trong đó, phép nhân với H04 và H08 hoàn toàn có thể chuyển về phép nhân vớiH02
A.H04 = A.H02.H02
A.H08 = A.H02.H02.H02
Như vậy: