Mã hoá đối xứng

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Vấn đề bảo mật cơ sở dữ liệu trong cơ sở dữ liệu phân tán (Trang 25 - 36)

II.1. Phương pháp mã hoá

II.1.2 Mã hoá đối xứng

Khóa mật mã đối xứng sử dụng cùng một khóa cho việc mã hóa và giải mã.

Khóa đối xứng có thể phân thành hai loại là mã hoá khối và mã hoá luồng.

Mã hoá luồng mã hoá hóa một bit tại một thời điểm, mã hoá khối là phương thức cho phép thực hiện mã hoá trên một nhóm các bit (khối) với độ dài nào đó trong một lần. Các mã hoá khối nhƣ DES, IDEA,AES, và mã hoá luồng nhƣ RC4, là những loại mã hoá khóa đối xứng nổi tiếng nhất.

II.1.2.1 Các chế độ sử dụng mã khối [1]

Thuật toán mã khối là khối biến đổi mã hoá với khối đầu vào và đầu ra là các khối có độ dài cố định. Để mã hoá một khối dữ liệu có đầu vào có độ dài tuỳ ý ta phải cắt khối dữ liệu thành nhiều khối đơn vị và mã hoá chúng nhiều lần, do đó dẫn đến chế độ sử dụng thuật toán khác nhau. Thông thường chúng ta có hai chế độ sau đây:

II.1.2.1.1 Chế độ bảng tra mã điện tử (ECB)

Trong chế độ này các khối mã hoá đƣợc mã riêng biệt. Nhƣ vậy những khối tin giống nhau sẽ đƣợc mã hoá thành những khối mã giống nhau.

II.1.2.1.2 Chế độ mã móc xích (CBC)

Trong chế độ này mỗi khối tin trước khi được mã hoá thì được XOR với khối mã sinh ra từ bước trước đó:

X1 = X‟1 XOR IV X2 = X‟2 XOR Y1

….

Xi = X‟i XOR Yi-1

tại bước đầu tiên khi chưa có khối mã sinh ra từ bứơc trước thì khối tin sẽ đƣợc XOR với một vectơ ngẫu nhiên ký hiệu là IV.

Hình 2.1: Mô tả quá trình hoạt động của chế độ CBC II.1.2.2 Thuật toán DES[1,2,4,5]

II.1.2.2.1 Mô tả thuật toán mã hoá

DES là thuật toán mã hóa khối. Trong thuật toán DES, độ dài mỗi khối là 64 bit, 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.DES đƣợc cấu tạo bởi 16 vòng lặp và có sự tác động bởi hàm phi tuyến f.

E E

P1 P2

C1 C2

IV

1. Từ bản rõ x biến thành x0 nhờ phép hoán vị IP (Phụ lục 1.1.), khi đó x0

= IP(x) = L0R0. Trong đó L0 là 32 bit đầu tiên của x0 và R0 là 32 bit sau của x0

2. Tính 16 phần tử tiếp theo của LiRi (1≤i≤16) bởi công thức sau:

Li = Ri-1

Ri = Li-1 + f(Ri-1,Ki)

Trong đó phép cộng là phép cộng XOR , f là một hàm phi tuyến. K1,K2,…,K16 là các xâu có độ dài 48 bit.

3. Đƣa ra bản mã y=IP-1(R16L16) (Phụ lục 1.2.)

Hình 2.2: Sơ đồ giải thuật sinh mã DES

Xác định hàm f : Hàm f nhƣ đƣợc miêu tả ở Hình 2.3, hoạt động trên khối 32 bit và bao gồm bốn giai đoạn:

Hình 2.3: Hàm F dùng trong DES

1. 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 với việc nhân đôi một số bit. Giai đoạn này đƣợc ký hiệu là E (Phụ lục 1.3) trong sơ đồ.

2. 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.

3. 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 (Phụ lục 1.4). Đầ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 phá mã sẽ rất đơn giản.

4. 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 P-box (Phụ lục 1.5).

Quá trình luân phiên sử dụng S-box và sự hoán vị các bít cũng nhƣ quá trình mở rộng đã thực hiện đƣợc tính chất gọi là sự xáo trộn và khuyếch tán Đây là yêu cầu cần có của một thuật toán mã hoá .

Quá trình tạo khóa con:

Hình 2.4:Quá trình tạo khóa con trong DES

