Bảo mật hệ thống IoT là một thách thức không nhỏ khi mà hệ thống IoT được biết đến bao gồm các thiết bị có khả năng hạn chế, tốc độ tính toán chậm, nguồn năng lượng giới hạn và kích thước nhỏ.
Bên cạnh đó thì chức năng của hệ thống IoT với quy mô lớn, thiết kế với chi phí thấp, ràng buộc về tài nguyên, không đồng nhất về mặt thiết bị, ưu tiên các chức năng bỏ qua bảo mật, yêu cầu tính riêng tư cao hơn, và quản lý tin cậy khó, các giải pháp bảo mật truyền thống như khóa bất đối xứng dựa trên các giao thức và giải pháp IP cơ bản không thể áp dụng cho hệ thống IoT.
Khi hệ thống IoT kết nối với mạng internet toàn cầu, dữ liệu thu thập từ cảm biến đòi hỏi phải có cơ chế, chính sách cũng như kỹ thuật bảo mật phù hợp nhằm tăng tính an toàn, riêng tư, tin cậy cho hệ thống và người dùng.
2.5. Kết luận chương
Việc xác định xem người dùng có được phép sử dụng hệ thống CNTT hay không bao gồm các bước xác định và xác thực riêng biệt. Nhận dạng liên quan đến cách thức mà người dùng cung cấp danh tính duy nhất của mình cho hệ thống CNTT. Danh tính có thể là tên hoặc một số. Danh tính phải là duy nhất để hệ thống có thể phân biệt giữa những người dùng khác nhau. Tùy thuộc vào yêu cầu hoạt động, một "danh tính" thực sự có thể mô tả một cá nhân, nhiều cá nhân hoặc một (hoặc nhiều) cá nhân chỉ là một phần của thời gian.
Phương pháp trao đổi khóa động thường được đi kèm với các giải thuật mã hóa đối xứng hoặc bất đối xứng. Phương pháp này có khả năng chống được các cuộc tấn công trên Internet nói chung và tấn công nhằm vào người dùng nói riêng. Nó được ứng dụng ở rất nhiều trong cuộc sống hằng ngày như thanh toán trực tuyến, chữ ký điện tử, nhà thông minh, thành phố thông minh… Các ứng dụng này sẽ được trình bày rõ hơn ở chương sau.
CHƯƠNG 3 - MÔ PHỎNG, THỬ NGHIỆM 3.1. Các công cụ mô phỏng trong IoT
Hiện nay có rất nhiều công cụ mô phỏng mạng khác nhau trên nhiều phương diện, có thể kể đến như là Contiki/Cooja, OPNET, QualNet, NS-2, NS-3, OMNet++, REAL, SSFNet,…Trong khuôn khổ luận văn này chỉ xin giới thiệu một số công cụ mô phỏng điển hình.
3.1.1. Công cụ mô phỏng NS-2
NS-2 (Network Solution 2) là phần mềm mô phỏng mạng điều khiển sự kiện riêng rẽ hướng đối tượng, được phát triển tại UC Berkely, viết bằng ngôn ngữ C++ và OTcl. NS-2 mô phỏng các chức năng và giao thức mạng có dây cũng như không dây (ví dụ: các thuật toán định tuyến, TCP, UDP).
Bốn lợi ích lớn nhất của NS-2 phải kể đến đầu tiên là:
Khả năng kiểm tra tính ổn định của các giao thức mạng đang tồn tại
Khả năng đánh giá các giao thức mạng mới trước khi đưa vào sử dụng
Khả năng thực thi những mô hình mạng lớn mà gần như ta không thể thực thi được trong thực tế
Khả năng mô phỏng nhiều loại mạng khác nhau
NS-2 là phần mềm mã nguồn mở và chạy ổn định trong cả 2 môi trường Windowns và Linux. NS-2 sử dụng 2 ngôn ngữ lập trình: ngôn ngữ lập trình hệ thống C++ và Ngôn ngữ kịch bản (OTcl - Object oriented Tool Command Language). NS-2 không chỉ hợp cho việc mô phỏng mà cho cả sự giả lập, điều này có nghĩa là nó có thể đưa chương trình mô phỏng vào trong mạng thực tế. Những đối tượng trong chương trình mô phỏng có khả năng đưa các lưu lượng thực vào trong chương trình mô phỏng và đưa một phần lưu lượng trong chương trình mô phỏng vào trong mạng thực tế.
Hạn chế của NS-2 là thêm mới và chỉnh sửa các thành phần là không dễ dàng do cấu trúc của NS-2 đã được định hình sẵn. Việc này có nghĩa là về khả năng kiểm tra các thuật toán hoặc mô phỏng các thuật toán mới của NS-2 không bằng được so
cũng khá chậm. Đối với người mới bắt đầu sử dụng thì cũng rất khó và mất rất nhiều thời gian để tiếp cận phần mềm.
3.1.2. Công cụ mô phỏng OPNET
OPNET là một công cụ mô phỏng mạng sự kiện mức cao. OPNET hỗ trợ mô phỏng mạng WSN tốt (cụ thể là tốt hơn NS2). Một đặc điểm nữa là OPNET tuy là phần mềm thương mại, nhưng miễn phí cho các trường Đại học hay Học viện. Và kể từ phiên bản 14.5 trở đi OPNET có hỗ trợ thư viện cho Zigbee. Tuy thư viện này không đầy đủ như bản miêu tả kỹ thuật của Zigbee Alliance 2006, nhưng rất phù hợp với các sản phẩm bán ra của các hãng như TI, Freescale, Atmel, hay Microchip… là chỉ hỗ trợ phương thức giao tiếp CSMA/CA không chia khe.
OPNET là chương trình mô phỏng trên nền Windows được sử dụng rộng rãi. Nó được xây dựng dựa trên ngôn ngữ C++ và cung cấp môi trường ảo cho việc mô hình hóa, phân tích và dự đoán hiệu năng mạng, giúp mô hình hóa chính xác các ứng dụng, các máy chủ và nhiều công nghệ mạng. Hạn chế của chương trình mô phỏng này là khó tiếp cận và cần có thời gian để tìm hiểu cũng như sử dụng thành thạo.
3.1.3. Công cụ mô phỏng Contiki/Cooja
Hệ điều hành Contiki là hệ điều hành mã nguồn mở, được nghiên cứu, thiết kế và phát triển bởi một nhóm các nhà phát triển từ viện khoa học máy tính Thụy Điển, người đứng đầu là Adam Dunkels. Nhóm phát triển Contiki gồm nhiều thành viên đến từ SICS, CISCO, cùng nhiều tổ chức và các trường đại học khác trên thế giới. Hệ điều hành Contiki được thiết kế cho các vi điều khiển có bộ nhớ nhỏ, với thông số 2KB RAM và 40KB ROM. Nhờ đó, Contiki được sử dụng cho các hệ thống nhúng và các ứng dụng trong mạng cảm biến không dây. Contiki bắt đầu được nghiên cứu từ năm 2001 và phát hành phiên bản đầu tiên Contiki 1.0 năm 2003.
Hình 3.1 cho thấy lịch sử phát triển của Contiki trong những năm qua. Phiên bản hiện nay của Contiki là 2.4, với nhiều thay đổi, bổ sung và phát triển vượt bậc.
hầm xe lửa, theo dõi nước trong biển Baltic,… Nhiều cơ chế, ý tưởng trong Contiki đã được ứng dụng rộng rãi trong công nghiệp. Điển hình như mô hình uIP được phát hành năm 2001 đã được sử dụng trong hệ thống ứng dụng của hàng trăm công ty trong các lĩnh vực hàng hải, thông tin vệ tinh, khai thác dầu mỏ…; mô hình Protothreads được công bố lần đầu tiên năm 2005, đến nay đã được sử dụng trong nhiều ứng dụng như bộ giải mã kỹ thuật số và thiết bị cảm biến rung không dây.
Hình 3. 1 Lịch sử hệ điều hành Contiki
Hệ điều hành Contiki được lập trình bằng ngôn ngữ C, hoạt động dựa trên cơ chế event - driven và có những đặc điểm phù hợp với các hệ thống nhúng và mạng cảm biến không dây.
Contiki được chia thành nhiều modul hoạt động độc lập. Nhờ đó các ứng dụng có thể sử dụng các modul một cách linh động và chỉ load những modul cần thiết.
Cơ chế hoạt động điều khiển sự kiện làm giảm năng lượng tiêu hao và hạn chế dung lượng bộ nhớ cần sử dụng.
Có thể sử dụng IP trong mạng cảm biến thông qua uIP stack được xây dựng dựa trên nền TCP/IP.
Có những modul cho phép ước lượng và quản lý năng lượng một cách hiệu quả.
Các giao thức tương tác giữa các lớp và các node trong mạng dễ dàng hơn.
Sử dụng RIME stack phục vụ các giao thức dành cho mạng năng lượng thấp một cách hiệu quả.
Bên cạnh đó, Contiki còn cung cấp những công cụ hỗ trợ mô phỏng với giao diện đơn giản, dễ sử dụng và hỗ trợ tốt những thiết bị trong thực tế, phục vụ những mục đích nghiên cứu, mô phỏng và triển khai những giao thức mới.
Để tải hệ điều hành Contiki, chúng ta truy cập link sau để download:
http://www.contiki-os.org/download.html
Hình 3. 2 Trang chủ Contiki OS
Ngoài ra, cần download và cài đặt thêm phần mềm VMWare để tạo máy ảo và cài đặt hệ điều hành Contiki. Truy cập vào link:
https://my.vmware.com/web/vmware/downloads và chọn phiên bản thích hợp để download phần mềm VMWare.
3.2. Bộ công cụ mô phỏng Contiki/Cooja
3.2.1. Cấu trúc hệ điều hành Contiki
Bất kỳ bản Contiki nào cũng gồm 7 thư mục : Apps, Core, Cpu, Docs, Example, Platform và Tools.
Apps: chứa các tập tin nguồn của các tiện ích phát triển cho Contiki. Chúng có sẵn để sử dụng và bao gồm các thiết lập cơ bản của các ứng dụng cho mạng cảm biến không dây . ứng dụng tiêu biểu trong thư mục này là trình duyệt web, máy chủ Web, FTP, email, và máy tính.
Core: như tên gọi cho thấy, nó chứa các hạt nhân của hệ điều hành Contiki. Nó chứa khoảng 300 file, gần một nửa trong số đó là tập tin tiêu đề chứa các khai báo và còn lại là các tập tin nguồn chứa cài đặt.
Cpu: chứa bộ xử lý cụ thể việc thực hiện các chức năng khác nhau được sử dụng trong hệ điều hành.
Docs: được sử dụng trong việc chuẩn bị tài liệu cho Contiki. Nó chứa thông tin sẽ được sử dụng bởi một hệ thống tài liệu điển hình như Doxygen.
Examples: chứa các chương trình ví dụ đơn giản bắt đầu với “Hello-world”, mà phục vụ như là bước đầu tiên hướng tới Contiki lập trình.
Platform: bao gồm thông tin cụ thể liên quan đến nền tảng Node cảm biến như ESB, Sky, vv "native" là một nền tảng đặc biệt là xây dựng một hệ thống toàn bộ Contiki như một chương trình chạy trên hệ thống phát triển.
Tools: là thư mục mà các công cụ phần mềm đặc biệt được lưu trữ. 'Cooja' là một Java dựa trên mô phỏng cho Contiki.Thư mục này cũng chứa các công cụ nền tảng cụ thể. ví dụ điển hình là các công cụ cho Sky.
3.2.2. Ứng dụng mô phỏng Cooja
Cooja là phần mềm mô phỏng hệ thống mạng được tích hợp trong hệ điều hành Contiki. Công cụ này cho phép người sử dụng thay đổi các thông số như vị trí, phạm vi kết nối, tỉ lệ truyền gói thành công,… Nhờ đó người sử dụng có thể mô phỏng và đánh giá kết quả một cách hiệu quả hơn.
Hình 3. 3 Giao diện chương trình Cooja
Từ hình 3.3 có thể nhận thấy giao diện của chương trình thân thiện và dễ sử dụng, với một màn hình cho phép hiển thị các quá trình hoạt động của node, có khả năng thay đổi vị trí, phạm vi phủ sóng của mỗi node. Bên cạnh đó Cooja cung cấp một số các cửa sổ theo dõi sự kiện như Log listener, Radio listener cho phép người sử dụng tìm kiếm những sự kiện theo một số thông số nhất định, theo dõi sự giao tiếp giữa một số node cụ thể, ….Có thể nói, đây là một công cụ mô phỏng khá trực quan và dễ sử dụng, phục vụ tốt cho quá trình nghiên cứu, mô phỏng, đánh giá.
3.3. Xây dựng mô hình trao đổi khóa động trong mạng IoT
3.3.1. Mô tả bài toán
Để có giao tiếp an toàn giữa hai nút (tức là thiết bị IoT) kỹ thuật mã hóa và giải mã được sử dụng. Người ta tạo khóa mã hóa động được dựa trên khái niệm một khoảng thời gian cụ thể. Một ma trận chính được lưu trữ tại khách hàng và vị trí máy chủ.
Sau khi xác thực các nút bằng thuật toán xác thực hai chiều, máy khách gửi yêu cầu đến máy chủ cùng với các tọa độ của ma trận khóa được lưu trữ ở cả hai đầu. Chìa khóa do khách hàng sử dụng là chìa khóa tương ứng với tọa độ được gửi bởi khách hàng.
bằng cách thiết lập tem thời gian. Sau khoảng thời gian được đặt, khóa sẽ không hợp lệ và được thay thế bằng một khóa mới trong ma trận chính.
Hình 3. 4 Ma trận khóa trong mô hình mã hóa
Máy khách mã hóa dữ liệu bằng cách sử dụng khóa. Mã hóa có thể được thực hiện bằng bất kỳ kỹ thuật nào theo sự lựa chọn của khách hàng. Máy khách sẽ gửi dữ liệu được mã hóa đến máy chủ. Máy chủ sẽ giải mã dữ liệu theo khóa có tọa độ được chia sẻ bởi máy khách. Do đó có giao tiếp an toàn giữa máy khách và máy chủ. Khóa được khách hàng sử dụng sẽ bị xóa và được thay bằng một khóa mới trong ma trận. Khóa mới được tạo ra bởi hàm ngẫu nhiên thích hợp. Kể từ đó, hệ thống được phát triển đối với các thiết bị IoT, kích thước của ma trận chính được giữ càng nhỏ càng tốt. Do đó sơ đồ hệ thống được thể hiện trong hình:
Hình 3. 5 Sơ đồ truyền tin bảo mật
3.3.2. Mô phỏng trên ứng dụng Cooja Mô hình mô phỏng: Mô hình mô phỏng:
Nút gửi muốn gửi bản tin đến nút nhận trong mạng cảm biến không dây sẽ sử dụng Public Key dùng để mã hóa bản tin kết hợp với thuật toán mã hóa chuyển bản tin thành dạng bản tin đã được mã hóa. Để nhận và đọc được bản tin, nút nhận cần dùng thuật toán và Private Key tương ứng để giải mã bản tin về bản tin ban đầu.
Hình 3. 6 Mô hình mô phỏng truyền tin giữa 2 nút mạng IoT
Kịch bản mô phỏng
Khi hai node muốn truyền dữ liệu với nhau bằng phương pháp trao đổi khóa động, trước tiên phải thực hiện việc mã hóa. Cụ thể như sau:
Bước 1: Trao đổi khóa công khai cho nhau. Vì đây là khóa công khai nên
Bước 2: Bản tin của 2 node sẽ được mã hóa bằng thuật toán chung.
Bước 3: Node A gửi bản tin đã mã hóa của mình cho node B và ngược lại,
node B cũng gửi bản tin đã mã hóa của mình cho node A.
Bước 4: Node A sẽ dùng Private Key của mình để giải mã bản tin mà node B
vừa gửi. Tương tự như vậy, node B cũng sẽ dùng Private Key của mình để giải mã bản tin node A gửi sang.
Bước 5: Bản tin thu được sau khi dùng khóa giải mã của 2 node là như nhau.
Quá trình truyền tin bắt đầu được thực hiện mà không sợ việc bị nghe lén hoặc đánh cắp thông tin.
Mô phỏng trên ứng dụng Cooja:
Như đã phân tích ở trên, ta sẽ sử dụng phương pháp trao đổi khóa động RPL bao gồm thuật toán mã hóa công khai RSA, thuật toán bao gồm 2 khóa là public key và private key được dùng để mô tả quá trình trao đổi khóa động, mã hóa, giải mã giữa 2 node.
Mô phỏng nhiều lần với số lượng node lần lượt là 6 node, 8 node, 16 node, 32 node.
Đối với mỗi số lượng node, ta chạy 30 lần mô phỏng với vị trí các node trong mạng khác nhau.
Đối với mỗi lần chạy, kết quả sẽ được lấy ngay sau khi các node được kết nối kênh truyền với nhau.
Hình 3. 13 Mô phỏng với 32 node
Hình 3. 15 Quá trình trao đổi khóa giữa các node
3.3.3. Kết quả mô phỏng
Các loại node trong mô phỏng: - Node màu xanh là node Receiver. - Node màu vàng là node Sender.
Hình 3.17 là kết quả của mô hình truyền tin bảo mật dựa trên việc định danh và xác thực giữa các node. Có thể thấy, ngay khi tham gia vào mạng, các node sẽ được gán một ID riêng (định danh). Việc xác thực sẽ thông qua trung tâm chứng thực khóa. Các node sẽ gửi khóa công khai (public key) cho nhau nhưng chỉ node