CHƯƠNG 2: BẢO VỆ THÔNG TIN TRONG ĐIỆN TOÁN ĐÁM MÂY 2.1 Khái niệm an ninh thông tin
2.5 Các thuật toán mã hóa dữ liệu lưu trữ cho điện toán đám mây
Các thuật toán mã hóa cần phải đáp ứng một số yêu cầu về tính hiệu quả trong việc chuyển đổi bản rõ thành bản mã cũng như trong giải mã và bản mã phải chịu được các cuộc tấn công.
Dưới đây, luận văn sẽ giới thiệu hai thuật toán mã hóa thường sử dụng trong điện toán đám mây là thuật toán mã hóa RSA và AES. Trong đó, AES là thuật toán mã hóa cho đến nay được sử dụng phổ biến nhất trong lĩnh vực bảo vệ dữ liệu điện toán đám mây.
2.5.1 Thuật toán RSA 2.5.1.1 Mô tả thuật toán
Hệ mật RSA được phát minh bởi Ron Rivest, Adi Shamir và Len Adleman và được Scientific American công bố lần đầu tiên vào năm 1977 [7].
Hệ mật RSA được sử dụng để bảo mật và đảm bảo tính xác thực của dữ liệu số. Hiện nay RSA được sử dụng trong hệ thống thương mại điện tử, các dịch vụ web server và web browser. RSA còn được sử dụng để đảm bảo tính xác thực vào bảo mật của email, đảm bảo an toàn cho các phiên truy cập từ xa và là bộ phận quan trọng của hệ thống thanh toán thẻ tín dụng. Như vậy ta có thể thấy rằng RSA thường được sử dụng trong các ứng dụng cần đảm bảo sự an toàn và bảo mật dữ liệu số cao.
Hệ mật RSA bao gồm bộ P,C,K,D,E. Trong đó:
1. P là tập các bản rõ.
2. C là tập các bản ký tự mã.
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn
3. K là tập các khóa k, mỗi khóa k gồm hai phần: k' là khóa công khai dành cho việc lập mã, còn k''là khóa bí mật dành cho việc giải mã.
4. Với mỗi bản rõ xP, thuật toán lập mã E cho ta ký tự mã tương ứng
k x C
E
y ',
5. Với mỗi ký tự mã y thuật toán giải mã D cho ta lại ký tự bản rõ x:
k y Dk E k x x
D '', '', ',
Hệ mật RSA sử dụng các tính toán trong Zn trong đó n là tích của hai số nguyên tố lớn phân biệt nhau p,q và n p1q1. Mô tả hình thức của hệ mật như sau:
Cho n p.q trong đó p,q là các số nguyên tố lớn phân biệt nhau sao cho độ dài của hai số này là gần nhau nhất có thể được.
Đặt: PCZn và định nghĩa kn,p,q,a,b:ab1mod n - Mã hóa: ek x xb modn
- Giải mã: dk y yamodn
Trong đó x,yZn
Các giá trị n,b công khai còn các giá trị p,q,a được giữ bí mật.
Ta sẽ kiểm xem các phép mã hóa và giải mã có phải là các phép toán nghịch đảo của nhau hay không?
Vì ab1mod n nên ta có abt. n 1 với một số nguyên bất kỳ t1. Giả sử có xZn khi đó ta sẽ xét hai trường hợp.
a. Trường hợp x,n 1x n modn1. Khi đó ta có:
xb n x n x n x n tx n x n
n
yamod amod t.n1mod n mod t mod 1. mod mod b. Trường hợp (x,n)d1d p hoặc dq
Giả sử d p, khi đó xhp với 0hq và h,n 1
Suy ra:yamodn xb amodnhabmodnpabmodnmodn. Do h,n 1 nên
h n
habmod . Bên cạnh đó ta lại có:
ab ab n p q
ab n p pq p q p p q p p
p mod mod mod . mod . .
p q p
p. p q mod . Vậy yamodnhpmodnhp x
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn
Ví dụ: Alice muốn gửi một thông báo cho Bob, hai bên sẽ thiết lập các tham số hệ mật.
Giả sử Bob chọn p101 và q113. Khi đó np.q11413 và
n p1q1100.11211200
.
Vì 1120026.52.7nên có thể dùng một số nguyên b khóa công khai có giá trị không chia hết cho2,5,7. Anh ta kiểm tra điều kiện gcd n,b1 bằng thuật toán Euclidean.
Giả sử Bob chọn b3533, khi đó theo thuật toán Euclidean mở rộng ta có:
11200 mod
16597 b
Do vậy số mũ mật (khóa bí mật) để giải mã của Bob sẽ là a6597. Bob sẽ công bố n11413 và b3533.
Giả sử Alice muốn gửi bản rõ cho Bob, sẽ tiến hành chuyển bản rõ sang dạng số, giả sử là 9726. Cô ta sẽ tính:
5761 11413
mod
97263533
Rồi gửi bản mã 5761 trên kênh truyền. Khi Bob nhận được bản mã 5761, anh ta sẽ sử dụng khóa bí mật để tính: 57616597mod114139726
2.5.1.2 Độ an toàn của thuật toán RSA
Hệ mật RSA chỉ được an toàn khi giữ bí mật khóa giải mã a và thừa số nguyên tố p,q (hay giữ bí mật n ).
Trường hợp biết được p,q thì Marvin dễ dàng tính được n p1q1. Khi đó Marvin sẽ sử dụng thuật toán Euclidean mở rộng để tínha.
Khi biết a thì toàn bộ hệ thống sẽ bị phá vỡ ngay lập tức. Vì khi biết a, toàn bộ khóa K đều được biết và Marvin sẽ giải mã được và sẽ đọc được nội dung của bản rõ, Ngoài ra Marvin có thể lập mã trên văn bản khác là cực kỳ nguy hiểm.
Tuy vậy việc phân tích này là bài toán khó trong trường hợp p,q đủ lớn, và độ an toàn của hệ mật sẽ phụ thuộc vào việc phân tích số nguyên n thành tích của hai thừa số nguyên tố lớn [6, 7].
2.5.2 Thuật toán AES
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn
Tiêu chuẩn mã hóa tiên tiến AES (Advanced Encryption Standard) là một thuật toán mã hóa khối (block cipher) được chính phủ Hoa kỳ áp dụng làm tiêu chuẩn mã hóa và đượ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 Viện tiêu chuẩn và công nghệ quốc gia Mỹ (NIST) phát hành ngày 26/11/2001 và được đặc tả trong Tiêu chuẩn xử lý thông tin liên bang 197 [25] sau một quá trình tiêu chuẩn hóa kéo dài 5 năm.
AES ban đầu được thiết kế bởi hai nhà mật mã học người Bỉ: Joan Daemen và Vincent Rijmen và sử dụng mạng thay thế-hoán vị. Từ khi được công bố là một tiêu chuẩn, AES trở thành một trong những thuật toán mã hóa được sử dụng rộng rãi. Ở Việt Nam, thuật toán AES đã được công bố thành tiêu chuẩn quốc gia TCVN 7816 năm 2007.
AES cho phép xử lý các khối dữ liệu đầu vào có kích thước 128 bit sử dụng các khóa có độ dài 128, 192 hoặc 256 bit. AES có thể dễ dàng thực hiện với tốc độ cao và không yêu cầu bộ nhớ dung lượng lớn.
2.5.2.1 Cơ sở toán học
Hai phép cộng và phép nhân trên trường Galoris GF 28 là cở sở toán học của thuật toán AES.
+ Phép cộng: được hiểu là phép XOR trên hai bit tương ứng trong byte và có ký hiệu là .
Phép cộng bít:
ci di ei cidi
1 1 0
1 0 1
0 1 1
0 0 0
Với phép cộng hai byte: c7c6c5c4c3c2c1c0 và d7d6d5d4d3d2d1d0 bằng
e7e6e5e4e3e2e1e0 với ei ci di i:0i7.
+ Phép nhân trên trường GF 28 , ký hiệu là
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn
Tương ứng với phép nhân thông thường của hai đa thức đem chia lấy dư (modulo) cho một đa thức tối giản bậc 8. Trong thuật toán AES, đa thức tối giản được chọn là m x x8 x4 x3x1 hay 01 1b nếu biểu diễn dưới dạng hexa.
Kết quả nhận được của phép nhân rút gọn theo modulo m x là một đa thức có bậc nhỏ hơn 8 nên có thể biểu diễn được dưới dạng 1 byte.
Phép nhân với x: Phép nhân đa thức nhị phân với đa thức x (hay phần tử trong GF 28 được kết quả là:
x b x b x b x b x b x b x b x
b7 8 6 7 5 6 4 5 3 4 2 3 1 2 0
Kết quả của phép nhân xb x có được bằng cách rút gọn kết quả trên theo modulo m x .
Nếu b70 thì kết quả đã ở dạng rút gọn.
Nếu b71, quá trình rút gọn được thực hiện bằng cách trừ đi đa thức m x . Theo đó, phép nhân với x (tức là 00000010 hoặc 02 ) có thể được thực hiện ở mức byte bằng một phép dịch trái và sau đó thực hiện tiếp phép XOR với giá trị
1b . Thao tác này được ký hiệu là xtime(). Phép nhân với các luỹ thừa của x có thể được thực hiện bằng cách áp dụng nhiều lần thao tác xtime(). Kết quả phép nhân với một giá trị bất kỳ được xác định bằng phép cộng () các kết quả trung gian này lại với nhau.
Ví dụ: Thực hiện phép nhân 57 13
Ta có:
57 02 xtime 57 ae
57 04 xtime ae 47
57 08 xtime 47 8e
57 10 xtime 8e 07
do đó, 57 13 57 01 02 10 57 ae 07 fe
+ Đa thức với các hệ số trên trường GF 28 : Phép nhân của hai đa thức bậc 4: a x b x theo modulox4 1 được xác định bằng 4 hạng tử
x d3x3 d2x2 d1x d0
d . Trong đó:
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn
0 0 3 1 2 2 1 3
0 a b a b a b a b
d
1 0 0 1 3 2 2 3
1 a b a b a b a b
d
2 0 1 1 0 2 3 3
2 a b a b a b a b
d
3 0 2 1 1 2 0 3
3 a b a b a b a b
d
Và 3 3 4
2 2 1
0 a x a x a x x
a x
a còn 3 3 4
2 2 1
0 bx b x b x x
b x
b
Khi a x là đa thức cố định, thì d x có thể được viết dưới dạng ma trận như
sau:
3 2 1 0
0 1 2 3
3 0 1 2
2 3 0 1
1 2 3 0
3 2 1 0
b b b b
a a a a
a a a a
a a a a
a a a a
d d d d
2.5.2.2 Các khái niệm, ký hiệu và hàm + Một số khái niệm
- Biến đổi Affine: Phép biến đổi bao gồm một phép nhân với một ma trận sau đó là một phép cộng của một vectơ.
- Block: Một dãy các bit nhị phân tạo thành input, output, trạng thái (state) và các khóa sử dụng tại các vòng lặp (Round Key) của hệ mã. Độ dài của dãy (khối) là số lượng các bit mà nó chứa. Các khối cũng có thể được xem là một dãy các byte.
- Cipher: Thuật toán mã hóa, gồm các phép biến đổi để chuyển bản rõ thành bản mã sử dụng khóa mã hóa.
- Ciphertext: Bản mã, là dữ liệu đầu ra từ Cipher hoặc đầu vào của Inverse Cipher.
- Inverse Cipher: Thủ tục giải mã, gồm chuỗi các phép biến dổi chuyển bản mã thành bản rõ sử dụng Cipher Key.
- Cipher Key: Khóa chính được sử dụng bởi thủ tục mở rộng khóa để tạo ra một tập hợp các khóa vòng (Round Key); có thể được hình dung như là một mảng các byte, có bốn hàng và Nk cột.
- Plaintext: Bản rõ, là dữ liệu đầu vào của Cipher hoặc là dữ liệu đầu ra của Inverse Cipher.
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn
- Round Key: Là các giá trị sinh ra từ khóa chính bằng cách sử dụng thủ tục sinh khóa. Các khóa này được sử dụng tại các vòng lặp của thuật toán.
- State: Trạng thái, là kết quả mã hóa trung gian, có thể hình dung như một ma trận hình của các byte, có 4 dòng và Nb cột (mỗi dòng có Nb byte).
- S-box: Một bảng thế phi tuyến được sử dụng trong thủ tục sinh khóa và trong các biến đổi thay thế các byte để thực hiện các thay thế 1-1 đối với một giá trị 1 byte.
+ Một số ký hiệu
K: Khóa mã hóa (Cipher Key)
Nb: Số lượng các cột (là các word 32 bit) tạo thành một trạng thái (theo tiêu chuẩn thì Nb 4)
Nk: Số lượng các word 32 bit (số cột) tạo thành khóa mã hóa (Nk 4,6,8)
Nr: Số lượng các vòng lặp của thuật toán, là một hàm của Nk và Nb. Số lượng vòng lặp có thể nhận các giá trị khác nhau phụ thuộc vào độ dài khóa AES- 128 sử dụng 10 vòng (Nr 10), AES-192 sử dụng 12 vòng (Nr 12) và AES-256 sử dụng 14 vòng (Nr 14).
Rcon[]: Mảng word liên tiếp.
: Phép toán XOR
: Phép nhân hai đa thức bậc nhỏ hơn 4 theo modulo x41.
: Phép nhân trong trường hữu hạn.
+ Các hàm sử dụng trong thuật toán
- AddRoundKey(): Hàm biến đổi được sử dụng trong thuật toán mã hóa và giải mã trong đó thực hiện phép toán XOR bit giữa một trạng thái trung gian (State) và một khóa của vòng lặp (Round Key).
- MixColumns(): Hàm biến đổi trong thuật toán mã hóa nhận tất cả các cột của một trạng thái (State) và trộn với dữ liệu của nó (không phụ thuộc lẫn nhau) để nhận được một cột mới.
- InvMixColumns(): Hàm biến đổi được sử dụng trong thuật toán giải mã, là hàm ngược của hàm MixColumns().
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn
- ShiftRows():Hàm sử dụng trong quá trình mã hóa, xử lý các trạng thái bằng cách dịch vòng ba hàng cuối của trạng thái với số lần dịch khác nhau.
- InvShiftRows(): Hàm biến đổi trong thuật toán giải mã, là hàm ngược của hàm ShiftRows().
- SubBytes(): Hàm biến đổi sử dụng trong quá trình mã hóa, xử lý một trạng thái bằng cách sử dụng một bảng thế phi tuyến các byte (S-box) thao tác trên mỗi byte một cách độc lập.
- InvSubBytes(): Hàm biến đổi trong thuật toán giải mã, là hàm ngược của hàm SubBytes().
- RotWord(): Hàm sử dụng trong thủ tục sinh khóa nhận một word 4 byte và thực hiện một hoán vị vòng.
- SubWord(): Hàm sử dụng trong thủ tục sinh khóa nhận một word đầu vào 4 byte và sử dụng một S-box trên mỗi giá trị 4 byte này để thu được 1 word đầu ra.
2.5.2.3 Thủ tục mở rộng khóa
Thủ tục mở rộng khóa (KeyExpansion) là quá trình tạo các khóa vòng từ khóa chính. Từ khóa chính K cho trước, thuật toán AES thực hiện một thủ tục sinh khóa để sinh một dãy các khóa mã hóa. Thủ tục này sinh Nr 1 khóa, mỗi khóa chứa Nb word, như vậy tổng số word là NbNr 1.
Dãy khóa kết quả là một mảng tuyến tính các word 4 byte được ký hiệu là
wi trong đó 0iNbNr 1.
2.5.2.4 Thủ tục mã hóa/ giải mã AES
AES chỉ làm việc với các khối dữ liệu đầu vào và đầu ra và trạng thái 128 bit và khóa có độ dài 128, 192 hoặc 256 bit. 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, có thể xếp thành 4 cột, mỗi cột 4 phần tử hay là một ma trận 44
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn
của các byte, được gọi là ma trận trạng thái, hay vắn tắt là trạng thái. 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.
Tại thời điểm bắt đầu mã hóa, đầu vào được sao chép vào mảng trạng thái sử dụng các quy ước. Sau đó thực hiện theo 3 bước sau:
Bước 1: Khởi động vòng lặp:
Thực hiện phép biến đổi 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.
Bước 2: Vòng lặp:
Thực hiện lần lượt các phép biến đổi theo thứ tự sau:
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).
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.
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.
AddRoundKey()
Bước 3: Vòng lặp cuối:
Thực hiện các phép biến đổi tương tự như ở bước 2, nhưng không thực biện phép biến đổi MixCloumns(): SubBytes(), ShiftRows(), AddRoundKey().
Trong trường hợp giải mã: Các phép biến đổi trong phần mã hóa AES có thể được đảo ngược và thực thi theo thứ tự khác để giải mã cho thuật toán AES.
Các phép biến đổi được thực hiện trong quá trình giải mã gồm: InvShiftRows(), InvSubBytes(), InvMixColumns() và AddRoundKey(). Quá trình mã hóa và giải mã AES 128 được mô tả theo lược đồ sau [6, 7]:
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn
Hình 2.1: Lược đồ mã hóa/ giải mã AES 128
2.5.2.5 Tính an toàn của AES
Vào thời điểm năm 2009, dạng tấn công lên AES duy nhất thành công là tấn công kênh bên (side channel attack). Vào tháng 6 năm 2003, chính phủ Mỹ tuyên bố AES có thể được sử dụng cho 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ác thông tin tuyệt mật (top secret) sẽ phải dùng khóa 192 hoặc 256 bit. Các phiên bản thực hiện AES nhằm mục đích bảo vệ hệ thống an ninh hay thông tin quốc gia phải được NSA kiểm tra và chứng nhận trước khi sử dụng” [14]. Điều này đánh dấu lần đầu tiên công chúng có quyền tiếp xúc với thuật toán mật mã mà NSA phê chuẩn cho thông tin tuyệt mật. Nhiều phần mềm thương mại hiện nay sử dụng mặc định khóa có độ dài 128 bit, hoặc cao hơn là 256 bit.
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn
Phương pháp thường dùng để 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ố chu trình thu gọn. 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 chu trình đối với khóa 128 bit, 8 chu trình với khóa 192 bit và 9 chu trình với khóa 256 bit.
Một số nhà khoa học trong lĩnh vực mật mã lo ngại về an ninh của AES.
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ỏ, và vì vậy nếu các kỹ thuật tấn công được cải thiện thì AES có thể bị phá vỡ. Ở đây, phá vỡ có nghĩa chỉ bất cứ phương pháp tấn công nào nhanh hơn tấn công kiểu duyệt toàn bộ. Vì thế một tấn công cần thực hiện 2120 lần cũng được cho là thành công mặc dù tấn công này chưa thể thực hiện trong thực tế. Tại thời điểm hiện nay, nguy cơ này không thực sự nguy hiểm và có thể bỏ qua. Tấn công kiểu duyệt toàn bộ quy mô nhất đã từng thực hiện là do distributed.net thực hiện lên hệ thống 64 bit RC5 vào năm 2002.
Một vấn đề khác nữa là cấu trúc toán học của AES có mô tả 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. Vào năm 2002, Nicolas Courtois và Josef Pieprzyk phát hiện một tấn công trên lý thuyết gọi là tấn công XSL và chỉ ra điểm yếu tiềm 43iki của AES. Tuy nhiên, một vài chuyên gia về mật mã học khác cũng chỉ ra một số vấn đề trong cơ sở toán học của tấn công này và cho rằng các tác giả đã có sai lầm trong tính toán. Việc tấn công dạng này có thực sự trở thành hiện thực hay không vẫn còn để ngỏ và cho tới nay thì tấn công XSL vẫn chỉ là suy đoán.
Chương tiếp theo của luận văn sẽ trình bày về việc sử dụng thuật toán mã hóa AES để mã hóa cho cả dữ liệu phía máy chủ và dữ liệu phía người dùng.
Hiện nay, khá nhiều nhà cung cấp dịch vụ điện toán đám mây hỗ trợ mã hóa dữ liệu phía server (Amazon S3, Saleforce, Dropbox,…) và nhiều phần mềm mã hóa của bên thứ ba hỗ trợ mã hóa phía client (Box Cryptor, Crypt Keeper, Secure Cloud Drive, Credeon Cloud Data Protection…) sử dụng thuật toán mã hóa AES (AES-128, AES-256 và các biến thể của nó).
Kêt luận Chương 2