Phương pháp bảo mật dựa trên AES-CCMP

Một phần của tài liệu nghiên cứu giải pháp bảo mật mạng không dây wlan (Trang 66)

2.3.3.1. Giới thiệu về AES-CCMP

AES-CCMP có độ an toàn cao nhất trong chuẩn IEEE 802.11i. Các hệ thống bảo mật sử dụng thuật toán AES cùng với một mode hoạt động nào đó, một số mode đơn giản và phổ biến nhất sẽ được nói đến ở đây. Sau đó chúng ta sẽ tìm hiểu CCMP, giao thức được sử dụng trong IEEE 802.11 và tìm hiểu cách thức hoạt động của giao thức này. Phần này cũng cho thấy làm thế nào mà CCMP lại phù hợp với IEEE 802.11 framework và cung cấp chế độ bảo mật hợp lý mà thỏa mãn hầu hết nhu cầu của người sử dụng.Phần trước đã tìm hiểu về TKIP, một trong những phương pháp dùng để mã hóa và chứng thực gói tin nằm trong RSN. TKIP là phần không thể thiếu được trong WPA, nó được sử dụng khá rộng rãi để đảm bảo an toàn trong quá trình sử dụng mạng không dây dựa trên những thiết bị chạy trên nền tảng của WEP. Tuy nhiên, nó lại không phải là mode mặc định đối với IEEE 802.11i mà là mode dựa trên chuẩn mã hóa AES. Việc mã hóa dựa trên AES mạnh hơn so với TKIP. Vấn đề tại sao nó lại được chọn lựa và vì lí do gì? Khi nói đến

RSN dựa trên AES thì AES không phải là một giao thức bảo mật,nó chỉ là thuật toán mã khối. Trong RSN, giao thức bảo mật có sử dụng thuật toán AES được gọi là giao thức Counter Mode-CBC MAC hay CCMP. CCMP bao gồm một loạt các quy tắc trong đó có sử dụng thuật toán mã hóa khối AES để bảo vệ các khung dữ liệu IEEE 802.11. AES chỉ là thuật toán dùng trong CCMP giống như RC4 là thuật toán dùng trong TKIP.Một lý do mà CCMP được cho là mạnh hơn TKIP bởi nó được xây dựng từ đầu, tức là nó được tạo ra hoàn toàn mới với những kỹ thuật tốt nhất. Khác hoàn toàn với TKIP, bởi TKIP là một giải pháp tình thế được tạo ra nhằm khắc phục những điểm yếu của WEP.

2.3.3.2. Thuật toán AES và các mode mã hóa

AES là thuật toán mã hóa khối, nó sử dụng các phép toán thông thường, các phép toán logic và khóa để biến một khối dữ liệu rõ 128 bit thành một khối dữ liệu mã. AES dựa trên thuật toán Rijdael do Joan Daeman và Vincent Rijmen tìm ra. Thuật toán này được chứng minh bằng tài liệu rất rõ ràng, bao gồm cả phần thuật toán và cách sử dụng rất chi tiết và đầy đủ (Daeman and Rijmen, 2000, 2001).Thuật toán Rijdael cho phép chọn các kích thước của khối và khóa khác nhau,có thể chọn 128, 192 hay 256 bit. Khi NIST quyết định chọn Rijdael cho AES thì ban đầu chỉ với độ lớn của khối là 128 bit nhưng vẫn cho phép chọn lựa 3 độ dài khóa khác nhau. IEEE 802.11i tiếp tục hạn chế thêm tức là chỉ chọn kích thước khóa và khối có độ dài 128 bit, điều này làm đơn giản hóa việc triển khai và tránh gây rắc rối cho người sử dụng phải chọn lựa khi cài đặt. Có thể dùng AES để mã hóa và giải mã một khối dữ liệu riêng biệt có độ dài cố định tuy nhiên dữ liệu thực tế lại không phải như vậy. Ví dụ, dữ liệu của WLAN được truyền đi với các khung có độ dài khác nhau, từ 512 đến 12000 bit. Vì thế, để sử dụng thuật toán mã hóa khối như AES chẳng hạn, chúng ta cần phải tìm cách tách ghép

dữ liệu sao cho nó có thể tạo thành được các khối có độ dài cố định trước khi mã, cũng như làm sao tái tạo lại khung dữ liệu như ban đầu sau khi giải mã. Phương pháp dùng để biến đổi dữ liệu thành các khối và ngược lại gọi là mode mã hóa. Việc chọn lựa một mode nào đó là rất quan trọng bởi nó liên quan đến cả độ phức tạp trong quá trình triển khai cũng như đối với vấn đề bảo mật. Các mode không hợp lý có thể tạo ra những lỗ hổng ngay cả khi được mã bởi AES.

