Thông điệp riêng tư (Message privacy)

Một phần của tài liệu Giao thức bảo mật WEP trong WLAN (Trang 62 - 70)

Một vấn đề lớn: tấn công các phương pháp mã hóa WEP. Chúng ta đã thấy các cơ chế bảo mật ở phần trên là không hiệu quả, nhưng phương thức mã hóa vẫn được duy trì, thì những việc mà kẻ tấn công có thể làm là rất hạn chế.

Có hai mục tiêu chính trong tấn công mã hóa: giải mã thông điệp và được khóa. Sự thành công cuối cùng là để có được khóa. Một khi kẻ tấn công có khóa, hắn có thể tự do khám phá và tìm kiếm các thông tin có giá trị. Sở hữu khóa có nghĩa là truy cập được vào các thông tin bí mật và đi qua được các lớp an ninh bên trong, chẳng hạn như mật khẩu bảo vệ máy chủ và hệ điều hành. Tuy nhiên, đặt vấn đề truy cập mạng trái phép qua một bên. Nếu một kẻ tấn công có được khóa, sẽ không bị phát hiện, và có đủ thời gian để tìm kiếm thông tin hữu ích. Nếu một cuộc tấn công được phát hiện, các khóa WEP có thể được thay đổi, bảo mật được thiết lập lại.

Cách tốt nhất để lấy được khóa là có được thông điệp gốc. Nếu có thông điệp gốc, kẻ tấn công có thể thực hiện rất nhiều kiểu tấn công khác nhau như sửa đổi thông điệp và phát lại. Các thông tin này cũng có thể được sử dụng như một bàn đạp để lấy được khóa.

Có ba điểm yếu kém trong cách RC4 được sử dụng trong WEP và hãy xem xét từng trường hợp riêng biệt:

• Tái sử dụng giá trị kiểm tra tính toàn vẹn ICV (integrity check value)

• Sự yếu kém của khóa được tạo bởi RC4

• Trực tiếp tấn công khóa

Tái sử dụng giá trị kiểm tra tính toàn vẹn ICV (integrity check value)

Một trong những nhà mật mã học đầu tiên chỉ ra điểm yếu của WEP là Jesse Walker của Intel. Tháng 10 năm 2000 ông đã trình bày với Ủy ban Tiêu chuẩn IEEE 802,11 về vấn đề "Không an toàn với bất kỳ kích thước nào của khóa, phân tích của sự đóng gói WEP." Walker chỉ ra một số điểm yếu, và đặc biệt tập trung vào vấn đề tái sử dụng IV.

Hãy xem xét IV được sử dụng như thế nào. Thay vì sử dụng một khóa bí mật cố định, khóa bí mật được gắn thêm một giá trị IV 24-bit và sau đó là sự kết hợp khóa bí mật và IV để tạo thành khoá mã hóa. Giá trị của IV được gửi trong một frame để các thiết bị nhận có thể thực hiện giải mã. Một mục đích của IV là để đảm bảo rằng hai thông điệp giống hệt nhau sẽ không cho ra bản mã giống nhau. Tuy nhiên, có một mục đích thứ hai và quan trọng hơn liên quan đến cách sử dụng WEP XOR để tạo ra các bản mã.

Giả sử vào thời điểm này không có chỉ IV và khoá bí mật được sử dụng để mã hóa. Đối với mỗi khung hình, thuật toán RC4 được khởi tạo với giá trị khóa trước khi bắt đầu phát sinh chuỗi khóa giả ngẫu nhiên. Nhưng nếu khóa được giữ cố định, các thuật toán RC4 được khởi tạo có trạng thái giống nhau vào mọi thời điểm. Do đó chuỗi khóa sẽ là một chuỗi byte giống nhau cho mỗi frame. Điều này là rất nguy hiểm bởi vì, nếu kẻ tấn công có thể tìm ra chuỗi khóa chính là gì, anh ta có thể dễ dàng giải mã từng frame bằng cách XOR frame với trình tự đã biết.

Bằng cách thêm vào khóa giá trị IV trong từng thời điểm, RC4 được khởi tạo với trạng thái khác nhau cho mỗi frame và dẫn đến chuỗi khóa khác nhau cho mỗi lần mã hóa, như vậy sẽ tốt hơn nhiều. Nhưng có thật là giá trị IV là khác nhau cho mỗi frame. Nếu IV là một giá trị không đổi, sẽ không khá trường khóa là cố định.

Chúng ta thấy rằng nếu IV là hằng số thì sẽ vô ích.Việc sử dụng giá trị IV khác nhau cho mỗi frame là cần thiết. Nhưng có một số giới hạn các IV có thể vì vậy tuy sử dụng IV khác nhau cho hầu hết các frame nhưng cuối cùng bắt đầu phải tái sử dụng IV đã được sử dụng trong quá khứ. Điều này là không thể chấp nhận được, nhưng nó là chính xác những gì WEP thực hiện.

