Chương 1 TỔNG QUAN VỀ THUẬT TOÁN MÃ HOÁ
2.3 Nâng cao độ an toàn và hiệu năng cao thuật toán AES
2.3.1 Sự khuyếch tán trong tầng biến đổi tuyến tính của mã khối có cấu
trúc SPN
Ma trận MDS (Maximum Distance Separable matrix) là ma trận sinh của mã tách có khoảng cách cực được ứng dụng nhiều trong mã khối và hàm băm vì nó đảm bảo tính khuếch tán tốt.
Định nghĩa 1. Cho K là một trường hữu hạn và 𝑝, 𝑞 là hai số nguyên.
Giả sử 𝑓: 𝑥 → 𝑀 × 𝑥 là một ánh xạ từ 𝐾𝑝 vào 𝐾𝑞 được xác định bởi ma trận
𝑀 kích cỡ 𝑞 × 𝑝. Chúng ta nói rằng ánh xạ𝑓 là một đa hốn vị tuyến tính hay
𝑀 là một ma trận MDS nếu tập tất cả các cặp (𝑥, 𝑀 × 𝑥) là một mã MDS, có
nghĩa là một mã tuyến tính có số chiều bằng 𝑝, độ dài là 𝑝 + 𝑞 và khoảng cách tối thiểu là 𝑞 + 1.
Các ma trận MDS xuất phát từ lý thuyết mã với mã tách có khoảng cách cực đạị Trong lý thuyết mã có hai định lý quan trọng về ma trận MDS sau đây:
Định lý 1 [83]. Nếu 𝐶 là một mã [𝑛, 𝑘, 𝑑] thì 𝑛 − 𝑘 ≥ 𝑑 − 1.
Những mã với 𝑛 − 𝑘 = 𝑑 − 1 (ℎ𝑎𝑦 𝑑 = 𝑛 − 𝑘 + 1), được gọi là mã tách có khoảng cách cực đại, hay mã MDS.
Định lý 2 [83]. Một mã [𝑛, 𝑘, 𝑑] với ma trận sinh 𝐺 = [𝐼|𝑀] trong đó A là một ma trận 𝑘 × (𝑛 − 𝑘) là MDS nếu và chỉ nếu mọi ma trận con vuông
(được tạo ra bởi i hàng bất kỳ và i cột bất kỳ, với 𝑖 = 1, 2, … , 𝑚𝑖𝑛 {𝑘, 𝑛 − 𝑘})
của M đều là ma trận không suy biến.
Từ định lý 2, ta có định nghĩa đơn giản về ma trận MDS là ma trận mà mọi ma trận con vng của nó đều khơng suy biến.
Theo Claude Shannon, xáo trộn và khuếch tán là hai thuộc tính bắt buộc của một mã khối an tồn [83]. Các mã khối hiện đại được thiết kế chủ yếu dựa trên hai nguyên lý đó và thường bao gồm hai tầng tương ứng là: tầng xáo trộn thường được bảo đảm bởi thành phần hộp thế (S-box) phi tuyến, làm cho mối quan hệ của sự độc lập thống kê giữa xâu bản mã và sự độc lập thống kê của xâu bản rõ trở nên phức tạp hơn, trong khi tầng khuếch tán thường được bảo đảm bởi phép biến đổi tuyến tính, gắn với sự phụ thuộc của các bit đầu ra với các bit đầu vàọ
Thuật toán AES được thiết kế theo cấu trúc SPN, với tầng khuếch tán là sự kết hợp của 2 phép biến đổi gồm ShiftRows và MixCollums. Trong đó, phép biến đổi MixCollums là một phép biến đổi tuyến tính.
Phép biến đổi đổi tuyến tính trong mạng SPN ở mã khối là một thành phần quan trọng. Biến đổi này cung cấp tính khuếch tán bằng cách khuếch tán sự xáo trộn các bit của khối đầu vào cố định và tạo ra khối đầu ra tương ứng có kích thước khơng đổi và được đặc trưng bởi số nhánh. Số nhánh là số lượng nhỏ nhất các S- hộp tích cực của 2 vịng mã hóa liên tiếp nhau [96]. Số lượng này được sử dụng để ước lượng khả năng kháng lại tấn công vi sai [26] và tuyến tính [8] lên mã khốị Ngồi đặc trưng số nhánh, theo Muhammat [68], số điểm bất động cũng là một tính chất mật mã quan trọng, bổ sung cho tính khuếch tán của một biến đổi tuyến tính. Sau đây, chúng ta sẽ xem xét hai khái niệm này:
Số nhánh của phép biến đổi tuyến tính: Giả sử 𝐿 là ánh xạ tuyến tính hoạt động trên các vectơ từ (mỗi từ n bít) 𝐿: 𝔽2𝑑𝑛 → 𝔽2𝑑𝑛 với 𝑍 = (𝑍0, 𝑍1, … , 𝑍𝑑−1)𝑇
là vectơ cột đầu vào, còn 𝑋 = (𝑋0, 𝑋1, … , 𝑋𝑑−1)𝑇 là vectơ cột đầu ra của ánh xạ này, định nghĩa 𝑀 = [𝑚𝑖,𝑗]𝑑×𝑑 là ma trận khơng suy biến trên trường 𝔽2𝑛, ma trận này biểu diễn biến đổi tuyến tính 𝐿, khi đó:
0,0 0,1 0, 1 0 0 1,0 1,1 1, 1 1 1 1,0 1,1 1, 1 1 1 ... ... ... d d d d d d d d m m m X Z m m m X Z m m m X Z (2.1)
Gọi Γ𝑍 = (Γ𝑍0, Γ𝑍1, … , Γ𝑍𝑑−1, ) là ký hiệu một véc tơ nhị phân có chiều dài d, ở đây Γ𝑍𝑖 = 1 khi 𝑍𝑖 ≠ 0 còn bằng 0 trong trường hợp còn lạị Ký hiệu 𝑤𝑡(Γ𝑍) là trọng số Hamming của Γ𝑍. Khi đó số nhánh của biến đổi tuyến tính 𝐿 ký hiệu là 𝐵(𝐿) chính là số lượng nhỏ nhất các S-hộp tích cực trong 2 vịng mã liên tiếp nào đó. Số nhánh được tính như sau:
𝐵(𝐿) = min{𝑤𝑡(Γ𝑍) + 𝑤𝑡(Γ𝑋): 𝑍 ≠ 0, 𝑋 = 𝐿(𝑍)} (2.2) ở đây, 𝐵(𝐿) ≤ 𝑑 + 1.
Số nhánh của biến đổi tuyến tính 𝐿 tối ưu là bằng 𝑑 + 1 và mã tuyến tính trong trường hợp này có khoảng cách nhỏ nhất cực đại (gọi là mã MDS). Như vậy, nếu phép biến đổi tuyến tính với một ma trận MDS thì phép biến đổi tuyến tính đó sẽ đảm bảo độ khuếch tán cực đạị
Phép biến đổi tuyến tính MixCollums của thuật tốn AES sử dụng một ma trận MDS kích thước 4 x 4 nên số nhánh của tầng biến đổi tuyến tính tương ứng là bằng 5.
Điểm bất động của tầng khuếch tán trong mã khối: Khái niệm điểm bất động của một biến đổi tuyến tính trong mã khối lần đầu tiên được xem xét trong [42]. Theo đó 𝑋 là điểm bất động của biến đổi tuyến tính 𝐿: 𝔽2𝑑𝑛 → 𝔽2𝑑𝑛nếu 𝑋 = 𝐿(𝑋), 𝑋 ∈ 𝔽2𝑑𝑛, có nghĩa là giá trị của nó khơng thay đổi dưới tác động của biến đổi tuyến tính nàỵ Một biến đổi tuyến tính 𝐿: 𝔽2𝑑𝑛 → 𝔽2𝑑𝑛 ln có thể được biểu diễn bởi một ma trận khơng suy biến 𝑀 có kích thước 𝑑 × 𝑑, các phần tử của ma trận này thuộc trường 𝔽2𝑛. Như vậy, số lượng điểm bất động của biến đổi tuyến tính trên chính là số nghiệm của hệ phương trình:
trong đó 𝐼 là ma trận đơn vị kích thước 𝑑 × 𝑑. Từ đó số lượng điểm bất động cho biến đổi tuyến tính nói trên được tính theo cơng thức sau:
𝑁𝐿 = 2𝑛(𝑟𝑎𝑛𝑘(𝑀)−𝑟𝑎𝑛𝑘(𝑀−𝐼)) = 2𝑛(𝑑−𝑟𝑎𝑛𝑘(𝑀−𝐼) (2.4) Do đó, số lượng các điểm bất động phụ thuộc vào hạng của ma trận 𝑀 − 𝐼. Đối với thuật toán AES, tầng khuếch tán là sự kết hợp của hai phép toán ShiftRows và MixCollums:
Biến đổi 𝐿0 - ShiftRows là phép dịch vòng các byte 0,0 0,1 0,2 0,3 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,1 1,2 1,3 1,0 2,0 2,1 2,2 2,3 2,2 2,3 2,1 2,0 3,0 3,1 3,2 3,3 3,3 3,0 3,1 3,2 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
Biến đổi 𝐿1- MixCollums là phép nhân với ma trận MDS trên 𝔽28, 𝑋 = 𝑀𝑍, trong đó Z là khối đầu vào, X là khối đầu ra và 𝑀 là ma trận MDS kích thước 4x4: 0,0 0,1 0,2 0,3 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,0 3,1 3,2 3,3 2 3 1 1 1 2 3 1 1 1 2 3 3 1 1 2 M X X X X X Z Z Z Z X X X X Z Z Z Z X X X X Z Z Z Z X X X X Z Z Z Z Z Cả hai biến đổi tuyến tính 𝐿0 và 𝐿1 này có thể biểu diễn dưới dạng phép nhân một ma trận A kích thước 16x16 với một cột. Trong [68] tác giả đã tính được ma trận 𝐴 cỡ 16 × 16 biểu diễn cho tầng khuếch tán của AES (bao gồm ShiffRows và MixColumns), có dạng sau:
[ 2 0 0 0 0 0 0 1 0 0 1 0 0 3 0 0 1 0 0 0 0 0 0 1 0 0 3 0 0 2 0 0 1 0 0 0 0 0 0 3 0 0 2 0 0 1 0 0 3 0 0 0 0 0 0 2 0 0 1 0 0 1 0 0 0 3 0 0 2 0 0 0 0 0 0 1 0 0 1 0 0 2 0 0 1 0 0 0 0 0 0 1 0 0 3 0 0 1 0 0 1 0 0 0 0 0 0 3 0 0 2 0 0 1 0 0 3 0 0 0 0 0 0 2 0 0 1 0 0 0 1 0 0 3 0 0 2 0 0 0 0 0 0 1 0 0 3 0 0 2 0 0 1 0 0 0 0 0 0 1 0 0 2 0 0 1 0 0 1 0 0 0 0 0 0 3 0 0 1 0 0 1 0 0 3 0 0 0 0 0 0 2 0 0 0 1 0 0 1 0 0 3 0 0 2 0 0 0 0 0 0 1 0 0 3 0 0 2 0 0 1 0 0 0 0 0 0 3 0 0 2 0 0 1 0 0 1 0 0 0 0 0 0 2 0 0 1 0 0 1 0 0 3 0 0 0]
Tuy nhiên, theo tính tốn của luận án, ma trận 𝐴 có dạng chính xác như sau: [ 2 0 0 0 0 3 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 3 0 0 0 0 1 0 0 0 0 1 0 0 0 0 2 0 0 0 1 2 0 0 0 0 3 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 3 1 0 0 0 0 1 0 0 0 0 2 0 0 0 0 2 3 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 2 0 0 0 0 3 0 0 0 0 3 0 0 0 0 1 1 0 0 0 0 2 0 0 0 0 2 0 0 0 0 3 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 2 3 0 0 0 0 1 0 0 0 3 0 0 0 0 1 0 0 0 0 1 2 0 0 0 0 2 0 0 0 0 3 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 2 3 0 0 0]
Sau khi tính hạng của các ma trận ta nhận được 𝑟𝑎𝑛𝑘(𝐴) = 16. Ma trận 𝐴 − 𝐼, với 𝐼 là ma trận đơn vị kích thước 16 x 16, phép “−“ ở đây là phép XOR, nên
𝐴 − 𝐼 = [ 𝟑 0 0 0 0 3 0 0 0 0 1 0 0 0 0 1 1 𝟏 0 0 0 2 0 0 0 0 3 0 0 0 0 1 1 0 𝟏 0 0 1 0 0 0 0 2 0 0 0 0 3 3 0 0 𝟏 0 1 0 0 0 0 1 0 0 0 0 2 0 0 0 1 𝟑 0 0 0 0 3 0 0 0 0 1 0 0 0 0 1 1 𝟏 0 0 0 2 0 0 0 0 3 0 0 0 0 3 1 0 𝟏 0 0 1 0 0 0 0 2 0 0 0 0 2 3 0 0 𝟏 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 𝟑 0 0 0 0 3 0 0 0 0 3 0 0 0 0 1 1 𝟏 0 0 0 2 0 0 0 0 2 0 0 0 0 3 1 0 𝟏 0 0 1 0 0 0 0 1 0 0 0 0 2 3 0 0 𝟏 0 1 0 0 0 3 0 0 0 0 1 0 0 0 0 1 𝟑 0 0 0 0 2 0 0 0 0 3 0 0 0 0 1 1 𝟏 0 0 0 1 0 0 0 0 2 0 0 0 0 3 1 0 𝟏 0 0 1 0 0 0 0 1 0 0 0 0 2 3 0 0 𝟏]
Tính được 𝑟𝑎𝑛𝑘(𝐴 − 𝐼) = 14. Số điểm bất động đối với tầng khuếch tán của AES theo (2.4) là 𝑁𝐴 = 28(16−14) = 216. Rõ ràng tầng khuếch tán của AES có số điểm bất động khá lớn. Thuật toán này đề xuất lựa chọn ma trận MDS khác cho phép biến đổi tuyến tính giảm bớt số điểm bất động của tầng khuếch tán để nâng cao độ an tồn của thuật tốn AES.
2.3.2 Giải pháp nâng cao độ an tồn của thuật tốn AES
Trong phần trước đã trình bày một số tính chất mật mã quan trọng của tầng khuếch tán trong mã khối, phân tích các tính chất đó đối với tầng khuếch tán của thuật toán mật mã AES. Kết quả phân tích cho thấy, tầng khuếch tán của AES có số nhánh không cao (bằng 5) và số điểm bất động nhiều (bằng 216). Tất nhiên ngồi các tiêu chí u cầu về số nhánh cao, số điểm bất động ít, cịn có các tiêu chí khác cần xem xét, chẳng hạn như tiêu chí về tốc độ thực hiện và chi phí cài đặt. Như vậy để nâng cao độ an tồn của thuật tốn AES, chúng ta có thể cải tiến ma trận MDS để tăng số nhánh, hoặc giảm số điểm bất động, hoặc vừa tăng số nhánh và giảm số điểm bất động. Để tăng số nhánh, chúng ta có thể sử dụng một ma trận MDS kích thước lớn hơn, tối đa cỡ 16x16. Khi đó
số nhánh cực đại sẽ được tăng lên, tối đa bằng 17. Tuy nhiên khi tăng kích thước của ma trận MDS thì cũng làm tăng chi phí cài đặt và ảnh hưởng đến tốc độ mã hóa/giải mã.
Vì vậy, luận án đề xuất giải pháp lựa chọn một ma trận MDS mới nhằm giảm đáng kể số điểm bất động, trong khi không làm tăng quá nhiều chi phí cài đặt và đặc biệt khơng làm giảm nhiều tốc độ thực thi của thuật toán AES. Nghĩa là có sự cân bằng giữa độ an tồn và chi phí, tốc độ thực thị
Như chúng ta đã biết, có nhiều phương pháp để xây dựng ma trận MDS [46], [73], [97]. Tuy nhiên, việc xây dựng ma trận MDS sao cho tầng khuếch tán có chi phí thực thi thấp vẫn là một vấn đề khó đối với các nhà thiết kế. Ý tưởng về một ma trận tựa vịng có nhiều phần tử bằng 1 và giá trị của các phần tử là nhỏ, số phần tử khác nhau ít nhằm tăng tốc độ và giảm chi phí thực thi là một ý tưởng được nhiều người quan tâm. Chi tiết về phương pháp xây dựng ma trận MDS tựa vịng hiệu quả có thể tìm đọc trong các tài liệu chuyên sâu [46], [73], [97]. Sau đây luận án sẽ trình bày tóm lược về phương pháp nàỵ
Các tiêu chí thiết kế ma trận MDS được các tác giả trong [73], [96] đề cập là:
- Có nhiều nhất số lượng phần tử có giá trị bằng 1 (ký hiệu số lượng này là 𝑣1).
- Số lượng ít nhất các phần tử khác nhau trong ma trận (ký hiệu số lượng này là 𝑐).
- Các phần tử của ma trận có trọng số Hamming thấp nhằm tối thiểu hóa chi phí thực thi (ký hiệu trọng số này là H). Giá trị H càng thấp thì số phép XOR và số biến tạm cần sử dụng sẽ càng ít.
Dựa trên các tiêu chí đó, các tác giả đã xây dựng các ma trận MDS có chi phí thực thi thấp dựa trên các mảng song chính quy (bi-regular). Họ cho rằng cách xây dựng như vậy sẽ tạo ra các ma trận tối ưu theo nghĩa số các phép
XOR, các biến tạm và bảng tra là nhỏ nhất. Các giá trị tối ưu cho 𝑣1 và 𝑐 đối với một ma trận cỡ 𝑞 × 𝑝 được các tác giả xác định qua Bảng 2.1 và Bảng 2.2.
Bảng 2.1. Các giá trị của cq,p 2 3 4 5 6 7 8 2 3 4 5 6 7 8 2 2 2 2 3 3 3 3 3 2 2 3 3 3 3 4 4 2 3 3 3 4 4 4 5 3 3 3 3 4 4 4 6 3 3 4 4 4 4 5 7 3 3 4 4 4 4 5 8 3 4 4 4 5 5 5
Tuy nhiên, trong cơng trình này, các tác giả mới chỉ xây dựng được các ma trận MDS cỡ 4 × 4 và 8 × 8 tối ưu một phần: hoặc theo 𝑣1, hoặc theo 𝑐. Bên cạnh đó, ma trận nghịch đảo của các ma trận này chưa chắc đã tối ưụ
Bảng 2.2. Các giá trị của 𝑣1𝑞,𝑝 2 3 4 5 6 7 8 2 3 4 5 6 7 8 9 3 4 6 7 8 9 10 11 4 5 7 9 10 12 13 14 5 6 8 10 12 13 14 17 6 7 9 12 13 16 18 19 7 8 10 13 14 18 21 22 8 9 11 14 17 19 22 24
Cũng theo hướng xây dựng trên, các tác giả trong [46] đã đề xuất và đưa ra một số kết quả về các ma trận MDS kiểu “ma trận tựa vòng” (circulant matrix). Có 2 kiểu ma trận tựa vịng được định nghĩa như saụ
Định nghĩa 2.1 (Ma trận tựa vòng Kiểu-I).
Ma trận 𝑑 × 𝑑 dạng sau:
[ 𝑎 𝟏𝟏𝑇 𝐴]
được gọi là ma trận tựa vòng Kiểu-I, với 𝐴 = 𝐶𝑖𝑟𝑐(1, 𝑎1, … , 𝑎𝑑−2),
𝟏 = (1, … ,1)⏟
𝑑−1 𝑙ầ𝑛
, 1 là phần tử đơn vị, và phần tử 𝑎𝑖 và 𝑎 là những phần tử khác
0 và khác 1 bất kì của trường cơ sở. Ma trận này được kí hiệu là
𝐾𝑖ể𝑢_𝐼(𝑎, 𝐶𝑖𝑟𝑐(1, 𝑎1, … , 𝑎𝑑−2)) .
Ởđây, 𝐶𝑖𝑟𝑐(𝑎0, 𝑎1, … , 𝑎𝑑−1) là ký hiệu của một ma trận vòng () cỡ 𝑑 × 𝑑, có dạng sau: [ 𝑎0 𝑎1 ⋯ 𝑎𝑑−1 𝑎𝑑−1 𝑎0 ⋯ 𝑎𝑑−2 ⋮ ⋮ ⋮ ⋮ 𝑎1 𝑎2 ⋯ 𝑎0 ]
Ma trận tựa vịng kiểu-I có đặc điểm thú vị là số lượng các phần tử khác nhau trong ma trận là nhỏ (thường bằng kích cỡ của ma trận), số lượng số 1 trong ma trận là khá cao, ngoài ra nghịch đảo của nó cũng có dạng tương tự như nó. Dạng nghịch đảo này được định nghĩa như sau:
Định nghĩa 2.2 (Ma trận tựa vòng Gần_Kiểu-I).
Ma trận 𝑑 × 𝑑 dạng sau:
[ 𝑎 𝒃𝒃𝑇 𝐴]
được gọi là Ma trận tựa vòng Gần_Kiểu-I, với 𝐴 = 𝐶𝑖𝑟𝑐(𝑎0, 𝑎1, … , 𝑎𝑑−2),
𝒃 = (𝑏, … , 𝑏)⏟
𝑑−1 𝑙ầ𝑛
, và 𝑎, 𝑏 và phần tử 𝑎𝑖 là những phần tử bất kì của trường cơ sở. Ma trận này được kí hiệu là: 𝐺ầ𝑛_𝐾𝑖ể𝑢_𝐼(𝑎, 𝑏, 𝐶𝑖𝑟𝑐(𝑎0, … , 𝑎𝑑−2)).
Các tác giả còn đề xuất một kiểu ma trận tựa vòng khác gọi là ma trận tựa vòng Kiểu-II, có khả năng tự nghịch đảo, phù hợp cho các mạng SPN.
Định nghĩa 2.3 (Ma trận tựa vòng Kiểu-II).
[ 𝐴 𝐴−1 𝐴3 + 𝐴 𝐴 ]
được gọi là ma trận tựa vòng Kiểu-II, với 𝐴 = 𝐶𝑖𝑟𝑐(𝑎0, … , 𝑎𝑑−1) và
được kí hiệu là 𝐾𝑖ể𝑢_𝐼𝐼(𝐶𝑖𝑟𝑐(𝑎0, … , 𝑎𝑑−1)).
Theo đó, trong [46] các tác giả đã tìm được một số ma trận tựa vịng kiểu-I cỡ 4 × 4, 8 × 8, và một số ma trận tựa vòng kiểu-II cỡ 6 × 6.
Ma trận MDS trong thuật tốn AES được xây dựng có dạng tựa vịng và hướng đến các tiêu chí như vậỵ Trong phần này, luận án ứng dụng phương pháp xây dựng ma trận tựa vòng [46], [97] để xây dựng một ma trận MDS tựa vịng mới kích thước 4 x 4 và có chi phí thực thi tương đương với ma trận MDS của AES, nhưng ma trận MDS tựa vòng mới này tạo ra tầng khuếch tán với số điểm bất động bằng 1, đó chính là điểm 0 tầm thường.
Đây là một số thuộc tính mật mã tốt muốn có của các ma trận tựa vịng MDS. Những dạng ma trận nào thỏa mãn được những thuộc tính trên sẽ được phân tích, lựa chọn phương pháp xây dựng các ma trận đó. Để có các ma trận tựa vịng, chương trình tìm kiếm ma trận MDS tựa vòng cỡ 4 x 4 được xây dựng, mẫu ma trận được sử dụng có dạng như sau:
Các phần tử 𝑎, 𝑏, 𝑐, 𝑑 được chọn bất kỳ trong trường 𝐺𝐹(28). Ứng với 8