Để hiểu được các mode hoạt động, chúng ta sẽ tìm hiểu một trong những mode đơn giản và dễ hiểu nhất: ECB (Electronic Code Book). Mode này khi được sử dụng cùng với thuật toán AES có tên gọi là AES/ECB.

a. Electronic Code Book (ECB)

Mode này đơn giản chỉ việc chia dữ liệu ban đầu ra thành các khối, sau đó thực hiện việc mã hóa đối với từng khối riêng biệt nhưng với cùng một khóa cho đến khi khối cuối cùng được mã hóa hết. Hình dưới đây mô tả quá trình thực hiện theo cả phương pháp nối tiếp và song song.

Cách này thực hiện rất đơn giản nhưng lại gặp phải một số vấn đề. Trước hết đó là do dữ liệu đầu vào không phải lúc nào cũng vừa đủ chia thành cách khối, vì thế phải thêm các bit và phải nhớ độ dài thực sự của dữ liệu ban đầu. Tiếp đến là vấn đề về bảo mật: nếu hai khối có nội dung như nhau thì sau khi mã sẽ có bản mã tương tự nhau do cùng khóa.

Ví dụ xét một chuỗi có 64 ký tự giống nhau “AAAAAA…”, nếu kích thước của khối AES là 128 bit (hay 16 byte) thì khi dùng ECB chuỗi đó sẽ được chia ra thành 4 khối, mỗi khối gồm 16 chữ A. Sau khi mã hóa, 4 khối này sẽ cho ra 4 khối bản mã giống hệt nhau, từ bản mã đó dưới con mắt của người ngoài sẽ dễ dàng nhận ra là 4 khối đó có dữ liệu ban đầu giống nhau. Do đặc điểm này và một số đặc điểm khác nữa của ECB nên trong thực tế nó không được sử dụng. Ngay cả NIST cũng khuyến cáo không nên dùng mode này, ngay cả khi nó được bảo vệ bằng thuật toán mạnh nhất.

b. Counter Mode

Counter mode phức tạp hơn ECB và nó hoạt động theo cách hoàn toàn khác, nó không trực tiếp sử dụng khối mã AES, thay vào đó, nó mã giá trị của số đếm tương ứng rồi sau đó XOR kết quả mã với khối dữ liệu để được khối mã. Các số đếm này được tăng lên một đơn vị ứng với mỗi khối được mã. Quá trình này được mô tả trên hình sau:

Hình 2.19: Ví dụ về Counter Mode

Trên hình vẽ ta thấy, dữ liệu được chia thành các khối, mỗi khối được XOR với kết quả mã của số đếm. Ở đây, giá trị của bộ đếm tăng từ 1 đến 11

ứng với 11 khối dữ liệu. Thực tế, bộ đếm có thể bắt đầu từ một số bất kỳ và tăng theo một quy luật khác. Điều quan trọng là bên thu nếu muốn mã hóa được dữ liệu thì phải biết giá trị ban đầu của bộ đếm cũng như quy luật tăng của nó.

Do bộ đếm thay đổi giá trị khác nhau ứng với mỗi khối nên vấn đề về các khối mã giống nhau mà ECB gặp phải đã được giải quyết. Ngay cả với hai khối dữ liệu đầu vào giống hệt nhau thì kết quả sau của bản mã thu được vẫn khác nhau nhờ vào bộ đếm. Tuy nhiên, có trường hợp phương pháp này vẫn mã hóa hai khối giống hệt nhau, tách biệt hẳn nhau nhưng vẫn cho giá trị mã giống nhau, điều này giải thích tại sao bộ đếm không bắt đầu từ một mà nó thường bắt đầu từ một giá trị bất kỳ rồi thay đổi ứng với mỗi khối.Counter mode có một số đặc điểm khá thú vị. Việc giải mã được thực hiện y hệt như quá trình mã bởi vì XOR cùng một giá trị 2 lần sẽ trả lại kết quả như ban đầu. Điều đó có nghĩa là khi thực hiện chỉ cần mỗi khối mã hóa AES mà không cần đến khối giải mã. Một đặc điểm khác là quá trình mã hóa có thể được thực hiện song song, do tất cả các giá trị của bộ đếm được biết trước nên giá trị mã hóa AES của các bộ đếm có thể được tính toán trước, nhờ đó có thể mã hóa toàn bộ dữ liệu cùng một lúc. Không phải mode nào cũng thực hiện được giống như vậy. Và một đặc điểm nữa là dữ liệu không phải chia chính xác đúng độ dài của một khối. Đơn giản chỉ cần lấy một khối (ví dụ chỉ là 100 bit chứ không phải là 128 bit) và XOR nó với giá trị mã của số đếm rồi lấy đúng số bit mà ta cần (lấy 100 bit chứ không phải là 128 bit, bỏ 28 bit). Do vậy mà độ dài của bản mã bằng đúng độ dài của bản rõ. Do việc mã hóa mỗi khối phụ thuộc vào giá trị của khối trước đó nên counter mode cần cho mã hóa chuỗi.Counter mode đã được sử dụng trên 20 năm và khá phổ biến cũng như được cộng đồng những nhà mật mã tin cậy. Tính đơn giản và chín muồi của nó là một lựa chọn hấp dẫn đối với