Tại sao tái sử dụng IV lại là một vấn đề. Chúng ta đã chắc chắn rằng IV nên là khác nhau cho mỗi frame. Trực quan, bạn có thể nghĩ rằng cách tiếp cận tốt nhất là tạo ra một giá trị ngẫu nhiên. Tuy nhiên, với lựa chọn ngẫu nhiên thì khả năng bạn sẽ nhận được một IV lặp lãi là rất dễ xảy ra. Điều này được gọi là mẫu thuẫn ngày sinh nhật

Cách tốt nhất để phân bổ IV đơn giản là gia tăng giá trị sau mỗi lần. Điều này sẽ gia tăng thời gian để một giá trị IV lặp đi lặp lại. Tuy nhiên, với một IV 24-bit, một xung đột IV (sử dụng một giá trị trước đó) sẽ xảy ra sau khi 224 frame đã được truyền (gần 17.000.000). IEEE 802.11b có khả năng truyền tải 500 frame một giây và đôi khi còn nhiều hơn. Với 500 frame một giây, toàn bộ giá trị IV sẽ dùng hết trong khoảng bảy giờ.

Trong thực tế có khả năng tái sử dụng là sớm hơn nhiều vì có thể có nhiều thiết bị truyền, mỗi lần gia tăng sẽ sử dụng một giá trị IV riêng biệt (giả định các khóa mặc định được sử dụng). Tái sử dụng IV là chắc chắn trong WEP vì vậy chúng ta hãy nhìn lại tại sao xung đột là một vấn đề.

Mâu thuẫn ngày sinh (Birthday Paradox )

BirthDay attack" là tên của một cuôc tấn công, tên này được sử dụng để nói về một loại tấn công "brute-force".Tên cuộc tấn công đựoc đặt như vậy xuất phát từ một kết quả khảo sát đầy ngạc nhiên: Trong một nhóm 23 người, khả năng 2 người hay nhiều hơn 2 ngươi có cùng ngày sinh sẽ đạt xác xuất lớn hơn ½.

Nếu một hàm số nào đó, khi đưa vào một biến số ngẫu nhiên, cho ra một kết quả có giá trị nằm trong vùng giá trị bằng, giống nhau k, thì sau khoảng 1,2 k ^1/2 [1,2 x căn k] phép thử lặp lại với các biến số đầu vào khác nhau, ta sẽ có các kết quả giống hệt nhau. Trong trường hợp "BirthDay paradox" thì thấy k=365.

Nếu bạn biết các chuỗi khóa tương ứng với một giá trị IV đã cho, bạn ngay lập tức có thể giải mã bất kỳ frame nào tiếp theo mà sử dụng cùng một IV (và khóa bí mật). Điều này đúng bất kể là khóa bí mật là 40 bit, 104 bit, hoặc 1.040 bit. Để giải mã tất cả các thông điệp, bạn sẽ phải biết chuỗi khóa với mỗi giá trị IV có thể. Bởi vì có gần 17.000.000 giá trị IV có thể, nên đây có vẻ là một nhiệm vụ khó khăn. Tuy nhiên, nó không phải là không thể: Nếu bạn muốn lưu 1.500-byte chuỗi khóa, cho mỗi giá trị IV có thể, bạn cần một không gian lưu trữ của 23Gbytes-khá khả thi trên đĩa cứng của một máy tính hàng ngày. Với cơ sở dữ liệu như vậy, bạn có thể giải mã tất cả các thông điệp được gửi mà không cần biết được khóa bí mật. Tuy nhiên, bạn vẫn phải tìm hiểu tất cả những chuỗi khóa đó.

Giả sử bạn đã nắm bắt hai thông điệp được mã hóa bằng cách sử dụng cùng một IV và khóa bí mật. Bạn biết rằng chuỗi khóa là như nhau trong cả hai trường hợp, mặc dù bạn chưa biết chính xác nó là bao nhiêu. Ta sẽ phân tích:

C1 = P1 KS (Bản mã1 = bản gốc1 XOR với chuỗi khóa) Và

C2 = P2 KS (Bản mã1 = bản gốc1 XOR với chuỗi khóa) Với chuỗi khóa là như nhau trong mỗi trường hợp

Nếu bạn XOR C1 và C2, KS biến mất:

C1 C2 = (P1 KS) (P2 KS) = P1 P2 KS KS = P1 P2

Điều này đúng vì XOR cùng một giá trị hai lần sẽ đưa bạn trở lại giá trị ban đầu của bạn.