Trước tiên, từ 64 bit ban đầu của khóa, 56 bit được chọn PC-1 (Phụ lục 1.6); 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 chuyển (sang trái) 1 hoặc 2 bit (tùy thuộc từng chu trình). Dịch chuyển 1 bít nếu đang ở chu trình 1.2.9.16 và dịch chuyển 2 bit đối với các chu trình còn lại. Các khóa con 48 bit đƣợc tạo thành bởi thuật toán lựa chọn 2 PC-2 (Phụ lục 1.2.2.7) 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.

II.1.2.2.2 Thụât toán giải mã

Thuật toán giải mã đƣợc xây dựng giống hệt thuật toán sinh mã nhƣng các khoá con K đƣợc sử dụng theo thứ tự ngƣợc lại. Tức là dùng khoá K16 cho vòng lặp 1, khoá K15 cho vòng lặp 2,… ,K1 cho vòng lặp 16.

II.1.2.2.3 An toàn của DES

Tấn công bằng phương pháp vét cạn: DES có 256 = 1017 khóa . Với một cặp TIN/MÃ thì chúng ta có thể thử tất cả 1017 khả năng để tìm ra khoá cho kết quả khớp. Giả sử như một phép thử mất quãng 10-6 s (máy tính thông thường) thì muốn tìm ra khoá chúng ta sẽ mất 7300 năm. Tuy nhiên hiện nay với những loại máy tính chuyên dụng phá khoá với giá trị thiết kế khoảng 100,000$ thì có thể cho kết quả trong 1,5 ngày.

Điểm yếu cơ bản của DES là tính bù: Ta ký hiệu u là phần bù của u thì DES có tính chất sau: y=DESZ(x) thì y=DESZ(x). Nhƣ vậy nếu ta biết nếu mã y là đƣợc mã hoá từ thông tin x với khoá z thì ta có thể suy ra y là đƣợc mã hoá từ thông tin x với khoá z. Với tính chất này thì kẻ tấn công có thể loại trừ một nửa số khoá cần phải thử khi tiến hành phép thử giải mã bằng phương pháp vét cạn.

So với thuật toán RSA thuật toán này là thời gian thực hiện mã hoá/giải mã nhanh và ngốn ít tài nguyên bộ vi xử lý máy tính, hiệu quả cao với dữ liệu có dung lƣợng lớn .

II.1.2.3 Thuật toán AES [4,6]

AES làm việc với khối dữ liệu 128 bit và khóa có độ dài 128, 192 hoặc 256 bit người ta đặt tên thuật toán mã hoá tương ứng với tên là AES-128, AES- 192, AES-256. 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. AES làm việc với từng khối dữ liệu 4×4 byte (state).

Các tham số trong thuật toán

 Nb: Số lƣợng khối dữ liệu 32 bit trong khối mã hoá.

 Nk: Số lƣợng khối dữ liệu 32 bit trong khối khoá mã hoá.

 Nr: Số vòng lặp: Nr = 6 + Max (Nb, Nk), ví dụ AES-128: Nr = 10.

II.1.2.3.1 Mô tả thụât toán mã hoá.

Quá trình mã hóa bao gồm 4 bước:

1. AddRoundKey - mỗi byte của khối đƣợc kết hợp với khóa con, các khóa con này đƣợc tạo ra từ quá trình tạo khóa con Rijndael.

Hình 2.5: Mô tả hoạt động bước AddRoundKey

2. SubBytes - đây là quá trình thay thế (phi tuyến) trong đó mỗi byte sẽ đƣợc thay thế bằng một byte khác theo bảng tra (Rijndael S-box - Phụ lục II.1.2.3.1).

Hình 2.6: Mô tả hoạt động bước SubBytes 3. ShiftRows - đổi chỗ, các hàng trong khối đƣợc dịch vòng.

Hình 2.7: Mô tả hoạt động bước ShiftRows

4. MixColumns - quá trình trộn làm việc theo các cột trong khối theo một chuyển đổi tuyến tính.

Hình 2.8: Mô tả hoạt động bước MixColumns

Tại chu trình cuối thì bước MixColumns được thay thế bằng bước AddRoundKey.

Thuật toán mã hoá

INPUT: M 128 bit, w[Nb*(Nr+1)] --- w là mảng khoá , M là khối dữ liệu rõ OUTPUT: Y 128 bit -- Khối dữ liệu đã đƣợc mã hoá

TIẾN TRÌNH XỬ LÝ:

State:=in;

AddRoundKey(State,w[0,Nb-1]);

for i in 1..Nr-1 loop SubByte(state);

ShiftRows(state);

MixColums(state);

AddRoundKey(state,w[i*Nb],(i+1)*Nb-1);

