Thông số AES-128 AES-192 AES-256
Chiều dài khóa (bit) 128 192 256
Kích thước khối (bit) 128 128 128
Số vòng mã (vòng) 10 12 14
Chiều dài khóa phụ (bit) 128 128 128
Chiều dài khóa mở rộng (bit) 176 208 240
Cơ sở toán học và nguyên lý làm việc của AES:
Cấu trúc cơ sở và nguyên lý làm việc của thuật toán AES bao gồm bốn giai đoạn tạo nên một vòng lặp với 10 lần lặp đối với AES 128, 12 lần vớ- i AES-192 và 14 lần cho AES- 256, như được mô tả trong Hình 1.4.
14
Trong đó:
- Giai đoạn 1: Biếnđổi “SubBytes” là biến đổi các byte trong khối trạng thái bằng cách sử dụng một bảng thay thế byte phi tuyến S-box.
- Giai đoạn 2: Biến đổi “ShiftRows” là dịch chuyển quay vòng (hoán vị) các byte trong một khối.
- Giai đoạn 3: Biến đổi “MixColumns” là biến đổi tất cả các cột thành các cột mới bằng cách nhân cột đó với một đa thức cố định.
- Giai đoạn 4: Biến đổi “AddRoundkey” là phép XOR từng bit của khối trạng thái với Roundkey.
Thuật toán AES sử dụng mạng thay thế và hoán vị. 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, 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, và nó được gọi là ma trận trạng thái (State). 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. AES sử dụng quá
trình tạo khóa con để mở rộng khóa từ khóa chính cho các vòng trong quá trình thực hiện
mã hóa. Mỗi khóa con cũng là một cột gồm 4 byte. AES có thể dễ dàng thực hiện tốc độ ở
cao bằng phần cứng hoặc bằng phần mềm à không đòi hỏi tốn nhiều bộ nhớ.m
Độ phức tạp của AES:
Về các nguyên lý thiết kế mật mã khối, người ta đã ghi nhận hai nguyên tắc cơ sở sau để có độ bảo mật cao, đó là việc tạo ra tính hỗn loạn và tính khuếch tán.
Tính hỗn loạn (Confusion): Sự phụ thuộc của bản mã đối với bản rõ phải thực sự phức tạp để gây rắc rối, cảm giác hỗn loạn đối với kẻ tấn công có ý định phân tích tìm qui luật để phá mã. Có nghĩa là quan hệ hàm số của bản mã và bản rõ là phi tuyến (non-linear).
Trong thuật toán AES, tính hỗn loạn này được thể hiện bằng việc thực hiện phép thay thế với bảng S-box.
Tính khuếch tán (Diffusion): Sự khuếch tán những mẫu văn bản mang đặc tính thống kê (gây ra do dư thừa của ngôn ngữ) lẫn vào toàn bộ văn bản. Nhờ đó tạo ra khó khăn cho kẻ tấn công trong việc dò phá mã trên cơ sở thống kê các mẫu lặp lại cao. Sự thay đổi của một bit trong một bản rõ phải dẫn tới sự thay đổi hoàn toàn trong bản mã tạo ra.
Một cách đơn giản nhất, tính hỗn loạn có thể được thực hiện bằng phép thay thế (substitution) trong khi tính khuếch tán được tạo ra bằng các phép chuyển đổi chỗ hay hoán vị. Toàn bộ sơ đồ biến đổi mật mã sẽ là một lưới các biến đổi thay thế hoán vị.-
Độ an toàn của AES:
Theo số liệu trong Bảng 1.2 ta thấy, thiết kế AES với các chiều dài khóa là 128, 192 hoặc 256 bit mang đến cho thuật toán này một độ an toàn rất cao đối với các tấn công và khả năng tính toán của máy tính hiện nay.
15
Phương pháp thường dùng nhất để tấn công các dạng mã hóa khối là thử các kiểu tấn công lên phiên bản có số vòng thu gọn. Đối với khóa 128, 192 và 256 bit, AES có tương ứng 10, 12 và 14 vòng. Tại thời điểm năm 2006, những tấn công thành công được biết đến
là 7 vòng đối với khóa 128 bit, 8 vòng với khóa 192 bit và 9 vòng với khóa 256 bit.
Các cuộc tấn công phục hồi khóa đầu tiên trên các AES đầy đủ là do Andrey Bogdanov và cộng sự đưa ra và xuất bản vào năm 2011 [ ] T50 . ấn công này là một dạng tấn
công Biclique và nhanh hơn bốn lần so với tấn công vét cạn. Nó đòi hỏi 2126,1 tính toán
phức tạp để phục hồi một khoá AES-128. Với AES-192 và AES-256, thì cần tương ứng
2189,7 và 2254,4tính toán phức tạp.
Như vậy, "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 (secret). Các thông tin TUYỆT MẬT (top secret) sẽ phải dùng khóa 192 hoặc 256 bit” [ ]. 51
Vấn đề còn lại của thuật toán AES là vấn đề lưu trữ và trao đổi khóa bí mật. Mỗi khi cần trao đổi khóa qua mạng thì yêu cầu một đường truyền bảo mật được thiết lập (Hình
1.5) hoặc phải áp dụng một cơ chế an toàn để trao đổi khóa trên đường truyền thông, ví dụ giao thức rao đổi khóa Diffie– t Hellman [ ]. 37
Hình 1.5 Mô hình mã hóa khóa bí mật
1.1.3.4. Thuật toán mã hóa khóa công khai RSA
Mã hóa đối xứng dù rằng đã phát triển từ cổ điển đến hiện đại, vẫn tồn tại hai điểm yếu sau:
Vấn đề trao đổi khóa giữa người gửi và người nhận:Cần phải có một kênh an toàn để trao đổi khóa sao cho khóa phải được giữ bí mật chỉ có người gửi và người nhận biết. Việc thiết lập một kênh an toàn như vậy sẽ tốn kém về mặt chi phí và chậm trễ về mặt thời gian. Điều này tỏ ra không hợp lý khi mà ngày nay khối lượng thông tin luân chuyển trên khắp thế giới là rất lớn. Vì vậy cần một giải pháp an toàn, nhanh gọn, rẻ tiền và tận dụng hạ tầng mạng Internet có sẵn.
Tính chịu trách nhiệm về khóa:không có cơ sở quy trách nhiệm nếu khóa bị tiết lộ. Vào năm 1976 Whitfield Diffie và Martin Hellman đã tìm ra một phương pháp mã mật
16
mã hóa bất đối xứng, xem Hình 1.6. Đây có thể xem là một bước đột phá quan trọng nhất trong lĩnh vực mã mật.
Hình 1.6 Mô hình mã hóa khóa công khai: a)Ứng dụng trong xác thực; b) Ứng dụng trong bảo mật.
Thuật toán mã hóa RSA [ ] 42 là một thuật toán điển hình về mã hóa khóa công khai.
RSA được xây dựng bởi các tác giả Ron Rivest, Adi Shamir và Len Adleman tại học viện MIT vào năm 1977 Cũng như các thuật toán mã. hóa công khai khác, nguyên lý của RSA dựa chủ yếu trên lý thuyết số chứ không dựa trên các thao tác xử lý bit.
RSA là một thuật toán mật mã khối, kích thước khối thông thường là 1024 hoặc 2048 bit. Thông tin gốc của RSA được xử lý như các số nguyên. Ví dụ, khi chọn kích thước khối của thuật toán là 1024 bit thì thuật toán xử lý các số nguyên có giá trị từ 0 đến
21024 – 1, tương đương với số thập phân có 309 chữ số. Chú ý rằng đây là những số nguyên cực lớn, không thể xử lý được bằng cách sử dụng các cấu trúc dữ liệu có sẵn của các ngôn ngữ lập trình phổ biến.
Cơ sở lý thuyết của thuật toán RSA dựa trên lý thuyết về số nguyên tố, phép toán modulo và định lý Euler.
Nguyên lý làm việc của thuật toán RSA:
Tạo khóa: 1) Chọn hai số nguyên tố đủ lớn p và qvà gọi Nlà tích của chúng, N = pq. 2) Chọn một số e sao cho và = e n (p- )(q- )1 1 là hai số nguyên tố cùng nhau.
Sau đó tìm số d sao cho e.d = mod n.1 Ký hiệu mod n là biểu diễn phép modulo trên cơ số n.
17
+ Khóa công khai (public key) là tổ hợp (N, e)
+ Khóa bí mật (private key) là tổ hợp (N, d)
Mã hóa: Việc mã hóa một khối thông tin gốc Mđược thực hiện theo công thức:
+ C = Me mod N Ứng với trường hợp bảo mật
+ C = Md mod N Ứng với trường hợp xác thực
Giải mã: Quá trình giải mã Cđược thực hiện theo ơng ứngtư ngược lại: + M = Cd mod N
+ M = Ce mod N Độ phức tạp của thuật toán RSA:
Có hai vấn đề về độ phức tạp tính toán trong thuật toán RSA. Đó là các phép tính mã hóa/giải mã và các phép tính sinh khóa.
Phép tính mã hóa và giải mã dùng phép lũy thừa modulo. Nếu thực hiện bằng cách tính phép lũythừa trước sau rút đó gọn modulo, thì giá trị của phép lũy thừa là quá lớn để có thể lưu trữ và tính toán. Tuy nhiên phép modulo có một tính chất sau:
a x b a mod n x b mod n mod n (1.3)
Chúng ta có thể sử dụng tính chất này để đơn giản phép tính lũy thừa modulo thông qua một phương pháp gọi là “bình phương liên tiếp”. Ví dụ cần tính x16mod n, đầu tiên sẽ
tính a= x mod n, tiếp theo là b= x2 mod n= a2 mod n, tiếp theo là c = x4mod n= b2mod n, tiếp theo là d x = 8mod n= c2 mod n, và cuối cùng x16mod n= d2mod n. Các số a, , , b c d luôn nhỏ hơn do đó tránh được việc tính số lũy thừa lớn đồng thời nâng cao tốc độ tính n
toán.
Phép tính sinh khóalà chọn p và q nguyên tố để tính . Để phân tích số N thành tích N hai thừa số nguyên tố p, q, chỉ có một cách duy nhất là thử từng số p và q. Do đó phải chọn p q, đủ lớn để việc thử là không khả thi. Hiện nay chưa có phương pháp nào để sinh ra số nguyên tố lớn tùy ý. Chỉ có cách là chọn một số lẻ ngẫu nhiên nào đó và kiểm tra số đó có phải là số nguyên tố không. Việc kiểm tra tính nguyên tố cũng gặp nhiều khó khăn. Thuật toán kiểm tra số nguyên tố hiệu quả hiện nay là thuật toán Miller-Rabin, dù rằng không hoàn toàn chính xác 100%, tuy nhiên có thể đạt sai số nhỏ không đáng kể.
Chúng ta thường chọn trước e là 65537 hoặc 3 hoặc 17, vì các số này khi biểu diễn ở dạng nhị phân chỉ có hai chữ số 1, nên khi thực hiện lệnh lũy thừa sẽ giảm đi lệnh nhân. Ta
cần kiểm tra xem có nguyên tố cùng nhau vớie = ( -1)( 1) n p q- hay không. Nếu không ta phải thử lại với cặp số p và q khác. Sau khi đã có và p qthích hợp, cần tìm d sao cho e.d 1 mod n. Bằng cách dùng thuật toán Euclid mở rộng, chúng ta có thể kết hợp việc kiểm tra tính nguyên tố cùng nhau của e và n, đồng thời nếu nguyên tố cùng nhau với thì thuật e n toán cũng cho biết . Vì vậy không cần tiến hành bước tìm d d riêng.
18
Độ an toàn của thuật toán RSA:
Độ an toàn của thuật toán RSA dựa trên độ khó của bài toán phân tích một số thành nhân tử. Việc đo lường tính bảo mật của RSA đã trình bày trong [ ]52 , Kefa Rabah chỉ ra rằng vào năm 1994 để phân tích số thập phân N có129 số (tương ứng số nhị phân 426 bit)
thành tích hai thừa số nguyên tố lớn cùng nhau phải cần 5.000 MIPS-year (một MIPS-year
bằng một năm hoạt động liên tục của máy tính có tốc độ thực hiện một triệu lệnh trong một
giây), tương đương việc sử dụng thời gian nhàn rỗi của 600 máy tính trên toàn thế giới 1.
trong thời gian tám tháng. Điều này cho thấy với N lớn thì việc tìm khóa của thuật toán
RSA vô cùng khó khăn. Khi sử dụng thuật toán mã hóa RSA để mã hóa khóa bí mật chiều , dài khóa 512 đến 1024 bit là cần thiết, và để bảo vệ các giao dịch giá trị rất cao thì sử dụng
khóa dài trên 1024 bit.