Vậy, nếu kẻ tấn công có một thông điệp là XOR của hai bản gốc thì có hữu ích không? Vẫn chưa. Tuy nhiên, một số các giá trị của bản gốc chắc chắn được biết đến, chẳng hạn như một số trường nhất định trong header. Một số trường khác giá trị là không được biết, nhưng mục đích của nó thì được biết đến. Ví dụ, trường địa chỉ IP có một bộ giới hạn các giá trị có thể có trong hầu hết các mạng. Các phần của văn bản thường được mã hóa ASCII , có thể là bàn đạp cho kẻ tấn công.

Trong một khoảng thời gian, nếu bạn thu thập đủ mẫu của IV, bạn có thể đoán phần đáng kể của chuỗi khóa và do đó giải mã được nhiều hơn nữa. Nó giống như một tòa nhà bị sụp đổ: Mỗi khối bị bạn phá vỡ đi làm cho nó càng có thể sụp đổ hoàn toàn. Giống như bạn có một số các chữ cái trong một từ và bạn cố gắng đoán các câu văn. Một khi bạn thành công cho một IV, bạn có thể giải mã tất cả các frame tiếp theo bằng cách sử dụng IV và tạo ra frame giả mạo bằng cách sử dụng cùng một IV. Mặc dù bạn không hề biết khóa.

Điểm yếu của khóa RC4

Thuật toán RC4 sẽ sinh ra số giả ngẫu nhiên (giả ngẫu nhiên). Một khi có một chuỗi các byte giả ngẫu nhiên, chúng ta có thể sử dụng chúng để mã hóa dữ liệu bằng chức năng XOR. Như chúng ta đã thấy, sử dụng toán tử đơn giản XOR sẽ là nguồn gốc của sự yếu

kém nếu nó không được áp dụng một cách chính xác, nhưng bây giờ, chúng ta hãy tập trung vào các chuỗi giả ngẫu nhiên, hoặc chuỗi khóa. (adsbygoogle = window.adsbygoogle || []).push({});

Ý tưởng cơ bản mã hóa RC4 là tạo ra một chuỗi các trình tự giả ngẫu nhiên của các byte được gọi là khóa dòng, sau đó được kết hợp với các dữ liệu bằng cách sử dụng toán tử OR (XOR). Toán tử XOR kết hợp hai byte và tạo ra một byte duy nhất. Nó làm điều này bằng cách so sánh các bit tương ứng trong từng byte. Nếu chúng bằng nhau, kết quả là 0, nếu chúng khác nhau, kết quả là 1. Ví dụ như hình 3.1

Hình 3.1: Toán tử XOR

Mỗi byte giả ngẫu nhiên được tạo ra bằng cách chọn một giá trị duy nhất từ các hoán vị dựa trên hai giá trị chỉ số, i và j, mà cũng thay đổi từng thời gian. Có rất nhiều hoán vị của 255 giá trị có thể được thực hiện. Trong thực tế, kết hợp với hai chỉ số, có 512 * 256! (Giai thừa) khả năng, là một số quá lớn để tính toán trên bất kỳ máy tính chúng ta có.

Khả năng của RC4 là khá mạnh mẽ mặc nó rất đơn giản. Rát khó để phân biệt một chuỗi giả ngẫu nhiên RC4 với một chuỗi ngẫu nhiên thực sự. RC4 đã được nghiên cứu bởi nhiều nhà mật mã học và chưa có phương pháp tốt nhất để phân biệt một chuỗi RC4 với một chuỗi ngẫu nhiên thật sự. Nó đòi hỏi cầm biết một mẫu liên tục của 1Gbyte của chuỗi đó trước khi khẳng định rằng chuỗi đó được tạo ra bởi RC4.

Thực tế là RC4 có một nhược điểm khá quan trọng. Để hiểu rõ sự yếu kém, chúng ta xem RC4 làm việc như thế nào. Đầu tiên nó tạo ra một bảng (S-box) từ 0-255 giá trị. Sau đó nó tạo ra một bảng 256-byte thứ hai với khoá, lặp đi lặp lại đến.khi bảng đó đầy. Sau đó, nó sắp xếp lại các S-box dựa trên giá trị trong bảng khóa. Đây là giai đoạn khởi tạo. Các byte giả ngẫu nhiên đầu tiên được tạo ra bằng cách sắp xếp lại các S-box một lần nữa.

Vấn đề ở đây là không có sắp xếp lại nhiều giữa các thiết lập ban đầu của bảng chính và giả ngẫu nhiên các byte giả ngẫu nhiên đầu tiên. Fluhrer et al. (2001) phân tích thực tế này "Điểm yếu trong tạo khóa của thuật toán RC4." Họ cho thấy rằng đối với một số giá trị quan trọng, mà họ gọi là các khóa yếu, một số lượng không cân xứng của các bit trong byte đầu tiên của chuỗi khóa (bytes giả ngẫu nhiên) đã được xác định bởi một vài bit của khóa.