RSN. Tuy nhiên, mode này không cung cấp khả năng chứng thực, vì thế mà RSN đã phải đưa thêm tính năng mới này vào.

c. Counter Mode + CBC MAC (CCM)

CCM mode được tạo ra dành riêng cho IEEE 802.11i RSN, nhưng nó cũng có thể được áp dụng cho các hệ thống khác và là mode chính sử dụng với AES. Nó cũng được đệ trình lên IETF để dùng cho bảo mật IP. CCM được 3 nhà mật mã học trong nhóm IEEE 802.11i tìm ra, đó là: Doug Whiting, Russ Housley và Niels Ferguson. Nó được tạo ra dựa trên counter mode.CCM sử dụng counter mode cùng với một phương pháp chứng thực dữ liệu gọi là CBC (Cipher Block Chaining). CBC được dùng để tạo ra MIC. MIC được gọi là mã chứng thực gói tin, vì thế mà có tên là CBC-MAC.CBC- MAC là một kỹ thuật khác cũng được dùng trong rất nhiều năm và được chuẩn hóa trên toàn thế giới. Nó được thực hiện như sau:

1. Lấy một khối dữ liệu đầu tiên và mã hóa nó bằng AES (hay bằng phương pháp mã khối nào đó).

2. XOR kết quả với khối thứ 2 và lại mã tiếp.

3. Lại tiếp tục XOR kết quả trước với khối tiếp theo và mã kết quả vừa XOR, cứ lặp lại quá trình như vậy cho đến khi toàn bộ dữ liệu được mã hết. Kết quả cuối cùng là một khối (trong trường hợp này là 128 bit) là sự kết hợp của tất cả dữ liệu. Nếu chỉ cần một hay một số bit bị thay đổi, kết quả thu được sẽ hoàn toàn khác (xác suất trùng nhau chỉ là 2-128). CBC-MAC rất đơn giản nhưng lại không thực hiện được theo kiểu song song, việc mã hóa phải thực hiện tuần tự. Thêm vào đó, nó chỉ có thể sử dụng đối với dữ liệu có số khối chính xác. CCMP cung cấp một giải pháp là thêm bit (pading) nhưng nó lại khiến cho một số nhà mật mã học lo lắng.CCM mode dùng cả hai kỹ thuật nổi tiếng, đó là counter mode và CBC-MAC. Nó thêm vào

những đặc điểm rất hữu ích cho các ứng dụng như là đối với RSN. Các đặc điểm đó là:

 Tạo ra số nonce nên các dữ liệu là hoàn toàn khác nhau.

 Việc mã hóa và chứng thực chỉ sử dụng một khóa.

 Mở rộng việc chứng thực đối với dữ liệu không được mã hóa.

Đặc điểm cuối cùng cần phải tìm hiểu kỹ và khá quan trọng đối với RSN. Trong hầu hết các phương pháp đang được sử dụng để thực hiện mã hóa và chứng thực, thường giả định rằng toàn bộ dữ liệu sẽ được mã hóa. Tuy nhiên, trong IEEE 802.11 chỉ có một phần dữ liệu là được mã. Phần header của khung IEEE 802.11 có chứa địa chỉ MAC để chuyển gói tin đến đích cũng như các thông tin về hoạt động của WLAN cần phải được ở dạng rõ, tức là không mã hóa. Vì thế mà chỉ có phần dữ liệu là được mã mà thôi. Tuy nhiên, dù phần header không được mã thì bên thu vẫn muốn đảm bảo nó không bị thay đổi. Ví dụ, ta không muốn một kẻ nào đó thay đổi địa chỉ nguồn, vì nếu xảy ra như vậy, ta sẽ gửi trả lại dữ liệu cho kẻ gian thay vì gửi cho chính người ta muốn gửi. Để làm được điều này, người ta sử dụng CCM, nó cho phép việc mã hóa được thực hiện ở một phần của gói tin được chứng thực bởi CBC-MAC.

