2.3.2.1. Giới thiệu về mã hóa AES
Qua thời gian, có nhiều thuật toán mật mã khối khác nhau đƣợc đề xuất bởi cộng đồng khoa học mật mã nhƣ FEAL (-4, -8, -N, -NX), NewDES, LOKI91, Blowfísh, RC2, MMB, IDEA... Tuy nhiên, khá nhiều trong số đó đã bị phá giải hoặc chỉ ra có những điểm yếu nhất định. Hiện nay với tốc độ và khả năng xử lý của các bộ vi xử lý ngày càng đƣợc nâng cao, phƣơng pháp mã hóa chuẩn DES, Tri DES, Blowfish, IDEA đã trở nên không an toàn trong bảo mật thông tin. Vì thế cần nghiên cứu chuẩn mật mã đáp ứng đƣợc nhu cầu bảo mật thông tin, chuẩn mật mã nâng cao AES (Advanced Encryption Standard) ra đời.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Một chuẩn chung cần thiết phải có với các thuộc tính nhƣ:
1. Bảo mật ở mức cao
2. Thuật toán được đặc tả và công khai hoàn toàn, tức là tính bảo mật không được phép dựa trên những phần che giấu đặc biệt của thuật toán.
3. Việc cài đặt phải dễ dàng để đem lại tính kinh tế.
4. Phải mềm dẻo để áp dụng được cho muôn vàn nhu cầu ứng dụng.
AES đƣợc Viện Tiêu chuẩn và Công Nghệ Hoa Kỳ (National Institute of Standards and Technology - NIST) chính thức chọn thuật toán Rijndael làm Chuẩn mã hóa nâng cao (Advanced Encryption Standard - AES) năm 2000 sau khi qua nhiều vòng tuyển chọn. 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. Vì vậy khi nói thuật toán tiêu chuẩn mã hóa nâng cao thì ngầm hiểu là thuật toán mã hóa Rijndael.
Đây là thuật toán có tốc độ mã hóa nhanh và độ an toàn rất cao nên hoàn toàn có thể dùng để mã hóa các thông tin mật. "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" [10].
Đối với phép mã, đầu vào là khối rõ và khóa, đầu ra là bản mã. Đối với phép giải mã, đầu vào là khối mã và khóa, đầu ra là khối rõ. Các phép biến đổi của Rijndael thao tác trên một kết quả trung gian, đƣợc gọi là trạng thái. Trạng thái có thể đƣợc thể hiện nhƣ là một mảng chữ nhật các byte với 4 dòng. Số các cột trong trạng thái đƣợc ký hiệu bởi Nb và bằng độ dài khối chia cho 32 (đối với AES thì Nb bằng 4).
Đơn vị cơ bản để
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ n [n] trong n ị : 128 bit: 0 ≤ n < 16; 192 bit: 0 ≤ n < 24; 256 bit: 0 ≤ n < 32; ị 1 theo đị {b7, b6, b5, b4, b3, b2, b1, b0}. : b7x7 + b6x6 + b5x5 + b4x4 + b3x3 + b2x2 + b1x1 + b0x0 = ị 6 +x5 + x + 1. 2.3.2.2 Cấu trúc AES
Rijndael là một mã khối có khóa lặp: Nó bao gồm việc áp dụng lặp một ánh xạ vòng trên trạng thái. Số các vòng đƣợc ký hiệu bởi Nr và phụ thuộc vào độ dài khối và độ dài khóa.
Hình 7: Cấu trúc khóa AES
i i bix
7 0
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Add round key: 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 làm gia tăng tính rối này.
Sub bytes: Đây chính là quá trình phi tuyến của thuật toán, dùng chống lại hình thức tấn công known-plaintext là kiểu tấn công giải mã mà đối phƣơng có khả năng nắm đƣợc một số cặp văn bản nguồn và văn bản mã tƣơng ứng từ đó tìm ra quy luận khóa, tại đây mỗi.
Shift rows: Làm sáo trộn các byte theo từng dòng của bảng trạng thái, từ đó các cột ma trận trạng thái bị thay đổi.
Mix Columns: Khiến 128 bít trong kết quả đều phụ thuộc vào tất cả 128 bit ban đầu. Chính điều này tạo ra tính khuếch tán (diffusion).
Inverse sub, Inverse shift row, Inverse mix cols lần lƣợt là hàm ngƣợc của các hàm Sub bytes, Shift rows, Mix Columns.
Riêng hàm Add round key thì hàm ngƣợc cũng cho kết quả là chính nó[10].
Trong quá trình mã hóa AES Trong quá trình giải mã AES
Add round key Add round key
Sub bytes Inverse sub
Shift rows Inverse shift row Mix Columns Inverse mix cols
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
2.3.2.3
Hình 8:Sơ đồ thuật toán AES
Inverse shift row Inverse mix cols Add round key
Inverse sub bytes
Round 9
Bản rõ 128 bit
Add round key
Add round key Sub bytes Shift rows Mix Columns
Round 9
Bản mã 128 bit
Inverse shift row Add round key
Inverse sub bytes
Round 10
Bản rõ 128 bit
Add round key Inverse shift row Inverse mix cols Add round key
Inverse sub bytes Round 1 Bản mã 128 bit Expand key Key 128 bit w[0,3] w[4,7] w[36,39] w[40,43] Add round key
Sub bytes Shift rows Mix Columns
Round 1
Add round key Sub bytes Shift rows
Round 10
...
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
(Expansion Key)
Thủ tục sinh khóa đƣợc thực hiện trƣớc khi Mã hóa hay giải mã để tạo ra các khóa mới phục vụ cho từng bƣớc mã hóa/ giải mã. Đầu tiên
ban đầu ự khóa.
ữ .
word 4-byte đƣ [wi] 0 i < Nb(Nr+1).
Sự ƣ :
ExpansionKey(byte key[4*Nk], word w[Nb*(Nr+1)], Nk) begin word temp i = 0 while (i < Nk) w[i]=word(key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]) i = i+1 end while i = Nk while (i < Nb * (Nr+1)) temp = w[i-1] if (i mod Nk = 0)
temp=SubWord(RotWord(temp)) xor Rcon[i/Nk] else if (Nk > 6 and i mod Nk = 4)
temp = SubWord(temp) end if
end if
w[i] = w[i-Nk] xor temp i = i + 1
end while end [10,Tr20]
SubWord() - b
S -box lên input ƣ .
RotWord() [a0, a1, a2, a3] thực
[a1, a2, a3, a0 [i] chứ
ị ƣ [xi-1 i-1 (x
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ k đƣ ƣ - - ị k ƣ ự w[i-1] trƣ ự [i]. ị (SubWord()). T – k thì SubWord() sẽ đƣ [i-1] trƣ ự XOR bit. Quy trình mã hóa
Toàn bộ của phép mã hóa có thể mô tả nhƣ sau:
(1) S = AddRoundKey (C,Wnr) (2) For i = 1 to Nr-1 S = SubBytes (S) S= ShiftRows (S) S = MixColumns (S) S = AddRoundKey (S, Wi) (3) S = SubBytes (S), S = ShiftRows (S) (4) C = AddRoundKey (S, WNr) Quy trình giải mã
Quy trình giải mã đƣợc mô tả nhƣ sau:
(1) S = AddRoundKey (P,Wnr) (2) For i = Nr-1 downto 1
S = Inverseshiftrow(S) S= Inverse sub (S) S = Add round key(S)
S = Inverse mix cols(S, Wi)
(3) S = Inverseshiftrow(S), S = Inverse sub (S) (4) P = AddRoundKey (S, W0)
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ ương đương ƣ ứ tự ƣ ữ ƣơng đƣ ƣ ƣ . ƣơng đƣơng: () th () tƣơng đƣ ShiftRows() ngƣ – t :
InvMixColumns(state XOR Round Key) = InvMixColumns(state) XOR InvMixColumns(Round Key).
Đ
InvShiftRows() có . Thứ tự
ƣ ử InvMixColumns().
ƣơng đƣơng đƣ ự ƣ
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
ƣ .
ƣơng đƣ
ƣ . ƣơng đƣơng:
EqInvCipher(byte n[4*Nb], byte out[4*Nb], word dw[Nb*(Nr+1)]) begin
byte state[4,Nb] state = in
AddRoundKey(state, dw[Nr*Nb, (Nr+1)*Nb-1]) for round = Nr-1 step -1 downto 1
InvSubBytes(state) InvShiftRows(state) InvMixColumns(state)
AddRoundKey(state, dw[round*Nb, (round+1)*Nb-1]) end for InvSubBytes(state) InvShiftRows(state) AddRoundKey(state, dw[0, Nb-1]) out = state end[10,Tr21] ƣ : for i = 0 step 1 to (Nr+1)*Nb-1 dw[i] = w[i] end for
for round = 1 step 1 to Nr-1
InvMixColumns(dw[round*Nb, (round+1)*Nb-1]) end for
2.3.2.4. Đánh giá thuật toán AES
Ƣu điểm:
+ AES đã đƣợc chính phủ Mỹ tuyến bố là chuẩn mã hóa cao cấp, có độ an toàn cao, và đã đƣợc sử dụng thông tin mật;
+ AES có mô tả toán học đơn giản; + Cấu trúc rõ ràng đơn giản.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Nhƣợc điểm
+ AES không đủ an toàn đối với dạng tấn công kênh bên (side channel attack]). Kẻ tấn công không tấn công trực tiếp vào thuật toán mã hóa mà thay vào đó, tấn công lên các hệ thống thực hiện thuật toán có sơ hở làm lộ dữ liệu. + Cấu trúc toán học của 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;…
+ Sử dụng nhƣ một hàm băm; + Xây dựng các hàm băm;
2.3.3. Hệ mật mã khóa công khai RSA
Hệ mật RSA đƣợc xây dựng năm 1978 bởi ba tác giả Ron Rivest, Adi Shamir và Len Adleman. Hệ mật RSA đƣợc thiết kế làm việc trên trƣờng số ZN, dựa trên cơ sở độ khó giải của bài toán phân tích số nguyên N lớn thành các thừa số nguyên tố p và q khác nhau.
2.3.3.1. Bài toán phân tích số nguyên
Bài toán 2.1 (Bài toán phân tích số nguyên):
Cho một số nguyên dƣơng N, tìm các thừa số nguyên tố pi của N để N = p1 e1 . p2 e2 ...pk ek
, với pi là những số nguyên tố phân biệt và ei 1 là các số nguyên (với i = 1,..., k).
Ví dụ: Với N=18, ta có N=21
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Bài toán này khó giải khi N là một số nguyên lớn, có nhiều thuật toán để giải bài toán này. Nhƣng hiện nay vẫn chƣa có thuật toán nào hiệu quả để phân tích số nguyên N có khoảng 232 chữ số thập phân (768-bits) trở lên[4.tr93].
Bài toán 2.2 (Bài toán RSA):
Cho số nguyên dƣơng N, N=p*q với p và q là các số nguyên tố phân biệt, số nguyên e sao cho thỏa mãn gcd(e, (p - 1) * (q - 1)) = 1, và số nguyên c. Tìm một số nguyên m sao cho me ≡ c (mod N).
Bài toán RSA cũng có độ khó tƣơng tự nhƣ bài toán phân tích số nguyên, nhƣng nó dễ dàng đƣợc giải nếu nhƣ biết đƣợc hai số nguyên tố p và q[4.Tr94].
2.3.3.2. Định nghĩa các tập làm việc của hệ RSA
Tập các bản rõ (plaintext): P = ZN = {0, 1,…, N-1}. Tập các bản mã (ciphertext): C = ZN = {0, 1,…, N-1}.
Tập các khóa: K = {(N, p, q, e, d): N = p * q, e * d ≡1(mod φ(N))}
2.3.3.3. Quá trình tạo khoá, mã hoá và giải mã
a) Tạo khóa:
• Tạo hai số nguyên tố phân biệt p và q lớn, sao cho bài toán phân tích thật sự là khó giải (kích cỡ mỗi số khoảng 512 bits → 1024 bits).
• Tính N = p* q và φ(N) = (p - 1) * (q - 1).
• Chọn số nguyên ngẫu nhiên e sao cho 1 < e < φ(N) và gcd(e, φ(N)) = 1 • Sử dụng thuật toán Euclid mở rộng, để tính số nguyên d duy nhất, sao cho 0 < d < φ(N) và e * d ≡ 1 mod φ(N) (d là nghịch đảo của e modulo N)
• Hai số (e, N) làm khóa công khai, còn (d, N) làm khóa riêng. • Các số nguyên tố p, q sẽ bị xóa khi kết thúc quá trình tạo khóa.
b) Mã hóa:
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
• Lấy khóa công khai của ngƣời nhận B: (e, N).
• Biến đổi thông điệp M thành những số nguyên Mi tƣơng ứng sao cho Mi< N, (i = 1,…, k). Theo phép biến đổi sau:
- Biến đổi các ký tự trong thông điệp M thành các số nguyên tƣơng ứng, thí dụ theo qui tắc: Dấu cách ↔ 00, A ↔ 01, B ↔ 02,..., Z ↔ 26.
- Chia thông điệp vừa biến đổi thành k nhóm có chiều dài bằng nhau, mỗi nhóm biểu diễn một số nguyên Mi ∈{0,…, N - 1} (với 1 ≤ i ≤ k).
• Thực hiện mã hóa lần lƣợt cho từng số Mi → Ci bằng cách: Ci = Eke(Mi) = Mie (mod N).
Tập các số nguyên {C1, C2,...,Ck} là bản mã để gửi đến ngƣời nhận B.
c) Giải mã:
Ngƣời nhận B thực hiện các bƣớc sau:
• Thực hiện giải mã lần lƣợt từng số nguyên Ci → Mi bằng cách: Mi = D(Ci) = Ci
d
(mod N) với 0 ≤ Mi < N, (d là khoá bí mật của B). • Thực hiện phép biến đổi ngƣợc lại từ các số Mi thành các chuỗi ký tự tƣơng ứng để khôi phục lại nội dung thông điệp M ban đầu.
Các bƣớc tạo khóa, mã hóa, giải mã có thể tóm tắt nhƣ sau
Tạo khoá: Tạo 2 số nguyên tố lớn p và q * Tính N = p * q và Tính φ(N) = (p-1) * (q-1). * Chọn 1< e < φ(N): gcd(φ(N), e) = 1.
* Tính d = e-1 mod φ(N) (dùng thuật toán Euclid mở rộng). Khóa công khai: (e, N) Khóa riêng: (d, N)
Mã hóa: Khối bản rõ M < N * Tính: C = Me mod N
* Gửi khối bản mã (số nguyên) C đến ngƣời nhận
Giải mã: Khối bản mã C < N * Tính: M = Cd mod N
* Khôi phục lại khối bản rõ (số nguyên) M ban đầu
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
2.3.3.4. Tính đúng của quá trình giải mã
Từ: ed ≡ 1mod φ(N) ⇒ φ(N) | (ed - 1). ⇔ φ(pq)| (ed - 1)
⇔ φ(p) * φ(q) | (ed - 1) (do p, q là các số nguyên tố)
⇔ φ(p) | (ed - 1) (1)
và φ(q) | (ed - 1) (2)
Từ (1) ⇒ ∃ k ∈ Z: ed -1= k φ(p) = k (p-1) (p là số nguyên tố) (3)
Xét trƣờng hợp tổng quát với mọi số M ∈ Zn , khi nâng lũy thừa ed ta có:
Med ≡ M(ed -1) + 1 (mod p)
⇔ Med ≡ (M(ed-1))*M(mod p) (4) Từ (3) & (4) ⇒ Med ≡ (Mk(p - 1)) * M (mod p) (5) Vì p là số nguyên tố, vậy bất kỳ số M ∈ Zn có hai trƣờng hợp: M nguyên tố cùng nhau với p (nghĩa là gcd(M, p) = 1)
hoặc M là bội số của p (nghĩa là gcd(M, p) = p). • Trƣờng hợp 1: gcd (M, p) = 1
Vậy ⇒ Mp-1 ≡ 1 (mod p) (theo định lý Fermat) Từ: (5) ⇒ Med ≡ (1)k M (mod p)
⇒ Med ≡ M (mod p) (6)
• Trƣờng hợp 2: Nếu gcd(M, p) = p ⇒ M ≡ 0 (mod p). Đồng thời lũy thừa số M lên một số nguyên bất kỳ, thì cũng chia hết cho p. Nghĩa là Med ≡ 0 (mod p). Vậy trƣờng hợp 2 cũng thỏa mãn phƣơng trình (6)
Với cách tính tƣơng tự với q, từ (2) ⇒ Med ≡ M (mod q)(7) Từ (6) & (7) ⇒ Med ≡ M (mod pq) ≡ M (mod N).
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Ví dụ 2.1: Minh họa của hệ mật mã RSA a) Tạo khóa:
Chọn p và q là những số nguyên tố nhỏ với mục đích minh họa • Chọn hai số nguyên tố p = 13, q = 17;
• Tính N = 13 * 17 = 221 và φ(N) = (13- 1) * (17-1) = 192 • Chọn e = 5 thỏa mãn gcd(e, φ(N)) = gcd(192, 5) = 1;
• Tím phần tử nghịch đảo d = 77 (dùng thuật toán Euclid mở rộng) ; • Công bố khóa công khai là cặp số ( e = 5, N = 221), số (d = 77, N = 221) đƣợc giữ làm khóa riêng.
b) Mã hóa: Giả sử nội dung cần mã hoá là M= “VINH PHUC ” • Biến đổi các kƣ tự của thông điệp thành các số tƣơng ứng nhƣ sau:
V I N H ⎵ P H U C
22 09 14 08 00 16 08 21 03
• Chia thông điệp thành 9 khối, mỗi khối gồm 2 chữ số biểu diễn một số nguyên Mi < N, với Mi∈ {22;09;14;08;00;16;08;21;03}.
• Mã hóa lần lƣợt từng số Mi: Ci = Mi 5
( mod 221) Mã hóa số đầu tiên M1 = 22 theo cách tính (8) ta có: C1 = M15 mod 221 ≡ 225 mod 221 = 133.
Tiếp tục tính các số C2 ,...,C9 từ các số M2 ,..., M9 theo (8). Ta có đƣợc kết quả ở cột Ci là bản mã để gửi đến ngƣời nhận:
Khối 1 2 3 4 5 6 7 8 9 Mi 22 09 14 08 00 16 08 21 03 Ci=E(Mi) 133 42 131 60 0 152 60 21 22 c) Giải mã: • Thực hiện giải mã lần lƣợt từng số ở cột Ci (1≤ i ≤ 9) Mi = Ci77 ( mod 221) (9)
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Giải mã số đầu tiên C1 = 133 theo cách tính (9) ta có: M1 = C177 mod 221 = 13377 mod 221 = 22
Tiếp tục tính các số M2,..., M9 từ các số C2,...,C9 theo (9) ta có bảng minh họa các số Mi đƣợc giải mã từ các số Ci nhƣ sau:
Khối 1 2 3 4 5 6 7 8 9
Ci=E(Mi) 133 42 131 60 0 152 60 21 22
Mi 22 09 14 08 00 16 08 21 03
• Thực hiện phép biến đổi ngƣợc từ các số Mi thành các chuỗi ký tự tƣơng ứng để khôi phục lại thông điệp gốc ban đầu M = "VINH PHUC".
2.3.3.5. Đánh giá hệ mật mã khóa công khai RSA
a) Độ an toàn
Hệ RSA đƣợc thiết kế dựa trên độ khó giải bài toán phân tích ra thừa số nguyên tố. Hầu hết các phƣơng pháp thám mã hệ RSA nhƣ tìm các thừa số p và q, tìm φ(n), hay tìm khóa riêng d… đều khó nhƣ bài toán phân tích.
Việc phân tích số nguyên N thành các thừa số nguyên tố p, q nhằm mục đích bẻ gãy hệ mật mã RSA là điều khó có thể tính toán nổi, nếu nhƣ trong quá trình thiết kế hệ RSA ta chọn số nguyên N lớn. Tuy nhiên, độ dài của số nguyên N là lớn hay nhỏ còn phụ thuộc vào mối liên hệ giữa tốc độ giải mã và độ an toàn của hệ RSA. Số N sử dụng cho modulo RSA hiện nay phải có ít nhất khoảng 232 chữ số thập phân (768-bits) sẽ cho ta một độ an toàn đủ để chống lại những tấn công sử dụng các kỹ thuật phân tích hiện nay. Trong thực tế, nếu trong quá trình thiết kế sử dụng số N có kích cỡ khoảng 1024-bits là rất an toàn, có thể chống lại các kỹ thuật phân tích hiện tại và các