end loop;

SubByte(state);

ShiftRows(state);

AddRoundKey(state,w[i*Nb],(i+1)*Nb-1);

Y:=state;

SubWord(): Là một hàm đƣa 4 từ đầu vào qua S-box để đƣợc 4 từ đầu ra RotWord(): Biến đổi một từ [a0a1a2a3] thành một từ [a1a2a3a0]

Rcon(i): Chứa các giá trị [xi-1,{00},{00},{00}] với x={02} và i>=1.

Trường hợp Nk=8 (độ dài khoá =256) và i-4 là bội số của Nk thì SubWord() đƣợc tính toán với w[i-1] trứơc khi XOR

Thuật toán:

INPUT: Khoá đầu vào K, Nk OUTPUT: Mảng khoá con TIẾN TRÌNH XỬ LÝ:

 Tách khoá K thành Nk khối 4 byte w[i] i=0..Nk-1 i:=Nk;

while (i<Nb*(Nr+1)) loop 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;

w[i] = w[i-Nk] xor temp;

i = i + 1;

end loop;

II.1.2.3.3 Mô tả thụât toán giải mã

Thuật toán giải mã sử dụng 4 biến đổi trong đó có 1 biến đổi AddRoundKey và 3 biến đổi đảo ngƣợc.

Biến đổi InvShiftRows(): tương tự biến đổi ShiftRows thay vì dịch trái thì trong biến đổi này là dịch phải.

Bứơc InvSubBytes(): Phép biến đổi này tương tự như SubBytes() thay vì dùng S-box thì sử dụng InvS-box (Phụ lục II.1.2.3.2 ).

Bứơc InvMixColums(): Tương tự như phép MixColums thay vì a XOR với c(x) thì là a-1 XOR c(x).

Thuật toán giải mã

INPUT: M 128 bit, w[Nb*(Nr+1)] --- w là mảng khoá , M là bản mã OUTPUT: Y 128 bit -- Khối dữ liệu đã đƣợc giải mã

TIẾN TRÌNH XỬ LÝ:

state = M

AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) for round = Nr-1 step -1 downto 1

InvShiftRows(state) InvSubBytes(state)

AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) InvMixColumns(state)

end for

InvShiftRows(state) InvSubBytes(state)

AddRoundKey(state, w[0, Nb-1]) Y = state.

II.1.2.3.4 An toàn

Thiết kế và độ dài khóa của thuật toán AES (128, 192 và 256 bít) là đủ an toàn để bảo vệ các thông tin đƣợc xếp vào dạng mật. Các thông tin tối mật sẽ phải dùng khóa 192 hoặc 256 bít.

II.1.2.4 Thuật toán RC4[6]

Trong mã hoá, RC4 là thuật toán mã hoá dòng nổi tiếng và đƣợc sử dụng rộng rãi trong SSL và bảo mật mạng không dây WEP. RC4 đươc thiết kế bởi Ron Rivsest và RSA Sercurity. Nó trở thành một phần của các chuẩn và giao thức mã hoá đang đƣợc sử dụng bao gồm WEP và WPA,SSL,TLS. Ƣu điểm của

thụât toán là sự đơn giản và tốc độ thực thi cao trên cả phần cứng và phần mềm mà không tốn tài nguyên .

II.1.2.4.1 Mô tả thuật toán

RC4 tạo ra một dòng ngẫu nhiên các bit (một khoá dòng) đƣợc kết hợp với bản rõ thông qua phép tính XOR để mã hoá, quá trình giải mã đƣợc thực hiện bằng cách tương tự.

II.1.2.4.2 Thuật toán RC4 --Khởi tạo S

For i = 0 to 255 do

S[i] = i; => S là 256 byte

T[i] = K[i mod keylen]; -- sử dụng T cho hoán vị khởi tạo SS --Hoán vị khởi tạo S

J = 0;

For i = 0 to 255 do

j = (j + S[I] + T[I]) mod 256;

Swap (S[I],S[j]);

-- Quá trình tạo dòng i,j = 0;

While (true)

I = (I + 1) mod 256;

j = (j + S[I]) mod 256;

Swap (S[I],S[j]);

t = (S[I] + S[j]) mod 256;

k = S[t];

-- Để mã hoá thì XOR giá trị k với bản rõ -- Để giải mã thì XOR giá trị k với bản mã

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Vấn đề bảo mật cơ sở dữ liệu trong cơ sở dữ liệu phân tán (Trang 25 - 36)

Tải bản đầy đủ (PDF)

(105 trang)