Nhìn chung việc sử dụng cùng một khóa để thực hiện hai chức năng mã hóa là không hay cho lắm. Ở đây chính là việc dùng một khóa để mã hóa và chứng thực. Tuy dùng chung một khóa nhưng trong mỗi trường hợp lại dùng cùng với IV. Cấu trúc của IV là khác nhau đối với các phần counter mode và CBC-MAC, vì thế dẫn đến hai khóa tách riêng biệt.

2.3.3.3. Sử dụng CCMP trong quá trình mã hóa và giải mã

Phần này mô tả cách mà các gói WLAN được mã hóa và giải mã sử dụng CCMP. Điều quan trọng đầu tiên là CCMP mã hóa dữ liệu ở cấp MPDU chứ không phải là ở MSDU. Mỗi một MPDU ứng với một khung (adsbygoogle = window.adsbygoogle || []).push({});

truyền và nó là một phần của MSDU do MSDU được chia ra thành các MPDU.

a. Các bước mã hóa tổng quát

Dữ liệu đầu MSDU được chia ra thành các fragment. Mỗi fragment tạo nên một MPDU và có phần header IEEE 802.11 bao gồm địa chỉ nguồn, địa chỉ đích và các thông số khác. Mỗi MPDU được xử lý bằng thuật toán CCMP để tạo ra một MPDU mã. Chỉ có phần dữ liệu là được mã, còn phần header thì không. Tuy nhiên, CCMP thực hiện nhiều việc khác chứ không chỉ mã hóa các phần của MPDU. Nó còn thêm vào các trường, khiến cho độ dài của MPDU sau khi mã lớn hơn MPDU trước 16 byte.

Hình 2.20 mô tả quá trình của dữ liệu từ MSDU đến MPDU và truyền dữ liệu đi.

Trình tự xử lý với một MPDU được thể hiện như trong hình 2.21 và được mô tả như sau:

1. Ban đầu là với MPDU chưa được mã, có đầy đủ phần IEEE 802.11 MAC header. Phần header này bao gồm cả địa chỉ nguồn, địa chỉ đích, một số trường được gán giá trị sau nên tại thời điểm này nó có giá trị 0.Thông tin chứa trong header được trích ra và được sử dụng trong quá trình tạo ra số MIC 8 byte. Trong giai đoạn này phần CCMP header 8byte được tạo ra để sau đó ghép vào MPDU.

3. MIC đã được tính toán nhằm bảo vệ CCMP header, dữ liệu và các phần khác của IEEE 802.11 header. Những giá trị của trạng thái hiện tại được đưa vào trong số nonce. MIC sau đó được ghép với dữ liệu.

4. Cả phần dữ liệu và MIC đều được mã hóa. Sau khi mã hóa, phần CCMP

header được gắn vào.

5. Cuối cùng, phần MAC header được phục hồi và gắn vào phần đầu của MPDU vừa mã ở trên, đến thời điểm này, nó đã sẵn sàng trong hàng đợi để truyền đi. Trong quá trình truyền, chỉ có phần MAC header được quan tâm và cập nhật, không có thay đổi gì đối với CCMP header.

Hình 2.21: Trình tự xử lý một MPDU

Các MPDU được mã được đưa đến hàng đợi trước khi truyền. Có thể có một vài hàng đợi khác nhau và thứ tự của các hàng đợi dựa trên một số chính sách ưu tiên. Điều này cho phép mở rộng về sau đối với các lớp dữ liệu khác nhau trong IEEE 802.11e. Ngay trước khi truyền, một số trường của IEEE 802.11 header được thay đổi để phù hợp với quy tắc truyền. Các trường bị thay đổi được gọi là các trường có thể biến đổi và chúng không được dùng để tính lại số MIC nữa.

Ở đây ta tìm hiểu một chút về CCMP header. Nó được tạo ra và được gắn vào dữ liệu sau khi mã và được truyền đi dưới dạng không mã hóa. CCMP header được sử dụng với hai mục đích, trước hết, nó cung cấp một số thứ tự gói (PN-Packet Number) 48 bit để ngăn chặn việc sử dụng lại gói tin và cho phép bên thu tạo ra được số nonce dùng trong việc mã hóa. Thứ hai, trong trường hợp multicast, nó sẽ thông báo cho bên thu biết sử dụng khóa nhóm nào. Định dạng của CCMP header giống như định dạng của TKIP header, điều này nhằm mục đích đơn giản hóa cho AP vì nó nhận cả TKIP và CCMP từ các STA. Định dạng này được mô tả trong hình 2.22.

Một phần của tài liệu nghiên cứu giải pháp bảo mật mạng không dây wlan (Trang 66)