1.2.1.2. Cấu trúc mật mã theo mô hình Feistel
Mô hình mã Feistel là một dạng tiếp cận khác so với mạng SPN. Mô hình Feistel [14] do Horst Feistel đề xuất, cũng là sự kết hợp các phép thay thế và hoán vị. Trong
hệ mã Feistel, bản rõ P sẽ được biến đổi qua một số vòng để cho ra bản mã cuối cùng. Khi thực hiện mã hóa, bản rõ P và các bản mã Ci được chia thành nửa trái (Left – L) và nửa phải (Right – R):
𝑃 = (𝐿0, 𝑅0) (1.1)
𝐶𝑖 = (𝐿𝑖, 𝑅𝑖) 𝑣ớ𝑖 𝑖 = 1,2, … … . 𝑛 (1.2) Quy tắc biến đổi các nửa trái phải này qua các vòng được thực hiện như sau:
𝐿𝑖 = 𝑅𝑖−1 (1.3)
𝑅𝑖 = 𝐿𝑖−1⨁𝐹(𝑅𝑖−1, 𝐾𝑖) (1.4)
Với Ki là một khóa con cho vòng thứ i. Khóa con này được sinh ra từ khóa K ban đầu theo một thuật toán sinh khóa con (key schedule). F là một hàm mã hóa dùng chung cho tất cả các vòng. Hàm F đóng vai trò như là phép thay thế còn việc hoán đổi các nửa trái phải có vai trò hoán vị. Bản mã C được tính từ kết xuất của vòng cuối cùng:
(1.5) Sơ đồ mã hóa và giải mã theo mô hình Feistel được thể hiện trong hình 1.6:
L0 F F K0 Kn R0 F K1 Rn+1 Ln+1 Bản rõ Bản mã
Quá trình mã hóa Quá trình giải mã Bản rõ Rn+1 F F Kn K0 Ln+1 F L0 R0 Bản mã Kn-1
Hình 1.6: Mô hình mã khối Feistel [4]
Để giải mã quá trình được thực hiện qua các vòng theo thứ tự ngược lại: 𝐶 → 𝐿𝑛, 𝑅𝑛 (1.6) 𝑅𝑖−1 = 𝐿𝑖 (𝑡ℎ𝑒𝑜 𝑚ã ℎó𝑎 𝐿𝑖 = 𝑅𝑖−1) (1.7) 𝑳𝒊−𝟏 = 𝑹𝒊⨁𝑭(𝑹𝒊−𝟏, 𝑲𝒊) (𝒕𝒉𝒆𝒐 𝒎ã 𝒉ó𝒂 𝑹𝒊 = 𝑳𝒊−𝟏⨁𝑭(𝑹𝒊−𝟏, 𝑲𝒊)) (1.8) Và cuối cùng bản rõ là: 𝑃 = (𝐿0, 𝑅0) (1.9)
Hệ mã Feistel có điểm quan trọng là việc chia các bản mã thành hai nửa trái phải giúp cho hàm F không cần khả nghịch (không cần có F-1). Mã hóa và giải mã đều dùng chiều thuận của hàm F. Hàm F và thuật toán sinh khóa con càng phức tạp thì càng khó phá mã.
Ứng với các hàm F và thuật toán sinh khóa con khác nhau thì ta sẽ có các phương pháp mã hóa khác nhau…
1.2.2. Mã DES
DES (viết tắt của Data Encryption Standard, hay Tiêu chuẩn Mã hóa Dữ liệu) [5] là một phương pháp mật mã hóa được FIPS (Tiêu chuẩn Xử lý Thông tin Liên bang Hoa Kỳ) chọn làm chuẩn chính thức vào năm 1976. Sau đó chuẩn này được sử dụng rộng rãi trên phạm vi thế giới. Mã DES là một phương pháp mã hóa dựa trên nguyên tắc của hệ mã Feistel.
Ngay từ đầu, thuật toán của nó đã gây ra rất nhiều tranh cãi, do nó bao gồm các thành phần thiết kế mật, độ dài khóa tương đối ngắn, và các nghi ngờ về cửa sau để Cơ quan An ninh quốc gia Hoa Kỳ (NSA) có thể bẻ khóa. Do đó, DES đã được giới nghiên cứu xem xét rất kỹ lưỡng, việc này đã thúc đẩy hiểu biết hiện đại về mật mã khối (block cipher) và các phương pháp thám mã tương ứng.
Hiện nay DES được xem là không đủ an toàn cho nhiều ứng dụng. Nguyên nhân chủ yếu là độ dài 56 bit của khóa là quá nhỏ. Khóa DES đã từng bị phá trong vòng chưa đầy 24 giờ. Đã có rất nhiều kết quả phân tích cho thấy những điểm yếu về mặt lý thuyết của mã hóa có thể dẫn đến phá khóa, tuy chúng không khả thi trong thực tiễn.
DES là thuật toán mã hóa khối: Nó xử lý từng khối thông tin của bản rõ có độ dài xác định và biến đổi theo những quá trình phức tạp để trở thành khối thông tin của bản mã có độ dài không thay đổi. Trong trường hợp của DES, độ dài mỗi khối là 64 bit. DES cũng sử dụng khóa để cá biệt hóa quá trình chuyển đổi. Nhờ vậy, chỉ khi biết khóa mới có thể giải mã được văn bản mã. Khóa dùng trong DES có độ dài toàn bộ là 64 bit. Tuy nhiên chỉ có 56 bit thực sự được sử dụng; 8 bit còn lại chỉ dùng cho việc kiểm tra. Vì thế, độ dài thực tế của khóa chỉ là 56 bit.
1.2.2.1. Cấu trúc tổng thể của thuật toán
Hình 1.7: Cấu trúc tổng thể thuật toán DES [5]
Thuật toán DES có 16 chu trình giống nhau trong quá trình xử lý. Ngoài ra còn có hai lần hoán vị đầu và cuối (Initial and final permutation - IP & FP). Hai quá trình này có tính chất đối nhau (Trong quá trình mã hóa thì IP trước FP, khi giải mã thì ngược lại). IP và FP không có vai trò xét về mật mã học và việc sử dụng chúng chỉ có ý nghĩa đáp ứng cho quá trình đưa thông tin vào và lấy thông tin ra từ các khối phần cứng có từ thập niên 1970. Trước khi đi vào 16 chu trình chính, khối thông tin 64 bit được tách làm hai phần 32 bit và mỗi phần sẽ được xử lý tuần tự (quá trình này còn
Cấu trúc của thuật toán (mạng Feistel) đảm bảo rằng quá trình mã hóa và giải mã diễn ra tương tự. Điểm khác nhau chỉ ở chỗ các khóa con được sử dụng theo trình tự ngược nhau. Điều này giúp cho việc thực hiện thuật toán trở nên đơn giản, đặc biệt là khi thực hiện bằng phần cứng.
1.2.2.2. Hàm Feistel (F)
Hàm F, như được miêu tả ở Hình 1.8 :
Hình 1.8: Hàm F dùng trong DES [5]
Hoạt động trên khối 32 bit và bao gồm bốn giai đoạn:
Mở rộng: 32 bit đầu vào được mở rộng thành 48 bit sử dụng thuật toán hoán vị mở rộng (expansion permutation) với việc nhân đôi một số bit. Giai đoạn này được ký hiệu là E trong sơ đồ.
Trộn khóa: 48 bit thu được sau quá trình mở rộng được XOR với khóa con. Mười sáu khóa con 48 bit được tạo ra từ khóa chính 56 bit theo một chu trình tạo khóa con (key schedule)
Thay thế: 48 bit sau khi trộn được chia làm 8 khối con 6 bit và được xử lý qua hộp thay thế S-box. Đầu ra của mỗi khối 6 bit là một khối 4 bit theo một chuyển đổi phi tuyến được thực hiện bằng một bảng tra. Khối S-box đảm bảo phần quan trọng cho độ an toàn của DES. Nếu không có S-box thì quá trình sẽ là tuyến tính và việc thám mã sẽ rất đơn giản.
Hoán vị: Cuối cùng, 32 bit thu được sau S-box sẽ được sắp xếp lại theo một thứ tự cho trước (còn gọi là P-box).
1.2.2.3. Quá trình tạo khóa con
Hình 1.9: Quá trình tạo khóa con trong DES [5]
Đầu tiên, từ 64 bit ban đầu của khóa, 56 bit được chọn (Permuted Choice 1, hay PC-1); 8 bit còn lại bị loại bỏ. 56 bit thu được được chia làm hai phần bằng nhau, mỗi phần được xử lý độc lập. Sau mỗi chu trình, mỗi phần được dịch đi 1 hoặc 2 bit (tùy thuộc từng chu trình, nêu đó là chu trình 1, 2, 9, 16 thì đó là dịch 1bit, còn lại thì sẽ được dich 2bit). Các khóa con 48 bit được tạo thành bởi thuật toán lựa chọn 2 (Permuted Choice 2, hay PC-2) gồm 24 bit từ mỗi phần. Quá trình dịch bit (được ký
hiệu là "<<<" trong sơ đồ) khiến cho các khóa con sử dụng các bit khác nhau của khóa chính; mỗi bit được sử dụng trung bình ở 14 trong tổng số 16 khóa con.
Quá trình tạo khóa con khi thực hiện giải mã cũng diễn ra tương tự nhưng các khóa con được tạo theo thứ tự ngược lại. Ngoài ra sau mỗi chu trình, khóa sẽ được dịch phải thay vì dịch trái như khi mã hóa.
Ưu và nhược điểm của thuật toán DES
Thuật toán DES có ưu điểm là mã hóa nhanh phù hợp với những ứng dụng chỉ cần bảo mật trong thời gian ngắn. Chính vì vậy ngày nay đối với nhiều ứng dụng đòi hỏi tính bảo mật phải thực hiện liên tục thì DES không đủ an toàn cho những ứng dụng đó, với độ dài 56 bit của khóa là quá nhỏ nên dễ bị tấn công và phá mã.
Một ứng dụng rất quan trọng của DES là ứng dụng cho các văn bản trong giao dịch ngân hàng sử dụng các tiêu chuẩn được hiệp hội các ngân hang Mỹ phát triển. DES được sử dụng để mã hoá các số nhận dạng cá nhân (Pins) và các văn bản về tài khoản được máy thu ngân tự động thực hiện (ATM)…
1.2.3. Mã hóa AES
1.2.3.1. Giới thiệu về AES
Trong mật mã học, AES (viết tắt của từ tiếng Anh: Advanced Encryption Standard, hay Tiêu chuẩn mã hóa tiên tiến) [6] là một thuật toá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 công nghệ và tiêu chuẩn quốc gia Hoa Kỳ (NIST) sau một quá trình tiêu chuẩn hóa kéo dài 5 năm Thuật toán được thiết kế bởi hai nhà mật mã học người Bỉ: Joan Daemen và Vincent Rijmen. Thuật toán được đặt tên là "Rijndael" khi tham gia cuộc thi thiết kế AES. Rijndael được phát âm là "Rhine dahl" theo phiên âm quốc tế.
Quá trình phát triển
Thuật toán được dựa trên bản thiết kế Square có trước đó của Daemen và Rijmen; còn Square lại được thiết kế dựa trên Shark.
Khác với với DES sử dụng mạng Feistel, Rijndael sử dụng mạng thay thế-hoán vị. AES có thể dễ dàng thực hiện với tốc độ cao bằng phần mềm hoặc phần cứng và
không đòi hỏi nhiều bộ nhớ. Do AES là một tiêu chuẩn mã hóa mới, nó đang được triển khai sử dụng đại trà.
Mô tả bài toán
Mặc dù 2 tên AES và Rijndael vẫn thường được gọi thay thế cho nhau nhưng trên thực tế thì 2 thuật toán không hoàn toàn giống nhau. AES chỉ làm việc với các khối dữ liệu (đầu vào và đầu ra) 128 bít và khóa có độ dài 128, 192 hoặc 256 bít trong khi Rijndael có thể làm việc với dữ liệu và khóa có độ dài bất kỳ là bội số của 32 bít nằm trong khoảng từ 128 tới 256 bít. Các khóa con sử dụng trong các chu trình được tạo ra bởi quá trình tạo khóa con Rijndael. Mỗi khóa con cũng là một cột gồm 4 byte. Hầu hết các phép toán trong thuật toán AES đều thực hiện trong một trường hữu hạn của các byte. Mỗi khối dữ liệu 128 bit đầu vào được chia thành 16 byte (mỗi byte 8 bit), có thể xếp thành 4 cột, mỗi cột 4 phần tử hay là một ma trận 4x4 của các byte, nó được gọi là ma trận trạng thái, hay vắn tắt là trạng thái (tiếng Anh: state, trang thái trong Rijndael có thể có thêm cột). Trong quá trình thực hiện thuật toán các toán tử tác động để biến đổi ma trận trạng thái này.
1.2.3.2. Nguyên tắc
Mã hóa AES sử dụng dữ liệu đầu vào và key là hệ Hex, vì thế bản rõ và key phải được chuyển đổi từ hệ ASCII sang hệ Hex.
Tùy thuộc vào độ dài của key khi sử dụng 128 bit, 196 bit và 256 bit mà AES có các cách mã hóa với số lần lặp khác nhau. Độ dài khóa AES được thể hiện trong bảng 1.1:
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-