Bảng 1.1: Độ dài khóa AES 128-196-256 [6]
Độ dài khóa(Nk) Kích thước khối (Nb) Số lần lặp
AES 128 4 4 10 AES 196 6 4 12 AES 256 8 4 14 1.2.3.3. Quá trình mã hóa Bao gồm các bước: a. Khởi động vòng lặp
+ 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. Mỗi byte được kết hợp với một byte trong khóa con của chu trình sử dụng phép toán XOR (⊕), được thể hiện trong hình 1.10:
Hình 1.10: Biến đổi AddRoundKey [6] b. Vòng lặp b. 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 (Rijndael S-box).
Bảng 1.2: Bảng tham chiếu Rijndael S-box [6]
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 00 63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ad 76 10 ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c0 20 b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15 30 04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 75 40 09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84 50 53 d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf 60 d0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a8 70 51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2 80 cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73 90 60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db a0 0e 32 3a 0a 49 06 24 5c c2 d3 ac 62 91 95 e4 79 b0 e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 08 c0 ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a d0 70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9e e0 e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 df f0 8c a1 89 0d bf e6 42 68 41 99 ad 0f b0 54 bb 16
Hình 1.11: Biến đổi SubBytes [6]
Hình 1.11: Thể hiền việc thay thế byte bằng bẳng tham chiếu Rijndael S-box
ShiftRows: 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.
Hình 1.12: Biến đổi ShiftRows [6]
Hình 1.12: Các byte sẽ được dịch trái i lần với i= 0, 1, 2, 3
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. Mỗi cột được nhân với một hệ số cố định C(x).
Trong hàm MixColumns mỗi byte của lối vào sẽ ảnh hưởng lên tất cả 4 byte ở lối ra. Cùng với ShiftRows, MixColumns sẽ tạo ra tính khuếch tán (diffusion) của mã. Mỗi cột được xử lý như một đa thức trên GF (28) và được nhân với một đa thức cố định:
C(x) = ‘03’x3 +’01’ x 2 + ‘01’x + ‘02’ theo modul (x4 + 1). (1.10)
Hình 1.14: Sơ đồ quá trình mã hóa và giải mã AES [6]
Tại chu trình cuối thì bước MixColumns không thực hiện. Ưu điểm và nhược điểm của thuật toán AES
Thiết kế và độ dài khóa của thuật toá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ấu trúc của AES cũng rõ ràng và đơn giản.
Về an ninh của AES thì các nhà khoa học đánh giá là chưa cao. Họ cho rằng ranh giới giữa số chu trình của thuật toán và số chu trình bị phá vỡ quá nhỏ.
Nếu các kỹ thuật tấn công được cải thiện thì AES có thể bị phá vỡ. Một vấn đề khác nữa là cấu trúc toán học của AES. Không giống với các thuật toán mã hóa khác,
AES có mô tả toá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.
Ứng dụng của AES
+) Hiện nay, AES được sử dụng phổ biến trên toàn thế giới để bảo vệ dữ liệu ở các tổ chức ngân hàng, tài chính, chính phủ, thương mại điện tử, chữ ký điện tử…
+) Mã hóa AES được ứng dụng nhanh đối với cả phần cứng và phần mềm, và chỉ yêu cầu một không gian lưu trữ nhỏ, lý tưởng để sử dụng cho việc mã hóa những thiết bị cầm tay nhỏ như ổ USB flash, ổ đĩa CD;…
1.3. Kết luận
Kết thúc chương 1 ta có cái nhìn tổng quan về mật mã học, cấu trúc cơ bản của một hệ mã và một số thuật toán mã hóa hay sử dụng hiện nay như DES và AES với những ưu điểm là đều có độ bảo mật cao, còn đối với những thiết bị có năng lượng tiêu thụ thấp, phần cứng bị hạn chế và tốc độ tính toán nhỏ thì hai thuật toán trên không đáp ứng được các tiêu chí đó vì vậy mà mã hạng nhẹ ra đời. Chương 2 sẽ giới thiệu về mã hạng nhẹ dặc biệt là thuật toán LED và ứng dụng truyền nó trong CAN.
CHƯƠNG 2: ỨNG DỤNG MÃ HẠNG NHẸ CHO ĐIỀU KHIỂN THIẾT BỊ TRONG CAN
Chương này giới thiệu về mã hạng nhẹ, cấu trúc và cách thiết kế thuật toán LED- 64, mô phỏng thuật toán trên ModelSim, giới thiệu CAN và ứng dụng mã hóa LED 64 bit 0 truyền trong CAN.
2.1. Giới thiệu mã hạng nhẹ
2.1.1. Khái niệm
Ngày nay các thuật toán mã hóa được thiết kế để chủ yếu sử dụng cho các thiết bị có kích thước lưu trữ và tiêu thụ năng lượng tương đối lớn mà không chú trọng và quan tâm đến việc tối ưu phần cứng. Các thuật toán bảo mật hiên đại không thể sử dụng cho tất các ứng dụng và thiết bị có kích thước lưu trữ nhỏ, tiêu thụ năng lương thấp, khả năng xử lý chậm. Do đó việc ra đời một loại mật mã nhẹ cho các thiết bị nhỏ gọn như vậy là rất cần thiết.
Mã hạng nhẹ là một loại mật mã khối, với mục tiêu là thiết kế và triển khai các thuật toán một cách dễ dàng, tiêu tốn ít tài nguyên, nhưng tính bảo mật vẫn phải được đảm bảo. Trong ứng dụng thì mã hạng nhẹ chính là sự cân đối giữa độ bảo mật và tính tối ưu cho những thiết bị có dung lượng bộ nhớ nhỏ, hạn chế về tài nguyên phần cứng, năng lượng tiêu thụ thấp, tốc độ xử lý chậm đồng thời thích hợp cho những thiết bị có mức độ bảo mật vừa phải. Mã hạng nhẹ có thể đảm bảo về mức độ bảo mật đồng thời đi kèm với một thuật toán đã được tối ưu hóa.
2.1.2. Cấu trúc thiết kế mã hạng nhẹ
Thuật toán mã hạng nhẹ luôn phải được thiết kế đảm bảo sự cân bằng giữa: bảo mật, chi phí và hiệu năng của thiết bị. Trong mật mã khối hạng nhẹ độ dài khóa càng lớn thì tính bảo mật càng cao đồng thời chi phí bỏ ra để thực hiện cũng cao ngược lại nếu độ bảo mật ở mức độ vừa phải đồng nghĩa với chi phí bỏ ra là chấp nhận được. Những thuật toán có số vòng lặp lớn sẽ có độ bảo mật cao nhưng khi cài đặt sẽ làm giảm hiệu năng của thiết bị. Cấu trúc của hệ mã cũng ảnh hưởng đến giá thành và hiệu năng của thiết bị. Thuật toán mã hóa thiết kế theo cấu trúc song song sẽ có hiệu năng cao nhưng giá thành đắt. Thuật toán thiết kế theo cấu trúc nối tiếp thì chi phí thấp nhưng khi thực hiện sẽ làm giảm hiệu năng của thiết bị. Do đó việc cân bằng
giữa tính bảo mật, chi phí, và hiệu năng là rất khó thực hiện. Thực tế trên những thiết bị chúng ta chỉ có thể đạt được hai trên ba mục tiêu đề ra. Trong đó tính bảo mật của thuật toán được ưu tiên hàng đầu. Nếu tính bảo bảo mật mà không thể phá vỡ thì thuật toán đó sẽ được sử dụng nhiều hơn.
Hình 2.1: Cân bằng thiết kế của mã hạng nhẹ [7]
Mã khối hạng nhẹ được thiết kế theo hai phương pháp đó là theo cấu trúc mạng hoán vị - thay thế SPN và cấu trúc Feistel.
2.1.3. Cấu trúc SPN trong mã hạng nhẹ
Cấu trúc SPN sử dụng để mã hóa các khối dữ liệu N với 32≤ N ≤ 128, với khóa sử dụng là 80 ≤ K ≤ 256. Bản rõ sau khi được cộng khóa sẽ được đưa vào mạng SPN với hai khối Sboxlayer và pLayer để tạo ra N bit ciphertext, cấu trúc SPN được thể hiện trong hình 2.2. K-bit Key N-bit Plainttext SboxLayer pLayer N-bit Ciphertext
Hình 2.2: Cấu trúc SPN trong mã hạng nhẹ [4]
Thuật toán PRESENT
Thuật toán PRESENT [8] là một trong những thuật toán đặc trưng sử dụng cấu trúc SPN. Plaintext sBoxLayer pLayer sBoxLayer pLayer Ciphertext Update Update + + Key register addRoundkey addRoundkey ... ...
Hình 2.3: Sơ đồ thuật toán PRESENT [8]
Thuật toán PRESENT sử dụng để mã hóa các khối dữ liệu 64 bit với khóa sử dụng là 80 bít, sử dụng 31 vòng lặp. Bản rõ sau khi được cộng khóa sẽ được đưa vào mạng SPN mà ở đây là 2 khối sBoxLayer và pLayer. Khóa cho mỗi vòng lặp được sinh ra bởi một khóa K ban đầu và sẽ được cập nhật sau mỗi vòng lặp và vòng lặp cuối cùng sẽ tạo ra bản mã ciphertext.
Bảng 2.1: Khối Sbox của PRESENT [8]
x 0 1 2 3 4 5 6 7 8 9 A B C D E F
S(x) C 5 6 B 9 0 A D 3 E F 8 4 7 1 2
Bảng 2.2: Khối hoán vị pLayer của PRESENT [8]
i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 P(i) 0 16 32 48 1 17 33 49 2 18 34 50 3 19 35 51 i 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 P(i) 4 20 36 52 5 21 37 53 6 22 38 54 7 23 39 55 i 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 P(i) 8 24 40 56 9 25 41 57 10 26 42 58 11 27 43 59
i 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
P(i) 12 28 44 60 13 29 45 61 14 30 46 62 15 31 47 63
2.1.4: Cấu trúc Feistel trong mã hạng nhẹ
Cấu trúc Feistel trong mã khối hạng nhẹ, được thể hiện qua thuật toán TWINE một trong những thuật toán đặc trưng thiết kế theo cấu trúc Feistel của mã khối hạng nhẹ.
Thuật toán TWINE sử dụng để mã hóa các khối dữ liệu 64 bit với khóa K sử dụng là 80 bit hoặc 128 bit, sử dụng ít nhất 36 vòng lặp. Tại mỗi vòng lặp (hình 2.4), bản rõ 64 bit được chia thành 16 khối con {𝑥0, 𝑥1, 𝑥2, … , 𝑥15}, khóa 𝑅𝐾𝑖 sử dụng trong mỗi vòng lặp có độ dài 80 bít được sinh bởi khóa K ban đầu và được cập nhật sau mỗi vòng lặp (hình 2.4).
Hình 2.4: Cấu trúc một vòng lặp trong thuật toán TWINE [9]
Hình 2.5: Quá trình cập nhật key tại mỗi vòng lặp [9] Bảng 2.3: Bảng Sbox của thuật toán TWINE [9] Bảng 2.3: Bảng Sbox của thuật toán TWINE [9]
x 0 1 2 3 4 5 6 7 8 9 A B C D E F
2.1.5. Ứng dụng mã hạng nhẹ
Mã hạng nhẹ có nhiều ưu điểm như độ bảo mật cao, ngày cảng được sử dụng rộng rãi trong các ứng dụng như máy đo thông minh, hệ thống giao thông thông minh, hệ thống bảo mật của xe, hệ thống giám sát bệnh nhân không dây, các mạng cảm biến không dây, thẻ RFID và các giao dịch chứng thực, hệ thống giáo dục qua mạng, thiết bị IoT…
Hình 2.6: Ứng dụng mã hạng nhẹ cho IoT và ITS [10]
Hình 2.7: Ứng dụng mã hạng nhẹ cho mạng cảm biến không dây và RFID [11]
2.2. Mã hạng nhẹ LED
2.2.1. Giới thiệu về mã hạng nhẹ LED
Light Encryption Device [12] – LED Thường được định nghĩa là mật mã dành cho thiết bị có nguồn tài nguyên hạn chế, như các thẻ RFID và mạng cảm biến không dây và là một thuật toán mã khối hạng nhẹ được phát triển sau PRESENT bởi Jian Guo,
Thomas Peyrin, Axel Poschmann và Matt Robshaw, sử dụng cấu trúc SPN với kích thước mỗi khối là 64 bit. LED hỗ trợ hai loại key khác nhau, 64 bit hoặc 128 bit và ký hiệu LED-64 và LED-128 được dùng để chỉ kích thước khóa trong mỗi trường hợp. LED-64 bao gồm 8 bước và mỗi bước gồm 4 vòng, tất cả là 32 vòng. LED-128 bao gồm 12 bước và mỗi bước gồm 4 vòng, tất cả là 48 vòng. Giữa các bước, khóa cho mỗi vòng được thêm vào bằng phép XOR. Mỗi vòng được thực hiện giống với cấu trúc AES (addConstants, SubCells, ShiftRows, MixColumnsSerial), nhưng cách thức thực hiện mỗi bước đã được tối ưu sao cho phù hợp với mã hạng nhẹ. Các phép toán của LED được thực hiện trong trường Galois 24 (GF (24)) với đa thức sinh sử dụng trong phép nhân là 𝑋4+ 𝑋 + 1.
Thuật toán LED chủ yếu tập trung vào việc cải thiện hiệu năng của thiết bị được cài đặt. Với thiết kế dựa trên nền tảng của thuật toán AES, cho phép hạn chế các Sbox hoạt động trong quá trình mã hóa. LED không sử dụng thuật toán sinh khóa, Thay vào đó, nó sử dụng 1 khóa giống nhau cho mỗi bước.
2.2.2. Thông số kỹ thuật và cách thiết kế thuật toán LED
a. Thông số kỹ thuật
LED là mã hạng nhẹ có hai trường hợp cơ bản là LED- 64 và LED-128 bit khóa các trạng thái được sắp xếp theo một ma trận (4x4) trong đó kích thước khối đại diện cho một phần tử GF(24) với đa thức cơ bản: X4+X+1
Mã LED sử dụng bảng Sbox, giá trị của Sbox được ký hiệu bằng hệ Hexan.
Bảng 2.4: Bảng Sbox cho LED [12]
x 0 1 2 3 4 5 6 7 8 9 A B C D E F
S(x) C 5 6 B 9 0 A D 3 E F 8 4 7 1 2 LED- 64 gồm 64 bit plantext, được chia thành 16 khối con (m0|| m1|| m2||….m14||m15), mỗi khối có giá trị 4 bit được bố trí trong một ma trận sau:
[ 𝑚0 𝑚1 𝑚2 𝑚3 𝑚4 𝑚5 𝑚6 𝑚7 𝑚8 𝑚9 𝑚10 𝑚11 𝑚12 𝑚13 𝑚14 𝑚015 ]
Đây là giá trị ban đầu của thuật toán mã hóa
con cũng có giá trị 4 bit được sắp xếp trong một ma trận sau: [ 𝑘0 𝑘1 𝑘2 𝑘3 𝑘4 𝑘5 𝑘6 𝑘7 𝑘8 𝑘9 𝑘10 𝑘11 𝑘12 𝑘13 𝑘14 𝑘15 ]
Quá trình mã hóa 1 khối của thuật toán mã hóa LED 64 được thực hiện qua 32 vòng, cứ cách 4 vòng lại cộng khóa một lần. Mỗi vòng sẽ được thực hiện 4 bước biến đổi: Addconstants, Subcell, ShiftRows, MixColumnsSerial.
c. Thiết kế thuật toán LED 64bit
Trên cơ sở lý thuyết của thuật toán LED đã được trình bày trong [12], tôi thực hiện thiết kế thuật toán LED để mã hóa và giải mã 64 bit.
Plain text AddRoundKey, K1 AddRoundKey, K2 AddRoundKey, K1 4 Rounds of Step1 Step2 Step3 Step4 Step8 Ciphertext AddRoundKey, K2 AddRoundKey, K1 AddRoundKey, K2 AddConstants SubCells ShiftRows MixColums
Hình 2.8: Thiết kế kiến trúc LED [13]
Đối với LED- 64bit ta thực hiện 8 bước, qua mỗi bước khóa K lại được thay đổi, ở mỗi bước ta thực hiện 4 vòng, tổng cộng tất cả là 32 vòng.
Mỗi vòng ta thực hiện các bước:
-Addconstants -Subcell -ShiftRows
-MixColumnsSerial
Hình 2.9: Các bước thực hiện cho 1 vòng LED [14]
2.2.3. Quá trình mã hóa LED 64
Sơ đồ khối của bộ mã hóa
Bộ mã hóa của thuật toán LED được thiết kế với các tín hiệu vào ra như hình, các tín hiệu vào ra được giải thích trong bảng.
clk rst start
key plaintext
Hình 2.10: Các tín hiệu vào ra bộ mã hóa
Mã hóa LED 64bit
done Ciphertext
64 64
Bảng 2.5: Giải thích các tín hiệu vào ra bộ mã hóa
STT Tín hiệu I/O Số bit Tích cực Mô tả
1 clk I 1 1 Xung đồng hồ của hệ thống
2 rst I 1 0 Tín hiệu đưa các giá trị về trạng thái ban đầu
3 start I 1 1 Tín hiệu bắt đầu quá trình mã hóa 4 key I 64 Khóa sử dụng trong mã hóa
5 Plaintext I 64 Bản rõ khối dữ liệu cần được mã hóa 6 Ciphertext O 64 Bản mã khối dữ liệu sau khi mã hóa 7 done O 1 1 Tín hiệu thông báo đã mã hóa xong
Quá trình mã hóa LED- 64 mỗi bản rõ 64 bit plantext, được chia thành 16 khối