SVTT: Đoàn Minh Châu
Chương 3: An toàn dữ liệu trong VPN với công nghệ IPSec
Đặc điểm của VPN là cho phép truyền dữ liệu thông qua một cơ sở hạ tầng mạng công cộng mà vẫn đảm bảo được các đặc tính an toàn và tin cậy dữ liệu. Để thực hiện được điều đó, công nghệ VPN phải giải quyết được hai vấn đề: đóng gói dữ liệu và an toàn dữ liệu. Đóng gói dữ liệu là cách thức thêmcác phần thông tin điều khiển vào gói tin ban đầu để đảm bảo gói tin đi được từ nguồntới đích mong muốn, điều này đã được đề cập trong các chương trước. An toàn dữ liệu là cách thức đảm bảo cho dữ liệu đi qua mạng công cộng không bị xâm phạm, làm thay đổi bởi những kẻ không mong muốn. Thực tế thì vấn đề an toàn dữ liệu không phải là vấn đề riêng của VPN mà là mối quan tâm cũng như thách thức của tất cả các tổ chức có nhu
cầu sử dụng Internet làm môi trường truyền tin. Chính vì vậy, đã có rất nhiều giải pháp, giao thức, thuật toán được phát triển để giải quyết vấn đề này. Việc sử dụng giải pháp nào là tùy thuộc vào từng ứng dụng cụ thể và không loại trừ khả năng sử dụng kết hợp nhiều giải pháp để đạt hiệu quả an toàn như mong muốn.
Đối với VPN, IPSec là giao thức tối ưu về mặt an toàn dữ liệu. Thứ nhất,IPSec cung cấp xác thực tính toàn vẹn dữ liệu. Thứ hai, IPSec cho phép sử dụng các phương pháp, thuật toán mật mã, xác thực mạng nhất hiện có. Thứ ba, IPSec là một khung chuẩn mở, nghĩa là có thể lựa chọn các thuật toán phù hợp với mức độ an toàn dữ liệu mong muốn mà không bị giới hạn cứng nhắc phải sử dụng đúng một thuật toán nào đó, đồng thời có khả năng sử dụng các thuật toán tiên tiến phát triển trong tương lai. Điều này thể hiện tính linh hoạt rất cao của IPSec.
3.1. Mã hoá:
3.1.1. Khái niệm mật mã:
Hình sau cho thấy khái niệm chung sử dụng trong các thuật toán mật mã và mối quan hệ giữa chúng:Một hệ mật là một bộ 5 (P, C, K, E, D)thỏa mãn các điều kiện sau:
1) P là một tập hữu hạn các bản rõ có thể.
2) C là một tập hữu hạn các bản mã có thể.
3) K là một tập hữu hạn các khóa có thể.
4) Đối với k K có một quy tắc mã ek: P→C và một quy tắc giải mã tương ứng
dk:C→P sao cho dk(ek(x)) = x với mọi bản rõ x P.
Điều kiện 4 nói lên rằng một bản rõ x được mã hóa bằng ek và bản mã nhận được sau đó được giải mã bằng dk thì ta phải thu được bản rõ ban đầu x. Các khái niệm trong hình được trình bày như sau:
+ Plaintext và ciphertext: bản tin ban đầu được gọi là bản tin rõ (plaintext hay cleartext). Quá trình biến đổi bản tin để che dấu nội dung thật của nó được gọi là mật mã (encryption). Bản tin đã mật mã được gọi là ciphertext. Quá trình biến bản tin đã mật mã về bản tin ban đầu được gọi là giải mã (decryption).
+ Thuật toán và khóa: thuật toán mật mã (còn gọi là cipher) là một hàm toán học sử dụng để mật mã và giải mã. Tính an toàn của một thuật toán mật mã phụ thuộc vào một khóa bí mật (secret key). Khoảng các giá trị có thể có của khóa được gọi là không gian khóa (key space). Các quá trình mật mã và giải mã đều phụ thuộc vào khóa K như sau:
Mật mã: EK(P) = C
Giải mã: DK(C) = P
Về cơ bản thì các thuật toán mật mã được chia thành hai loại: các hệ thống mật mã khóa đối xứng (Symmetric Key Cryptosystem), và các hệ thống mật mã khóa công khai (Public Key Cryptosystem). Mật mã khóa đối xứng sử dụng cùng một khóa duy nhất trong quá trình mật mã và giải mã, với hệ thống này thì hai đầu kênh được cung cấp cùng một khóa qua một kênh tin cậy và khóa này phải tồn tại trước quá trình truyền tin.
Còn mật mã khóa công khai sử dụng hai khóa khác nhau (một khóa bí mật và một khóa công khai), khóa công khai dùng để lập mã và chỉ có khóa bí mật là có khả năng giải mã.
Bản thân các hệ mật mã này có nhiều thuật toán thực hiện.
3.1.2. Các hệ thống mật mã khóa đối xứng:
3.1.2.a. Giải thuật DES (Data Encryption Standard):
Thuật toán DES được đưa ra vào năm 1977 tại Mỹ và đã được sử dụng rất rộng rãi. Nó còn là cơ sở để xây dựng một thuật toán tiên tiến hơn là 3DES. Hiện nay, DES vẫn được sử dụng cho những ứng dụng không đòi hỏi tính an toàn cao, và khi chuẩn mật mã dữ liệu mới là AES chưa chính thức thay thế nó. DES mã hóa các khối dữ liệu 64 bit với khóa 56 bit. Sơ đồ thuật toán DES cho trên hình sau:Trước hết 64 bit T đưa vào được hoán vị bởi phép hoán vị khởi tạo IP (Initial Permutation), không phụ thuộc vào khóa T0 = IP(T). Sau khi thực hiện 16 vòng lặp, dữ liệu được đi qua các bước hoán vị đảo RP (Reversed Permulation) và tạo thành khối ciphertext. Thực chất các hoán vị này không là tăng tính an toàn DES.
Trung tâm của mỗi vòng lặp xử lý DES là mạng Fiestel (được đặt theo tên của một nhà khoa hoc tại IBM). Hoạt động của mạng Fiestel được diễn tả như sau:
T =L0R0 với L0= t1…t32, R0= t33…t64
Xét ở vòng lặp thức i (0<i<16): Li = Ri-1, Ri = Li-1 Xor F(Ri-1,Ki) trong đó ⊕ là phép cộng XOR và Ki là khóa 48 bit. Ở vòng lặp cuối cùng các nhánh trái và phải không đổi chỗ chi nhau, vì vậy input của IP^-1 là R16L16. Trong đó hàm F được thể hiện là khối hộp đen.* Hoạt động của khối hộp đen:
Khá phức tạp, trong đó nó gồm có các khối chức năng và nhiệm vụ như sau:
- Hoán vị mở rộng: Mở rộng Ri-1 32 bít đầu vào thành khối 48 bít. Hoạt động mở rộng này dựa vào một bảng định trước để lựa chọn các bít đầu ra. Sau đó các bít sau
hoán vị mở rộng được XOR với khóa Ki.
- S-box: Kết quả sau khi XOR được chia thành 8 khối 6 bít từ B1 tới B6. Mỗi khối Bj sau đó được đưa vào một hàm Sj. Hàm Sj này sẽ trả lại các khối 6 bit thành khối 4 bit theo bảng định trước.
- P-Box: Các khối 4 bit sau khi được trả lại sẽ kết hợp với nhau thành khối 32 bít đầu ra của hộp đen.
* Hoạt động tính khóa:
Khóa input ban đầu là một khối 64 bít, sau khi bỏ đi 8 bít parity và hoán vị 56 bít còn lại theo một trật tự nhất định. DES tạo ra 16 khóa, mỗi khóa có chiều dài 48 bit từ một khóa input 56 bit, dùng cho 16 vòng lặp. Tại mỗi vòng lặp, khóa Ki-1 được chia thành hai phần là Ci-1 và Di-1. Sau đó các bit của hai thành phần Ci-1 và Di-1 được hoán vị dịch để tạo thành Ci và Di. Sau khi hoán vị, Ci bỏ qua các bít 9, 18, 22, 25 tạo thành nữa trái của Ki(24 bit) và Di bỏ qua các bít 35, 38, 43, 54 tạo ra nữa phải của Ki (24 bít). Ghép nữa trái và nữa phải tạo ra khóa Ki 48 bít.
* Giải mã: Quá trình giải mã thực hiện các bước này theo thứ tự ngược lại.
3.1.2.b. Thuật toán mã hoá AES:
Thuật toán DES với khóa 56 bit đã được phát triển cách đây gẩn 28 năm, và hiện không còn phù hợp với những ứng dụng đòi hỏ tính an toàn dữ liệu cao (đặc biệt các ứng dụng về quân sự, hoặc thương mại điện tử). Đây là lý do cần phát triển các thuật toán mật mã mới đáp ứng được những yêu cầu an toàn dữ liệu ngày càng cao. Trong số các thuật toán mới được phát triển gần đây có 3DES (Triple DES) với khóa công khai 168 bít và đặc biệt là AES. Năm 1997, NIST (US National Institute of Standards and Technology) đã tổ chức lựa chọn những thuật toán sau:
* MARS (IBM): Cải tiến mạng Fiestel, thực hiện 32 vòng và dựa trên cấu trúc kết hợp của DES.
* RC6 (RSA): Thực hiện mạng Fiestel 20 vòng, cải tiến thuật toán RC5.
* Twofish (Bruce Schneier): thực hiện mạng Fiestel 16 vòng, cải tiến thuật toán Blowfish.
* Serpent (Ross Anderson/ Eli Biham/ Lars Knudsen): Thực hiện mạng hoán vịthay thế 32 vòng.
* Rijndael (Joan Daemen/ Vincent Rijimen): Thực hiện mạng hoán vị thay thế cải tiến 10 vòng.
Trong 5 thuật toán trên, NIST đã chọn Rijindael cho chuẩn AES vào năm 2000. Trong tương lai, AES sẽ là chuẩn mật mã khối đối xứng và sẽ được thực hiện trên cả phần cứng lẫn phần mềm. AES sẽ được thiết kế để có thể tăng độ dài khóa khi cần thiết. Độ dài khối dữ liệu của AES là n = 128 bít, còn độ dài khóa k = 128, 192, 256 bitThuật toán AES thực hiện dựa trên 4 thao tác:
AES sử dụng 2 thuật toán khác nhau cho mã hoá và giải mã , do vậy tất cả các thao tác trong thuật toán bắt buộc phải có thao tác ngược (ngoại trừ phép XOR).
3.1.3. Các hệ thống mật mã bất đối xứng
Đặc trưng của kỹ thuật mật mã bất đối xứng là dùng 2 khoá riêng biệt cho hai việc mã hoá và giải mã. Một trong hai khoá được phổ biến công khai gọi là khoá công khai (Public Key hay PU), khoá còn lại được giữ bí mật gọi là khoá riêng (Private Key hay PR). Nếu quá trình mã hoá dùng khoá PU thì quá trình giải mã dùng khoá PR và ngược lại.
3.1.3.a. Thuật toán mật mã RSA
RSA là thuật toán mật mã bất đối xứng được xây dựng bởi Ron Rivest, Adi Shamir và Len Adleman tại viện công nghệ Massachusetts (MIT), do đó được đặt tên là Rivest – Shamir – Adleman hay RSA. Thuật toán này ra đời năm 1977 và cho đến nay đã
được ứng dụng trong nhiều lĩnh vực. Cũng như các thuật toán mật mã bất đối xứng 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ì số nguyên này có giá trị từ 0 đến 21024 -1 tương đương với số thập phân có 309 chữ số.
Thuật toán RSA được mô tả như sau:
1- Để tạo ra một cặp khóa RSA, trước hết, chọn hai số nguyên tố đủ lớn p và q. Gọi N là tích của p và q (N = pq).
2- Tiếp theo, chọn một số e sao cho e và (p-1)(q-1) là hai số nguyên tố cùng nhau. Sau đó tìm số d sao cho ed = 1 mod (p-1)(q-1). Ký hiệu mod m biểu diễn phép modulo trên cơ số m.
3-Bây giờ, bỏ qua vai trò của p và q. Với 3 thành phần còn lại là N, e và d, ta đó:
-Khóa công khai (public key) là tổ hợp (N, e)
-Khóa bí mật (private) là tổ hợp (N, d).
4- 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 (với M là số nguyên nhỏ hơn N)
5-Và quá trình giải mã C được thực hiện theo công thức:
M = Cd mod N
3.1.3.b. Thuật toán trao đổi khoá Diffie – Hellman:
Diffie-Hellman là một thuật toán dùng để trao đổi khóa (key exchange) chứ không dùng để mật mã hóa (che giấu) dữ liệu. Tuy nhiên, Deffie-Hellman lại có ích trong giai đọan trao đổi khóa bí mật của các thuật toán mật mã đối xứng. Như đã trình bày ở phần mật mã đối xứng, một trong những vấn đề quan trọng liên quan trực tiếp đến tính an toàn của các thuật toán mật mã đối xứng là vấn đề thống nhất khoá bí mật giữa các thực thể thông tin.
Thuật toán trao đổi khoá Diffie-Hellman dựa trên phép logarit rời rạc (discrete log). Cho trước một số g và x = gk ,để tìm k, ta đơn giản thực hiện phép logarit: k = logg(x). Tuy nhiên, nếu cho trước g, p và (gk mod p), thì quá trình xác định k được thực hiện theo cách khác với cách ở trên và được gọi là logarit rời rạc. Việc tính logarit rời rạc nói chung rất phức tạp, gần như không thực hiện với chi phí thời gian chấp nhận được.
Thuật tóan Diffie-Hellman khá đơn giản như sau:
3.2. Xác thực thông tin:
Xác thực thông tin (message authentication) là cơ chế đảm bảo thông tin truyền đi giữa các thực thể (thường thông qua hệ thống mạng) không bị giả mạo, thay đổi nội dung, thứ tự và thời gian truyền có ý nghĩa.
Trong báo cáo này do nghiên cứu về IPSec nên chỉ đi tìm hiểu về các hàm băm.
3.2.1. Tổng quan về hàm băm:
Nguyên tắc của hàm băm là biến đổi khối thông tin gốc có độ dài bất kỳ thành một đoạn thông tin có độ dài cố định gọi là mã băm (hash code hay message digest). Mã băm được dùng để kiểm tra tính chính xác của thông tin nhận được.
Một hàm băm H áp dụng cho khối thông tin M tạo ra kết quả m, trong tài liệu này, được ký hiệu là H(M) = m.
Thông thường, mã băm được gởi kèm với thông tin gốc, cùng với một cơ chế bảo vệ nào đó giúp mã băm không bị thay đổi hoặc tính lại. Ở phía nhận, hàm băm lại được áp dụng đối với thông tin gốc để tìm ra mã băm mới, giá trị này được so sánh với mã băm đi kèm với thông tin gốc. Nếu hai mã băm giống nhau, nghĩa là thông tin gởi đi không bị thay đổi.
Hình 3.6 – Một ứng dụng điển hình của hàm băm
Chỉ có thể dùng hàm băm để tạo ra mã băm từ thông tin gốc chứ không thể phục hồi được thông tin gốc từ mã băm. Do đặc tính này, các hàm băm bảo mật cũng còn được gọi là hàm băm một chiều (one way hash funtion).
Một hàm băm bảo mật phải có 3 thuộc tính bắt buộc sau đây:
• Tính một chiều (one-way property): Cho trước một đoạn thông tin m bằng với kích thước mã băm của một hàm băm H, không thể tìm được một khối thông tin M sao cho H(M) = m.
• Tính kháng đụng độ yếu (weak collision resistance): Cho trước khối thông tin M, không thể tìm được một khối thông tin M’ khác x sao cho H(M) = H(M’).
• Tính kháng đụng độ mạnh (strong collision resistance): Không thể tìm được hai khối thông tin M và M’ khác nhau sao cho H(M) = H(M’).
3.2.2. Hàm băm SHA:
SHA (Secure Hash Function) là hàm băm được viện Tiêu chuNn và Công nghệ hoa kỳ (NIST) chuẩn hoá năm 1993, sau đó được chỉnh sửa năm 1995 và đặt tên là SHA-1, từ đó phiên bản cũ được gọi là SHA-0 và gần như không được dùng đến. SHA-1 dựa chủ yếu cấu trúc của hàm băm MD4.
SHA-1 tạo ra mã băm có chiều dài cố định là 160 bit. Năm 2002, xuất hiện thêm một số phiên bản khác của SHA, chủ yếu là tăng chiều dài mã băm, như: SHA-256 (mã băm dài 256 bit), SHA-384 (mã băm dài 385 bit) và SHA-512 (mã băm dài 512 bit).
Hình 3.7- Thông số các phiên bản SHA
SHA-1 chấp nhận các khối thông tin có kích thước tối đa là 264 bit để tạo ra mã băm với độ dài cố định 160 bit. Tòan bộ khối thông tin được xử lý theo từng khối 512 bit, qua 5 công đoạn:
3.2.3. Thuật toán băm MD5:
MD5 là một giải thuật xác thực thông tin được sử dụng phổ biến trong thời gian qua trong cộng đồng Internet, đặc biệt dùng để kiểm tra tính chính xác của các phần mềm mã nguồn mở phát hành trên mạng. Giải thuật này được xây dựng bởi Ron Rivest, và được chuẩn hóa bằng RFC 1321. MD5 có thể xử lý các khối thông tin có độ dài không giới hạn để tạo ra mã băm dài 128 bit. Thông tin gốc cũng được xử lý theo từng đọan 512 bit.
So sánh giữa MD5 và SHA-1:Với 128 bit mã băm, việc tìm ra hai khối thông tin để có cùng một giá mã băm không còn là điều bất khả thi đối với năng lực của các bộ xử lý hiện nay. Do đó, độ an tòan của MD5 đang bị đe dọa nghiêm trọng, và trong thời gian ngắn sắp tới, mức độ phổ biến của MD5 có thể sẽ giảm đi và được thay thế bằng một giải thuật xác thực khác.
Chương 3: An toàn dữ liệu trong VPN với công nghệ IPSec
Đặc điểm của VPN là cho phép truyền dữ liệu thông qua một cơ sở hạ tầng mạng công cộng mà vẫn đảm bảo được các đặc tính an toàn và tin cậy dữ liệu. Để thực hiện được điều đó, công nghệ VPN phải giải quyết được hai vấn đề: đóng gói dữ liệu và an toàn dữ liệu. Đóng gói dữ liệu là cách thức thêmcác phần thông tin điều khiển vào gói tin ban đầu để đảm bảo gói tin đi được từ nguồntới đích mong muốn, điều này đã được đề cập trong các chương trước. An toàn dữ liệu là cách thức đảm bảo cho dữ liệu đi qua mạng công cộng không bị xâm phạm, làm thay đổi bởi những kẻ không mong muốn. Thực tế thì vấn đề an toàn dữ liệu không phải là vấn đề riêng của VPN mà là mối quan tâm cũng như thách thức của tất cả các tổ chức có nhu
cầu sử dụng Internet làm môi trường truyền tin. Chính vì vậy, đã có rất nhiều giải pháp, giao thức, thuật toán được phát triển để giải quyết vấn đề này. Việc sử dụng giải pháp nào là tùy thuộc vào từng ứng dụng cụ thể và không loại trừ khả năng sử dụng kết hợp nhiều giải pháp để đạt hiệu quả an toàn như mong muốn.
Đối với VPN, IPSec là giao thức tối ưu về mặt an toàn dữ liệu. Thứ nhất,IPSec cung cấp xác thực tính toàn vẹn dữ liệu. Thứ hai, IPSec cho phép sử dụng các phương pháp, thuật toán mật mã, xác thực mạng nhất hiện có. Thứ ba, IPSec là một khung chuẩn mở, nghĩa là có thể lựa chọn các thuật toán phù hợp với mức độ an toàn dữ liệu mong muốn mà không bị giới hạn cứng nhắc phải sử dụng đúng một thuật toán nào đó, đồng thời có khả năng sử dụng các thuật toán tiên tiến phát triển trong tương lai. Điều này thể hiện tính linh hoạt rất cao của IPSec.
3.1. Mã hoá:
3.1.1. Khái niệm mật mã:
Hình sau cho thấy khái niệm chung sử dụng trong các thuật toán mật mã và mối quan hệ giữa chúng:Một hệ mật là một bộ 5 (P, C, K, E, D)thỏa mãn các điều kiện sau:
1) P là một tập hữu hạn các bản rõ có thể.
2) C là một tập hữu hạn các bản mã có thể.
3) K là một tập hữu hạn các khóa có thể.
4) Đối với k K có một quy tắc mã ek: P→C và một quy tắc giải mã tương ứng
dk:C→P sao cho dk(ek(x)) = x với mọi bản rõ x P.
Điều kiện 4 nói lên rằng một bản rõ x được mã hóa bằng ek và bản mã nhận được sau đó được giải mã bằng dk thì ta phải thu được bản rõ ban đầu x. Các khái niệm trong hình được trình bày như sau:
+ Plaintext và ciphertext: bản tin ban đầu được gọi là bản tin rõ (plaintext hay cleartext). Quá trình biến đổi bản tin để che dấu nội dung thật của nó được gọi là mật mã (encryption). Bản tin đã mật mã được gọi là ciphertext. Quá trình biến bản tin đã mật mã về bản tin ban đầu được gọi là giải mã (decryption).
+ Thuật toán và khóa: thuật toán mật mã (còn gọi là cipher) là một hàm toán học sử dụng để mật mã và giải mã. Tính an toàn của một thuật toán mật mã phụ thuộc vào một khóa bí mật (secret key). Khoảng các giá trị có thể có của khóa được gọi là không gian khóa (key space). Các quá trình mật mã và giải mã đều phụ thuộc vào khóa K như sau:
Mật mã: EK(P) = C
Giải mã: DK(C) = P
Về cơ bản thì các thuật toán mật mã được chia thành hai loại: các hệ thống mật mã khóa đối xứng (Symmetric Key Cryptosystem), và các hệ thống mật mã khóa công khai (Public Key Cryptosystem). Mật mã khóa đối xứng sử dụng cùng một khóa duy nhất trong quá trình mật mã và giải mã, với hệ thống này thì hai đầu kênh được cung cấp cùng một khóa qua một kênh tin cậy và khóa này phải tồn tại trước quá trình truyền tin.
Còn mật mã khóa công khai sử dụng hai khóa khác nhau (một khóa bí mật và một khóa công khai), khóa công khai dùng để lập mã và chỉ có khóa bí mật là có khả năng giải mã.
Bản thân các hệ mật mã này có nhiều thuật toán thực hiện.
3.1.2. Các hệ thống mật mã khóa đối xứng:
3.1.2.a. Giải thuật DES (Data Encryption Standard):
Thuật toán DES được đưa ra vào năm 1977 tại Mỹ và đã được sử dụng rất rộng rãi. Nó còn là cơ sở để xây dựng một thuật toán tiên tiến hơn là 3DES. Hiện nay, DES vẫn được sử dụng cho những ứng dụng không đòi hỏi tính an toàn cao, và khi chuẩn mật mã dữ liệu mới là AES chưa chính thức thay thế nó. DES mã hóa các khối dữ liệu 64 bit với khóa 56 bit. Sơ đồ thuật toán DES cho trên hình sau:Trước hết 64 bit T đưa vào được hoán vị bởi phép hoán vị khởi tạo IP (Initial Permutation), không phụ thuộc vào khóa T0 = IP(T). Sau khi thực hiện 16 vòng lặp, dữ liệu được đi qua các bước hoán vị đảo RP (Reversed Permulation) và tạo thành khối ciphertext. Thực chất các hoán vị này không là tăng tính an toàn DES.
Trung tâm của mỗi vòng lặp xử lý DES là mạng Fiestel (được đặt theo tên của một nhà khoa hoc tại IBM). Hoạt động của mạng Fiestel được diễn tả như sau:
T =L0R0 với L0= t1…t32, R0= t33…t64
Xét ở vòng lặp thức i (0<i<16): Li = Ri-1, Ri = Li-1 Xor F(Ri-1,Ki) trong đó ⊕ là phép cộng XOR và Ki là khóa 48 bit. Ở vòng lặp cuối cùng các nhánh trái và phải không đổi chỗ chi nhau, vì vậy input của IP^-1 là R16L16. Trong đó hàm F được thể hiện là khối hộp đen.* Hoạt động của khối hộp đen:
Khá phức tạp, trong đó nó gồm có các khối chức năng và nhiệm vụ như sau:
- Hoán vị mở rộng: Mở rộng Ri-1 32 bít đầu vào thành khối 48 bít. Hoạt động mở rộng này dựa vào một bảng định trước để lựa chọn các bít đầu ra. Sau đó các bít sau
hoán vị mở rộng được XOR với khóa Ki.
- S-box: Kết quả sau khi XOR được chia thành 8 khối 6 bít từ B1 tới B6. Mỗi khối Bj sau đó được đưa vào một hàm Sj. Hàm Sj này sẽ trả lại các khối 6 bit thành khối 4 bit theo bảng định trước.
- P-Box: Các khối 4 bit sau khi được trả lại sẽ kết hợp với nhau thành khối 32 bít đầu ra của hộp đen.
* Hoạt động tính khóa:
Khóa input ban đầu là một khối 64 bít, sau khi bỏ đi 8 bít parity và hoán vị 56 bít còn lại theo một trật tự nhất định. DES tạo ra 16 khóa, mỗi khóa có chiều dài 48 bit từ một khóa input 56 bit, dùng cho 16 vòng lặp. Tại mỗi vòng lặp, khóa Ki-1 được chia thành hai phần là Ci-1 và Di-1. Sau đó các bit của hai thành phần Ci-1 và Di-1 được hoán vị dịch để tạo thành Ci và Di. Sau khi hoán vị, Ci bỏ qua các bít 9, 18, 22, 25 tạo thành nữa trái của Ki(24 bit) và Di bỏ qua các bít 35, 38, 43, 54 tạo ra nữa phải của Ki (24 bít). Ghép nữa trái và nữa phải tạo ra khóa Ki 48 bít.
* Giải mã: Quá trình giải mã thực hiện các bước này theo thứ tự ngược lại.
3.1.2.b. Thuật toán mã hoá AES:
Thuật toán DES với khóa 56 bit đã được phát triển cách đây gẩn 28 năm, và hiện không còn phù hợp với những ứng dụng đòi hỏ tính an toàn dữ liệu cao (đặc biệt các ứng dụng về quân sự, hoặc thương mại điện tử). Đây là lý do cần phát triển các thuật toán mật mã mới đáp ứng được những yêu cầu an toàn dữ liệu ngày càng cao. Trong số các thuật toán mới được phát triển gần đây có 3DES (Triple DES) với khóa công khai 168 bít và đặc biệt là AES. Năm 1997, NIST (US National Institute of Standards and Technology) đã tổ chức lựa chọn những thuật toán sau:
* MARS (IBM): Cải tiến mạng Fiestel, thực hiện 32 vòng và dựa trên cấu trúc kết hợp của DES.
* RC6 (RSA): Thực hiện mạng Fiestel 20 vòng, cải tiến thuật toán RC5.
* Twofish (Bruce Schneier): thực hiện mạng Fiestel 16 vòng, cải tiến thuật toán Blowfish.
* Serpent (Ross Anderson/ Eli Biham/ Lars Knudsen): Thực hiện mạng hoán vịthay thế 32 vòng.
* Rijndael (Joan Daemen/ Vincent Rijimen): Thực hiện mạng hoán vị thay thế cải tiến 10 vòng.
Trong 5 thuật toán trên, NIST đã chọn Rijindael cho chuẩn AES vào năm 2000. Trong tương lai, AES sẽ là chuẩn mật mã khối đối xứng và sẽ được thực hiện trên cả phần cứng lẫn phần mềm. AES sẽ được thiết kế để có thể tăng độ dài khóa khi cần thiết. Độ dài khối dữ liệu của AES là n = 128 bít, còn độ dài khóa k = 128, 192, 256 bitThuật toán AES thực hiện dựa trên 4 thao tác:
- Thay thế byte (Byte Substitution)
- Dịch dòng( ShiftRows)
- Trộn cột (Mix Columns)
- Cộng khoá (Add Round Key)
AES sử dụng 2 thuật toán khác nhau cho mã hoá và giải mã , do vậy tất cả các thao tác trong thuật toán bắt buộc phải có thao tác ngược (ngoại trừ phép XOR).
3.1.3. Các hệ thống mật mã bất đối xứng
Đặc trưng của kỹ thuật mật mã bất đối xứng là dùng 2 khoá riêng biệt cho hai việc mã hoá và giải mã. Một trong hai khoá được phổ biến công khai gọi là khoá công khai (Public Key hay PU), khoá còn lại được giữ bí mật gọi là khoá riêng (Private Key hay PR). Nếu quá trình mã hoá dùng khoá PU thì quá trình giải mã dùng khoá PR và ngược lại.
3.1.3.a. Thuật toán mật mã RSA
RSA là thuật toán mật mã bất đối xứng được xây dựng bởi Ron Rivest, Adi Shamir và Len Adleman tại viện công nghệ Massachusetts (MIT), do đó được đặt tên là Rivest – Shamir – Adleman hay RSA. Thuật toán này ra đời năm 1977 và cho đến nay đã
được ứng dụng trong nhiều lĩnh vực. Cũng như các thuật toán mật mã bất đối xứng 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ì số nguyên này có giá trị từ 0 đến 21024 -1 tương đương với số thập phân có 309 chữ số.
Thuật toán RSA được mô tả như sau:
1- Để tạo ra một cặp khóa RSA, trước hết, chọn hai số nguyên tố đủ lớn p và q. Gọi N là tích của p và q (N = pq).
2- Tiếp theo, chọn một số e sao cho e và (p-1)(q-1) là hai số nguyên tố cùng nhau. Sau đó tìm số d sao cho ed = 1 mod (p-1)(q-1). Ký hiệu mod m biểu diễn phép modulo trên cơ số m.
3-Bây giờ, bỏ qua vai trò của p và q. Với 3 thành phần còn lại là N, e và d, ta đó:
-Khóa công khai (public key) là tổ hợp (N, e)
-Khóa bí mật (private) là tổ hợp (N, d).
4- 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 (với M là số nguyên nhỏ hơn N)
5-Và quá trình giải mã C được thực hiện theo công thức:
M = Cd mod N
3.1.3.b. Thuật toán trao đổi khoá Diffie – Hellman:
Diffie-Hellman là một thuật toán dùng để trao đổi khóa (key exchange) chứ không dùng để mật mã hóa (che giấu) dữ liệu. Tuy nhiên, Deffie-Hellman lại có ích trong giai đọan trao đổi khóa bí mật của các thuật toán mật mã đối xứng. Như đã trình bày ở phần mật mã đối xứng, một trong những vấn đề quan trọng liên quan trực tiếp đến tính an toàn của các thuật toán mật mã đối xứng là vấn đề thống nhất khoá bí mật giữa các thực thể thông tin.
Thuật toán trao đổi khoá Diffie-Hellman dựa trên phép logarit rời rạc (discrete log). Cho trước một số g và x = gk ,để tìm k, ta đơn giản thực hiện phép logarit: k = logg(x). Tuy nhiên, nếu cho trước g, p và (gk mod p), thì quá trình xác định k được thực hiện theo cách khác với cách ở trên và được gọi là logarit rời rạc. Việc tính logarit rời rạc nói chung rất phức tạp, gần như không thực hiện với chi phí thời gian chấp nhận được.
Thuật tóan Diffie-Hellman khá đơn giản như sau:
3.2. Xác thực thông tin:
Xác thực thông tin (message authentication) là cơ chế đảm bảo thông tin truyền đi giữa các thực thể (thường thông qua hệ thống mạng) không bị giả mạo, thay đổi nội dung, thứ tự và thời gian truyền có ý nghĩa.
Trong báo cáo này do nghiên cứu về IPSec nên chỉ đi tìm hiểu về các hàm băm.
3.2.1. Tổng quan về hàm băm:
Nguyên tắc của hàm băm là biến đổi khối thông tin gốc có độ dài bất kỳ thành một đoạn thông tin có độ dài cố định gọi là mã băm (hash code hay message digest). Mã băm được dùng để kiểm tra tính chính xác của thông tin nhận được.
Một hàm băm H áp dụng cho khối thông tin M tạo ra kết quả m, trong tài liệu này, được ký hiệu là H(M) = m.
Thông thường, mã băm được gởi kèm với thông tin gốc, cùng với một cơ chế bảo vệ nào đó giúp mã băm không bị thay đổi hoặc tính lại. Ở phía nhận, hàm băm lại được áp dụng đối với thông tin gốc để tìm ra mã băm mới, giá trị này được so sánh với mã băm đi kèm với thông tin gốc. Nếu hai mã băm giống nhau, nghĩa là thông tin gởi đi không bị thay đổi.
Hình 3.6 – Một ứng dụng điển hình của hàm băm
Chỉ có thể dùng hàm băm để tạo ra mã băm từ thông tin gốc chứ không thể phục hồi được thông tin gốc từ mã băm. Do đặc tính này, các hàm băm bảo mật cũng còn được gọi là hàm băm một chiều (one way hash funtion).
Một hàm băm bảo mật phải có 3 thuộc tính bắt buộc sau đây:
• Tính một chiều (one-way property): Cho trước một đoạn thông tin m bằng với kích thước mã băm của một hàm băm H, không thể tìm được một khối thông tin M sao cho H(M) = m.
• Tính kháng đụng độ yếu (weak collision resistance): Cho trước khối thông tin M, không thể tìm được một khối thông tin M’ khác x sao cho H(M) = H(M’).
• Tính kháng đụng độ mạnh (strong collision resistance): Không thể tìm được hai khối thông tin M và M’ khác nhau sao cho H(M) = H(M’).
3.2.2. Hàm băm SHA:
SHA (Secure Hash Function) là hàm băm được viện Tiêu chuNn và Công nghệ hoa kỳ (NIST) chuẩn hoá năm 1993, sau đó được chỉnh sửa năm 1995 và đặt tên là SHA-1, từ đó phiên bản cũ được gọi là SHA-0 và gần như không được dùng đến. SHA-1 dựa chủ yếu cấu trúc của hàm băm MD4.
SHA-1 tạo ra mã băm có chiều dài cố định là 160 bit. Năm 2002, xuất hiện thêm một số phiên bản khác của SHA, chủ yếu là tăng chiều dài mã băm, như: SHA-256 (mã băm dài 256 bit), SHA-384 (mã băm dài 385 bit) và SHA-512 (mã băm dài 512 bit).
Hình 3.7- Thông số các phiên bản SHA
SHA-1 chấp nhận các khối thông tin có kích thước tối đa là 264 bit để tạo ra mã băm với độ dài cố định 160 bit. Tòan bộ khối thông tin được xử lý theo từng khối 512 bit, qua 5 công đoạn:
- Gắn bit đệm – Append padding bit
- Gắn chiều dài – Append length
- Khởi tạo bộ đệm MD – Initialize MD buffer
- Xử lý thông tin theo từng khối 512 bit – Process message
- Xuất kết quả - Output
3.2.3. Thuật toán băm MD5:
MD5 là một giải thuật xác thực thông tin được sử dụng phổ biến trong thời gian qua trong cộng đồng Internet, đặc biệt dùng để kiểm tra tính chính xác của các phần mềm mã nguồn mở phát hành trên mạng. Giải thuật này được xây dựng bởi Ron Rivest, và được chuẩn hóa bằng RFC 1321. MD5 có thể xử lý các khối thông tin có độ dài không giới hạn để tạo ra mã băm dài 128 bit. Thông tin gốc cũng được xử lý theo từng đọan 512 bit.
So sánh giữa MD5 và SHA-1:Với 128 bit mã băm, việc tìm ra hai khối thông tin để có cùng một giá mã băm không còn là điều bất khả thi đối với năng lực của các bộ xử lý hiện nay. Do đó, độ an tòan của MD5 đang bị đe dọa nghiêm trọng, và trong thời gian ngắn sắp tới, mức độ phổ biến của MD5 có thể sẽ giảm đi và được thay thế bằng một giải thuật xác thực khác.
Comment