Nhìn vào điểm yếu này theo cách khác: Một cách lý tưởng nếu bạn thay đổi bất kỳ bit nào trong khoá, sau đó sẽ tạo nên chuỗi khóa hoàn toàn khác nhau. Mỗi bit nên có một cơ hội 50% là khác nhau từ các dòng chính trước đó. Các nghiên cứu đã chỉ ra rằng đây không phải là sự trùng hợp. Một số bit của khoá có ảnh hưởng lớn hơn các bit khác. Một số bit khác lại không có ảnh hưởng (trên vài byte đầu tiên của chuỗi khóa). Điều này là xấu vì hai lý do. Trước tiên, nếu bạn giảm số lượng các bit có hiệu quả, sẽ dễ dàng hơn để tấn công khóa. Thứ hai, vài byte đầu tiên của bản gốc thường dễ dàng hơn để đoán. Ví dụ, trong WEP nó thường là tiêu đề LLC mà bắt đầu với cùng một giá trị thập lục phân "AA". Nếu bạn biết bản gốc, bạn có thể lấy được chuỗi khóa và bắt đầu tấn công khóa.

Có một cách rất đơn giản để tránh sự yếu kém: Huỷ vài byte đầu tiên của chuỗi khóa RC4. Một giới thiệu của RSA Labs là để loại bỏ 256 byte đầu tiên của chuỗi khóa, nhưng tất nhiên WEP không làm được điều này và thay đổi như vậy có nghĩa là các hệ thống cũ sẽ không còn tương thích.

Bạn có thể nghĩ rằng điều này không phải là quá xấu. Bạn có thể cố gắng không sử dụng một khóa yếu; hoặc nếu bạn biết được những khóa yếu, bạn có thể tránh được chúng, phải không? Hãy nghĩ lại. Hãy nhớ rằng các IV được thêm vào khóa bí mật. Và IV là luôn luôn thay đổi. Vì vậy, sớm hay muộn, khóa yếu được tạo ra.

Những cách tấn công trực tiếp lên khóa (Direct Key Attacks)

Trong một bài báo, Fluhrer et al. chỉ ra rằng sử dụng một giá trị IV thêm vào khóa bí mật tạo ra một điểm yếu rất lớn vì nó cho phép kẻ tấn công chờ đợi một khóa yếu để trực tiếp tấn công. Có hai trường hợp, một là IV được nối vào sau khóa bí mật và hai là IV được nối vào trước. Các trường hợp thêm vào trước là dễ bị tổn thương, và đó là trường hợp có liên quan cho WEP.

Ý tưởng là dựa trên khai thác các vấn đề trong các byte đầu tiên của khóa yếu. Đầu tiên bạn biết bản gốc qua một vài byte đầu tiên. Xem xét quá trình truyền phát để tìm

kiếm một khóa yếu phát sinh bởi các IV. Bây giờ bạn có một sự tương quan giữa các bản mã, bản gốc, và các byte khóa bí mật. Chỉ có một số giới hạn các giá trị có thể cho các byte đầu tiên của khóa bí mật mà có thể phù hợp với bản gốc và bản mã. Sau khi thu được khoảng 60 thông điệp như vậy, những kẻ tấn công có thể đoán các byte đầu tiên của khóa

Phương pháp này có thể được điều chỉnh để tấn công lần lượt mỗi byte khóa bí mật để cuối cùng toàn bộ khóa bí mật có thể được trích xuất. Lưu ý rằng tăng kích thước khóa từ 40 bit đến 104 bit chỉ có nghĩa là phải mất 2,5 lần thời gian để trích xuất khóa.

Tất cả các điểm yếu trước đây của WEP đều không nghiêm trọng bằng cuộc tấn công này. Hãy nhớ rằng chiết xuất các khóa là mục tiêu cuối cùng của kẻ tấn công, và đây là một phương pháp chiết xuất trực tiếp các khóa trong thời gian tuyến tính.

3.2.Những phương thức tấn công hay gặp

3.2.1.Phương thức dò mã dùng chung

Mã khóa dùng chung – Shared key có vai trò quan trọng trong cả 2 quá trình mã hóa và giải mã, vì vậy một trong những cách phá WEP mà kẻ tấn công hay dùng là dò ra mã khóa dùng chung đó dựa trên việc bắt gói tin, tổng hợp số liệu. Chúng ta sẽ biểu diễn quá trình mã hóa và giải mã dưới dạng toán học để phân tích nguyên lý phá mã khóa chung mã hóa.

- Gọi Z là kết quả sau khi thực hiện mã hóa RC4 tức là Z = RC4(Key, IV). - Gọi phần dữ liệu chưa mã hóa lúc đầu là P (gồm CRC và Packet), dữ liệu sau khi mã hóa là C, ta có C = P Z.

Một phần của tài liệu Giao thức bảo mật WEP trong WLAN (Trang 62 - 70)